Example usage for com.amazonaws.services.ec2.model RunInstancesRequest setSecurityGroups

List of usage examples for com.amazonaws.services.ec2.model RunInstancesRequest setSecurityGroups

Introduction

In this page you can find the example usage for com.amazonaws.services.ec2.model RunInstancesRequest setSecurityGroups.

Prototype


public void setSecurityGroups(java.util.Collection<String> securityGroups) 

Source Link

Document

[EC2-Classic, default VPC] The names of the security groups.

Usage

From source file:advanced.Requests.java

License:Open Source License

public void launchOnDemand() {
    //============================================================================================//
    //====================================== Launch an On-Demand Instance ========================// 
    //====================================== If we Didn't Get a Spot Instance ====================// 
    //============================================================================================//

    // Setup the request for 1 x t1.micro using the same security group and 
    // AMI id as the Spot request.
    RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
    runInstancesRequest.setInstanceType(instanceType);
    runInstancesRequest.setImageId(amiID);
    runInstancesRequest.setMinCount(Integer.valueOf(1));
    runInstancesRequest.setMaxCount(Integer.valueOf(1));

    // Add the security group to the request.
    ArrayList<String> securityGroups = new ArrayList<String>();
    securityGroups.add(securityGroup);//from   www.  ja va2s .c  o  m
    runInstancesRequest.setSecurityGroups(securityGroups);

    // Launch the instance.
    RunInstancesResult runResult = ec2.runInstances(runInstancesRequest);

    // Add the instance id into the instance id list, so we can potentially later
    // terminate that list.
    for (Instance instance : runResult.getReservation().getInstances()) {
        System.out.println("Launched On-Demand Instace: " + instance.getInstanceId());
        instanceIds.add(instance.getInstanceId());
    }
}

From source file:com.appdynamics.connectors.AWSConnector.java

License:Apache License

public IMachine createMachine(IComputeCenter computeCenter, IImage image, IMachineDescriptor machineDescriptor)
        throws InvalidObjectException, ConnectorException {
    boolean succeeded = false;
    Exception createFailureRootCause = null;
    Instance instance = null;//  www  . j  av  a 2s .c o m

    try {
        IProperty[] macProps = machineDescriptor.getProperties();

        AmazonEC2 connector = getConnector(image, computeCenter, controllerServices);
        String amiName = Utils.getAMIName(image.getProperties(), controllerServices);
        List<String> securityGroups = getSecurityGroup(macProps);
        validateAndConfigureSecurityGroups(securityGroups, connector);

        controllerServices.getStringPropertyByName(macProps, Utils.SECURITY_GROUP)
                .setValue(getSecurityGroupsAsString(securityGroups));

        String keyPair = Utils.getKeyPair(macProps, controllerServices);

        InstanceType instanceType = getInstanceType(macProps);

        String zone = Utils.getZone(macProps, controllerServices);
        String kernel = Utils.getKernel(macProps, controllerServices);
        String ramdisk = Utils.getRamDisk(macProps, controllerServices);

        String controllerHost = System.getProperty(CONTROLLER_SERVICES_HOST_NAME_PROPERTY_KEY,
                InetAddress.getLocalHost().getHostName());

        int controllerPort = Integer.getInteger(CONTROLLER_SERVICES_PORT_PROPERTY_KEY,
                DEFAULT_CONTROLLER_PORT_VALUE);

        IAccount account = computeCenter.getAccount();

        String accountName = account.getName();
        String accountAccessKey = account.getAccessKey();

        AgentResolutionEncoder agentResolutionEncoder = new AgentResolutionEncoder(controllerHost,
                controllerPort, accountName, accountAccessKey);

        String userData = agentResolutionEncoder.encodeAgentResolutionInfo();

        String instanceName = Utils.getInstanceName(macProps, controllerServices);

        logger.info("Starting EC2 machine of Image :" + amiName + " Name :" + instanceName + " security :"
                + securityGroups + " keypair :" + keyPair + " instance :" + instanceType + " zone :" + zone
                + " kernel :" + kernel + " ramdisk :" + ramdisk + " userData :" + userData);

        RunInstancesRequest runInstancesRequest = new RunInstancesRequest(amiName, 1, 1);
        runInstancesRequest.setSecurityGroups(securityGroups);
        runInstancesRequest.setUserData(Base64.encodeAsString(userData.getBytes()));
        runInstancesRequest.setKeyName(keyPair);
        runInstancesRequest.setInstanceType(instanceType);
        runInstancesRequest.setKernelId(kernel);
        runInstancesRequest.setRamdiskId(ramdisk);

        Reservation reservation = connector.runInstances(runInstancesRequest).getReservation();
        List<Instance> instances = reservation.getInstances();

        if (instances.size() == 0)
            throw new ConnectorException("Cannot create instance for image :" + image.getName());

        instance = instances.get(0);

        //Set name for the instance
        if (!Strings.isNullOrEmpty(instanceName)) {
            CreateTagsRequest createTagsRequest = new CreateTagsRequest();
            createTagsRequest.withResources(instance.getInstanceId()).withTags(new Tag("Name", instanceName));
            connector.createTags(createTagsRequest);
        }

        logger.info("EC2 machine started; id:" + instance.getInstanceId());

        IMachine machine;

        if (Strings.isNullOrEmpty(instance.getPublicDnsName())) {
            machine = controllerServices.createMachineInstance(instance.getInstanceId(),
                    agentResolutionEncoder.getUniqueHostIdentifier(), computeCenter, machineDescriptor, image,
                    getAgentPort());
        } else {
            machine = controllerServices.createMachineInstance(instance.getInstanceId(),
                    agentResolutionEncoder.getUniqueHostIdentifier(), instance.getPublicDnsName(),
                    computeCenter, machineDescriptor, image, getAgentPort());
        }

        if (kernel == null) {
            controllerServices.getStringPropertyByName(macProps, Utils.KERNEL).setValue(instance.getKernelId());
        }

        if (zone == null) {
            DescribeAvailabilityZonesResult describeAvailabilityZonesResult = connector
                    .describeAvailabilityZones();
            List<AvailabilityZone> availabilityZones = describeAvailabilityZonesResult.getAvailabilityZones();
            controllerServices.getStringPropertyByName(macProps, Utils.ZONE)
                    .setValue(availabilityZones.get(0).getZoneName());
        }

        controllerServices.getStringPropertyByName(macProps, Utils.INSTANCE_TYPE)
                .setValue(instance.getInstanceType());

        succeeded = true;

        return machine;

    } catch (InvalidObjectException e) {
        createFailureRootCause = e;
        throw e;
    } catch (ConnectorException e) {
        createFailureRootCause = e;
        throw e;
    } catch (Exception e) {
        createFailureRootCause = e;
        throw new ConnectorException(e.getMessage(), e);
    } finally {
        // We have to make sure to terminate any orphan EC2 instances if 
        // the machine create fails.
        if (!succeeded && instance != null) {
            try {
                ConnectorLocator.getInstance().getConnector(computeCenter, controllerServices)
                        .terminateInstances(
                                new TerminateInstancesRequest(Lists.newArrayList(instance.getInstanceId())));
            } catch (Exception e) {
                throw new ConnectorException("Machine create failed, but terminate failed as well! "
                        + "We have an orphan EC2 instance with id: " + instance.getInstanceId()
                        + " that must be shut down manually. Root cause for machine "
                        + "create failure is following: ", createFailureRootCause);
            }
        }
    }
}

From source file:com.hpcloud.daas.ec2.AwsConsoleApp.java

License:Open Source License

public static void CreateNewInstance(String imageId, String instanceType, List<String> securityGroups,
        String userData) {//from ww  w  .  jav a 2s  .  c  om
    try {
        RunInstancesRequest crir = new RunInstancesRequest();
        crir.setImageId(imageId);

        crir.setInstanceType(instanceType);
        crir.setSecurityGroups(securityGroups);

        crir.setKeyName("hpdefault");

        if (userData != null) {
            crir.setUserData(userData);
        }

        RunInstancesResult result = ec2.runInstances(crir);
        System.out.println(result);

        String instanceId = null;
        List<Instance> instances = result.getReservation().getInstances();
        for (Instance instance : instances) {
            instanceId = instance.getInstanceId();
        }

        // HACKHACK sleep for 5 seconds so the private ip gets assigned
        System.out.println("Sleeping for 5 to wait for the private ip");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException ignore) {
            ignore.printStackTrace();
        }

        String publicIp = assignPublicIp(instanceId);

        System.out.println("Public IP: " + publicIp);

        System.out.println("Instance State: " + getInstanceState(instanceId));

    } catch (AmazonServiceException ase) {
        System.out.println("Caught Exception: " + ase.getMessage());
        System.out.println("Reponse Status Code: " + ase.getStatusCode());
        System.out.println("Error Code: " + ase.getErrorCode());
        System.out.println("Request ID: " + ase.getRequestId());
    }
}

From source file:com.norbl.cbp.ppe.Ec2Wrangler.java

License:Open Source License

/** This version of <tt>launchInstances()</tt> gets all
 *  parameters from method arguments. /*  www.  ja va  2 s. c  om*/
 *        
  * @param instanceType
  * @param imageID
  * @param availabilityZone
  * @param minInstances
  * @param maxInstances
  * @param keyName
  * @param securityGroupName
  * @param networkName
  * @param userData
  * @return
  * @throws MissingParamsException
  * @throws ImproperParamException 
  */
public String launchInstances(InstanceType instanceType, String imageID, String availabilityZone,
        int minInstances, int maxInstances, String keyName, String securityGroupName, String networkName,
        String userData) throws MissingParamsException, ImproperParamException {

    if ((minInstances < 1) || (maxInstances < minInstances))
        throw new ImproperParamException("instances min=" + minInstances + " max=" + maxInstances);

    RunInstancesRequest req = new RunInstancesRequest();
    req.setInstanceType(instanceType);
    req.setImageId(imageID);
    if (Ec2Location.isValidAvailablityZone(ec2Client, availabilityZone))
        setAvailabilityZone(req, availabilityZone);
    // else any zone will do, so don't set it.
    req.setMinCount(minInstances);
    req.setMaxCount(maxInstances);
    req.setKeyName(keyName);
    List<String> sgs = new ArrayList<String>();
    sgs.add(securityGroupName);
    req.setSecurityGroups(sgs);
    req.setUserData(Base64.encodeBase64String(userData.getBytes()));

    String networkID = NiM.createNetworkID();
    NetworkInfo ni = new NetworkInfo(networkID, networkName);
    NiM.register(ni);
    ni.setState(NetworkInfo.State.pending);

    if (isHVM(imageID))
        setupClusterPlacementGroup(req);

    RunInstancesResult rr = ec2Client.runInstances(req);

    NiM.update(this); // Update the network info

    waitForAllInstancesToBeRunning(rr);

    tagInstances(getInstanceIDs(rr), networkID, networkName);

    NiM.update(getInstancesAllListed()); // Update the network info

    return (networkID);
}

From source file:com.yosanai.java.aws.console.DefaultAWSConnectionProvider.java

License:Open Source License

@Override
public void launchInstance(String amiId, InstanceType instanceType, int instanceCount, String keyName,
        Collection<String> securityGroups, boolean terminateViaAPI, Map<String, String> tags) throws Exception {
    if (1 > instanceCount) {
        throw new Exception("Invalid instanceCount " + instanceCount);
    }/*  w  w  w  .j av a 2s. c o m*/
    if (null == instanceType) {
        throw new Exception("Invalid instanceType");
    }
    if (StringUtils.isBlank(amiId)) {
        throw new Exception("Invalid amiId");
    }
    RunInstancesRequest runInstancesRequest = new RunInstancesRequest(amiId, instanceCount, instanceCount);
    runInstancesRequest.setKeyName(keyName);
    runInstancesRequest.setSecurityGroups(securityGroups);
    runInstancesRequest.setDisableApiTermination(!terminateViaAPI);
    runInstancesRequest.setInstanceType(instanceType.toString());
    RunInstancesResult result = getConnection().runInstances(runInstancesRequest);
    if (null != tags && !tags.isEmpty()) {
        List<Tag> tagList = new ArrayList<Tag>();
        for (String key : tags.keySet()) {
            tagList.add(new Tag(key, tags.get(key)));
        }
        List<String> resources = new ArrayList<String>();
        Reservation reservation = result.getReservation();
        for (Instance instance : reservation.getInstances()) {
            resources.add(instance.getInstanceId());
        }
        getConnection().createTags(new CreateTagsRequest(resources, tagList));
    }
}

From source file:datameer.awstasks.ant.ec2.Ec2LaunchTask.java

License:Apache License

@Override
public void doExecute(AmazonEC2 ec2) throws BuildException {
    LOG.info("executing " + getClass().getSimpleName() + " with groupName '" + _groupName + "'");
    try {/*from w  w w.  ja  va  2 s  .  c  o  m*/
        boolean instancesRunning = Ec2Util.findByGroup(ec2, _groupName, false, InstanceStateName.Pending,
                InstanceStateName.Running) != null;
        if (!isReuseRunningInstances() && instancesRunning) {
            throw new IllegalStateException("found already running instances for group '" + _groupName + "'");
        }
        if (!Ec2Util.groupExists(ec2, _groupName)) {
            LOG.info("group '" + _groupName + "' does not exists - creating it");
            String groupDescription = getGroupDescription();
            if (groupDescription == null) {
                throw new BuildException("must specify groupDescription");
            }
            ec2.createSecurityGroup(new CreateSecurityGroupRequest(_groupName, groupDescription));
        }

        List<String> securityGroups = Arrays.asList("default", _groupName);
        List<IpPermission> existingPermissions = Ec2Util.getPermissions(ec2, securityGroups);
        for (GroupPermission groupPermission : _groupPermissions) {
            if (groupPermission.getToPort() == -1) {
                groupPermission.setToPort(groupPermission.getFromPort());
            }
            if (!permissionExists(groupPermission, existingPermissions)) {
                LOG.info("did not found permission '" + groupPermission + "' - creating it...");
                ec2.authorizeSecurityGroupIngress(new AuthorizeSecurityGroupIngressRequest()
                        .withGroupName(_groupName).withIpPermissions(groupPermission.toIpPermission()));
            }
        }

        InstanceGroup instanceGroup = new InstanceGroupImpl(ec2);
        RunInstancesRequest launchConfiguration = new RunInstancesRequest(_ami, _instanceCount, _instanceCount);
        if (_kernelId != null) {
            launchConfiguration.setKernelId(_kernelId);
        }
        if (_ramDiskId != null) {
            launchConfiguration.setKernelId(_ramDiskId);
        }
        launchConfiguration.setKeyName(_privateKeyName);
        launchConfiguration.setSecurityGroups(securityGroups);
        if (_userData != null) {
            launchConfiguration.setUserData(Base64.encodeBase64String(_userData.getBytes()));
        }
        if (_instanceType != null) {
            launchConfiguration.setInstanceType(_instanceType);
        }
        launchConfiguration.setPlacement(new Placement(_availabilityZone));
        if (instancesRunning) {
            instanceGroup.connectTo(_groupName);
        } else {
            instanceGroup.launch(launchConfiguration, TimeUnit.MINUTES, _maxStartTime);
            if (_instanceName != null) {
                LOG.info("tagging instances with name '" + _instanceName + " [<idx>]'");
                int idx = 1;
                for (Instance instance : instanceGroup.getInstances(false)) {
                    CreateTagsRequest createTagsRequest = new CreateTagsRequest();
                    createTagsRequest.withResources(instance.getInstanceId()) //
                            .withTags(new Tag("Name", _instanceName + " [" + idx + "]"));
                    ec2.createTags(createTagsRequest);
                    idx++;
                }
            }
        }
    } catch (Exception e) {
        LOG.error("execution " + getClass().getSimpleName() + " with groupName '" + _groupName + "' failed: "
                + e.getMessage());
        throw new BuildException(e);
    }
}

From source file:edu.umass.cs.aws.support.AWSEC2.java

License:Apache License

/**
 * Create an Instance/*from   w  w w .ja  v  a 2 s  . c om*/
 *
 * @param ec2
 * @param amiRecord
 * @param key
 * @param securityGroup
 * @return the instanceID string
 */
public static String createInstanceAndWait(AmazonEC2 ec2, AMIRecord amiRecord, String key,
        SecurityGroup securityGroup) {
    RunInstancesRequest runInstancesRequest;
    if (amiRecord.getVpcSubnet() != null) {
        System.out.println(
                "subnet: " + amiRecord.getVpcSubnet() + " securityGroup: " + securityGroup.getGroupName());
        // new VPC
        runInstancesRequest = new RunInstancesRequest().withMinCount(1).withMaxCount(1)
                .withImageId(amiRecord.getName()).withInstanceType(amiRecord.getInstanceType()).withKeyName(key)
                .withSubnetId(amiRecord.getVpcSubnet())
                .withSecurityGroupIds(Arrays.asList(securityGroup.getGroupId()));
    } else {
        runInstancesRequest = new RunInstancesRequest(amiRecord.getName(), 1, 1);
        runInstancesRequest.setInstanceType(amiRecord.getInstanceType());
        runInstancesRequest.setSecurityGroups(new ArrayList<>(Arrays.asList(securityGroup.getGroupName())));
        runInstancesRequest.setKeyName(key);
    }

    RunInstancesResult runInstancesResult = ec2.runInstances(runInstancesRequest);

    Instance instance = runInstancesResult.getReservation().getInstances().get(0);
    String createdInstanceId = instance.getInstanceId();

    System.out.println("Waiting for instance " + amiRecord.getName() + " to start");
    long startTime = System.currentTimeMillis();
    do {
        ThreadUtils.sleep(1000);
        if (System.currentTimeMillis() - startTime > 90000) {// give it a minute and a half
            System.out.println(createdInstanceId + " timed out waiting for start.");
            return null;
        }
        // regrab the instance data from the server
        instance = findInstance(ec2, createdInstanceId);

        //System.out.print(instance.getState().getName());
        System.out.print(".");

    } while (instance != null && !instance.getState().getName().equals(InstanceStateRecord.RUNNING.getName()));
    System.out.println();

    return createdInstanceId;
}

From source file:elasticity.services.AmazonService.java

License:Open Source License

/**
 * Runs a VM instance on an EC2 compatible cloud.
 * //w  w  w.j  a  v  a 2 s .  c om
 * @return The IP of the started instance.
 */
public String runInstance() throws Exception {
    logger.log(Level.INFO, "Running new instance..");
    //Prepares the run request.
    RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
    runInstancesRequest.setImageId(awsImageId);
    runInstancesRequest.setKeyName(awsKeypair);
    runInstancesRequest.setSecurityGroups(Collections.singleton(awsSecurityGroup));
    runInstancesRequest.setInstanceType(awsInstanceType);
    runInstancesRequest.setMaxCount(1);
    runInstancesRequest.setMinCount(1);

    //Executes the run request.
    String instanceId = ""; //Will be changed eventually.
    boolean done = false;
    while (!done) {
        try {
            RunInstancesResult runInstancesResult = ec2.runInstances(runInstancesRequest);
            instanceId = runInstancesResult.getReservation().getInstances().get(0).getInstanceId();
            done = true;
        } catch (Exception e) {
            logger.log(Level.INFO, "Error while sending RunInstanceRequest, retrying in 1s...");
            e.printStackTrace(System.out);
            Thread.sleep(1000);
        }
    }

    logger.log(Level.INFO, "Sent RunInstanceRequest successfully..");

    //Waits for the instance to be "running".
    String instanceIp = ""; //Will be changed eventually.
    done = false;
    while (!done) {
        try {
            Thread.sleep(1000);

            DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest();
            describeInstancesRequest.withInstanceIds(instanceId);
            DescribeInstancesResult describeInstancesResult = ec2.describeInstances(describeInstancesRequest);

            Instance instance = describeInstancesResult.getReservations().get(0).getInstances().get(0);
            logger.log(Level.INFO, "Current instance state: " + instance.getState().getName() + "..");
            if (instance.getState().getName().equals("running")) {
                instanceIp = instance.getPrivateIpAddress();
                ip2id.put(instanceIp, instanceId);
                done = true;
            }
        } catch (Exception e) {
            logger.log(Level.INFO, "Failed to get instance description, retrying..");
        }
    }

    logger.log(Level.INFO, "Instance ran with IP: " + instanceIp + ".");
    return instanceIp;
}

From source file:hudson.plugins.ec2.SlaveTemplate.java

License:Open Source License

/**
 * Provisions an On-demand EC2 slave by launching a new instance or 
 * starting a previously-stopped instance.
 *///from w  ww .j  a va 2s  .c om
private EC2AbstractSlave provisionOndemand(TaskListener listener) throws AmazonClientException, IOException {
    PrintStream logger = listener.getLogger();
    AmazonEC2 ec2 = getParent().connect();

    try {
        String msg = "Launching " + ami + " for template " + description;
        logger.println(msg);
        LOGGER.info(msg);

        KeyPair keyPair = getKeyPair(ec2);

        RunInstancesRequest riRequest = new RunInstancesRequest(ami, 1, 1);
        InstanceNetworkInterfaceSpecification net = new InstanceNetworkInterfaceSpecification();

        if (useEphemeralDevices) {
            setupEphemeralDeviceMapping(riRequest);
        } else {
            setupCustomDeviceMapping(riRequest);
        }

        List<Filter> diFilters = new ArrayList<Filter>();
        diFilters.add(new Filter("image-id").withValues(ami));

        if (StringUtils.isNotBlank(getZone())) {
            Placement placement = new Placement(getZone());
            if (getUseDedicatedTenancy()) {
                placement.setTenancy("dedicated");
            }
            riRequest.setPlacement(placement);
            diFilters.add(new Filter("availability-zone").withValues(getZone()));
        }

        if (StringUtils.isNotBlank(getSubnetId())) {
            if (getAssociatePublicIp()) {
                net.setSubnetId(getSubnetId());
            } else {
                riRequest.setSubnetId(getSubnetId());
            }

            diFilters.add(new Filter("subnet-id").withValues(getSubnetId()));

            /* If we have a subnet ID then we can only use VPC security groups */
            if (!securityGroupSet.isEmpty()) {
                List<String> group_ids = getEc2SecurityGroups(ec2);

                if (!group_ids.isEmpty()) {
                    if (getAssociatePublicIp()) {
                        net.setGroups(group_ids);
                    } else {
                        riRequest.setSecurityGroupIds(group_ids);
                    }

                    diFilters.add(new Filter("instance.group-id").withValues(group_ids));
                }
            }
        } else {
            /* No subnet: we can use standard security groups by name */
            riRequest.setSecurityGroups(securityGroupSet);
            if (securityGroupSet.size() > 0)
                diFilters.add(new Filter("instance.group-name").withValues(securityGroupSet));
        }

        String userDataString = Base64.encodeBase64String(userData.getBytes());
        riRequest.setUserData(userDataString);
        riRequest.setKeyName(keyPair.getKeyName());
        diFilters.add(new Filter("key-name").withValues(keyPair.getKeyName()));
        riRequest.setInstanceType(type.toString());
        diFilters.add(new Filter("instance-type").withValues(type.toString()));

        if (getAssociatePublicIp()) {
            net.setAssociatePublicIpAddress(true);
            net.setDeviceIndex(0);
            riRequest.withNetworkInterfaces(net);
        }

        boolean hasCustomTypeTag = false;
        HashSet<Tag> inst_tags = null;
        if (tags != null && !tags.isEmpty()) {
            inst_tags = new HashSet<Tag>();
            for (EC2Tag t : tags) {
                inst_tags.add(new Tag(t.getName(), t.getValue()));
                diFilters.add(new Filter("tag:" + t.getName()).withValues(t.getValue()));
                if (StringUtils.equals(t.getName(), EC2Tag.TAG_NAME_JENKINS_SLAVE_TYPE)) {
                    hasCustomTypeTag = true;
                }
            }
        }
        if (!hasCustomTypeTag) {
            if (inst_tags == null) {
                inst_tags = new HashSet<Tag>();
            }
            inst_tags.add(new Tag(EC2Tag.TAG_NAME_JENKINS_SLAVE_TYPE, "demand"));
        }

        DescribeInstancesRequest diRequest = new DescribeInstancesRequest();
        diFilters.add(new Filter("instance-state-name").withValues(InstanceStateName.Stopped.toString(),
                InstanceStateName.Stopping.toString()));
        diRequest.setFilters(diFilters);

        msg = "Looking for existing instances with describe-instance: " + diRequest;
        logger.println(msg);
        LOGGER.fine(msg);

        DescribeInstancesResult diResult = ec2.describeInstances(diRequest);

        Instance existingInstance = null;
        if (StringUtils.isNotBlank(getIamInstanceProfile())) {
            riRequest.setIamInstanceProfile(
                    new IamInstanceProfileSpecification().withArn(getIamInstanceProfile()));
            // cannot filter on IAM Instance Profile, so search in result
            reservationLoop: for (Reservation reservation : diResult.getReservations()) {
                for (Instance instance : reservation.getInstances()) {
                    if (instance.getIamInstanceProfile() != null
                            && instance.getIamInstanceProfile().getArn().equals(getIamInstanceProfile())) {
                        existingInstance = instance;
                        break reservationLoop;
                    }
                }
            }
        } else if (diResult.getReservations().size() > 0) {
            existingInstance = diResult.getReservations().get(0).getInstances().get(0);
        }

        if (existingInstance == null) {
            // Have to create a new instance
            Instance inst = ec2.runInstances(riRequest).getReservation().getInstances().get(0);

            /* Now that we have our instance, we can set tags on it */
            if (inst_tags != null) {
                for (int i = 0; i < 5; i++) {
                    try {
                        updateRemoteTags(ec2, inst_tags, inst.getInstanceId());
                        break;
                    } catch (AmazonServiceException e) {
                        if (e.getErrorCode().equals("InvalidInstanceRequestID.NotFound")) {
                            Thread.sleep(5000);
                            continue;
                        }
                        throw e;
                    }
                }

                // That was a remote request - we should also update our local instance data.
                inst.setTags(inst_tags);
            }
            msg = "No existing instance found - created: " + inst;
            logger.println(msg);
            LOGGER.info(msg);
            return newOndemandSlave(inst);
        }

        msg = "Found existing stopped instance: " + existingInstance;
        logger.println(msg);
        LOGGER.info(msg);

        List<String> instances = new ArrayList<String>();
        instances.add(existingInstance.getInstanceId());
        StartInstancesRequest siRequest = new StartInstancesRequest(instances);
        StartInstancesResult siResult = ec2.startInstances(siRequest);

        msg = "Starting existing instance: " + existingInstance + " result:" + siResult;
        logger.println(msg);
        LOGGER.fine(msg);

        for (EC2AbstractSlave ec2Node : NodeIterator.nodes(EC2AbstractSlave.class)) {
            if (ec2Node.getInstanceId().equals(existingInstance.getInstanceId())) {
                msg = "Found existing corresponding Jenkins slave: " + ec2Node;
                logger.println(msg);
                LOGGER.finer(msg);
                return ec2Node;
            }
        }

        // Existing slave not found
        msg = "Creating new Jenkins slave for existing instance: " + existingInstance;
        logger.println(msg);
        LOGGER.info(msg);
        return newOndemandSlave(existingInstance);

    } catch (FormException e) {
        throw new AssertionError(); // we should have discovered all configuration issues upfront
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
}

From source file:integratedtoolkit.connectors.amazon.EC2.java

License:Apache License

private RunInstancesResult createMachine(String instanceCode, String diskImage) throws InterruptedException {
    //Create/*from  w  w  w.  j  a  va  2s .c o  m*/
    RunInstancesRequest runInstancesRequest = new RunInstancesRequest(diskImage, 1, 1);
    Placement placement = new Placement(placementCode);
    runInstancesRequest.setPlacement(placement);
    runInstancesRequest.setInstanceType(instanceCode);
    runInstancesRequest.setKeyName(keyPairName);
    ArrayList<String> groupId = new ArrayList<String>();
    groupId.add(securityGroupName);
    runInstancesRequest.setSecurityGroups(groupId);

    return client.runInstances(runInstancesRequest);
}