Search in sources :

Example 36 with Handler

use of org.platformlayer.ops.Handler in project platformlayer by platformlayer.

the class NexusApp method handler.

@Handler
public void handler() throws IOException, OpsException {
    // TODO: This needs to be idempotent
    OpsTarget target = OpsContext.get().getInstance(OpsTarget.class);
    String url = "http://nexus.sonatype.org/downloads/all/nexus-webapp-1.9.2.4.war";
    File warFile = new File("/var/lib/jetty/wars/nexus-webapp-1.9.2.4.war");
    target.executeCommand("wget {0} -O {1}", url, warFile);
    // Whatever version of nexus we have, we want it to be the root
    target.symlink(warFile, new File("/var/lib/jetty/webapps/root.war"), false);
}
Also used : OpsTarget(org.platformlayer.ops.OpsTarget) File(java.io.File) Handler(org.platformlayer.ops.Handler)

Example 37 with Handler

use of org.platformlayer.ops.Handler in project platformlayer by platformlayer.

the class NexusBootstrap method handler.

@Handler
public void handler() throws OpsException, IOException {
    // TODO: This needs to be idempotent
    OpsTarget target = OpsContext.get().getInstance(OpsTarget.class);
    // Nexus needs a workdir; by default it's in the home directory of the user we're running under
    // With jetty, the jetty user can't create this directory; we do it
    File sonatypeDir = new File("/usr/share/jetty/sonatype-work");
    target.mkdir(sonatypeDir, "750");
    File nexusDir = new File(sonatypeDir, "nexus");
    target.mkdir(nexusDir, "750");
    File confDir = new File(nexusDir, "conf");
    target.mkdir(confDir, "750");
    {
        String contents = ResourceUtils.get(getClass(), "conf/security.xml");
        FileUpload.upload(target, new File(confDir, "security.xml"), contents);
    }
    {
        String contents = ResourceUtils.get(getClass(), "conf/security-configuration.xml");
        FileUpload.upload(target, new File(confDir, "security-configuration.xml"), contents);
    }
    {
        // TODO: Bind with a low-privilege account
        // TODO: Don't hard-code this stuff
        String ldapHost = "192.168.192.67";
        String ldapDomain = "dc=com,dc=fathomscale";
        String ldapUsername = "cn=Manager," + ldapDomain;
        String ldapPassword = "adminsecret";
        Map<String, Object> vars = Maps.newHashMap();
        vars.put("searchBase", ldapDomain);
        vars.put("systemUsername", ldapUsername);
        vars.put("systemPassword", encryptNexusPassword(ldapPassword));
        vars.put("ldapHost", ldapHost);
        // TODO: This is a bit limiting; we should use memberOf
        // Avoids escaping ${username}
        vars.put("groupMemberFormat", "uid=${username},ou=Users,dc=com,dc=fathomscale");
        String resourcePath = templates.toResourcePath(this, "conf/ldap.xml");
        String contents = templates.runTemplate(resourcePath, vars);
        FileUpload.upload(target, new File(confDir, "ldap.xml"), contents);
    }
    target.chown(sonatypeDir, "jetty", "jetty", true, false);
}
Also used : OpsTarget(org.platformlayer.ops.OpsTarget) File(java.io.File) Map(java.util.Map) Handler(org.platformlayer.ops.Handler)

Example 38 with Handler

use of org.platformlayer.ops.Handler in project platformlayer by platformlayer.

the class ItemTagger method handler.

@Handler
public void handler() throws OpsException {
    ItemBase item = OpsContext.get().getInstance(ItemBase.class);
    String matchingTag = item.getTags().findUnique(tag.key);
    if (!Objects.equal(matchingTag, tag.getValue())) {
        platformLayerClient.addTag(item.getKey(), tag);
    }
}
Also used : ItemBase(org.platformlayer.core.model.ItemBase) Handler(org.platformlayer.ops.Handler)

Example 39 with Handler

use of org.platformlayer.ops.Handler in project platformlayer by platformlayer.

the class SolrConfBoostrap method handler.

@Handler
public void handler(OpsTarget target) throws OpsException {
    SolrTemplateData template = injected(SolrTemplateData.class);
    File instanceDir = template.getInstanceDir();
    File dataDir = new File(instanceDir, "data");
    File confDir = new File(dataDir, "conf");
    if (OpsContext.isConfigure()) {
        if (target.getFilesystemInfoFile(confDir) == null) {
            File exampleConfDir = new File(template.getInstallDir(), "example/solr/conf/");
            Command copy = Command.build("cp -r {0} {1}", exampleConfDir, dataDir);
            target.executeCommand(copy);
            target.chown(confDir, "solr", "solr", true, false);
        }
    }
}
Also used : Command(org.platformlayer.ops.Command) File(java.io.File) Handler(org.platformlayer.ops.Handler)

Example 40 with Handler

use of org.platformlayer.ops.Handler in project platformlayer by platformlayer.

the class CloudInstanceMapper method doOperation.

@Handler
public void doOperation() throws OpsException, IOException {
    Tags instanceTags = instance.getTags();
    GoogleCloud cloud = findCloud();
    if (cloud == null) {
        throw new OpsException("Could not find cloud");
    }
    GoogleComputeClient computeClient = googleComputeClientFactory.getComputeClient(cloud);
    getRecursionState().pushChildScope(cloud);
    List<String> assignedInstanceIds = instanceTags.findAll(Tag.ASSIGNED);
    if (assignedInstanceIds.isEmpty()) {
        if (createInstance && !OpsContext.isDelete()) {
            MachineCreationRequest request = buildMachineCreationRequest();
            PlatformLayerKey instanceKey = instance.getKey();
            request.tags.add(Tag.buildParentTag(instanceKey));
            PublicKey servicePublicKey = service.getSshKey().getKeyPair().getPublic();
            Instance created = computeClient.createInstance(cloud, request, servicePublicKey);
            {
                Tag instanceTag = Tag.build(Tag.ASSIGNED, created.getName());
                platformLayer.addTag(instance.getKey(), instanceTag);
            }
            assignedInstanceIds.add(created.getName());
        }
    }
    if (assignedInstanceIds.isEmpty() && !OpsContext.isDelete()) {
        throw new OpsException("Instance not yet assigned");
    }
    GoogleComputeMachine machine = null;
    OpsTarget target = null;
    if (!assignedInstanceIds.isEmpty()) {
        if (assignedInstanceIds.size() != 1) {
            log.warn("Multiple instance ids found: " + assignedInstanceIds);
        }
        // We just take the first instance id
        String assignedInstanceId = Iterables.getFirst(assignedInstanceIds, null);
        Instance server = computeClient.findInstanceByName(assignedInstanceId);
        if (server == null) {
            if (OpsContext.isConfigure()) {
                throw new OpsException("Unable to find assigned server: " + assignedInstanceId);
            }
        } else {
            server = computeClient.ensureHasPublicIp(server);
            machine = new GoogleComputeMachine(computeClient, cloud, server);
            SshKey sshKey = service.getSshKey();
            target = machine.getTarget(GoogleComputeClient.USER_NAME, sshKey.getKeyPair());
            // We need to use sudo while we set up root access
            ((SshOpsTarget) target).setEnsureRunningAsRoot(true);
        }
    }
    if (!assignedInstanceIds.isEmpty() && OpsContext.isDelete()) {
        for (String instanceId : assignedInstanceIds) {
            Instance server = computeClient.findInstanceByName(instanceId);
            if (server == null) {
                log.warn("Could not find assigned server: " + instanceId + ", ignoring");
                continue;
            }
            // TODO: Remove associated firewall rules
            log.warn("Deleting firewall rules not yet implemented");
            // SecurityGroup securityGroup = null;
            // if (supportsSecurityGroups) {
            // securityGroup = openstackHelpers.getMachineSecurityGroup(computeClient, server);
            // }
            Operation terminateOperation = computeClient.terminateInstance(instanceId);
            try {
                computeClient.waitComplete(terminateOperation, 5, TimeUnit.MINUTES);
            } catch (TimeoutException e) {
                throw new OpsException("Timeout while waiting for instance termination", e);
            }
        // if (securityGroup != null) {
        // // We need to terminate the instance before we delete the security group it uses
        // if (terminateOperation != null) {
        // waitOperation(terminateOperation);
        // }
        //
        // try {
        // log.info("Deleting security group: " + securityGroup.getId());
        // computeClient.root().securityGroups().securityGroup(securityGroup.getId()).delete();
        // } catch (OpenstackNotFoundException e) {
        // log.info("Ignoring not-found error while deleting security group: " + securityGroup.getId());
        // }
        // }
        }
        if (machine != null) {
            machine.refreshState();
        }
    }
    RecursionState recursion = getRecursionState();
    if (OpsContext.isDelete() && machine == null) {
        recursion.setPreventRecursion(true);
    } else {
        recursion.pushChildScope(machine);
        recursion.pushChildScope(target);
    }
}
Also used : OpsException(org.platformlayer.ops.OpsException) Instance(com.google.api.services.compute.model.Instance) GoogleCloudInstance(org.platformlayer.service.cloud.google.model.GoogleCloudInstance) PublicKey(java.security.PublicKey) SshOpsTarget(org.platformlayer.ops.SshOpsTarget) PlatformLayerKey(org.platformlayer.core.model.PlatformLayerKey) MachineCreationRequest(org.platformlayer.ops.MachineCreationRequest) Operation(com.google.api.services.compute.model.Operation) SshKey(org.platformlayer.ops.helpers.SshKey) OpsTarget(org.platformlayer.ops.OpsTarget) SshOpsTarget(org.platformlayer.ops.SshOpsTarget) GoogleComputeClient(org.platformlayer.service.cloud.google.ops.compute.GoogleComputeClient) GoogleCloud(org.platformlayer.service.cloud.google.model.GoogleCloud) Tag(org.platformlayer.core.model.Tag) Tags(org.platformlayer.core.model.Tags) GoogleComputeMachine(org.platformlayer.service.cloud.google.ops.compute.GoogleComputeMachine) TimeoutException(java.util.concurrent.TimeoutException) Handler(org.platformlayer.ops.Handler)

Aggregations

Handler (org.platformlayer.ops.Handler)58 File (java.io.File)21 Command (org.platformlayer.ops.Command)17 OpsException (org.platformlayer.ops.OpsException)17 OpsTarget (org.platformlayer.ops.OpsTarget)17 Tag (org.platformlayer.core.model.Tag)8 PlatformLayerKey (org.platformlayer.core.model.PlatformLayerKey)5 SshKey (org.platformlayer.ops.helpers.SshKey)5 Machine (org.platformlayer.ops.Machine)4 PublicKey (java.security.PublicKey)3 Action (org.platformlayer.core.model.Action)3 EndpointInfo (org.platformlayer.core.model.EndpointInfo)3 ItemBase (org.platformlayer.core.model.ItemBase)3 Tags (org.platformlayer.core.model.Tags)3 MachineCreationRequest (org.platformlayer.ops.MachineCreationRequest)3 Map (java.util.Map)2 OpenstackComputeClient (org.openstack.client.common.OpenstackComputeClient)2 SecurityGroup (org.openstack.model.compute.SecurityGroup)2 Server (org.openstack.model.compute.Server)2 PlatformLayerClientException (org.platformlayer.PlatformLayerClientException)2