use of com.vmware.photon.controller.model.adapterapi.RegionEnumerationResponse.RegionInfo in project photon-model by vmware.
the class AWSRegionEnumerationAdapterService method handlePost.
@Override
public void handlePost(Operation post) {
List<RegionInfo> regions = Arrays.stream(Regions.values()).map(r -> new RegionInfo(r.getName(), r.getName())).collect(Collectors.toList());
RegionEnumerationResponse result = new RegionEnumerationResponse();
result.regions = regions;
post.setBody(result);
post.complete();
}
use of com.vmware.photon.controller.model.adapterapi.RegionEnumerationResponse.RegionInfo in project photon-model by vmware.
the class AzureComputeEnumerationAdapterService method queryForComputeStates.
/**
* Query all compute states for the cluster filtered by the received set of instance Ids.
*/
private void queryForComputeStates(EnumerationContext ctx, ComputeEnumerationSubStages next) {
if (ctx.virtualMachines.isEmpty() && ctx.regions.isEmpty()) {
ctx.subStage = ComputeEnumerationSubStages.DISASSOCIATE_COMPUTE_STATES;
handleSubStage(ctx);
return;
}
Query.Builder qBuilder = Query.Builder.create().addKindFieldClause(ComputeState.class).addFieldClause(ComputeState.FIELD_NAME_PARENT_LINK, ctx.request.resourceLink());
Query.Builder instanceIdFilterParentQuery = Query.Builder.create(Occurance.MUST_OCCUR);
for (String instanceId : ctx.virtualMachines.keySet()) {
Query instanceIdFilter = Query.Builder.create(Occurance.SHOULD_OCCUR).addFieldClause(ComputeState.FIELD_NAME_ID, instanceId).build();
instanceIdFilterParentQuery.addClause(instanceIdFilter);
}
// also get compute states representing regions
for (RegionInfo region : ctx.regions.values()) {
Query instanceIdFilter = Query.Builder.create(Occurance.SHOULD_OCCUR).addFieldClause(ComputeState.FIELD_NAME_ID, region.regionId).build();
instanceIdFilterParentQuery.addClause(instanceIdFilter);
}
qBuilder.addClause(instanceIdFilterParentQuery.build());
QueryByPages<ComputeState> queryLocalStates = new QueryByPages<>(getHost(), qBuilder.build(), ComputeState.class, ctx.parentCompute.tenantLinks, // endpointLink
null, ctx.parentCompute.documentSelfLink).setMaxPageSize(QueryUtils.MAX_RESULT_LIMIT).setClusterType(ServiceTypeCluster.INVENTORY_SERVICE);
queryLocalStates.queryDocuments(c -> ctx.computeStates.put(c.id, c)).whenComplete(thenHandleSubStage(ctx, next));
}
use of com.vmware.photon.controller.model.adapterapi.RegionEnumerationResponse.RegionInfo 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);
}
use of com.vmware.photon.controller.model.adapterapi.RegionEnumerationResponse.RegionInfo in project photon-model by vmware.
the class AzureRegionEnumerationAdapterService method handlePost.
@Override
public void handlePost(Operation post) {
if (!post.hasBody()) {
post.fail(new IllegalArgumentException("body is required"));
return;
}
Context ctx = new Context(this, post.getBody(EndpointState.class));
DeferredResult.completed(ctx).thenCompose(ctx::getAuthentication).thenCompose(ctx::getAzureClient).thenCompose(ctx::getAzureLocations).whenComplete((ignoreCtx, t) -> {
try {
if (t != null) {
post.fail(t);
return;
}
RegionEnumerationResponse result = new RegionEnumerationResponse();
result.regions = ctx.azureLocations.stream().map(loc -> new RegionInfo(loc.displayName(), loc.name())).collect(Collectors.toList());
post.setBodyNoCloning(result).complete();
} finally {
ctx.close();
}
});
}
Aggregations