List of usage examples for com.amazonaws.services.ec2.model ModifyInstanceAttributeRequest ModifyInstanceAttributeRequest
public ModifyInstanceAttributeRequest()
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); }