use of com.sequenceiq.cloudbreak.cloud.model.CloudResource in project cloudbreak by hortonworks.
the class YarnResourceConnector method launch.
@Override
public List<CloudResourceStatus> launch(AuthenticatedContext authenticatedContext, CloudStack stack, PersistenceNotifier persistenceNotifier, AdjustmentType adjustmentType, Long threshold) throws Exception {
CreateApplicationRequest createApplicationRequest = new CreateApplicationRequest();
createApplicationRequest.setName(createApplicationName(authenticatedContext));
createApplicationRequest.setQueue(stack.getParameters().getOrDefault(YarnConstants.YARN_QUEUE_PARAMETER, defaultQueue));
String lifeTimeStr = stack.getParameters().get(YarnConstants.YARN_LIFETIME_PARAMETER);
createApplicationRequest.setLifetime(lifeTimeStr != null ? Integer.parseInt(lifeTimeStr) : defaultLifeTime);
Artifact artifact = new Artifact();
artifact.setId(stack.getImage().getImageName());
artifact.setType("DOCKER");
List<YarnComponent> components = new ArrayList<>();
for (Group group : stack.getGroups()) {
YarnComponent component = new YarnComponent();
component.setName(group.getName());
component.setNumberOfContainers(group.getInstancesSize());
String userData = stack.getImage().getUserDataByType(group.getType());
component.setLaunchCommand(String.format("/bootstrap/start-systemd '%s' '%s' '%s'", Base64.getEncoder().encodeToString(userData.getBytes()), stack.getLoginUserName(), stack.getPublicKey()));
component.setArtifact(artifact);
component.setDependencies(new ArrayList<>());
InstanceTemplate instanceTemplate = group.getReferenceInstanceConfiguration().getTemplate();
Resource resource = new Resource();
resource.setCpus(instanceTemplate.getParameter(PlatformParametersConsts.CUSTOM_INSTANCETYPE_CPUS, Integer.class));
resource.setMemory(instanceTemplate.getParameter(PlatformParametersConsts.CUSTOM_INSTANCETYPE_MEMORY, Integer.class));
component.setResource(resource);
component.setRunPrivilegedContainer(true);
Configuration configuration = new Configuration();
Map<String, String> propsMap = Maps.newHashMap();
propsMap.put("conf.cb-conf.per.component", "true");
propsMap.put("site.cb-conf.userData", '\'' + Base64.getEncoder().encodeToString(userData.getBytes()) + '\'');
propsMap.put("site.cb-conf.sshUser", '\'' + stack.getLoginUserName() + '\'');
propsMap.put("site.cb-conf.groupname", '\'' + group.getName() + '\'');
propsMap.put("site.cb-conf.sshPubKey", '\'' + stack.getPublicKey() + '\'');
configuration.setProperties(propsMap);
ConfigFile configFileProps = new ConfigFile();
configFileProps.setType(ConfigFileType.PROPERTIES.name());
configFileProps.setSrcFile("cb-conf");
configFileProps.setDestFile("/etc/cloudbreak-config.props");
configuration.setFiles(Collections.singletonList(configFileProps));
component.setConfiguration(configuration);
components.add(component);
}
createApplicationRequest.setComponents(components);
CloudResource yarnApplication = new Builder().type(YARN_APPLICATION).name(createApplicationRequest.getName()).build();
persistenceNotifier.notifyAllocation(yarnApplication, authenticatedContext.getCloudContext());
YarnClient yarnClient = yarnClientUtil.createYarnClient(authenticatedContext);
ResponseContext responseContext = yarnClient.createApplication(createApplicationRequest);
if (responseContext.getResponseError() != null) {
ApplicationErrorResponse applicationErrorResponse = responseContext.getResponseError();
throw new CloudConnectorException(String.format("Yarn Application creation error: HTTP Return: %d Error: %s", responseContext.getStatusCode(), applicationErrorResponse.getDiagnostics()));
}
return check(authenticatedContext, Collections.singletonList(yarnApplication));
}
use of com.sequenceiq.cloudbreak.cloud.model.CloudResource in project cloudbreak by hortonworks.
the class CloudResourceToResourceConverter method convert.
@Override
public Resource convert(CloudResource source) {
Resource domainResource = new Resource();
domainResource.setResourceType(source.getType());
domainResource.setResourceName(source.getName());
domainResource.setResourceReference(source.getReference());
domainResource.setResourceStatus(source.getStatus());
domainResource.setInstanceGroup(source.getGroup());
return domainResource;
}
use of com.sequenceiq.cloudbreak.cloud.model.CloudResource in project cloudbreak by hortonworks.
the class ServiceProviderConnectorAdapter method deleteStack.
public void deleteStack(Stack stack, Credential credential) {
LOGGER.debug("Assembling terminate 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());
CloudStack cloudStack = cloudStackConverter.convert(stack);
TerminateStackRequest<TerminateStackResult> terminateRequest = new TerminateStackRequest<>(cloudContext, cloudStack, cloudCredential, resources);
LOGGER.info("Triggering terminate stack event: {}", terminateRequest);
eventBus.notify(terminateRequest.selector(), eventFactory.createEvent(terminateRequest));
try {
TerminateStackResult res = terminateRequest.await();
LOGGER.info("Terminate stack result: {}", res);
if (res.getStatus().equals(EventStatus.FAILED)) {
if (res.getErrorDetails() != null) {
LOGGER.error("Failed to terminate the stack", res.getErrorDetails());
throw new OperationException(res.getErrorDetails());
}
throw new OperationException(format("Failed to terminate the stack: %s due to %s", cloudContext, res.getStatusReason()));
}
} catch (InterruptedException e) {
LOGGER.error("Error while terminating the stack", e);
throw new OperationException(e);
}
}
use of com.sequenceiq.cloudbreak.cloud.model.CloudResource in project cloudbreak by hortonworks.
the class ServiceProviderMetadataAdapter method collectMetadata.
public List<CloudVmMetaDataStatus> collectMetadata(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<CloudInstance> cloudInstances = cloudStackConverter.buildInstances(stack);
List<CloudResource> cloudResources = cloudResourceConverter.convert(stack.getResources());
CollectMetadataRequest cmr = new CollectMetadataRequest(cloudContext, cloudCredential, cloudResources, cloudInstances);
LOGGER.info("Triggering event: {}", cmr);
eventBus.notify(CloudPlatformRequest.selector(CollectMetadataRequest.class), eventFactory.createEvent(cmr));
try {
CollectMetadataResult res = cmr.await();
LOGGER.info("Result: {}", res);
if (res.getErrorDetails() != null) {
LOGGER.error("Failed to collect metadata", res.getErrorDetails());
return Collections.emptyList();
}
return res.getResults();
} catch (InterruptedException e) {
LOGGER.error(format("Error while executing collectMetadata, stack: %s", cloudContext), e);
throw new OperationException(e);
}
}
use of com.sequenceiq.cloudbreak.cloud.model.CloudResource in project cloudbreak by hortonworks.
the class CloudResourcePersisterService method delete.
@Override
public ResourceNotification delete(ResourceNotification notification) {
LOGGER.debug("Resource deletion notification received: {}", notification);
Long stackId = notification.getCloudContext().getId();
CloudResource cloudResource = notification.getCloudResource();
ResourceRepository repository = getResourceRepository();
Resource resource = repository.findByStackIdAndNameAndType(stackId, cloudResource.getName(), cloudResource.getType());
if (resource != null) {
repository.delete(resource);
}
return notification;
}
Aggregations