use of com.vmware.photon.controller.model.resources.ComputeDescriptionService.ComputeDescription in project photon-model by vmware.
the class EndpointAdapterUtils method configureEndpoint.
private static void configureEndpoint(StatelessService service, EndpointConfigRequest body, BiConsumer<AuthCredentialsServiceState, Retriever> credEnhancer, BiConsumer<ComputeDescription, Retriever> descEnhancer, BiConsumer<ComputeState, Retriever> compEnhancer, BiConsumer<EndpointState, Retriever> endpointEnhancer) {
TaskManager tm = new TaskManager(service, body.taskReference, body.resourceLink());
Consumer<Throwable> onFailure = tm::patchTaskToFailure;
Consumer<Operation> onSuccess = (op) -> {
EndpointState endpoint = op.getBody(EndpointState.class);
op.complete();
AuthCredentialsServiceState authState = new AuthCredentialsServiceState();
Map<String, String> props = new HashMap<>(body.endpointProperties);
props.put(MOCK_REQUEST, String.valueOf(body.isMockRequest));
props.put(ENDPOINT_REFERENCE_URI, body.resourceReference.toString());
Retriever r = Retriever.of(props);
try {
credEnhancer.accept(authState, r);
ComputeDescription cd = new ComputeDescription();
descEnhancer.accept(cd, r);
ComputeState cs = new ComputeState();
cs.powerState = PowerState.ON;
compEnhancer.accept(cs, r);
EndpointState es = new EndpointState();
es.endpointProperties = new HashMap<>();
es.regionId = r.get(EndpointConfigRequest.REGION_KEY).orElse(null);
endpointEnhancer.accept(es, r);
Stream<Operation> operations = Stream.of(Pair.of(authState, endpoint.authCredentialsLink), Pair.of(cd, endpoint.computeDescriptionLink), Pair.of(cs, endpoint.computeLink), Pair.of(es, endpoint.documentSelfLink)).map((p) -> Operation.createPatch(createInventoryUri(service.getHost(), p.right)).setBody(p.left).setReferer(service.getUri()));
applyChanges(tm, service, endpoint, operations);
} catch (Exception e) {
tm.patchTaskToFailure(e);
}
};
AdapterUtils.getServiceState(service, body.resourceReference, onSuccess, onFailure);
}
use of com.vmware.photon.controller.model.resources.ComputeDescriptionService.ComputeDescription in project photon-model by vmware.
the class AzureUtils method constructAzureSubscriptionComputeDescription.
public static ComputeDescription constructAzureSubscriptionComputeDescription(String endpointLink, List<String> tenantLinks, String subscriptionId, String name, Map<String, String> customProperties, String parentLink) {
ComputeDescription cd = new ComputeDescription();
cd.tenantLinks = tenantLinks;
cd.endpointLink = endpointLink;
cd.computeHostLink = parentLink;
AdapterUtils.addToEndpointLinks(cd, endpointLink);
cd.name = name != null ? name : String.format(COMPUTES_NAME_FORMAT_WITH_ENTITY_ID, subscriptionId);
cd.environmentName = ComputeDescription.ENVIRONMENT_NAME_AZURE;
cd.id = UUID.randomUUID().toString();
if (customProperties == null) {
customProperties = new HashMap<>();
}
customProperties.put(EndpointAllocationTaskService.CUSTOM_PROP_ENPOINT_TYPE, EndpointType.azure.name());
cd.customProperties = customProperties;
return cd;
}
use of com.vmware.photon.controller.model.resources.ComputeDescriptionService.ComputeDescription in project photon-model by vmware.
the class AzureBaseTest method createComputeHostWithDescription.
/**
* Create Azure compute host per {@link #resourcePool} and {@link #endpointState}.
*/
protected ComputeStateWithDescription createComputeHostWithDescription() throws Throwable {
ComputeState computeHost = AzureTestUtil.createDefaultComputeHost(getHost(), this.resourcePool.documentSelfLink, this.endpointState);
this.endpointState.computeHostLink = computeHost.documentSelfLink;
this.endpointState.computeLink = computeHost.documentSelfLink;
ComputeDescription computeDescription = getServiceSynchronously(computeHost.descriptionLink, ComputeDescription.class);
computeDescription.computeHostLink = computeHost.documentSelfLink;
return ComputeStateWithDescription.create(computeDescription, computeHost);
}
use of com.vmware.photon.controller.model.resources.ComputeDescriptionService.ComputeDescription in project photon-model by vmware.
the class GCPEnumerationAdapterService method createHelper.
/**
* This helper function creates a compute state according to the corresponding
* instance on the cloud. It will also creates an auth credential and a compute
* description with it. Moreover, if there is a root disk of the instance on
* cloud, it will creates a root disk locally. Otherwise, it will create a
* default root disk with the compute state. All the creation operations will
* run in parallel. After all remote instances get created, it will jump to
* list vm stage if there is a next page of list vms. Otherwise it will jump
* to the delete stage.
* @param ctx The Enumeration Context.
* @param virtualMachine The virtual machine to be created.
* @param size The number of remaining virtual machines to be created.
*/
private void createHelper(EnumerationContext ctx, GCPInstance virtualMachine, AtomicInteger size) {
List<Operation> operations = new ArrayList<>();
// TODO VSYM-1106: refactor the creation logic here.
// Create compute description.
// Map GCP instance data to compute description.
ComputeDescription computeDescription = new ComputeDescription();
computeDescription.id = UUID.randomUUID().toString();
computeDescription.name = virtualMachine.name;
computeDescription.zoneId = virtualMachine.zone;
// TODO VSYM-1139: dynamically acquire all gcp zones, regions and mappings.
computeDescription.regionId = extractRegionFromZone(virtualMachine.zone);
computeDescription.instanceType = extractActualInstanceType(virtualMachine.machineType);
computeDescription.authCredentialsLink = ctx.parentAuth.documentSelfLink;
computeDescription.documentSelfLink = computeDescription.id;
computeDescription.environmentName = ENVIRONMENT_NAME_GCP;
computeDescription.instanceAdapterReference = UriUtils.buildUri(ServiceHost.LOCAL_HOST, this.getHost().getPort(), GCPUriPaths.GCP_INSTANCE_ADAPTER, null);
computeDescription.statsAdapterReference = UriUtils.buildUri(ServiceHost.LOCAL_HOST, this.getHost().getPort(), GCPUriPaths.GCP_STATS_ADAPTER, null);
computeDescription.tenantLinks = ctx.computeHostDesc.tenantLinks;
Operation compDescOp = Operation.createPost(getHost(), ComputeDescriptionService.FACTORY_LINK).setBody(computeDescription);
operations.add(compDescOp);
// Create root disk.
DiskService.DiskState rootDisk = new DiskService.DiskState();
rootDisk.id = UUID.randomUUID().toString();
rootDisk.documentSelfLink = rootDisk.id;
rootDisk.customProperties = new HashMap<>();
boolean foundRoot = false;
if (virtualMachine.disks != null && !virtualMachine.disks.isEmpty()) {
for (GCPDisk gcpDisk : virtualMachine.disks) {
if (gcpDisk.boot) {
foundRoot = true;
rootDisk.name = gcpDisk.deviceName;
rootDisk.customProperties.put(DISK_AUTO_DELETE, gcpDisk.autoDelete.toString());
break;
}
}
}
if (!foundRoot) {
rootDisk.name = rootDisk.id;
}
// These are required fields in disk service.
// They cannot be accessed during vm enumeration.
rootDisk.type = DiskType.HDD;
rootDisk.capacityMBytes = DEFAULT_DISK_CAPACITY;
rootDisk.sourceImageReference = URI.create(DEFAULT_DISK_SOURCE_IMAGE);
rootDisk.customizationServiceReference = URI.create(DEFAULT_DISK_SERVICE_REFERENCE);
// No matter we find root disk or not, the root disk should be booted first.
rootDisk.bootOrder = 1;
rootDisk.tenantLinks = ctx.computeHostDesc.tenantLinks;
Operation diskOp = Operation.createPost(getHost(), DiskService.FACTORY_LINK).setBody(rootDisk);
operations.add(diskOp);
List<String> vmDisks = new ArrayList<>();
vmDisks.add(UriUtils.buildUriPath(DiskService.FACTORY_LINK, rootDisk.documentSelfLink));
// Create compute state
ComputeState resource = new ComputeState();
resource.id = virtualMachine.id.toString();
resource.type = ComputeType.VM_GUEST;
resource.environmentName = ComputeDescription.ENVIRONMENT_NAME_GCP;
resource.name = virtualMachine.name;
resource.parentLink = ctx.enumRequest.resourceLink();
resource.descriptionLink = UriUtils.buildUriPath(ComputeDescriptionService.FACTORY_LINK, computeDescription.documentSelfLink);
resource.resourcePoolLink = ctx.enumRequest.resourcePoolLink;
resource.diskLinks = vmDisks;
resource.customProperties = new HashMap<>();
String osType = getNormalizedOSType(virtualMachine);
if (osType != null) {
resource.customProperties.put(CUSTOM_OS_TYPE, osType);
}
resource.tenantLinks = ctx.computeHostDesc.tenantLinks;
assignIPAddress(resource, virtualMachine);
assignPowerState(resource, virtualMachine.status);
Operation resourceOp = Operation.createPost(getHost(), ComputeService.FACTORY_LINK).setBody(resource);
operations.add(resourceOp);
OperationJoin.create(operations).setCompletion((ops, exs) -> {
if (exs != null) {
exs.values().forEach(ex -> logWarning(() -> String.format("Error: %s", ex.getMessage())));
}
if (size.decrementAndGet() == 0) {
ctx.virtualMachines.clear();
if (ctx.enumNextPageLink != null) {
ctx.subStage = EnumerationSubStages.LIST_REMOTE_VMS;
} else {
logFine(() -> "Finished creating compute states");
ctx.subStage = EnumerationSubStages.DELETE_LOCAL_VMS;
}
handleSubStage(ctx);
}
}).sendWith(this);
}
use of com.vmware.photon.controller.model.resources.ComputeDescriptionService.ComputeDescription in project photon-model by vmware.
the class VSphereResourcePoolEnumerationHelper method makeDescriptionForResourcePool.
private static ComputeDescription makeDescriptionForResourcePool(EnumerationProgress enumerationProgress, ResourcePoolOverlay rp, String rpSelfLink) {
ComputeDescription res = new ComputeDescription();
res.name = rp.getName();
res.documentSelfLink = buildUriPath(ComputeDescriptionService.FACTORY_LINK, UriUtils.getLastPathSegment(rpSelfLink));
res.totalMemoryBytes = rp.getMemoryReservationBytes();
// resource pools CPU is measured in Mhz
res.cpuCount = 0;
res.supportedChildren = Collections.singletonList(ComputeType.VM_GUEST.name());
res.endpointLink = enumerationProgress.getRequest().endpointLink;
AdapterUtils.addToEndpointLinks(res, enumerationProgress.getRequest().endpointLink);
res.instanceAdapterReference = enumerationProgress.getParent().description.instanceAdapterReference;
res.enumerationAdapterReference = enumerationProgress.getParent().description.enumerationAdapterReference;
res.statsAdapterReference = enumerationProgress.getParent().description.statsAdapterReference;
res.diskAdapterReference = enumerationProgress.getParent().description.diskAdapterReference;
res.regionId = enumerationProgress.getRegionId();
return res;
}
Aggregations