Daniel Erez has uploaded a new change for review. Change subject: core: adding AbstractOpenStackStorageProviderProxy ......................................................................
core: adding AbstractOpenStackStorageProviderProxy * Introduced AbstractOpenStackStorageProviderProxy as an abstract parent class for storage provider proxies (Glance/Cinder). * OpenStackImageProviderProxy now extends the new abstract class. Change-Id: Ibff05e2a00e252c30f910e5563c7eda0eb285196 Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Daniel Erez <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/AbstractOpenStackStorageProviderProxy.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/OpenStackImageProviderProxy.java 2 files changed, 145 insertions(+), 76 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/72/38872/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/AbstractOpenStackStorageProviderProxy.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/AbstractOpenStackStorageProviderProxy.java new file mode 100644 index 0000000..59e888b --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/AbstractOpenStackStorageProviderProxy.java @@ -0,0 +1,141 @@ +package org.ovirt.engine.core.bll.provider.storage; + +import com.woorea.openstack.base.client.HttpMethod; +import com.woorea.openstack.base.client.OpenStackClient; +import com.woorea.openstack.base.client.OpenStackRequest; +import com.woorea.openstack.base.client.OpenStackTokenProvider; +import com.woorea.openstack.keystone.model.Access; +import com.woorea.openstack.keystone.utils.KeystoneTokenProvider; +import org.ovirt.engine.core.bll.provider.ProviderProxy; +import org.ovirt.engine.core.common.businessentities.Provider; +import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.StorageDomainDynamic; +import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; +import org.ovirt.engine.core.common.businessentities.StorageDomainType; +import org.ovirt.engine.core.common.businessentities.StorageFormatType; +import org.ovirt.engine.core.common.businessentities.storage.StorageType; +import org.ovirt.engine.core.common.businessentities.TenantProviderProperties; +import org.ovirt.engine.core.common.constants.StorageConstants; +import org.ovirt.engine.core.common.errors.VdcBLLException; +import org.ovirt.engine.core.common.errors.VdcBllErrors; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; + +import java.security.cert.Certificate; +import java.util.List; + +public abstract class AbstractOpenStackStorageProviderProxy<C extends OpenStackClient, T extends TenantProviderProperties> implements ProviderProxy { + + protected C client; + + protected Provider<T> provider; + + protected OpenStackTokenProvider tokenProvider; + + protected KeystoneTokenProvider keystoneTokenProvider; + + protected StorageDomain storageDomain; + + @Override + public void testConnection() { + try { + getClient().execute(new OpenStackRequest<>(getClient(), HttpMethod.GET, "", null, null)); + } catch (RuntimeException e) { + throw new VdcBLLException(VdcBllErrors.PROVIDER_FAILURE, e); + } + } + + protected abstract C getClient(); + + protected Provider getProvider() { + return provider; + } + + protected OpenStackTokenProvider getTokenProvider() { + if (tokenProvider == null && getProvider().isRequiringAuthentication()) { + String tenantName = provider.getAdditionalProperties().getTenantName(); + tokenProvider = getKeystoneTokenProvider().getProviderByTenant(tenantName); + } + return tokenProvider; + } + + protected KeystoneTokenProvider getKeystoneTokenProvider() { + if (keystoneTokenProvider == null) { + keystoneTokenProvider = new KeystoneTokenProvider(getProvider().getAuthUrl(), + getProvider().getUsername(), getProvider().getPassword()); + } + return keystoneTokenProvider; + } + + protected Access getAccess() { + String tenantName = provider.getAdditionalProperties().getTenantName(); + return getKeystoneTokenProvider().getAccessByTenant(tenantName); + } + + protected String getTenantId() { + return getAccess().getToken().getTenant().getId(); + } + + @Override + public List<? extends Certificate> getCertificateChain() { + return null; + } + + protected Guid addStorageDomain(StorageType storageType, StorageDomainType storageDomainType) { + // Storage domain static + StorageDomainStatic domainStaticEntry = new StorageDomainStatic(); + domainStaticEntry.setId(Guid.newGuid()); + domainStaticEntry.setStorage(provider.getId().toString()); + domainStaticEntry.setStorageName(provider.getName()); + domainStaticEntry.setDescription(provider.getDescription()); + domainStaticEntry.setStorageFormat(StorageFormatType.V1); + domainStaticEntry.setStorageType(storageType); + domainStaticEntry.setStorageDomainType(storageDomainType); + domainStaticEntry.setWipeAfterDelete(false); + getDbFacade().getStorageDomainStaticDao().save(domainStaticEntry); + // Storage domain dynamic + StorageDomainDynamic domainDynamicEntry = new StorageDomainDynamic(); + domainDynamicEntry.setId(domainStaticEntry.getId()); + domainDynamicEntry.setAvailableDiskSize(StorageConstants.SIZE_IS_NOT_AVAILABLE); + domainDynamicEntry.setUsedDiskSize(StorageConstants.SIZE_IS_NOT_AVAILABLE); + getDbFacade().getStorageDomainDynamicDao().save(domainDynamicEntry); + return domainStaticEntry.getId(); + } + + @Override + public void onModification() { + // updating storage domain information + Guid storageDomainId = getProviderStorageDomain().getId(); + StorageDomainStatic domainStaticEntry = + getDbFacade().getStorageDomainStaticDao().get(storageDomainId); + domainStaticEntry.setStorageName(provider.getName()); + domainStaticEntry.setDescription(provider.getDescription()); + getDbFacade().getStorageDomainStaticDao().update(domainStaticEntry); + } + + @Override + public void onRemoval() { + List<StorageDomain> storageDomains = getDbFacade() + .getStorageDomainDao().getAllByConnectionId(provider.getId()); + + // removing the static and dynamic storage domain entries + for (StorageDomain storageDomainEntry : storageDomains) { + getDbFacade().getStorageDomainDynamicDao().remove(storageDomainEntry.getId()); + getDbFacade().getStorageDomainStaticDao().remove(storageDomainEntry.getId()); + } + } + + protected StorageDomain getProviderStorageDomain() { + if (storageDomain == null) { + List<StorageDomain> storageDomains = + getDbFacade().getStorageDomainDao().getAllByConnectionId(provider.getId()); + storageDomain = storageDomains.get(0); + } + return storageDomain; + } + + protected static DbFacade getDbFacade() { + return DbFacade.getInstance(); + } + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/OpenStackImageProviderProxy.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/OpenStackImageProviderProxy.java index 5cc0036..9a06d7b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/OpenStackImageProviderProxy.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/OpenStackImageProviderProxy.java @@ -8,36 +8,26 @@ import java.util.List; import java.util.Map; -import org.ovirt.engine.core.bll.provider.ProviderProxy; import org.ovirt.engine.core.bll.provider.ProviderProxyFactory; import org.ovirt.engine.core.common.businessentities.OpenStackImageProviderProperties; import org.ovirt.engine.core.common.businessentities.Provider; import org.ovirt.engine.core.common.businessentities.StorageDomain; -import org.ovirt.engine.core.common.businessentities.StorageDomainDynamic; import org.ovirt.engine.core.common.businessentities.StorageDomainStatic; import org.ovirt.engine.core.common.businessentities.StorageDomainType; -import org.ovirt.engine.core.common.businessentities.StorageFormatType; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.ImageFileType; import org.ovirt.engine.core.common.businessentities.storage.RepoImage; import org.ovirt.engine.core.common.businessentities.storage.StorageType; import org.ovirt.engine.core.common.businessentities.storage.VolumeFormat; -import org.ovirt.engine.core.common.errors.VdcBLLException; -import org.ovirt.engine.core.common.errors.VdcBllErrors; import org.ovirt.engine.core.compat.Guid; -import org.ovirt.engine.core.dal.dbbroker.DbFacade; -import com.woorea.openstack.base.client.HttpMethod; import com.woorea.openstack.base.client.OpenStackRequest; -import com.woorea.openstack.base.client.OpenStackTokenProvider; import com.woorea.openstack.glance.Glance; import com.woorea.openstack.glance.model.Image; import com.woorea.openstack.glance.model.ImageDownload; import com.woorea.openstack.glance.model.Images; -import com.woorea.openstack.keystone.utils.KeystoneTokenProvider; - -public class OpenStackImageProviderProxy implements ProviderProxy { +public class OpenStackImageProviderProxy extends AbstractOpenStackStorageProviderProxy<Glance, OpenStackImageProviderProperties> { enum GlanceImageFormat { RAW("raw"), @@ -77,23 +67,8 @@ private static final int QCOW2_SIZE_OFFSET = 24; - private Provider<OpenStackImageProviderProperties> provider; - - private OpenStackTokenProvider tokenProvider; - - private Glance client; - public OpenStackImageProviderProxy(Provider<OpenStackImageProviderProperties> provider) { this.provider = provider; - } - - @Override - public void testConnection() { - try { - getClient().execute(new OpenStackRequest<>(getClient(), HttpMethod.GET, "", null, null)); - } catch (RuntimeException e) { - throw new VdcBLLException(VdcBllErrors.PROVIDER_FAILURE, e); - } } @Override @@ -101,44 +76,9 @@ return null; } - private static DbFacade getDbFacade() { - return DbFacade.getInstance(); - } - @Override public void onAddition() { - // Storage domain static - StorageDomainStatic domainStaticEntry = new StorageDomainStatic(); - domainStaticEntry.setId(Guid.newGuid()); - domainStaticEntry.setStorage(provider.getId().toString()); - domainStaticEntry.setStorageName(provider.getName()); - domainStaticEntry.setDescription(provider.getDescription()); - domainStaticEntry.setStorageFormat(StorageFormatType.V1); - domainStaticEntry.setStorageType(StorageType.GLANCE); - domainStaticEntry.setStorageDomainType(StorageDomainType.Image); - domainStaticEntry.setWipeAfterDelete(false); - getDbFacade().getStorageDomainStaticDao().save(domainStaticEntry); - // Storage domain dynamic - StorageDomainDynamic domainDynamicEntry = new StorageDomainDynamic(); - domainDynamicEntry.setId(domainStaticEntry.getId()); - domainDynamicEntry.setAvailableDiskSize(0); - domainDynamicEntry.setUsedDiskSize(0); - getDbFacade().getStorageDomainDynamicDao().save(domainDynamicEntry); - } - - @Override - public void onModification() { - List<StorageDomain> storageDomains = - getDbFacade().getStorageDomainDao().getAllByConnectionId(provider.getId()); - - // updating storage domain information - for (StorageDomain storageDomainEntry : storageDomains) { - StorageDomainStatic domainStaticEntry = - getDbFacade().getStorageDomainStaticDao().get(storageDomainEntry.getId()); - domainStaticEntry.setStorageName(provider.getName()); - domainStaticEntry.setDescription(provider.getDescription()); - getDbFacade().getStorageDomainStaticDao().update(domainStaticEntry); - } + addStorageDomain(StorageType.GLANCE, StorageDomainType.Image); } @Override @@ -153,10 +93,6 @@ } } - private Provider<?> getProvider() { - return provider; - } - public static OpenStackImageProviderProxy getFromStorageDomainId(Guid storageDomainId) { StorageDomainStatic storageDomainStatic = getDbFacade().getStorageDomainStaticDao().get(storageDomainId); if (storageDomainStatic != null) { @@ -166,16 +102,7 @@ return null; } - private OpenStackTokenProvider getTokenProvider() { - if (tokenProvider == null && getProvider().isRequiringAuthentication()) { - String tenantName = provider.getAdditionalProperties().getTenantName(); - tokenProvider = new KeystoneTokenProvider(getProvider().getAuthUrl(), - getProvider().getUsername(), getProvider().getPassword()).getProviderByTenant(tenantName); - } - return tokenProvider; - } - - private Glance getClient() { + protected Glance getClient() { if (client == null) { client = new Glance(getProvider().getUrl() + API_VERSION); client.setTokenProvider(getTokenProvider()); @@ -372,4 +299,5 @@ public String getImageUrl(String id) { return getProvider().getUrl() + API_VERSION + "/images/" + id; } + } -- To view, visit https://gerrit.ovirt.org/38872 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ibff05e2a00e252c30f910e5563c7eda0eb285196 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
