use of com.amazonaws.services.cloudformation.model.DescribeStackResourceResult in project cloudbreak by hortonworks.
the class CloudFormationStackUtil method getAutoscalingGroupName.
public String getAutoscalingGroupName(AuthenticatedContext ac, AmazonCloudFormation amazonCFClient, String instanceGroup) {
String cFStackName = getCfStackName(ac);
DescribeStackResourceResult asGroupResource = amazonCFClient.describeStackResource(new DescribeStackResourceRequest().withStackName(cFStackName).withLogicalResourceId(String.format("AmbariNodes%s", instanceGroup.replaceAll("_", ""))));
return asGroupResource.getStackResourceDetail().getPhysicalResourceId();
}
use of com.amazonaws.services.cloudformation.model.DescribeStackResourceResult in project cloudbreak by hortonworks.
the class AwsRepairTest method downscaleStack.
private void downscaleStack() throws IOException {
when(amazonEC2Client.describeVolumes(any())).thenReturn(new DescribeVolumesResult().withVolumes(new com.amazonaws.services.ec2.model.Volume().withVolumeId(VOLUME_ID_1).withState(VolumeState.InUse), new com.amazonaws.services.ec2.model.Volume().withVolumeId(VOLUME_ID_2).withState(VolumeState.InUse)));
when(amazonCloudFormationClient.describeStackResource(any())).thenReturn(new DescribeStackResourceResult().withStackResourceDetail(new StackResourceDetail().withPhysicalResourceId(AUTOSCALING_GROUP_NAME)));
when(amazonEC2Client.describeInstances(any(DescribeInstancesRequest.class))).thenAnswer(a -> {
DescribeInstancesRequest request = a.getArgument(0, DescribeInstancesRequest.class);
List<com.amazonaws.services.ec2.model.Instance> instances = request.getInstanceIds().stream().map(i -> new com.amazonaws.services.ec2.model.Instance().withInstanceId(i)).collect(Collectors.toList());
return new DescribeInstancesResult().withReservations(new Reservation().withInstances(instances));
});
AmazonEC2Waiters mockWaiter = mock(AmazonEC2Waiters.class);
when(amazonEC2Client.waiters()).thenReturn(mockWaiter);
when(mockWaiter.instanceTerminated()).thenReturn(mock(Waiter.class));
DescribeAutoScalingGroupsResult describeAutoScalingGroupsResult = new DescribeAutoScalingGroupsResult();
AutoScalingGroup autoScalingGroup = new AutoScalingGroup();
autoScalingGroup.setInstances(List.of(new Instance().withInstanceId(INSTANCE_ID_1), new Instance().withInstanceId(INSTANCE_ID_2), new Instance().withInstanceId(INSTANCE_ID_3)));
describeAutoScalingGroupsResult.setAutoScalingGroups(List.of(autoScalingGroup));
when(amazonAutoScalingClient.describeAutoScalingGroups(any())).thenReturn(describeAutoScalingGroupsResult);
List<Volume> volumes = List.of();
InstanceTemplate instanceTemplate = new InstanceTemplate("", WORKER_GROUP, 0L, volumes, InstanceStatus.STARTED, Map.of(), 0L, IMAGE_ID, TemporaryStorage.ATTACHED_VOLUMES, 0L);
InstanceAuthentication authentication = new InstanceAuthentication("publicKey", "publicKeyId", "cloudbreak");
CloudInstance firstCloudInstance = new CloudInstance(INSTANCE_ID_1, instanceTemplate, authentication, "subnet-1", "az1");
CloudInstance secondCloudInstance = new CloudInstance(INSTANCE_ID_2, instanceTemplate, authentication, "subnet-1", "az1");
List<CloudInstance> cloudInstancesToRemove = List.of(firstCloudInstance, secondCloudInstance);
CloudResource instance1VolumeResource = createVolumeResource(VOLUME_ID_1, INSTANCE_ID_1, SIZE_DISK_1, FSTAB_1, CommonStatus.CREATED);
CloudResource instance2VolumeResource = createVolumeResource(VOLUME_ID_2, INSTANCE_ID_2, SIZE_DISK_2, FSTAB_2, CommonStatus.CREATED);
List<CloudResource> resources = List.of(instance1VolumeResource, instance2VolumeResource);
AuthenticatedContext authenticatedContext = componentTestUtil.getAuthenticatedContext();
CloudStack cloudStack = componentTestUtil.getStack(InstanceStatus.DELETE_REQUESTED, InstanceStatus.CREATE_REQUESTED);
underTest.downscale(authenticatedContext, cloudStack, resources, cloudInstancesToRemove, null);
verify(persistenceNotifier).notifyUpdate(argThat(cloudResource -> ResourceType.AWS_VOLUMESET.equals(cloudResource.getType()) && VOLUME_ID_1.equals(cloudResource.getName()) && INSTANCE_ID_1.equals(cloudResource.getInstanceId()) && CommonStatus.DETACHED.equals(cloudResource.getStatus()) && cloudResource.getParameter(CloudResource.ATTRIBUTES, VolumeSetAttributes.class).getDeleteOnTermination()), eq(authenticatedContext.getCloudContext()));
verify(persistenceNotifier).notifyUpdate(argThat(cloudResource -> ResourceType.AWS_VOLUMESET.equals(cloudResource.getType()) && VOLUME_ID_2.equals(cloudResource.getName()) && INSTANCE_ID_2.equals(cloudResource.getInstanceId()) && CommonStatus.DETACHED.equals(cloudResource.getStatus()) && cloudResource.getParameter(CloudResource.ATTRIBUTES, VolumeSetAttributes.class).getDeleteOnTermination()), eq(authenticatedContext.getCloudContext()));
verify(amazonAutoScalingClient).detachInstances(argThat(argument -> argument.getAutoScalingGroupName().equals(AUTOSCALING_GROUP_NAME) && argument.getShouldDecrementDesiredCapacity() && argument.getInstanceIds().size() == 2 && argument.getInstanceIds().contains(INSTANCE_ID_1) && argument.getInstanceIds().contains(INSTANCE_ID_2)));
verify(amazonEC2Client).terminateInstances(argThat(argument -> argument.getInstanceIds().size() == 2 && argument.getInstanceIds().contains(INSTANCE_ID_1) && argument.getInstanceIds().contains(INSTANCE_ID_2)));
verify(amazonAutoScalingClient).updateAutoScalingGroup(argThat(argument -> argument.getAutoScalingGroupName().equals(AUTOSCALING_GROUP_NAME) && argument.getMaxSize().equals(1)));
}
use of com.amazonaws.services.cloudformation.model.DescribeStackResourceResult in project cloudbreak by hortonworks.
the class AwsLaunchTest method setupDescribeStackResourceResponse.
private void setupDescribeStackResourceResponse() {
StackResourceDetail stackResourceDetail = new StackResourceDetail().withPhysicalResourceId(AUTOSCALING_GROUP_NAME);
DescribeStackResourceResult describeStackResourceResult = new DescribeStackResourceResult().withStackResourceDetail(stackResourceDetail);
when(amazonCloudFormationClient.describeStackResource(any())).thenReturn(describeStackResourceResult);
}
use of com.amazonaws.services.cloudformation.model.DescribeStackResourceResult in project cloudbreak by hortonworks.
the class AwsRepairTest method upscaleStack.
private void upscaleStack() throws Exception {
AuthenticatedContext authenticatedContext = componentTestUtil.getAuthenticatedContext();
CloudStack stack = componentTestUtil.getStack(InstanceStatus.CREATE_REQUESTED, InstanceStatus.STARTED);
List<CloudResource> cloudResources = List.of(CloudResource.builder().name(AWS_SUBNET_ID).type(ResourceType.AWS_SUBNET).build(), createVolumeResource(VOLUME_ID_1, INSTANCE_ID_1, SIZE_DISK_1, FSTAB_1, CommonStatus.DETACHED), createVolumeResource(VOLUME_ID_2, INSTANCE_ID_2, SIZE_DISK_2, FSTAB_2, CommonStatus.DETACHED), createVolumeResource(VOLUME_ID_3, INSTANCE_ID_3, SIZE_DISK_2, FSTAB_2, CommonStatus.CREATED));
InMemoryStateStore.putStack(1L, PollGroup.POLLABLE);
when(amazonCloudFormationClient.describeStackResource(any())).thenReturn(new DescribeStackResourceResult().withStackResourceDetail(new StackResourceDetail().withPhysicalResourceId(AUTOSCALING_GROUP_NAME)));
when(amazonAutoScalingClient.describeAutoScalingGroups(any())).thenReturn(new DescribeAutoScalingGroupsResult().withAutoScalingGroups(new AutoScalingGroup().withAutoScalingGroupName(AUTOSCALING_GROUP_NAME).withInstances(List.of(new Instance().withInstanceId(INSTANCE_ID_1).withLifecycleState(LifecycleState.InService), new Instance().withInstanceId(INSTANCE_ID_2).withLifecycleState(LifecycleState.InService)))));
when(amazonEC2Client.describeVolumes(any())).thenReturn(new DescribeVolumesResult().withVolumes(new com.amazonaws.services.ec2.model.Volume().withVolumeId(VOLUME_ID_1).withState(VolumeState.Available), new com.amazonaws.services.ec2.model.Volume().withVolumeId(VOLUME_ID_2).withState(VolumeState.Available), new com.amazonaws.services.ec2.model.Volume().withVolumeId(VOLUME_ID_3).withState(VolumeState.InUse)));
when(amazonEC2Client.describeInstances(any())).thenReturn(new DescribeInstancesResult().withReservations(new Reservation().withInstances(new com.amazonaws.services.ec2.model.Instance().withInstanceId("i-instance"))));
DescribeScalingActivitiesResult result = new DescribeScalingActivitiesResult();
result.setActivities(List.of());
when(amazonAutoScalingClient.describeScalingActivities(any(DescribeScalingActivitiesRequest.class))).thenReturn(result);
AmazonEC2Waiters waiters = mock(AmazonEC2Waiters.class);
when(amazonEC2Client.waiters()).thenReturn(waiters);
Waiter<DescribeInstancesRequest> instanceWaiter = mock(Waiter.class);
when(waiters.instanceRunning()).thenReturn(instanceWaiter);
when(amazonAutoScalingClient.waiters()).thenReturn(asWaiters);
when(asWaiters.groupInService()).thenReturn(describeAutoScalingGroupsRequestWaiter);
underTest.upscale(authenticatedContext, stack, cloudResources, new AdjustmentTypeWithThreshold(AdjustmentType.EXACT, 0L));
verify(amazonAutoScalingClient).resumeProcesses(argThat(argument -> AUTOSCALING_GROUP_NAME.equals(argument.getAutoScalingGroupName()) && argument.getScalingProcesses().contains("Launch")));
verify(amazonAutoScalingClient).updateAutoScalingGroup(argThat(argument -> {
Group workerGroup = stack.getGroups().get(1);
return AUTOSCALING_GROUP_NAME.equals(argument.getAutoScalingGroupName()) && workerGroup.getInstancesSize().equals(argument.getMaxSize()) && workerGroup.getInstancesSize().equals(argument.getDesiredCapacity());
}));
verify(amazonAutoScalingClient, times(stack.getGroups().size())).suspendProcesses(argThat(argument -> AUTOSCALING_GROUP_NAME.equals(argument.getAutoScalingGroupName()) && SUSPENDED_PROCESSES.equals(argument.getScalingProcesses())));
ArgumentCaptor<CloudResource> updatedCloudResourceArgumentCaptor = ArgumentCaptor.forClass(CloudResource.class);
verify(resourceNotifier, times(2)).notifyUpdate(updatedCloudResourceArgumentCaptor.capture(), any());
assertVolumeResource(updatedCloudResourceArgumentCaptor.getAllValues(), INSTANCE_ID_1, SIZE_DISK_1, FSTAB_1);
assertVolumeResource(updatedCloudResourceArgumentCaptor.getAllValues(), INSTANCE_ID_2, SIZE_DISK_2, FSTAB_2);
}
use of com.amazonaws.services.cloudformation.model.DescribeStackResourceResult in project cloudbreak by hortonworks.
the class CloudFormationStackUtil method getResourceArnByLogicalId.
public String getResourceArnByLogicalId(AuthenticatedContext ac, String logicalId, String region) {
String cFStackName = getCfStackName(ac);
AmazonCloudFormationClient amazonCfClient = awsClient.createCloudFormationClient(new AwsCredentialView(ac.getCloudCredential()), region);
DescribeStackResourceResult result = amazonCfClient.describeStackResource(new DescribeStackResourceRequest().withStackName(cFStackName).withLogicalResourceId(logicalId));
return result.getStackResourceDetail().getPhysicalResourceId();
}
Aggregations