use of com.sequenceiq.cloudbreak.cloud.aws.view.AwsCloudStackView in project cloudbreak by hortonworks.
the class AwsNativeLoadBalancerLaunchService method launchLoadBalancerResources.
public List<CloudResourceStatus> launchLoadBalancerResources(AuthenticatedContext authenticatedContext, CloudStack stack, PersistenceNotifier persistenceNotifier, AmazonElasticLoadBalancingClient loadBalancingClient, boolean registerTargetGroups) {
LOGGER.debug("Creating AWS load balancer and it's resources for cloud stack: '{}'", authenticatedContext.getCloudContext().getCrn());
AwsNetworkView awsNetworkView = new AwsNetworkView(stack.getNetwork());
Map<String, List<String>> privateIdsByGroupName = stack.getGroups().stream().collect(Collectors.toMap(Group::getName, group -> group.getInstances().stream().map(in -> String.valueOf(in.getTemplate().getPrivateId())).collect(toList())));
List<AwsLoadBalancer> loadBalancers = loadBalancerCommonService.getAwsLoadBalancers(stack.getLoadBalancers(), privateIdsByGroupName, awsNetworkView);
AwsCloudStackView awsCloudStackView = new AwsCloudStackView(stack);
Long stackId = authenticatedContext.getCloudContext().getId();
String stackName = authenticatedContext.getCloudContext().getName();
Collection<Tag> tags = awsTaggingService.prepareElasticLoadBalancingTags(awsCloudStackView.getTags());
ResourceCreationContext creationContext = new ResourceCreationContext(stackId, stackName, tags, persistenceNotifier, loadBalancingClient, authenticatedContext.getCloudContext());
try {
for (AwsLoadBalancer awsLoadBalancer : loadBalancers) {
createLoadBalancer(creationContext, awsLoadBalancer);
if (registerTargetGroups) {
for (AwsListener listener : awsLoadBalancer.getListeners()) {
AwsTargetGroup targetGroup = listener.getTargetGroup();
creationContext.setTargetGroupName(resourceNameService.resourceName(ResourceType.ELASTIC_LOAD_BALANCER_TARGET_GROUP, stackName, awsLoadBalancer.getScheme().resourceName(), targetGroup.getPort()));
createTargetGroup(creationContext, awsNetworkView, targetGroup);
createListener(creationContext, listener);
registerTarget(loadBalancingClient, stackId, targetGroup);
}
}
}
} catch (Exception ex) {
String message = "Load balancer and it's resources could not be created. " + ex.getMessage();
LOGGER.warn(message, ex);
throw new CloudConnectorException(message, ex);
}
return creationContext.getResourceStatuses();
}
use of com.sequenceiq.cloudbreak.cloud.aws.view.AwsCloudStackView in project cloudbreak by hortonworks.
the class AwsNativeInstanceResourceBuilder method build.
@Override
public List<CloudResource> build(AwsContext context, CloudInstance cloudInstance, long privateId, AuthenticatedContext ac, Group group, List<CloudResource> buildableResource, CloudStack cloudStack) throws Exception {
if (buildableResource.isEmpty()) {
throw new CloudConnectorException("Buildable resources cannot be empty!");
}
AmazonEc2Client amazonEc2Client = context.getAmazonEc2Client();
InstanceTemplate instanceTemplate = group.getReferenceInstanceTemplate();
AwsCloudStackView awsCloudStackView = new AwsCloudStackView(cloudStack);
CloudResource cloudResource = buildableResource.get(0);
Optional<Instance> existedOpt = resourceByName(amazonEc2Client, cloudResource.getName());
Instance instance;
if (existedOpt.isPresent() && existedOpt.get().getState().getCode() != AWS_INSTANCE_TERMINATED_CODE) {
instance = existedOpt.get();
LOGGER.info("Instance exists with name: {} ({}), check the state: {}", cloudResource.getName(), instance.getInstanceId(), instance.getState().getName());
if (!instanceRunning(instance)) {
LOGGER.info("Instance is existing but not running, try to start: {}, {}", instance.getInstanceId(), instance.getState());
amazonEc2Client.startInstances(new StartInstancesRequest().withInstanceIds(instance.getInstanceId()));
}
} else {
LOGGER.info("Create new instance with name: {}", cloudResource.getName());
TagSpecification tagSpecification = awsTaggingService.prepareEc2TagSpecification(awsCloudStackView.getTags(), com.amazonaws.services.ec2.model.ResourceType.Instance);
String securityGroupId = getSecurityGroupId(context, group);
tagSpecification.withTags(new Tag().withKey("Name").withValue(cloudResource.getName()));
RunInstancesRequest request = new RunInstancesRequest().withInstanceType(instanceTemplate.getFlavor()).withImageId(cloudStack.getImage().getImageName()).withSubnetId(cloudInstance.getSubnetId()).withSecurityGroupIds(singletonList(securityGroupId)).withEbsOptimized(isEbsOptimized(instanceTemplate)).withTagSpecifications(tagSpecification).withIamInstanceProfile(getIamInstanceProfile(group)).withUserData(getUserData(cloudStack, group)).withMinCount(1).withMaxCount(1).withBlockDeviceMappings(blocks(group, cloudStack, ac)).withKeyName(cloudStack.getInstanceAuthentication().getPublicKeyId());
RunInstancesResult instanceResult = amazonEc2Client.createInstance(request);
instance = instanceResult.getReservation().getInstances().get(0);
LOGGER.info("Instance creation inited with name: {} and instance id: {}", cloudResource.getName(), instance.getInstanceId());
}
cloudResource.setInstanceId(instance.getInstanceId());
return buildableResource;
}
use of com.sequenceiq.cloudbreak.cloud.aws.view.AwsCloudStackView in project cloudbreak by hortonworks.
the class AwsNativeLoadBalancerLaunchService method launchLoadBalancerResources.
public List<CloudResourceStatus> launchLoadBalancerResources(AuthenticatedContext authenticatedContext, CloudStack stack, PersistenceNotifier persistenceNotifier, AmazonElasticLoadBalancingClient loadBalancingClient) {
LOGGER.debug("Creating AWS load balancer and it's resources for cloud stack: '{}'", authenticatedContext.getCloudContext().getCrn());
AwsNetworkView awsNetworkView = new AwsNetworkView(stack.getNetwork());
Map<String, List<String>> privateIdsByGroupName = stack.getGroups().stream().collect(Collectors.toMap(Group::getName, group -> group.getInstances().stream().map(in -> String.valueOf(in.getTemplate().getPrivateId())).collect(toList())));
List<AwsLoadBalancer> loadBalancers = loadBalancerCommonService.getAwsLoadBalancers(stack.getLoadBalancers(), privateIdsByGroupName, awsNetworkView);
AwsCloudStackView awsCloudStackView = new AwsCloudStackView(stack);
Long stackId = authenticatedContext.getCloudContext().getId();
String stackName = authenticatedContext.getCloudContext().getName();
Collection<Tag> tags = awsTaggingService.prepareElasticLoadBalancingTags(awsCloudStackView.getTags());
ResourceCreationContext creationContext = new ResourceCreationContext(stackId, stackName, tags, persistenceNotifier, loadBalancingClient, authenticatedContext.getCloudContext());
try {
for (AwsLoadBalancer awsLoadBalancer : loadBalancers) {
createLoadBalancer(creationContext, awsLoadBalancer);
for (AwsListener listener : awsLoadBalancer.getListeners()) {
AwsTargetGroup targetGroup = listener.getTargetGroup();
creationContext.setTargetGroupName(resourceNameService.resourceName(ResourceType.ELASTIC_LOAD_BALANCER_TARGET_GROUP, stackName, awsLoadBalancer.getScheme().resourceName(), targetGroup.getPort()));
createTargetGroup(creationContext, awsNetworkView, targetGroup);
createListener(creationContext, listener);
registerTarget(loadBalancingClient, stackId, targetGroup);
}
}
} catch (Exception ex) {
String message = "Load balancer and it's resources could not be created";
LOGGER.warn(message, ex);
throw new CloudConnectorException(message, ex);
}
return creationContext.getResourceStatuses();
}
Aggregations