use of com.vmware.photon.controller.model.resources.StorageDescriptionService.StorageDescription in project photon-model by vmware.
the class VsphereDatastoreEnumerationHelper method makeStorageFromChanges.
private static StorageDescription makeStorageFromChanges(DatastoreOverlay datastore, StorageDescription oldDocument) {
StorageDescriptionService.StorageDescription storageDescription = new StorageDescriptionService.StorageDescription();
storageDescription.name = datastore.getNameOrNull();
storageDescription.id = datastore.getNameOrNull();
// if free space changes, update used bytes from old capacity.
if (datastore.getCapacityBytesOrZero() > 0L) {
storageDescription.capacityBytes = datastore.getCapacityBytesOrZero();
CustomProperties.of(storageDescription).put(STORAGE_USED_BYTES, datastore.getCapacityBytes() - datastore.getFreeSpaceBytes()).put(STORAGE_AVAILABLE_BYTES, datastore.getFreeSpaceBytes()).put(CustomProperties.DS_FREE_SPACE_IN_GB, AdapterUtils.convertBytesToGB(datastore.getFreeSpaceBytes()));
} else if (datastore.getFreeSpaceBytes() > 0L) {
CustomProperties.of(storageDescription).put(STORAGE_USED_BYTES, oldDocument.capacityBytes - datastore.getFreeSpaceBytes()).put(STORAGE_AVAILABLE_BYTES, datastore.getFreeSpaceBytes()).put(CustomProperties.DS_FREE_SPACE_IN_GB, AdapterUtils.convertBytesToGB(datastore.getFreeSpaceBytes()));
}
if (null != datastore.getPath()) {
CustomProperties.of(storageDescription).put(CustomProperties.DS_PATH, datastore.getPath());
}
return storageDescription;
}
use of com.vmware.photon.controller.model.resources.StorageDescriptionService.StorageDescription in project photon-model by vmware.
the class TestVSphereComputeDiskDay2Service method createDiskWithDatastore.
private DiskService.DiskState createDiskWithDatastore(String alias, DiskService.DiskType type, long capacityMBytes, HashMap<String, String> customProperties, boolean isPersistent) throws Throwable {
DiskService.DiskState diskState = constructDiskState(alias, type, 0, null, capacityMBytes, customProperties);
diskState.persistent = isPersistent;
StorageDescription sd = new StorageDescription();
sd.name = sd.id = this.dataStoreId != null ? this.dataStoreId : "testDatastore";
sd = TestUtils.doPost(this.host, sd, StorageDescription.class, UriUtils.buildUri(this.host, StorageDescriptionService.FACTORY_LINK));
diskState.storageDescriptionLink = sd.documentSelfLink;
return postDiskStateWithDetails(diskState);
}
use of com.vmware.photon.controller.model.resources.StorageDescriptionService.StorageDescription 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.photon.controller.model.resources.StorageDescriptionService.StorageDescription in project photon-model by vmware.
the class AzureStorageEnumerationAdapterService method createResourceGroupStateHelper.
private DeferredResult<Operation> createResourceGroupStateHelper(StorageEnumContext context, CloudBlobContainer container, ResourceGroupState oldResourceGroup) {
// Associate resource group with storage account
String storageAcctName = getStorageAccountNameFromUri(container.getStorageUri().getPrimaryUri().getHost());
Query.Builder qBuilder = Query.Builder.create().addKindFieldClause(StorageDescription.class).addFieldClause(StorageDescription.FIELD_NAME_NAME, storageAcctName);
QueryTop<StorageDescription> queryLocalStates = new QueryTop<>(getHost(), qBuilder.build(), StorageDescription.class, context.parentCompute.tenantLinks, // endpointLink
null, context.parentCompute.documentSelfLink).setClusterType(ServiceTypeCluster.INVENTORY_SERVICE);
return queryLocalStates.collectLinks(Collectors.toSet()).thenCompose(sdls -> {
logFine(() -> String.format("Found %d matching storage descriptions", sdls.size()));
// the storage account names are unique so we should only get 1 result back
if (sdls.isEmpty()) {
return DeferredResult.completed((Operation) null);
}
String storageDescSelfLink = sdls.iterator().next();
if (sdls.size() > 1) {
logWarning(() -> String.format("Found multiple instances of the same" + " storage description %s", storageAcctName));
}
ResourceGroupState resourceGroupState = createResourceGroupStateObject(context, container, storageDescSelfLink, oldResourceGroup);
if (oldResourceGroup != null) {
return updateResourceGroupState(context, resourceGroupState);
} else {
return createResourceGroupState(context, resourceGroupState);
}
});
}
use of com.vmware.photon.controller.model.resources.StorageDescriptionService.StorageDescription in project photon-model by vmware.
the class AzureStorageEnumerationAdapterService method updateStorageDescriptions.
/**
* Updates matching storage descriptions for given storage accounts.
*/
private void updateStorageDescriptions(StorageEnumContext context, StorageEnumStages next) {
if (context.storageDescriptions.size() == 0) {
logFine(() -> "No storage descriptions available for update");
context.subStage = next;
handleSubStage(context);
return;
}
List<DeferredResult<Operation>> updates = context.storageDescriptions.values().stream().map(sd -> {
StorageAccount storageAccount = context.storageAccountsToUpdateCreate.remove(sd.id);
StorageDescription storageDescriptionToUpdate = new StorageDescription();
storageDescriptionToUpdate.name = storageAccount.name;
storageDescriptionToUpdate.authCredentialsLink = sd.authCredentialsLink;
storageDescriptionToUpdate.regionId = storageAccount.location;
storageDescriptionToUpdate.documentSelfLink = sd.documentSelfLink;
if (StringUtils.isEmpty(storageDescriptionToUpdate.endpointLink)) {
storageDescriptionToUpdate.endpointLink = sd.endpointLink;
}
storageDescriptionToUpdate.computeHostLink = sd.computeHostLink;
// first copy
storageDescriptionToUpdate.endpointLinks = sd.endpointLinks;
// then update it
AdapterUtils.addToEndpointLinks(storageDescriptionToUpdate, context.request.endpointLink);
storageDescriptionToUpdate.tenantLinks = sd.tenantLinks;
storageDescriptionToUpdate.regionId = storageAccount.location;
// Check if SSE (encryption) is enable on azure storage account
storageDescriptionToUpdate.supportsEncryption = storageAccount.properties.encryption != null ? storageAccount.properties.encryption.services.blob.enabled : false;
// Set type of azure storage account
storageDescriptionToUpdate.type = storageAccount.sku.name;
context.storageDescriptionsForPatching.put(sd.id, sd);
return storageDescriptionToUpdate;
}).map(sd -> Operation.createPatch(this, sd.documentSelfLink).setBody(sd).setCompletion((o, e) -> {
if (e != null) {
logWarning(() -> String.format("Failed to update storage description:" + " %s", e.getMessage()));
}
})).map(o -> sendWithDeferredResult(o)).collect(java.util.stream.Collectors.toList());
DeferredResult.allOf(updates).whenComplete((ignore, e) -> {
logFine(() -> "Finished updating storage descriptions");
context.subStage = next;
handleSubStage(context);
});
}
Aggregations