use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.
the class AWSS3StorageEnumerationAdapterService method getLocalResources.
/**
* Query and get list of S3 buckets present locally in disk states in current context.
*/
private void getLocalResources(S3StorageEnumerationContext aws, S3StorageEnumerationSubStage next) {
// instance Ids. the filtering is performed on the selected resource pool.
if (aws.localResourcesNextPageLink == null) {
Query.Builder qBuilder = Query.Builder.create().addKindFieldClause(DiskState.class).addFieldClause(DiskState.FIELD_NAME_STORAGE_TYPE, STORAGE_TYPE_S3).addInClause(DiskState.FIELD_NAME_ID, aws.remoteBucketsByBucketName.keySet());
addScopeCriteria(qBuilder, aws);
QueryTask queryTask = QueryTask.Builder.createDirectTask().setQuery(qBuilder.build()).addOption(QueryOption.EXPAND_CONTENT).setResultLimit(getQueryResultLimit()).build();
queryTask.tenantLinks = aws.parentCompute.tenantLinks;
QueryUtils.startInventoryQueryTask(this, queryTask).whenComplete((qrt, e) -> {
if (e != null) {
this.logSevere(() -> String.format("Failure retrieving query" + " results: %s", e.toString()));
signalErrorToEnumerationAdapter(aws, e);
return;
}
qrt.results.documents.values().forEach(documentJson -> {
DiskState localDisk = Utils.fromJson(documentJson, DiskState.class);
aws.localDiskStatesByBucketName.put(localDisk.name, localDisk);
});
this.logFine(() -> String.format("%d S3 disk states found.", qrt.results.documentCount));
if (qrt.results.nextPageLink != null) {
this.logFine("Processing next page for local disk states.");
aws.localResourcesNextPageLink = qrt.results.nextPageLink;
handleReceivedEnumerationData(aws);
} else {
aws.subStage = next;
handleReceivedEnumerationData(aws);
}
});
} else {
Operation.createGet(createInventoryUri(this.getHost(), aws.localResourcesNextPageLink)).setReferer(this.getUri()).setCompletion((o, e) -> {
if (e != null) {
this.logSevere(() -> String.format("Failure retrieving query" + " results: %s", e.toString()));
signalErrorToEnumerationAdapter(aws, e);
return;
}
QueryTask qrt = o.getBody(QueryTask.class);
qrt.results.documents.values().forEach(documentJson -> {
DiskState localDisk = Utils.fromJson(documentJson, DiskState.class);
aws.localDiskStatesByBucketName.put(localDisk.name, localDisk);
});
this.logFine(() -> String.format("%d S3 disk states found.", qrt.results.documentCount));
if (qrt.results.nextPageLink != null) {
this.logFine("Processing next page for local disk states.");
aws.localResourcesNextPageLink = qrt.results.nextPageLink;
handleReceivedEnumerationData(aws);
} else {
aws.subStage = next;
handleReceivedEnumerationData(aws);
}
}).sendWith(this);
}
}
use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.
the class TestAWSEndpointService method testCreateAndThenValidate.
@Test
public void testCreateAndThenValidate() throws Throwable {
this.endpointTestsRunner.testCreateAndThenValidate(this.endpointState);
// Tests that EndpointService QueryTasks can use SELECT_LINKS + EXPAND_LINKS
Query query = Builder.create().addKindFieldClause(EndpointState.class).build();
QueryTask queryTask = QueryTask.Builder.createDirectTask().addOptions(EnumSet.of(QueryOption.EXPAND_CONTENT, QueryOption.SELECT_LINKS, QueryOption.EXPAND_LINKS)).addLinkTerm(EndpointState.FIELD_NAME_AUTH_CREDENTIALS_LINK).setQuery(query).build();
this.host.createQueryTaskService(queryTask, false, true, queryTask, null);
ServiceDocumentQueryResult results = queryTask.results;
assertEquals(Long.valueOf(1), results.documentCount);
assertEquals(1, results.selectedLinks.size());
assertEquals(1, results.selectedDocuments.size());
QueryResultsProcessor processor = QueryResultsProcessor.create(results);
for (EndpointState endpoint : processor.documents(EndpointState.class)) {
String authCredentialSelfLink = endpoint.authCredentialsLink;
assertNotNull(authCredentialSelfLink);
assertNotNull(processor.selectedDocument(authCredentialSelfLink, AuthCredentialsServiceState.class));
}
}
use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.
the class ResourceOperationUtils method lookUp.
/**
* Lookup for {@link ResourceOperationSpec}s by given {@code endpointType},
* {@code resourceType} and optionally {@code operation}
* <p>
* If operation not specified then return all resource operation specs for the given
* {@code endpointType} and {@code resourceType}
* @param host
* host to use to create operation
* @param refererURI
* the referer to use when send the operation
* @param endpointType
* the resource's endpoint type
* @param resourceType
* the resource type
* @param operation
* optional operation id argument
* @param queryTaskTenantLinks
* tenant links used for the QueryTask
* @param authorizationContext
* authorization context that will be used for operations (if set to null the context
* will not be changed)
* @return
*/
private static DeferredResult<List<ResourceOperationSpec>> lookUp(ServiceHost host, URI refererURI, String endpointType, ResourceType resourceType, String operation, List<String> queryTaskTenantLinks, AuthorizationContext authorizationContext) {
Query.Builder builder = Query.Builder.create().addKindFieldClause(ResourceOperationSpec.class).addFieldClause(ResourceOperationSpec.FIELD_NAME_ENDPOINT_TYPE, endpointType).addFieldClause(ResourceOperationSpec.FIELD_NAME_RESOURCE_TYPE, resourceType);
if (operation != null) {
builder.addFieldClause(ResourceOperationSpec.FIELD_NAME_OPERATION, operation);
}
Query query = builder.build();
QueryTop<ResourceOperationSpec> top = new QueryTop<>(host, query, ResourceOperationSpec.class, null).setQueryTaskTenantLinks(queryTaskTenantLinks).setAuthorizationContext(authorizationContext);
if (operation != null) {
// resource operation spec id and selfLink are built from the endpoint type, resource
// type and operation id, so the query result is guaranteed to return at most 1 element
top.setMaxResultsLimit(1);
}
top.setReferer(refererURI);
return top.collectDocuments(Collectors.toList());
}
use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.
the class PhotonModelAdaptersRegistryServiceTest method testGetByEndpointType.
@Test
public void testGetByEndpointType() throws Exception {
String k1 = "k1";
String k2 = "k2";
String k3 = "k3";
PhotonModelAdapterConfig config1 = getPhotonModelAdapterConfig("testGetByEndpointType-1", "Test Get By Endpoint Type 1", "testGetByEndpointType-1.png", k1, k3);
Operation registerOp1 = Operation.createPost(super.host, PhotonModelAdaptersRegistryService.FACTORY_LINK).setBody(config1);
super.host.waitForResponse(registerOp1);
PhotonModelAdapterConfig config2 = getPhotonModelAdapterConfig("testGetByEndpointType-2", "Test Get By Endpoint Type 2", "testGetByEndpointType-2.png", k2, k3);
Operation registerOp2 = Operation.createPost(super.host, PhotonModelAdaptersRegistryService.FACTORY_LINK).setBody(config2);
super.host.waitForResponse(registerOp2);
Query query = Query.Builder.create().addKindFieldClause(PhotonModelAdapterConfig.class).addFieldClause(QuerySpecification.buildCompositeFieldName(PhotonModelAdapterConfig.FIELD_NAME_ADAPTER_ENDPOINTS, k2), "*", MatchType.WILDCARD).build();
QueryTask queryTask = QueryTask.Builder.createDirectTask().addOption(QueryOption.EXPAND_CONTENT).setQuery(query).build();
Operation queryOp = Operation.createPost(super.host, ServiceUriPaths.CORE_QUERY_TASKS).setReferer(getClass().getSimpleName()).setBody(queryTask);
Operation response = super.host.waitForResponse(queryOp);
QueryTask qTask = response.getBody(QueryTask.class);
Collection<Object> values = qTask.results.documents.values();
Assert.assertEquals(1, values.size());
JsonObject k2Config = (JsonObject) values.iterator().next();
Assert.assertEquals(config2.id, k2Config.getAsJsonPrimitive(PhotonModelAdapterConfig.FIELD_NAME_ID).getAsString());
}
use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.
the class TestVSpherePortgroupProvisioning method findDvs.
protected String findDvs(String name) throws Throwable {
Query q = Query.Builder.create().addKindFieldClause(NetworkState.class).addCompositeFieldClause(NetworkState.FIELD_NAME_CUSTOM_PROPERTIES, CustomProperties.TYPE, VimNames.TYPE_DVS).addFieldClause(NetworkState.FIELD_NAME_NAME, name).build();
QueryTask task = QueryTask.Builder.createDirectTask().setQuery(q).build();
Operation op = QueryUtils.createQueryTaskOperation(this.host, task, ServiceTypeCluster.INVENTORY_SERVICE);
Operation result = this.host.waitForResponse(op);
try {
return result.getBody(QueryTask.class).results.documentLinks.get(0);
} catch (Exception e) {
Assert.fail(e.getMessage());
return null;
}
}
Aggregations