use of com.sequenceiq.cloudbreak.cloud.model.Location in project cloudbreak by hortonworks.
the class AbstractInstanceTerminationAction method createFlowContext.
@Override
protected InstanceTerminationContext createFlowContext(String flowId, StateContext<InstanceTerminationState, InstanceTerminationEvent> stateContext, P payload) {
Stack stack = stackService.getByIdWithLists(payload.getStackId());
MDCBuilder.buildMdcContext(stack);
Location location = location(region(stack.getRegion()), availabilityZone(stack.getAvailabilityZone()));
CloudContext cloudContext = new CloudContext(stack.getId(), stack.getName(), stack.cloudPlatform(), stack.getOwner(), stack.getPlatformVariant(), location);
CloudCredential cloudCredential = credentialConverter.convert(stack.getCredential());
Set<String> instanceIds = payload.getInstanceIds();
CloudStack cloudStack = cloudStackConverter.convert(stack, instanceIds);
List<CloudResource> cloudResources = cloudResourceConverter.convert(stack.getResources());
List<InstanceMetaData> instanceMetaDataList = new ArrayList<>();
List<CloudInstance> cloudInstances = new ArrayList<>();
for (String instanceId : instanceIds) {
InstanceMetaData instanceMetaData = instanceMetaDataRepository.findByInstanceId(stack.getId(), instanceId);
CloudInstance cloudInstance = metadataConverter.convert(instanceMetaData);
instanceMetaDataList.add(instanceMetaData);
cloudInstances.add(cloudInstance);
}
return new InstanceTerminationContext(flowId, stack, cloudContext, cloudCredential, cloudStack, cloudResources, cloudInstances, instanceMetaDataList);
}
use of com.sequenceiq.cloudbreak.cloud.model.Location in project cloudbreak by hortonworks.
the class GcpInstanceResourceBuilder method build.
@Override
public List<CloudResource> build(GcpContext context, long privateId, AuthenticatedContext auth, Group group, Image image, List<CloudResource> buildableResource, Map<String, String> customTags) throws Exception {
InstanceTemplate template = group.getReferenceInstanceConfiguration().getTemplate();
String projectId = context.getProjectId();
Location location = context.getLocation();
boolean noPublicIp = context.getNoPublicIp();
Compute compute = context.getCompute();
List<CloudResource> computeResources = context.getComputeResources(privateId);
List<AttachedDisk> listOfDisks = new ArrayList<>();
listOfDisks.addAll(getBootDiskList(computeResources, projectId, location.getAvailabilityZone()));
listOfDisks.addAll(getAttachedDisks(computeResources, projectId, location.getAvailabilityZone()));
Instance instance = new Instance();
instance.setMachineType(String.format("https://www.googleapis.com/compute/v1/projects/%s/zones/%s/machineTypes/%s", projectId, location.getAvailabilityZone().value(), template.getFlavor()));
instance.setName(buildableResource.get(0).getName());
instance.setCanIpForward(Boolean.TRUE);
instance.setNetworkInterfaces(getNetworkInterface(context.getNetworkResources(), computeResources, location.getRegion(), group, compute, projectId, noPublicIp));
instance.setDisks(listOfDisks);
Scheduling scheduling = new Scheduling();
boolean preemptible = false;
if (template.getParameter(PREEMPTIBLE, Boolean.class) != null) {
preemptible = template.getParameter(PREEMPTIBLE, Boolean.class);
}
scheduling.setPreemptible(preemptible);
instance.setScheduling(scheduling);
Tags tags = new Tags();
List<String> tagList = new ArrayList<>();
Map<String, String> labels = new HashMap<>();
String groupname = group.getName().toLowerCase().replaceAll("[^A-Za-z0-9 ]", "");
tagList.add(groupname);
Map<String, String> instanceTag = defaultCostTaggingService.prepareInstanceTagging();
for (Entry<String, String> entry : instanceTag.entrySet()) {
tagList.add(String.format("%s-%s", entry.getKey(), entry.getValue()));
labels.put(entry.getKey(), entry.getValue());
}
tagList.add(GcpStackUtil.getClusterTag(auth.getCloudContext()));
tagList.add(GcpStackUtil.getGroupClusterTag(auth.getCloudContext(), group));
customTags.forEach((key, value) -> tagList.add(key + '-' + value));
labels.putAll(customTags);
tags.setItems(tagList);
instance.setTags(tags);
instance.setLabels(labels);
Metadata metadata = new Metadata();
metadata.setItems(new ArrayList<>());
Items sshMetaData = new Items();
sshMetaData.setKey("ssh-keys");
sshMetaData.setValue(group.getInstanceAuthentication().getLoginUserName() + ':' + group.getInstanceAuthentication().getPublicKey());
Items blockProjectWideSsh = new Items();
blockProjectWideSsh.setKey("block-project-ssh-keys");
blockProjectWideSsh.setValue("TRUE");
Items startupScript = new Items();
startupScript.setKey("startup-script");
startupScript.setValue(image.getUserDataByType(group.getType()));
metadata.getItems().add(sshMetaData);
metadata.getItems().add(startupScript);
metadata.getItems().add(blockProjectWideSsh);
instance.setMetadata(metadata);
Insert insert = compute.instances().insert(projectId, location.getAvailabilityZone().value(), instance);
insert.setPrettyPrint(Boolean.TRUE);
try {
Operation operation = insert.execute();
if (operation.getHttpErrorStatusCode() != null) {
throw new GcpResourceException(operation.getHttpErrorMessage(), resourceType(), buildableResource.get(0).getName());
}
return Collections.singletonList(createOperationAwareCloudResource(buildableResource.get(0), operation));
} catch (GoogleJsonResponseException e) {
throw new GcpResourceException(checkException(e), resourceType(), buildableResource.get(0).getName());
}
}
use of com.sequenceiq.cloudbreak.cloud.model.Location in project cloudbreak by hortonworks.
the class GcpContextBuilder method contextInit.
@Override
public GcpContext contextInit(CloudContext context, AuthenticatedContext auth, Network network, List<CloudResource> resources, boolean build) {
CloudCredential credential = auth.getCloudCredential();
String projectId = GcpStackUtil.getProjectId(credential);
String serviceAccountId = GcpStackUtil.getServiceAccountId(credential);
Compute compute = GcpStackUtil.buildCompute(credential);
Location location = context.getLocation();
boolean noPublicIp = network != null ? GcpStackUtil.noPublicIp(network) : false;
return new GcpContext(context.getName(), location, projectId, serviceAccountId, compute, noPublicIp, PARALLEL_RESOURCE_REQUEST, build);
}
use of com.sequenceiq.cloudbreak.cloud.model.Location in project cloudbreak by hortonworks.
the class ServiceProviderConnectorAdapter method removeInstances.
public Set<String> removeInstances(Stack stack, Set<String> instanceIds, String instanceGroup) {
LOGGER.debug("Assembling downscale stack event for stack: {}", stack);
Location location = location(region(stack.getRegion()), availabilityZone(stack.getAvailabilityZone()));
CloudContext cloudContext = new CloudContext(stack.getId(), stack.getName(), stack.cloudPlatform(), stack.getOwner(), stack.getPlatformVariant(), location);
CloudCredential cloudCredential = credentialConverter.convert(stack.getCredential());
List<CloudResource> resources = cloudResourceConverter.convert(stack.getResources());
List<CloudInstance> instances = new ArrayList<>();
InstanceGroup group = stack.getInstanceGroupByInstanceGroupName(instanceGroup);
for (InstanceMetaData metaData : group.getAllInstanceMetaData()) {
if (instanceIds.contains(metaData.getInstanceId())) {
CloudInstance cloudInstance = metadataConverter.convert(metaData);
instances.add(cloudInstance);
}
}
CloudStack cloudStack = cloudStackConverter.convertForDownscale(stack, instanceIds);
DownscaleStackRequest downscaleRequest = new DownscaleStackRequest(cloudContext, cloudCredential, cloudStack, resources, instances);
LOGGER.info("Triggering downscale stack event: {}", downscaleRequest);
eventBus.notify(downscaleRequest.selector(), eventFactory.createEvent(downscaleRequest));
try {
DownscaleStackResult res = downscaleRequest.await();
LOGGER.info("Downscale stack result: {}", res);
if (res.getStatus().equals(EventStatus.FAILED)) {
LOGGER.error("Failed to downscale the stack", res.getErrorDetails());
throw new OperationException(res.getErrorDetails());
}
return instanceIds;
} catch (InterruptedException e) {
LOGGER.error("Error while downscaling the stack", e);
throw new OperationException(e);
}
}
use of com.sequenceiq.cloudbreak.cloud.model.Location in project cloudbreak by hortonworks.
the class ServiceProviderConnectorAdapter method checkAndGetPlatformVariant.
public Variant checkAndGetPlatformVariant(Stack stack) {
LOGGER.debug("Get platform variant for: {}", stack);
Location location = location(region(stack.getRegion()), availabilityZone(stack.getAvailabilityZone()));
CloudContext cloudContext = new CloudContext(stack.getId(), stack.getName(), stack.cloudPlatform(), stack.getOwner(), stack.getPlatformVariant(), location);
CloudCredential cloudCredential = credentialConverter.convert(stack.getCredential());
CheckPlatformVariantRequest checkPlatformVariantRequest = new CheckPlatformVariantRequest(cloudContext, cloudCredential);
eventBus.notify(checkPlatformVariantRequest.selector(), eventFactory.createEvent(checkPlatformVariantRequest));
try {
CheckPlatformVariantResult res = checkPlatformVariantRequest.await();
LOGGER.info("Platform variant result: {}", res);
if (res.getStatus().equals(EventStatus.FAILED)) {
LOGGER.error("Failed to get platform variant", res.getErrorDetails());
throw new OperationException(res.getErrorDetails());
}
return res.getDefaultPlatformVariant();
} catch (InterruptedException e) {
LOGGER.error("Error while getting the platform variant: " + cloudContext, e);
throw new OperationException(e);
}
}
Aggregations