Example usage for com.amazonaws.services.ec2.model ModifyInstanceAttributeRequest ModifyInstanceAttributeRequest

List of usage examples for com.amazonaws.services.ec2.model ModifyInstanceAttributeRequest ModifyInstanceAttributeRequest

Introduction

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

Prototype

public ModifyInstanceAttributeRequest() 

Source Link

Document

Default constructor for ModifyInstanceAttributeRequest object.

Usage

From source file:com.cloudera.director.aws.ec2.ebs.EBSAllocator.java

License:Apache License

/**
 * Adds a delete on termination flag to all volumes in an {@code InstanceEbsVolumes} list
 * that have the ATTACHED status. This makes sure that the volumes associated with the
 * instance will be automatically cleaned up upon instance termination.
 *
 * @param instanceEbsVolumesList list of instances along with their associated volumes
 *///from   w  w  w.j av a2s.c om
public void addDeleteOnTerminationFlag(List<InstanceEbsVolumes> instanceEbsVolumesList) {
    Set<String> volumesToFlag = getAllVolumeIdsWithStatus(instanceEbsVolumesList,
            InstanceEbsVolumes.Status.ATTACHED);

    if (!volumesToFlag.isEmpty()) {
        for (InstanceEbsVolumes instanceEbsVolumes : instanceEbsVolumesList) {
            String ec2InstanceId = instanceEbsVolumes.getEc2InstanceId();

            DescribeInstanceAttributeRequest instanceAttributeRequest = new DescribeInstanceAttributeRequest()
                    .withAttribute(InstanceAttributeName.BlockDeviceMapping).withInstanceId(ec2InstanceId);

            List<InstanceBlockDeviceMapping> blockDeviceMappings = client
                    .describeInstanceAttribute(instanceAttributeRequest).getInstanceAttribute()
                    .getBlockDeviceMappings();

            for (InstanceBlockDeviceMapping blockDeviceMapping : blockDeviceMappings) {
                String volumeId = blockDeviceMapping.getEbs().getVolumeId();

                // The block device mapping may have volumes associated with it that were not
                // provisioned by us. We skip marking those volumes for deletion.

                if (!volumesToFlag.contains(volumeId)) {
                    continue;
                }

                InstanceBlockDeviceMappingSpecification updatedSpec = new InstanceBlockDeviceMappingSpecification()
                        .withEbs(new EbsInstanceBlockDeviceSpecification().withDeleteOnTermination(true)
                                .withVolumeId(volumeId))
                        .withDeviceName(blockDeviceMapping.getDeviceName());

                ModifyInstanceAttributeRequest modifyRequest = new ModifyInstanceAttributeRequest()
                        .withBlockDeviceMappings(updatedSpec).withInstanceId(ec2InstanceId);

                client.modifyInstanceAttribute(modifyRequest);
            }
        }
    }
}

From source file:com.netflix.simianarmy.client.aws.AWSClient.java

License:Apache License

/** {@inheritDoc} */
public void setInstanceSecurityGroups(String instanceId, List<String> groupIds) {
    Validate.notEmpty(instanceId);/*from  w w w  .j  a  v  a2s .  c  o m*/
    LOGGER.info(
            String.format("Removing all security groups from instance %s in region %s.", instanceId, region));
    try {
        ModifyInstanceAttributeRequest request = new ModifyInstanceAttributeRequest();
        request.setInstanceId(instanceId);
        request.setGroups(groupIds);
        ec2Client().modifyInstanceAttribute(request);
    } catch (AmazonServiceException e) {
        if (e.getErrorCode().equals("InvalidInstanceID.NotFound")) {
            throw new NotFoundException("AWS instance " + instanceId + " not found", e);
        }
        throw e;
    }
}

From source file:com.urbancode.terraform.tasks.aws.helpers.AWSHelper.java

License:Apache License

public void modifyInstanceAttribute(String instanceId, String attribute, String value, AmazonEC2 ec2Client) {
    ModifyInstanceAttributeRequest request = new ModifyInstanceAttributeRequest();

    if (isNotBlank(instanceId) && isNotBlank(attribute) && isNotBlank(value)) {
        request.withInstanceId(instanceId);
        request = request.withAttribute(attribute);
        request = request.withValue(value);
    }/*  ww  w  . jav  a 2s .  c  o  m*/
    ec2Client.modifyInstanceAttribute(request);
}

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

License:Open Source License

@Override
public void setApiTermination(boolean enable, String... instanceIds) throws Exception {
    if (null != instanceIds) {
        List<String> instances = Arrays.asList(instanceIds);
        if (!instances.isEmpty()) {
            for (String instance : instances) {
                ModifyInstanceAttributeRequest modifyInstanceAttributeRequest = new ModifyInstanceAttributeRequest();
                modifyInstanceAttributeRequest.setInstanceId(instance);
                modifyInstanceAttributeRequest.setAttribute(DISABLE_API_TERMINATION);
                modifyInstanceAttributeRequest.setValue("" + !enable);
                getConnection().modifyInstanceAttribute(modifyInstanceAttributeRequest);
            }//from w w  w.j av  a2 s. c  om
        }
    }
}

From source file:de.unibi.cebitec.bibigrid.meta.aws.CreateClusterAWS.java

@Override
public boolean launchClusterInstances() {
    log.info("Requesting master instance ...");

    if (config.isUseSpotInstances()) {
        RequestSpotInstancesRequest masterReq = new RequestSpotInstancesRequest();
        masterReq.withType(SpotInstanceType.OneTime).withInstanceCount(1).withLaunchGroup("lg_" + clusterId)
                .withSpotPrice(Double.toString(config.getBidPriceMaster()));

        LaunchSpecification masterLaunchSpecification = new LaunchSpecification();
        masterLaunchSpecification/* ww w .ja  v a  2  s  .c om*/
                .withInstanceType(InstanceType.fromValue(this.config.getMasterInstanceType().getValue()))
                .withPlacement(spotInstancePlacement).withKeyName(this.config.getKeypair())
                .withImageId(this.config.getMasterImage()).withUserData(base64MasterUserData)
                .withBlockDeviceMappings(masterDeviceMappings).withNetworkInterfaces(masterNetworkInterfaces);

        masterReq.setLaunchSpecification(masterLaunchSpecification);

        RequestSpotInstancesResult masterReqResult = ec2.requestSpotInstances(masterReq);

        List<SpotInstanceRequest> masterReqResponses = masterReqResult.getSpotInstanceRequests();
        // collect all spotInstanceRequestIds ...
        List<String> spotInstanceRequestIds = new ArrayList<>();

        for (SpotInstanceRequest requestResponse : masterReqResponses) {

            spotInstanceRequestIds.add(requestResponse.getSpotInstanceRequestId());

        }
        // Tag spotrequest
        CreateTagsRequest ctr = new CreateTagsRequest();
        ctr.withResources(spotInstanceRequestIds);
        ctr.withTags(bibigridid, username, new Tag().withKey("Name").withValue(PREFIX + "master-" + clusterId));
        ec2.createTags(ctr);
        // Wait for spot request finished  
        log.info("Waiting for master instance (spot request) to finish booting ...");
        masterInstance = waitForInstances(waitForSpotInstances(spotInstanceRequestIds)).get(0);
    } else {

        RunInstancesRequest masterReq = new RunInstancesRequest();
        masterReq.withInstanceType(InstanceType.fromValue(this.config.getMasterInstanceType().getValue()))
                .withMinCount(1).withMaxCount(1).withPlacement(instancePlacement)
                .withKeyName(this.config.getKeypair()).withImageId(this.config.getMasterImage())
                .withUserData(base64MasterUserData).withBlockDeviceMappings(masterDeviceMappings)
                .withNetworkInterfaces(masterNetworkInterfaces);

        // mounting ephemerals
        RunInstancesResult masterReqResult = ec2.runInstances(masterReq);
        String masterReservationId = masterReqResult.getReservation().getReservationId();
        masterInstance = masterReqResult.getReservation().getInstances().get(0);
        log.info("Waiting for master instance to finish booting ...");

        /////////////////////////////////////////////
        //// Waiting for master instance to run ////
        masterInstance = waitForInstances(Arrays.asList(new String[] { masterInstance.getInstanceId() }))
                .get(0);

    }
    log.info(I, "Master instance is now running!");

    ModifyInstanceAttributeRequest ia_req = new ModifyInstanceAttributeRequest();
    ia_req.setInstanceId(masterInstance.getInstanceId());
    ia_req.setSourceDestCheck(Boolean.FALSE);
    ec2.modifyInstanceAttribute(ia_req);

    ////////////////////////////////////
    //// Tagging Master with a name ////
    CreateTagsRequest masterNameTagRequest = new CreateTagsRequest();
    masterNameTagRequest.withResources(masterInstance.getInstanceId()).withTags(bibigridid, username,
            new Tag().withKey("Name").withValue(PREFIX + "master-" + clusterId));

    ec2.createTags(masterNameTagRequest);

    /*
     * Waiting for Status Checks to finish
     *
     */
    log.info("Waiting for Status Checks on master ...");
    do {
        DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest();
        request.setInstanceIds((Arrays.asList(new String[] { masterInstance.getInstanceId() })));

        DescribeInstanceStatusResult response = ec2.describeInstanceStatus(request);

        InstanceStatus status = response.getInstanceStatuses().get(0);
        String instanceStatus = status.getInstanceStatus().getStatus();
        String systemStatus = status.getSystemStatus().getStatus();
        log.debug("Status of master instance: " + instanceStatus + "," + systemStatus);
        if (instanceStatus.equalsIgnoreCase("ok") && systemStatus.equalsIgnoreCase("ok")) {
            break;
        } else {
            log.info(V, "...");
            sleep(10);
        }
    } while (true);
    log.info(I, "Status checks successful.");
    ////////////////////////////////////////////////////////////////////////
    ///// run slave instances and supply userdata //////////////////////////

    if (config.getSlaveInstanceCount() > 0) {

        String base64SlaveUserData = UserDataCreator.forSlave(masterInstance.getPrivateIpAddress(),
                masterInstance.getPrivateDnsName(), slaveDeviceMapper, this.config, environment.getKeypair());

        log.info(V, "Slave Userdata:\n{}", new String(Base64.decodeBase64(base64SlaveUserData)));

        if (config.isUseSpotInstances()) {
            RequestSpotInstancesRequest slaveReq = new RequestSpotInstancesRequest();
            slaveReq.withType(SpotInstanceType.OneTime).withInstanceCount(config.getSlaveInstanceCount())
                    .withLaunchGroup("lg_" + clusterId).withSpotPrice(Double.toString(config.getBidPrice()));

            LaunchSpecification slaveLaunchSpecification = new LaunchSpecification();
            slaveLaunchSpecification
                    .withInstanceType(InstanceType.fromValue(this.config.getSlaveInstanceType().getValue()))
                    .withPlacement(spotInstancePlacement).withKeyName(this.config.getKeypair())
                    .withImageId(this.config.getSlaveImage()).withUserData(base64SlaveUserData)
                    .withBlockDeviceMappings(slaveBlockDeviceMappings)
                    .withNetworkInterfaces(slaveNetworkInterfaces);

            slaveReq.setLaunchSpecification(slaveLaunchSpecification);

            RequestSpotInstancesResult slaveReqResult = ec2.requestSpotInstances(slaveReq);

            List<SpotInstanceRequest> slaveReqResponses = slaveReqResult.getSpotInstanceRequests();
            // collect all spotInstanceRequestIds ...
            List<String> spotInstanceRequestIds = new ArrayList<>();

            for (SpotInstanceRequest requestResponse : slaveReqResponses) {

                spotInstanceRequestIds.add(requestResponse.getSpotInstanceRequestId());

            }
            // wait for a second
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {

            }

            log.info(V, "tag spot request instances");

            // tag spot requests (slave)
            CreateTagsRequest ctr = new CreateTagsRequest();
            ctr.withResources(spotInstanceRequestIds);
            ctr.withTags(bibigridid, username,
                    new Tag().withKey("Name").withValue(PREFIX + "slave-" + clusterId));
            /* Setting tags for spot requests can cause an amazon service 
             exception, if the spot request returns an id, but the id 
             isn't registered in spot request registy yet. */
            int counter = 0;
            boolean finished = false;
            while (!finished) {
                try {
                    ec2.createTags(ctr);
                    finished = true;
                } catch (AmazonServiceException ase) {
                    if (counter < 5) {
                        log.warn("{} ... try again in 10 seconds.", ase.getMessage());
                        try {
                            Thread.sleep(10000);
                        } catch (InterruptedException e) {
                        }
                        counter++;
                    } else {
                        throw ase;
                    }
                }
            }
            log.info("Waiting for slave instance(s) (spot request) to finish booting ...");
            // wait for spot request (slave) finished
            slaveInstances = waitForInstances(waitForSpotInstances(spotInstanceRequestIds));

        } else {

            RunInstancesRequest slaveReq = new RunInstancesRequest();
            slaveReq.withInstanceType(InstanceType.fromValue(this.config.getSlaveInstanceType().getValue()))
                    .withMinCount(this.config.getSlaveInstanceCount())
                    .withMaxCount(this.config.getSlaveInstanceCount()).withPlacement(instancePlacement)
                    .withKeyName(this.config.getKeypair()).withImageId(this.config.getSlaveImage())
                    .withUserData(base64SlaveUserData).withBlockDeviceMappings(slaveBlockDeviceMappings)
                    .withNetworkInterfaces(slaveNetworkInterfaces);

            RunInstancesResult slaveReqResult = ec2.runInstances(slaveReq);
            String slaveReservationId = slaveReqResult.getReservation().getReservationId();
            // create a list of all slave instances
            List<String> slaveInstanceListIds = new ArrayList<>();
            for (Instance i : slaveReqResult.getReservation().getInstances()) {
                slaveInstanceListIds.add(i.getInstanceId());
            }

            log.info("Waiting for slave instance(s) to finish booting ...");
            slaveInstances = waitForInstances(slaveInstanceListIds);

        }

        /////////////////////////////////////////////
        //// Waiting for master instance to run ////
        log.info(I, "Slave instance(s) is now running!");

        ////////////////////////////////////
        //// Tagging all slaves  with a name
        for (Instance si : slaveInstances) {
            CreateTagsRequest slaveNameTagRequest = new CreateTagsRequest();
            slaveNameTagRequest.withResources(si.getInstanceId()).withTags(bibigridid, username,
                    new Tag().withKey("Name").withValue(PREFIX + "slave-" + clusterId));
            ec2.createTags(slaveNameTagRequest);
        }
    } else {
        log.info("No Slave instance(s) requested !");

    }

    //////////////////////////////////
    ////// post configure master
    configureMaster();

    ////////////////////////////////////
    //// Human friendly output
    StringBuilder sb = new StringBuilder();
    sb.append("\n You might want to set the following environment variable:\n\n");
    sb.append("export BIBIGRID_MASTER=").append(masterInstance.getPublicIpAddress()).append("\n\n");
    sb.append("You can then log on the master node with:\n\n").append("ssh -i ")
            .append(config.getIdentityFile()).append(" ubuntu@$BIBIGRID_MASTER\n\n");
    sb.append("The cluster id of your started cluster is : ").append(clusterId).append("\n\n");
    sb.append("The can easily terminate the cluster at any time with :\n").append("./bibigrid -t ")
            .append(clusterId).append(" ");
    if (getConfig().isAlternativeConfigFile()) {
        sb.append("-o ").append(config.getAlternativeConfigPath()).append(" ");
    }

    sb.append("\n");

    log.info(sb.toString());

    ////////////////////////////////////
    //// Grid Properties file
    if (getConfig().getGridPropertiesFile() != null) {
        Properties gp = new Properties();
        gp.setProperty("BIBIGRID_MASTER", masterInstance.getPublicIpAddress());
        gp.setProperty("IdentityFile", getConfig().getIdentityFile().toString());
        gp.setProperty("clusterId", clusterId);
        if (getConfig().isAlternativeConfigFile()) {
            gp.setProperty("AlternativeConfigFile", config.getAlternativeConfigPath());
        }
        try {
            gp.store(new FileOutputStream(getConfig().getGridPropertiesFile()), "Autogenerated by BiBiGrid");
        } catch (IOException e) {
            log.error(I, "Exception while creating grid properties file : " + e.getMessage());
        }
    }

    return true;
}

From source file:jp.primecloud.auto.process.aws.AwsInstanceProcess.java

License:Open Source License

public void modify(AwsProcessClient awsProcessClient, Long instanceNo) {
    AwsInstance awsInstance = awsInstanceDao.read(instanceNo);
    String instanceId = awsInstance.getInstanceId();

    com.amazonaws.services.ec2.model.Instance instance2 = awsCommonProcess.describeInstance(awsProcessClient,
            instanceId);//from w  w w .j a  v  a 2  s .co  m

    // InstanceType
    if (!StringUtils.equals(awsInstance.getInstanceType(), instance2.getInstanceType())) {
        // InstanceType?
        ModifyInstanceAttributeRequest request = new ModifyInstanceAttributeRequest();
        request.withInstanceId(instanceId);
        request.withInstanceType(awsInstance.getInstanceType());
        awsProcessClient.getEc2Client().modifyInstanceAttribute(request);

        // 
        if (log.isInfoEnabled()) {
            log.info(MessageUtils.getMessage("IPROCESS-100161", instanceId));
        }
    }

    // SecurityGroup
    if (BooleanUtils.isTrue(awsProcessClient.getPlatformAws().getVpc())) {
        // ????SecurityGroup
        List<String> groupNames = new ArrayList<String>();
        List<GroupIdentifier> groupIdentifiers = instance2.getSecurityGroups();
        for (GroupIdentifier groupIdentifier : groupIdentifiers) {
            groupNames.add(groupIdentifier.getGroupName());
        }

        // ????SecurityGroup
        List<String> newGroupNames = new ArrayList<String>();
        for (String groupName : StringUtils.split(awsInstance.getSecurityGroups(), ",")) {
            newGroupNames.add(groupName.trim());
        }

        // SecurityGroup???????
        if (!(groupNames.size() == newGroupNames.size()) || !groupNames.containsAll(newGroupNames)) {
            // SecurityGroup?ID??
            List<String> newSecurityGroups = new ArrayList<String>();
            List<SecurityGroup> securityGroups = awsCommonProcess.describeSecurityGroupsByVpcId(
                    awsProcessClient, awsProcessClient.getPlatformAws().getVpcId());
            for (String groupName : newGroupNames) {
                for (SecurityGroup securityGroup : securityGroups) {
                    if (StringUtils.equals(groupName, securityGroup.getGroupName())) {
                        newSecurityGroups.add(securityGroup.getGroupId());
                        break;
                    }
                }
            }

            // SecurityGroup?
            ModifyInstanceAttributeRequest request = new ModifyInstanceAttributeRequest();
            request.withInstanceId(instanceId);
            request.withGroups(newSecurityGroups);
            awsProcessClient.getEc2Client().modifyInstanceAttribute(request);

            // 
            if (log.isInfoEnabled()) {
                log.info(MessageUtils.getMessage("IPROCESS-100162", instanceId));
            }
        }
    }
}

From source file:net.roboconf.target.ec2.internal.Ec2MachineConfigurator.java

License:Apache License

/**
 * Attaches volume(s) for EBS.//ww w.  j a v  a  2  s . com
 * @return true if successful attachment, or nothing to do. false otherwise
 */
private boolean attachVolumes() {

    // If volume is found in map, it has been successfully created (no need to check here)
    for (Map.Entry<String, String> entry : this.storageIdToVolumeId.entrySet()) {

        String volumeId = entry.getValue();
        String storageId = entry.getKey();

        // Give a name to the volume before attaching
        String nameTemplate = Ec2IaasHandler.findStorageProperty(this.targetProperties, storageId,
                VOLUME_NAME_PREFIX);
        String name = Ec2IaasHandler.expandVolumeName(nameTemplate, this.applicationName,
                this.scopedInstance.getName());
        if (Utils.isEmptyOrWhitespaces(name))
            name = "Created by Roboconf for " + this.tagName;
        tagResource(volumeId, name);

        // Attach volume now
        String mountPoint = Ec2IaasHandler.findStorageProperty(this.targetProperties, storageId,
                VOLUME_MOUNT_POINT_PREFIX);
        if (Utils.isEmptyOrWhitespaces(mountPoint))
            mountPoint = "/dev/sdf";

        AttachVolumeRequest attachRequest = new AttachVolumeRequest().withInstanceId(this.machineId)
                .withDevice(mountPoint).withVolumeId(volumeId);

        try {
            this.ec2Api.attachVolume(attachRequest);
        } catch (Exception e) {
            this.logger.warning("EBS Volume attachment error: " + e);
        }

        // Set deleteOnTermination flag ?
        if (Boolean.parseBoolean(Ec2IaasHandler.findStorageProperty(this.targetProperties, storageId,
                VOLUME_DELETE_OT_PREFIX))) {
            EbsInstanceBlockDeviceSpecification ebsSpecification = new EbsInstanceBlockDeviceSpecification()
                    .withVolumeId(volumeId).withDeleteOnTermination(true);

            InstanceBlockDeviceMappingSpecification mappingSpecification = new InstanceBlockDeviceMappingSpecification()
                    .withDeviceName(mountPoint).withEbs(ebsSpecification);

            ModifyInstanceAttributeRequest request = new ModifyInstanceAttributeRequest()
                    .withInstanceId(this.machineId).withBlockDeviceMappings(mappingSpecification);

            this.ec2Api.modifyInstanceAttribute(request);
        }
    }

    return true;
}

From source file:org.excalibur.service.aws.ec2.EC2.java

License:Open Source License

public void modifyInstanceAttributes(String instanceId, Attribute... attributes) {
    checkState(!isNullOrEmpty(instanceId));

    //        InstanceState instanceState = 
    //                ec2_.describeInstanceStatus(new DescribeInstanceStatusRequest().withInstanceIds(instanceId)).getInstanceStatuses().get(0).getInstanceState();
    //        /*www  .  j  a  v  a2s  .co m*/
    //        final InstanceStateType stateType = InstanceStateType.valueOfFrom(instanceState.getName());
    //        boolean isRunning = InstanceStateType.RUNNING.equals(stateType);
    //        
    //        if (isRunning)
    //        {
    this.stop(instanceId);
    //        }

    for (Attribute attribute : attributes) {
        if (attribute != null && !isNullOrEmpty(attribute.getName())) {
            ModifyInstanceAttributeRequest request = new ModifyInstanceAttributeRequest()
                    .withInstanceId(instanceId).withAttribute(attribute.getName());

            if (!isNullOrEmpty(attribute.getValue())) {
                request.setValue(attribute.getValue());
            }

            ec2_.modifyInstanceAttribute(request);
        }
    }

    //        if (isRunning)
    //        {
    this.startInstances(instanceId);
    //        }
}

From source file:org.finra.dm.dao.impl.Ec2DaoImpl.java

License:Apache License

/**
 * Adds the security groups to an EC2 instance.
 *
 * @param ec2InstanceId, the ec2 instance id.
 * @param securityGroups, security groups to be added.
 * @param awsParams, awsParamsDto object
 *
 * @return updated security groups.//from  w  w  w . j a  v  a2s .com
 */
@Override
public List<String> addSecurityGroupsToEc2Instance(String ec2InstanceId, List<String> securityGroups,
        AwsParamsDto awsParams) {
    Set<String> updatedSecurityGroups = new HashSet<>();
    for (String securityGroup : securityGroups) {
        updatedSecurityGroups.add(securityGroup);
    }

    // Get existing security groups
    DescribeInstanceAttributeRequest describeInstanceAttributeRequest = new DescribeInstanceAttributeRequest()
            .withInstanceId(ec2InstanceId).withAttribute(InstanceAttributeName.GroupSet);

    DescribeInstanceAttributeResult describeInstanceAttributeResult = ec2Operations
            .describeInstanceAttribute(getEc2Client(awsParams), describeInstanceAttributeRequest);

    List<GroupIdentifier> groups = describeInstanceAttributeResult.getInstanceAttribute().getGroups();
    for (GroupIdentifier groupIdentifier : groups) {
        updatedSecurityGroups.add(groupIdentifier.getGroupId());
    }

    // Add security group on master EC2 instance
    ModifyInstanceAttributeRequest modifyInstanceAttributeRequest = new ModifyInstanceAttributeRequest()
            .withInstanceId(ec2InstanceId).withGroups(updatedSecurityGroups);

    ec2Operations.modifyInstanceAttribute(getEc2Client(awsParams), modifyInstanceAttributeRequest);

    return new ArrayList<>(updatedSecurityGroups);
}