List of usage examples for com.amazonaws.services.autoscaling.model AutoScalingGroup getSuspendedProcesses
public java.util.List<SuspendedProcess> getSuspendedProcesses()
The suspended processes associated with the group.
From source file:com.netflix.eureka.aws.AwsAsgUtil.java
License:Apache License
/** * Checks if the load balancer addition is disabled or not. * * @param asg/*ww w .j a va2s. co m*/ * - The ASG object for which the status needs to be checked * @return - true, if the load balancer addition is suspended, false * otherwise. */ private boolean isAddToLoadBalancerSuspended(AutoScalingGroup asg) { List<SuspendedProcess> suspendedProcesses = asg.getSuspendedProcesses(); for (SuspendedProcess process : suspendedProcesses) { if (PROP_ADD_TO_LOAD_BALANCER.equals(process.getProcessName())) { return true; } } return false; }
From source file:com.netflix.simianarmy.aws.conformity.crawler.AWSClusterCrawler.java
License:Apache License
/** * In this implementation, every auto scaling group is considered a cluster. * @param clusterNames//w ww. j a v a 2 s.c o m * the cluster names * @return the list of clusters matching the names, when names are empty, return all clusters */ @Override public List<Cluster> clusters(String... clusterNames) { List<Cluster> list = Lists.newArrayList(); for (Map.Entry<String, AWSClient> entry : regionToAwsClient.entrySet()) { String region = entry.getKey(); AWSClient awsClient = entry.getValue(); Set<String> asgInstances = Sets.newHashSet(); LOGGER.info(String.format("Crawling clusters in region %s", region)); for (AutoScalingGroup asg : awsClient.describeAutoScalingGroups(clusterNames)) { List<String> instances = Lists.newArrayList(); for (Instance instance : asg.getInstances()) { instances.add(instance.getInstanceId()); asgInstances.add(instance.getInstanceId()); } com.netflix.simianarmy.conformity.AutoScalingGroup conformityAsg = new com.netflix.simianarmy.conformity.AutoScalingGroup( asg.getAutoScalingGroupName(), instances.toArray(new String[instances.size()])); for (SuspendedProcess sp : asg.getSuspendedProcesses()) { if ("AddToLoadBalancer".equals(sp.getProcessName())) { LOGGER.info(String.format("ASG %s is suspended: %s", asg.getAutoScalingGroupName(), asg.getSuspendedProcesses())); conformityAsg.setSuspended(true); } } Cluster cluster = new Cluster(asg.getAutoScalingGroupName(), region, conformityAsg); updateCluster(cluster); list.add(cluster); } //Cluster containing all solo instances Set<String> instances = Sets.newHashSet(); for (com.amazonaws.services.ec2.model.Instance awsInstance : awsClient.describeInstances()) { if (!asgInstances.contains(awsInstance.getInstanceId())) { LOGGER.info(String.format("Adding instance %s to soloInstances cluster.", awsInstance.getInstanceId())); instances.add(awsInstance.getInstanceId()); } } //Only create cluster if we have solo instances. if (!instances.isEmpty()) { Cluster cluster = new Cluster("SoloInstances", region, instances); updateCluster(cluster); list.add(cluster); } } return list; }
From source file:com.netflix.simianarmy.aws.janitor.crawler.ASGJanitorCrawler.java
License:Apache License
private List<Resource> getASGResources(String... asgNames) { AWSClient awsClient = getAWSClient(); List<LaunchConfiguration> launchConfigurations = awsClient.describeLaunchConfigurations(); for (LaunchConfiguration lc : launchConfigurations) { nameToLaunchConfig.put(lc.getLaunchConfigurationName(), lc); }/*from w w w .j ava 2 s . c o m*/ List<Resource> resources = new LinkedList<Resource>(); for (AutoScalingGroup asg : awsClient.describeAutoScalingGroups(asgNames)) { Resource asgResource = new AWSResource().withId(asg.getAutoScalingGroupName()) .withResourceType(AWSResourceType.ASG).withRegion(awsClient.region()) .withLaunchTime(asg.getCreatedTime()); for (TagDescription tag : asg.getTags()) { asgResource.setTag(tag.getKey(), tag.getValue()); } asgResource.setDescription(String.format("%d instances", asg.getInstances().size())); asgResource.setOwnerEmail(getOwnerEmailForResource(asgResource)); if (asg.getStatus() != null) { ((AWSResource) asgResource).setAWSResourceState(asg.getStatus()); } Integer maxSize = asg.getMaxSize(); if (maxSize != null) { asgResource.setAdditionalField(ASG_FIELD_MAX_SIZE, String.valueOf(maxSize)); } // Adds instances and ELBs as additional fields. List<String> instances = new ArrayList<String>(); for (Instance instance : asg.getInstances()) { instances.add(instance.getInstanceId()); } asgResource.setAdditionalField(ASG_FIELD_INSTANCES, StringUtils.join(instances, ",")); asgResource.setAdditionalField(ASG_FIELD_ELBS, StringUtils.join(asg.getLoadBalancerNames(), ",")); String lcName = asg.getLaunchConfigurationName(); LaunchConfiguration lc = nameToLaunchConfig.get(lcName); if (lc != null) { asgResource.setAdditionalField(ASG_FIELD_LC_NAME, lcName); } if (lc != null && lc.getCreatedTime() != null) { asgResource.setAdditionalField(ASG_FIELD_LC_CREATION_TIME, String.valueOf(lc.getCreatedTime().getTime())); } // sets the field for the time when the ASG's traffic is suspended from ELB for (SuspendedProcess sp : asg.getSuspendedProcesses()) { if ("AddToLoadBalancer".equals(sp.getProcessName())) { String suspensionTime = getSuspensionTimeString(sp.getSuspensionReason()); if (suspensionTime != null) { LOGGER.info(String.format("Suspension time of ASG %s is %s", asg.getAutoScalingGroupName(), suspensionTime)); asgResource.setAdditionalField(ASG_FIELD_SUSPENSION_TIME, suspensionTime); break; } } } resources.add(asgResource); } return resources; }
From source file:com.netflix.spinnaker.clouddriver.aws.deploy.handlers.MigrateServerGroupStrategy.java
License:Apache License
/** * Migrates a server group and its associated load balancers and security groups from one location to another * * @param source the source server group * @param target the target location in which to migrate * @param sourceLookup a security group lookup cache for the source region * @param targetLookup a security group lookup cache for the target region (may be the same object as the sourceLookup) * @param migrateLoadBalancerStrategy the load balancer migration strategy * @param migrateSecurityGroupStrategy the security group migration strategy * @param subnetType the subnetType in which to migrate the server group (should be null for EC Classic migrations) * @param elbSubnetType the subnetType in which to migrate load balancers * @param iamRole the iamRole to use when migrating (optional) * @param keyPair the keyPair to use when migrating (optional) * @param targetAmi the target imageId to use when migrating (optional) * @param loadBalancerNameMapping a mapping of source-to-target load balancer names * @param allowIngressFromClassic if subnetType is present, and this is true, and app security groups are created * via the deployDefaults, will add broad (80-65535) ingress from the classic link * security group * @param dryRun whether to perform the migration or simply calculate the migration * @return a result set indicating the components required to perform the migration (if a dry run), or the objects * updated by the migration (if not a dry run) *//*from ww w .j a v a 2s . co m*/ public synchronized MigrateServerGroupResult generateResults(ServerGroupLocation source, ServerGroupLocation target, SecurityGroupLookup sourceLookup, SecurityGroupLookup targetLookup, MigrateLoadBalancerStrategy migrateLoadBalancerStrategy, MigrateSecurityGroupStrategy migrateSecurityGroupStrategy, String subnetType, String elbSubnetType, String iamRole, String keyPair, String targetAmi, Map<String, String> loadBalancerNameMapping, boolean allowIngressFromClassic, boolean dryRun) { this.sourceLookup = sourceLookup; this.targetLookup = targetLookup; this.source = source; this.target = target; this.subnetType = subnetType; this.elbSubnetType = elbSubnetType; this.allowIngressFromClassic = allowIngressFromClassic; this.loadBalancerNameMapping = loadBalancerNameMapping; this.dryRun = dryRun; this.migrateSecurityGroupStrategy = migrateSecurityGroupStrategy; this.getMigrateLoadBalancerStrategy = migrateLoadBalancerStrategy; AsgService asgService = getRegionScopedProviderFactory() .forRegion(source.getCredentials(), source.getRegion()).getAsgService(); AutoScalingGroup sourceGroup = asgService.getAutoScalingGroup(source.getName()); if (sourceGroup == null) { throw new IllegalStateException("Error retrieving source server group: " + source.getName()); } LaunchConfiguration launchConfig = asgService .getLaunchConfiguration(sourceGroup.getLaunchConfigurationName()); if (launchConfig == null) { throw new IllegalStateException( "Could not find launch config: " + sourceGroup.getLaunchConfigurationName()); } Names names = Names.parseName(source.getName()); List<MigrateLoadBalancerResult> targetLoadBalancers = generateTargetLoadBalancers(sourceGroup); MigrateServerGroupResult migrateResult = new MigrateServerGroupResult(); List<MigrateSecurityGroupResult> targetSecurityGroups = generateTargetSecurityGroups(launchConfig, migrateResult); Map<String, List<String>> zones = new HashMap<>(); zones.put(target.getRegion(), target.getAvailabilityZones()); DeploymentResult result; if (!dryRun) { Capacity capacity = getCapacity(); BasicAmazonDeployDescription deployDescription = new BasicAmazonDeployDescription(); deployDescription.setSource(getSource(source)); deployDescription.setCredentials(target.getCredentials()); deployDescription.setAmiName(targetAmi != null ? targetAmi : launchConfig.getImageId()); deployDescription.setApplication(names.getApp()); deployDescription.setStack(names.getStack()); deployDescription.setFreeFormDetails(names.getDetail()); deployDescription.setInstanceMonitoring(launchConfig.getInstanceMonitoring().getEnabled()); deployDescription.setInstanceType(launchConfig.getInstanceType()); deployDescription.setIamRole(iamRole != null ? iamRole : launchConfig.getIamInstanceProfile()); deployDescription.setKeyPair(keyPair != null ? keyPair : launchConfig.getKeyName()); deployDescription.setAssociatePublicIpAddress(launchConfig.getAssociatePublicIpAddress()); deployDescription.setCooldown(sourceGroup.getDefaultCooldown()); deployDescription.setHealthCheckGracePeriod(sourceGroup.getHealthCheckGracePeriod()); deployDescription.setHealthCheckType(sourceGroup.getHealthCheckType()); deployDescription.setSuspendedProcesses(sourceGroup.getSuspendedProcesses().stream() .map(SuspendedProcess::getProcessName).collect(Collectors.toSet())); deployDescription.setTerminationPolicies(sourceGroup.getTerminationPolicies()); deployDescription.setKernelId(launchConfig.getKernelId()); deployDescription.setEbsOptimized(launchConfig.getEbsOptimized()); deployDescription.setLoadBalancers(targetLoadBalancers.stream() .map(MigrateLoadBalancerResult::getTargetName).collect(Collectors.toList())); deployDescription.setSecurityGroups( targetSecurityGroups.stream().filter(sg -> !sg.getSkipped().contains(sg.getTarget())) .map(sg -> sg.getTarget().getTargetName()).collect(Collectors.toList())); deployDescription.setAvailabilityZones(zones); deployDescription.setStartDisabled(true); deployDescription.setCapacity(capacity); deployDescription.setSubnetType(subnetType); BasicAmazonDeployDescription description = generateDescription(deployDescription); if (!source.getCredentialAccount().equals(target.getCredentialAccount())) { Map<String, String> allowLaunchMap = new HashMap<>(); allowLaunchMap.put("credentials", source.getCredentialAccount()); allowLaunchMap.put("account", target.getCredentialAccount()); allowLaunchMap.put("region", target.getRegion()); allowLaunchMap.put("amiName", deployDescription.getAmiName()); AllowLaunchAtomicOperation operation = getAllowLaunchAtomicOperationConverter() .convertOperation(allowLaunchMap); operation.operate(null); } result = getBasicAmazonDeployHandler().handle(description, new ArrayList()); } else { result = new DeploymentResult(); String targetName = getRegionScopedProviderFactory() .forRegion(target.getCredentials(), target.getRegion()).getAWSServerGroupNameResolver() .resolveNextServerGroupName(names.getApp(), names.getStack(), names.getDetail(), false); result.setServerGroupNames(Collections.singletonList(targetName)); } migrateResult.setServerGroupNames(result.getServerGroupNames()); migrateResult.setLoadBalancers(targetLoadBalancers); migrateResult.setSecurityGroups(targetSecurityGroups); return migrateResult; }
From source file:com.pinterest.arcee.autoscaling.AwsAutoScaleGroupManager.java
License:Apache License
@Override public AutoScalingGroupBean getAutoScalingGroupInfoByName(String groupName) throws Exception { AutoScalingGroupBean asgInfo = generateDefaultASGInfo(); DescribeAutoScalingGroupsRequest request = new DescribeAutoScalingGroupsRequest(); request.setAutoScalingGroupNames(Arrays.asList(groupName)); DescribeAutoScalingGroupsResult result = aasClient.describeAutoScalingGroups(request); List<AutoScalingGroup> asgroups = result.getAutoScalingGroups(); if (asgroups.isEmpty()) { return asgInfo; }/*from ww w. jav a 2 s . com*/ AutoScalingGroup asgroup = asgroups.get(0); // set autoscaling group status List<SuspendedProcess> suspendedProcesses = asgroup.getSuspendedProcesses(); HashSet<String> processName = new HashSet<>(); for (SuspendedProcess process : suspendedProcesses) { processName.add(process.getProcessName()); } if (processName.contains(PROCESS_ALARMNOTIFICATION) && processName.contains(PROCESS_SCHEDULEDACTIONS)) { asgInfo.setStatus(ASGStatus.DISABLED); } else { asgInfo.setStatus(ASGStatus.ENABLED); } asgInfo.setMinSize(asgroup.getMinSize()); asgInfo.setMaxSize(asgroup.getMaxSize()); // TODO this is dangerous that we are using the same value of TerminationPolicy String policy = asgroup.getTerminationPolicies().isEmpty() ? "Default" : new String(asgroup.getTerminationPolicies().get(0).getBytes()); asgInfo.setTerminationPolicy( AutoScalingTerminationPolicy.valueOf(AutoScalingTerminationPolicy.class, policy)); List<Instance> instances = asgroup.getInstances(); for (Instance instance : instances) { if (instance.getInstanceId() != null) { asgInfo.addToInstances(instance.getInstanceId()); } } return asgInfo; }
From source file:com.pinterest.arcee.autoscaling.AwsAutoScaleGroupManager.java
License:Apache License
@Override public ASGStatus getAutoScalingGroupStatus(String groupName) throws Exception { DescribeAutoScalingGroupsRequest request = new DescribeAutoScalingGroupsRequest(); List<String> groupNames = new ArrayList<>(); groupNames.add(groupName);/* w w w. ja v a2 s . c o m*/ request.setAutoScalingGroupNames(groupNames); DescribeAutoScalingGroupsResult result = aasClient.describeAutoScalingGroups(request); List<AutoScalingGroup> groups = result.getAutoScalingGroups(); if (groups.isEmpty()) { return ASGStatus.UNKNOWN; } AutoScalingGroup group = groups.get(0); List<SuspendedProcess> suspendedProcesses = group.getSuspendedProcesses(); HashSet<String> processName = new HashSet<>(); for (SuspendedProcess process : suspendedProcesses) { processName.add(process.getProcessName()); } if (processName.contains(PROCESS_ALARMNOTIFICATION) && processName.contains(PROCESS_SCHEDULEDACTIONS)) { return ASGStatus.DISABLED; } else { return ASGStatus.ENABLED; } }
From source file:com.pinterest.arcee.autoscaling.AwsAutoScaleGroupManager.java
License:Apache License
@Override public boolean isScalingDownEventEnabled(String groupName) throws Exception { DescribeAutoScalingGroupsRequest request = new DescribeAutoScalingGroupsRequest(); request.setAutoScalingGroupNames(Arrays.asList(groupName)); DescribeAutoScalingGroupsResult result = aasClient.describeAutoScalingGroups(request); List<AutoScalingGroup> groups = result.getAutoScalingGroups(); if (groups.isEmpty()) { return false; }// w w w . j av a2 s .com AutoScalingGroup group = groups.get(0); List<SuspendedProcess> suspendedProcesses = group.getSuspendedProcesses(); for (SuspendedProcess process : suspendedProcesses) { if (process.getProcessName().equals(PROCESS_TERMINATE)) { return false; } } return true; }
From source file:com.pinterest.arcee.autoscaling.AwsAutoScalingManager.java
License:Apache License
@Override public AutoScalingGroupBean getAutoScalingGroupInfoByName(String groupName) throws Exception { AutoScalingGroupBean asgInfo = generateDefaultASGInfo(); AutoScalingGroup asgroup = getAutoScalingGroup(groupName); if (asgroup == null) { return asgInfo; }// w w w. j a va 2 s.c o m // set autoscaling group status List<SuspendedProcess> suspendedProcesses = asgroup.getSuspendedProcesses(); HashSet<String> processName = new HashSet<>(); for (SuspendedProcess process : suspendedProcesses) { processName.add(process.getProcessName()); } if (processName.contains(PROCESS_ALARMNOTIFICATION) && processName.contains(PROCESS_SCHEDULEDACTIONS)) { asgInfo.setStatus(ASGStatus.DISABLED); } else { asgInfo.setStatus(ASGStatus.ENABLED); } asgInfo.setMinSize(asgroup.getMinSize()); asgInfo.setMaxSize(asgroup.getMaxSize()); asgInfo.setDesiredCapacity(asgroup.getDesiredCapacity()); // TODO this is dangerous that we are using the same value of TerminationPolicy String policy = asgroup.getTerminationPolicies().isEmpty() ? "Default" : new String(asgroup.getTerminationPolicies().get(0).getBytes()); asgInfo.setTerminationPolicy( AutoScalingTerminationPolicy.valueOf(AutoScalingTerminationPolicy.class, policy)); List<Instance> instances = asgroup.getInstances(); for (Instance instance : instances) { if (instance.getInstanceId() != null) { asgInfo.addToInstances(instance.getInstanceId()); } } return asgInfo; }
From source file:com.pinterest.arcee.autoscaling.AwsAutoScalingManager.java
License:Apache License
@Override public ASGStatus getAutoScalingGroupStatus(String groupName) throws Exception { AutoScalingGroup group = getAutoScalingGroup(groupName); if (group == null) { return ASGStatus.UNKNOWN; }/* w w w . ja va 2s . c o m*/ List<SuspendedProcess> suspendedProcesses = group.getSuspendedProcesses(); HashSet<String> processName = new HashSet<>(); for (SuspendedProcess process : suspendedProcesses) { processName.add(process.getProcessName()); } if (processName.contains(PROCESS_ALARMNOTIFICATION) && processName.contains(PROCESS_SCHEDULEDACTIONS)) { return ASGStatus.DISABLED; } else { return ASGStatus.ENABLED; } }
From source file:com.pinterest.arcee.autoscaling.AwsAutoScalingManager.java
License:Apache License
private boolean isScalingProcessEnabled(String groupName, String processName) throws Exception { DescribeAutoScalingGroupsRequest request = new DescribeAutoScalingGroupsRequest(); request.setAutoScalingGroupNames(Arrays.asList(groupName)); DescribeAutoScalingGroupsResult result = aasClient.describeAutoScalingGroups(request); List<AutoScalingGroup> groups = result.getAutoScalingGroups(); if (groups.isEmpty()) { return false; }/*from w w w. j av a 2 s .com*/ AutoScalingGroup group = groups.get(0); List<SuspendedProcess> suspendedProcesses = group.getSuspendedProcesses(); for (SuspendedProcess process : suspendedProcesses) { if (process.getProcessName().equals(processName)) { return false; } } return true; }