use of com.vmware.photon.controller.model.resources.ComputeDescriptionService.ComputeDescription.ENVIRONMENT_NAME_AZURE in project photon-model by vmware.
the class AzureComputeEnumerationAdapterService method createComputeDescriptions.
/**
* Creates relevant resources for given VMs.
*/
private void createComputeDescriptions(EnumerationContext ctx, ComputeEnumerationSubStages next) {
if (ctx.virtualMachines.size() == 0 && ctx.regions.isEmpty()) {
// nothing to create
if (ctx.enumNextPageLink != null) {
ctx.subStage = ComputeEnumerationSubStages.LISTVMS;
handleSubStage(ctx);
return;
}
logFine(() -> "No virtual machine found for creation.");
ctx.subStage = ComputeEnumerationSubStages.PATCH_ADDITIONAL_FIELDS;
handleSubStage(ctx);
return;
}
logFine(() -> String.format("%d compute description with states to be created", ctx.virtualMachines.size()));
Iterator<Entry<String, VirtualMachineInner>> iterator = ctx.virtualMachines.entrySet().iterator();
Collection<Operation> opCollection = new ArrayList<>();
while (iterator.hasNext()) {
Entry<String, VirtualMachineInner> vmEntry = iterator.next();
VirtualMachineInner virtualMachine = vmEntry.getValue();
AuthCredentialsServiceState auth = new AuthCredentialsServiceState();
if (virtualMachine.osProfile() != null) {
auth.userEmail = virtualMachine.osProfile().adminUsername();
auth.privateKey = virtualMachine.osProfile().adminPassword();
}
auth.documentSelfLink = UUID.randomUUID().toString();
auth.tenantLinks = ctx.parentCompute.tenantLinks;
auth.customProperties = new HashMap<>();
if (ctx.request.endpointLink != null) {
auth.customProperties.put(CUSTOM_PROP_ENDPOINT_LINK, ctx.request.endpointLink);
}
String authLink = UriUtils.buildUriPath(AuthCredentialsService.FACTORY_LINK, auth.documentSelfLink);
Operation authOp = Operation.createPost(createInventoryUri(getHost(), AuthCredentialsService.FACTORY_LINK)).setBody(auth);
opCollection.add(authOp);
// TODO VSYM-631: Match existing descriptions for new VMs discovered on Azure
ComputeDescription computeDescription = new ComputeDescription();
computeDescription.id = UUID.randomUUID().toString();
computeDescription.name = virtualMachine.name();
computeDescription.regionId = virtualMachine.location();
computeDescription.authCredentialsLink = authLink;
computeDescription.endpointLink = ctx.request.endpointLink;
AdapterUtils.addToEndpointLinks(computeDescription, ctx.request.endpointLink);
computeDescription.documentSelfLink = computeDescription.id;
computeDescription.environmentName = ENVIRONMENT_NAME_AZURE;
if (virtualMachine.hardwareProfile() != null && virtualMachine.hardwareProfile().vmSize() != null) {
computeDescription.instanceType = virtualMachine.hardwareProfile().vmSize().toString();
}
computeDescription.instanceAdapterReference = ctx.parentCompute.description.instanceAdapterReference;
computeDescription.statsAdapterReference = ctx.parentCompute.description.statsAdapterReference;
computeDescription.diskAdapterReference = ctx.parentCompute.description.diskAdapterReference;
computeDescription.computeHostLink = ctx.parentCompute.documentSelfLink;
computeDescription.customProperties = new HashMap<>();
computeDescription.customProperties.put(SOURCE_TASK_LINK, ResourceEnumerationTaskService.FACTORY_LINK);
// TODO: https://jira-hzn.eng.vmware.com/browse/VSYM-1268
String resourceGroupName = getResourceGroupName(virtualMachine.id());
computeDescription.customProperties.put(AZURE_RESOURCE_GROUP_NAME, resourceGroupName);
computeDescription.tenantLinks = ctx.parentCompute.tenantLinks;
Operation compDescOp = Operation.createPost(getHost(), ComputeDescriptionService.FACTORY_LINK).setBody(computeDescription);
ctx.computeDescriptionIds.put(virtualMachine.name(), computeDescription.id);
opCollection.add(compDescOp);
}
for (RegionInfo region : ctx.regions.values()) {
ComputeDescription computeDescriptionForRegion = createComputeDescriptionForRegion(ctx, region);
Operation compDescOp = Operation.createPost(getHost(), ComputeDescriptionService.FACTORY_LINK).setBody(computeDescriptionForRegion);
ctx.computeDescriptionIds.put(region.regionId, computeDescriptionForRegion.id);
opCollection.add(compDescOp);
}
OperationJoin.create(opCollection).setCompletion((ops, exs) -> {
if (exs != null) {
exs.values().forEach(ex -> logWarning(() -> String.format("Error: %s", ex.getMessage())));
}
logFine(() -> "Continue on to updating disks.");
ctx.subStage = next;
handleSubStage(ctx);
}).sendWith(this);
}
Aggregations