int hashCode = 1; hashCode = prime * hashCode + ((getAutoScalingGroupName() == null) ? 0 : getAutoScalingGroupName().hashCode()); hashCode = prime * hashCode + ((getAutoScalingGroupARN() == null) ? 0 : getAutoScalingGroupARN().hashCode()); hashCode = prime * hashCode + ((getLaunchConfigurationName() == null) ? 0 : getLaunchConfigurationName().hashCode()); hashCode = prime * hashCode + ((getLaunchTemplate() == null) ? 0 : getLaunchTemplate().hashCode()); hashCode = prime * hashCode + ((getMixedInstancesPolicy() == null) ? 0 : getMixedInstancesPolicy().hashCode()); hashCode = prime * hashCode + ((getMinSize() == null) ? 0 : getMinSize().hashCode()); hashCode = prime * hashCode + ((getMaxSize() == null) ? 0 : getMaxSize().hashCode()); hashCode = prime * hashCode + ((getDesiredCapacity() == null) ? 0 : getDesiredCapacity().hashCode()); hashCode = prime * hashCode + ((getDefaultCooldown() == null) ? 0 : getDefaultCooldown().hashCode()); hashCode = prime * hashCode + ((getAvailabilityZones() == null) ? 0 : getAvailabilityZones().hashCode()); hashCode = prime * hashCode + ((getLoadBalancerNames() == null) ? 0 : getLoadBalancerNames().hashCode()); hashCode = prime * hashCode + ((getTargetGroupARNs() == null) ? 0 : getTargetGroupARNs().hashCode()); hashCode = prime * hashCode + ((getHealthCheckType() == null) ? 0 : getHealthCheckType().hashCode()); hashCode = prime * hashCode + ((getHealthCheckGracePeriod() == null) ? 0 : getHealthCheckGracePeriod().hashCode()); hashCode = prime * hashCode + ((getInstances() == null) ? 0 : getInstances().hashCode()); hashCode = prime * hashCode + ((getCreatedTime() == null) ? 0 : getCreatedTime().hashCode()); hashCode = prime * hashCode + ((getSuspendedProcesses() == null) ? 0 : getSuspendedProcesses().hashCode()); hashCode = prime * hashCode + ((getPlacementGroup() == null) ? 0 : getPlacementGroup().hashCode()); hashCode = prime * hashCode + ((getVPCZoneIdentifier() == null) ? 0 : getVPCZoneIdentifier().hashCode()); hashCode = prime * hashCode + ((getEnabledMetrics() == null) ? 0 : getEnabledMetrics().hashCode()); hashCode = prime * hashCode + ((getStatus() == null) ? 0 : getStatus().hashCode()); hashCode = prime * hashCode + ((getTags() == null) ? 0 : getTags().hashCode()); hashCode = prime * hashCode + ((getTerminationPolicies() == null) ? 0 : getTerminationPolicies().hashCode()); hashCode = prime * hashCode + ((getNewInstancesProtectedFromScaleIn() == null) ? 0 : getNewInstancesProtectedFromScaleIn().hashCode()); hashCode = prime * hashCode + ((getServiceLinkedRoleARN() == null) ? 0 : getServiceLinkedRoleARN().hashCode()); return hashCode;
Optional<AutoScalingGroup> workersAsg = Optional.absent(); for (TagDescription tagDescription : autoScalingGroups.get(0).getTags()) { LOGGER.info("Found tag: " + tagDescription); if (tagDescription.getKey().equalsIgnoreCase(CLUSTER_ID_ASG_TAG)) { this.masterAutoScalingGroupName = masterAsg.get().getAutoScalingGroupName(); this.masterLaunchConfigName = masterAsg.get().getLaunchConfigurationName(); this.workerAutoScalingGroupName = workersAsg.get().getAutoScalingGroupName(); this.workerLaunchConfigName = workersAsg.get().getLaunchConfigurationName();
@Override public void expandRacMembership(int count) { AmazonAutoScaling client = null; try { client = getAutoScalingClient(); DescribeAutoScalingGroupsRequest asgReq = new DescribeAutoScalingGroupsRequest() .withAutoScalingGroupNames(instanceInfo.getAutoScalingGroup()); DescribeAutoScalingGroupsResult res = client.describeAutoScalingGroups(asgReq); AutoScalingGroup asg = res.getAutoScalingGroups().get(0); UpdateAutoScalingGroupRequest ureq = new UpdateAutoScalingGroupRequest(); ureq.setAutoScalingGroupName(asg.getAutoScalingGroupName()); ureq.setMinSize(asg.getMinSize() + 1); ureq.setMaxSize(asg.getMinSize() + 1); ureq.setDesiredCapacity(asg.getMinSize() + 1); client.updateAutoScalingGroup(ureq); } finally { if (client != null) client.shutdown(); } }
for (Instance ins : asg.getInstances()) if (!(ins.getLifecycleState().equalsIgnoreCase("Terminating") || ins.getLifecycleState().equalsIgnoreCase("shutting-down")
String instanceId = "Your-InstanceId"; AmazonAutoScalingClient amazonAutoScalingClient = new AmazonAutoScalingClient(new BasicAWSCredentials(accessKey, secretKey)); DescribeAutoScalingGroupsResult describeAutoScalingGroupsResult = amazonAutoScalingClient.describeAutoScalingGroups(); for(AutoScalingGroup autoScalingGroup : describeAutoScalingGroupsResult.getAutoScalingGroups()) { for(Instance instance : autoScalingGroup.getInstances()) { if(instance.getInstanceId().equals(instanceId)) { return autoScalingGroup.getAutoScalingGroupName(); } } }
LaunchConfiguration launchConfig = asgService.getLaunchConfiguration(sourceGroup.getLaunchConfigurationName()); throw new IllegalStateException("Could not find launch config: " + sourceGroup.getLaunchConfigurationName()); 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());
private void checkSuspendedProcesses(AutoScalingGroup asg) throws ECSException { if (asg.getSuspendedProcesses() == null || !asg.getSuspendedProcesses().stream() .map((SuspendedProcess t) -> t.getProcessName()) //it's a pity aws lib doesn't have these as constants or enums .filter((String t) -> "AZRebalance".equals(t)) .findAny().isPresent()) { schedulerBackend.suspendProcess(asg.getAutoScalingGroupName(), "AZRebalance"); } }
if (!autoScalingGroup.getLoadBalancerNames().isEmpty() || !autoScalingGroup.getTargetGroupARNs().isEmpty()) { event.getTask().updateStatus( PHASE, List<LifecycleHook> existingLifecycleHooks = fetchTerminatingLifecycleHooks( event.getAmazonAutoScaling(), autoScalingGroup.getAutoScalingGroupName() ); if (!existingLifecycleHooks.isEmpty()) { log.error( "Unable to fetch lifecycle hooks (serverGroupName: {}, arn: {})", autoScalingGroup.getAutoScalingGroupName(), autoScalingGroup.getAutoScalingGroupARN(),
public boolean shouldAddExtraInstance(AutoScalingGroup autoScalingGroup) { return autoScalingGroup.getInstances().size() < autoScalingGroup.getMaxSize() && !(activeConfiguration.getMaxCapacity() != -1 && autoScalingGroup.getInstances().size() > activeConfiguration.getMaxCapacity()); }
|| !activeConfiguration.useElbStatusCheck() && asGroup.getInstances().stream().noneMatch(i -> "InService".equals(i.getLifecycleState()))) { activeConfiguration.setDeployStrategy(DeployStrategyType.WHATEVER); log.info("No instances inService, using deploy strategy " + DeployStrategyType.WHATEVER); WaitForInstanceRequestExecutor.InstanceStatus instanceStatus = newInstance -> !asGroup.getLoadBalancerNames().isEmpty() && awsDeployUtils.checkInstanceInServiceOnAllElb(newInstance, asGroup.getLoadBalancerNames()); awsDeployUtils.setDesiredCapacity(asGroup, asGroup.getDesiredCapacity() + 1); WaitForInstanceRequestExecutor waitForDeployedInstanceRequestExecutor = new WaitForInstanceRequestExecutor(log, 10); waitForDeployedInstanceRequestExecutor.executeRequest(asGroup, awsDeployUtils, instanceStatus); asGroup.getLoadBalancerNames().forEach(elbName -> awsDeployUtils.enableStickiness(elbName, activeConfiguration.getStickyPorts()));
String getASGName() { return asg.getAutoScalingGroupName(); } }
public void preDeploy(List<Ec2Instance> instances, AutoScalingGroup asGroup) throws MojoFailureException, MojoExecutionException { if (asGroup.getInstances().isEmpty()) { log.info("No instances found in autoscaling group, spinning new instance"); WaitForInstanceRequestExecutor.InstanceStatus instanceStatus = newInstance -> awsDeployUtils.checkInstanceInService(newInstance.getInstanceId()); awsDeployUtils.setDesiredCapacity(asGroup, asGroup.getDesiredCapacity() + 1); WaitForInstanceRequestExecutor waitForDeployedInstanceRequestExecutor = new WaitForInstanceRequestExecutor(log, 10); waitForDeployedInstanceRequestExecutor.executeRequest(asGroup, awsDeployUtils, instanceStatus); instances.addAll(awsDeployUtils.getInstancesForAutoScalingGroup(log, awsDeployUtils.getAutoScalingGroup())); } }
if (autoScalingGroup.getInstances().isEmpty()) { return new ArrayList<>(); Map<String, Instance> instanceMap = autoScalingGroup.getInstances().stream().collect(Collectors.toMap(Instance::getInstanceId, Function.identity())); DescribeInstancesResult instancesResult = awsEc2Client.describeInstances(new DescribeInstancesRequest().withInstanceIds(autoScalingGroup.getInstances().stream().map(Instance::getInstanceId).collect(Collectors.toList()))); List<Ec2Instance> ec2Instances = instancesResult.getReservations().stream().flatMap(r -> r.getInstances().stream()).map(this::toEc2Instance).collect(Collectors.toList()); log.debug("describing elb status"); autoScalingGroup.getLoadBalancerNames().forEach(elb -> this.updateInstancesStateOnLoadBalancer(elb, ec2Instances)); ec2Instances.forEach(i -> i.updateAsState(AwsState.map(instanceMap.get(i.getInstanceId()).getLifecycleState()))); ec2Instances.sort((o1, o2) -> {
final int originalDesiredCapacity = asGroup.getDesiredCapacity(); Integer originalMinSize = asGroup.getMinSize(); if (asGroup.getMinSize() >= asGroup.getDesiredCapacity()) { awsDeployUtils.setMinimalCapacity(asGroup.getDesiredCapacity() <= 0 ? 0 : asGroup.getDesiredCapacity() - 1); metrics.startTimer(); for (Ec2Instance instance : instances) { awsDeployUtils.updateInstanceState(instance, asGroup.getLoadBalancerNames()); if (!DeployStateStrategyFactory.isDeployable(activeConfiguration, asGroup, instances)) { awsDeployUtils.resumeScheduledActions(); } catch (MojoExecutionException | MojoFailureException e) { getLog().error("Error during deploy. Resuming auto scaling processes.", e); awsDeployUtils.updateInstanceState(instance, asGroup.getLoadBalancerNames()); if (!DeployStateStrategyFactory.isDeployableOnError(activeConfiguration, asGroup, instances)) { awsDeployUtils.resumeScheduledActions();
/** Actual membership AWS source of truth... */ @Override public int getRacMembershipSize() { AmazonAutoScaling client = null; try { client = getAutoScalingClient(); DescribeAutoScalingGroupsRequest asgReq = new DescribeAutoScalingGroupsRequest() .withAutoScalingGroupNames(instanceInfo.getAutoScalingGroup()); DescribeAutoScalingGroupsResult res = client.describeAutoScalingGroups(asgReq); int size = 0; for (AutoScalingGroup asg : res.getAutoScalingGroups()) { size += asg.getMaxSize(); } logger.info("Query on ASG returning {} instances", size); return size; } finally { if (client != null) client.shutdown(); } }
desiredScaleSize = Math.min(desiredScaleSize, hosts.getASG().getMaxSize()); if (desiredScaleSize > currentSize && desiredScaleSize > hosts.getASG().getDesiredCapacity()) {
/** * Checks if the load balancer addition is disabled or not. * * @param asg * - 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; }
/*** * Get list of {@link AutoScalingGroup}s for a given tag * * @param tag Tag to filter the auto scaling groups * @return List of {@link AutoScalingGroup}s qualifying the filter tag */ public List<AutoScalingGroup> getAutoScalingGroupsWithTag(Tag tag) { final AmazonAutoScaling autoScaling = getAmazonAutoScalingClient(); final DescribeAutoScalingGroupsRequest describeAutoScalingGroupsRequest = new DescribeAutoScalingGroupsRequest(); final List<AutoScalingGroup> allAutoScalingGroups = autoScaling .describeAutoScalingGroups(describeAutoScalingGroupsRequest) .getAutoScalingGroups(); final List<AutoScalingGroup> filteredAutoScalingGroups = Lists.newArrayList(); for (AutoScalingGroup autoScalingGroup : allAutoScalingGroups) { for (TagDescription tagDescription : autoScalingGroup.getTags()) { if (tagDescription.getKey().equalsIgnoreCase(tag.getKey()) && tagDescription.getValue().equalsIgnoreCase(tag.getValue())) { filteredAutoScalingGroups.add(autoScalingGroup); } } } return filteredAutoScalingGroups; }
/** * <p> * One or more load balancers associated with the group. * </p> * <p> * Returns a reference to this object so that method calls can be chained * together. * * @param loadBalancerNames <p> * One or more load balancers associated with the group. * </p> * @return A reference to this updated object so that method calls can be * chained together. */ public AutoScalingGroup withLoadBalancerNames(String... loadBalancerNames) { if (getLoadBalancerNames() == null) { this.loadBalancerNames = new java.util.ArrayList<String>(loadBalancerNames.length); } for (String value : loadBalancerNames) { this.loadBalancerNames.add(value); } return this; }
describeResult = asgClient.describeAutoScalingGroups(new DescribeAutoScalingGroupsRequest().withNextToken(nextToken).withMaxRecords(asgMaxRecord)); for(AutoScalingGroup _asg : describeResult.getAutoScalingGroups()) { launchConfigurationNames.add(_asg.getLaunchConfigurationName());