use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.
the class PhotonModelUtils method createOriginTagQuery.
/**
* @param external
* @param origin
* @return Returns a query with the needed terms for external and origin field
*/
public static Query createOriginTagQuery(Boolean external, Map<String, Occurance> origin) {
QueryTask.Query externalQuery = new Query().setTermPropertyName(TagService.TagState.FIELD_NAME_EXTERNAL).setTermMatchValue(external.toString());
externalQuery.occurance = Occurance.SHOULD_OCCUR;
QueryTask.Query.Builder originClauseBuilder = QueryTask.Query.Builder.create();
for (Map.Entry<String, Occurance> entry : origin.entrySet()) {
Occurance occurance = entry.getValue() == null ? Occurance.MUST_OCCUR : entry.getValue();
if (entry.getKey() != null) {
originClauseBuilder.addCollectionItemClause(TagService.TagState.FIELD_NAME_ORIGIN, entry.getKey(), occurance);
}
}
Query originQuery = originClauseBuilder.build().setOccurance(Occurance.SHOULD_OCCUR);
Query originOrExternalQuery = new Query().addBooleanClause(externalQuery).addBooleanClause(originQuery).setOccurance(Occurance.MUST_OCCUR);
return originOrExternalQuery;
}
use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.
the class AzureStorageEnumerationAdapterService method getLocalStorageAccountDescriptions.
/**
* Query all storage descriptions for the cluster filtered by the received set of storage
* account Ids
*/
private void getLocalStorageAccountDescriptions(StorageEnumContext context, StorageEnumStages next) {
if (context.storageAccountsToUpdateCreate.isEmpty()) {
context.subStage = StorageEnumStages.CREATE_STORAGE_DESCRIPTIONS;
handleSubStage(context);
return;
}
context.storageDescriptions.clear();
Query.Builder qBuilder = Query.Builder.create().addKindFieldClause(StorageDescription.class);
Query.Builder instanceIdFilterParentQuery = Query.Builder.create(Occurance.MUST_OCCUR);
for (Map.Entry<String, StorageAccount> account : context.storageAccountsToUpdateCreate.entrySet()) {
Query instanceIdFilter = Query.Builder.create(Occurance.SHOULD_OCCUR).addFieldClause(StorageDescription.FIELD_NAME_ID, canonizeId(account.getValue().id)).build();
instanceIdFilterParentQuery.addClause(instanceIdFilter);
}
qBuilder.addClause(instanceIdFilterParentQuery.build());
QueryByPages<StorageDescription> queryLocalStates = new QueryByPages<>(getHost(), qBuilder.build(), StorageDescription.class, context.parentCompute.tenantLinks, null, /* endpointLink */
context.parentCompute.documentSelfLink).setMaxPageSize(QueryUtils.MAX_RESULT_LIMIT).setClusterType(ServiceTypeCluster.INVENTORY_SERVICE);
queryLocalStates.collectDocuments(Collectors.toList()).whenComplete((sds, ex) -> {
if (ex != null) {
handleError(context, ex);
return;
}
logFine(() -> String.format("Found %d matching storage descriptions for Azure" + " storage accounts", sds.size()));
List<DeferredResult<AuthCredentialsServiceState>> results = sds.stream().map(sd -> {
context.storageDescriptions.put(sd.id, sd);
// populate connectionStrings
if (!context.storageConnectionStrings.containsKey(sd.id)) {
return loadStorageAuth(context, sd);
} else {
return DeferredResult.<AuthCredentialsServiceState>completed(null);
}
}).collect(Collectors.toList());
DeferredResult.allOf(results).whenComplete((creds, e) -> {
if (e != null) {
logWarning(() -> String.format("Failed to get storage description" + " credentials: %s", e.getMessage()));
}
context.subStage = next;
handleSubStage(context);
});
});
}
use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.
the class AzureStorageEnumerationAdapterService method disassociateIfNotAttachedToCompute.
private DeferredResult<Operation> disassociateIfNotAttachedToCompute(StorageEnumContext context, DiskState diskState) {
Query query = Query.Builder.create().addKindFieldClause(ComputeService.ComputeState.class).addCollectionItemClause(ComputeService.ComputeState.FIELD_NAME_DISK_LINKS, diskState.documentSelfLink).build();
QueryTask queryTask = QueryTask.Builder.createDirectTask().addOption(QueryOption.COUNT).addOption(QueryOption.INDEXED_METADATA).setQuery(query).build();
queryTask.tenantLinks = diskState.tenantLinks;
if (queryTask.documentExpirationTimeMicros == 0) {
queryTask.documentExpirationTimeMicros = Utils.getNowMicrosUtc() + QueryUtils.TEN_MINUTES_IN_MICROS;
}
return QueryUtils.startInventoryQueryTask(this, queryTask).thenCompose(result -> {
if (result.results != null && result.results.documentCount != 0) {
logFine(() -> String.format("Won't disassociate disk state %s, as it is attached to machine", diskState.documentSelfLink));
return DeferredResult.completed(new Operation());
}
logFine(() -> String.format("Disassociating disk state %s", diskState.documentSelfLink));
Operation operation = PhotonModelUtils.createRemoveEndpointLinksOperation(this, context.request.endpointLink, diskState);
if (operation == null) {
return DeferredResult.completed(new Operation());
}
CompletionHandler completion = operation.getCompletion();
return sendWithDeferredResult(operation).whenComplete(completion::handle).whenComplete((o, e) -> {
final String message = "Disassociate disk state stale %s state";
if (e != null) {
logWarning(message + ": ERROR - %s", diskState.documentSelfLink, Utils.toString(e));
} else {
logFine(message + ": SUCCESS", diskState.documentSelfLink);
}
});
});
}
use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.
the class AzureSubscriptionsEnumerationServiceTest method createQueryTaskForAzureComputes.
private QueryTask createQueryTaskForAzureComputes(String azureEnrollmentNumber, List<String> tenantLinks) {
// Fetch ComputeStates having custom property endPointType as Azure, Type as ENDPOINT_HOST
Query azureEndpointsQuery = Query.Builder.create().addKindFieldClause(ComputeState.class).addCompositeFieldClause(ComputeState.FIELD_NAME_CUSTOM_PROPERTIES, EndpointAllocationTaskService.CUSTOM_PROP_ENPOINT_TYPE, EndpointType.azure.name()).addCompositeFieldClause(ComputeState.FIELD_NAME_CUSTOM_PROPERTIES, AzureConstants.AZURE_ENROLLMENT_NUMBER_KEY, azureEnrollmentNumber).addFieldClause(ComputeState.FIELD_NAME_TYPE, ComputeType.ENDPOINT_HOST).build();
QueryTask queryTask = QueryTask.Builder.createDirectTask().addOption(QueryOption.EXPAND_CONTENT).setQuery(azureEndpointsQuery).build();
queryTask.tenantLinks = tenantLinks;
queryTask.setDirect(true);
return queryTask;
}
use of com.vmware.xenon.services.common.QueryTask.Query in project photon-model by vmware.
the class TestAzureLongRunningEnumeration method assertRemoteResources.
/**
* Assert that remote resources are enumerated and exist locally.
*/
private void assertRemoteResources() {
for (int i = 0; i < numOfVMsToTest; i++) {
assertResourceExists(this.host, NetworkService.FACTORY_LINK, nicSpecs.get(i).network.name, true);
for (NicSpec nicSpec : nicSpecs.get(i).nicSpecs) {
assertResourceExists(this.host, SubnetService.FACTORY_LINK, nicSpec.getSubnetSpec().name, true);
}
assertResourceExists(this.host, ResourceGroupService.FACTORY_LINK, azureVMNames.get(i), true);
assertResourceExists(this.host, SecurityGroupService.FACTORY_LINK, AZURE_SECURITY_GROUP_NAME, true);
assertResourceExists(this.host, StorageDescriptionService.FACTORY_LINK, (azureVMNames.get(i) + "sa").replace("-", ""), true);
assertDiskExist(this.host, DiskService.FACTORY_LINK, azureVMNames.get(i) + "-boot-disk", true);
validateDiskInternalTag(this.host);
// Tags
final Map<String, String> expectedTags = new HashMap<>();
expectedTags.put(NETWORK_TAG_KEY_PREFIX + azureVMNames.get(i), NETWORK_TAG_VALUE);
expectedTags.put(VM_TAG_KEY_PREFIX + azureVMNames.get(i), VM_TAG_VALUE);
expectedTags.put(SG_TAG_KEY_PREFIX + azureVMNames.get(i), SG_TAG_VALUE);
final List<String> keysToLowerCase = expectedTags.keySet().stream().map(String::toLowerCase).collect(Collectors.toList());
Query query = Query.Builder.create().addKindFieldClause(TagState.class).addInClause(TagState.FIELD_NAME_KEY, keysToLowerCase).build();
Map<String, Query.Occurance> origin = new HashMap<>();
origin.put(DISCOVERED.toString(), Query.Occurance.MUST_OCCUR);
origin.put(SYSTEM.toString(), Query.Occurance.MUST_NOT_OCCUR);
origin.put(USER_DEFINED.toString(), Query.Occurance.MUST_NOT_OCCUR);
Query externalQuery = createOriginTagQuery(Boolean.TRUE, origin);
query.addBooleanClause(externalQuery);
QueryStrategy<TagState> queryLocalTags = new QueryTop<>(this.host, query, TagState.class, null).setMaxResultsLimit(expectedTags.size() + 1);
List<TagState> tagStates = waitToComplete(queryLocalTags.collectDocuments(Collectors.toList()));
assertEquals("TagStates were not discovered.", expectedTags.size(), tagStates.size());
for (TagState tag : tagStates) {
assertEquals(expectedTags.get(tag.key), tag.value);
}
}
}
Aggregations