/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package util; import com.emc.storageos.model.auth.ACLAssignmentChanges; import com.emc.storageos.model.auth.ACLEntry; import com.emc.storageos.model.host.cluster.ClusterRestRep; import com.emc.storageos.model.host.vcenter.VcenterCreateParam; import com.emc.storageos.model.host.vcenter.VcenterDataCenterRestRep; import com.emc.storageos.model.host.vcenter.VcenterRestRep; import com.emc.storageos.model.host.vcenter.VcenterUpdateParam; import com.emc.vipr.client.Task; import com.emc.vipr.client.exceptions.ViPRHttpException; import controllers.security.Security; import org.apache.commons.httpclient.HttpStatus; import org.springframework.util.CollectionUtils; import java.net.URI; import java.util.List; import static com.emc.vipr.client.core.util.ResourceUtils.id; import static util.BourneUtil.getViprClient; public class VCenterUtils { public static List<VcenterRestRep> getVCenters(URI tenantId) { return getViprClient().vcenters().getVcenters(tenantId); } public static VcenterRestRep getVCenter(URI id) { try { return (id != null) ? getViprClient().vcenters().get(id) : null; } catch (ViPRHttpException e) { if (e.getHttpCode() == HttpStatus.SC_NOT_FOUND) { return null; } throw e; } } public static VcenterDataCenterRestRep getDataCenter(URI id) { try { return (id != null) ? getViprClient().vcenterDataCenters().get(id) : null; } catch (ViPRHttpException e) { if (e.getHttpCode() == HttpStatus.SC_NOT_FOUND) { return null; } throw e; } } public static VcenterRestRep getVCenter(VcenterDataCenterRestRep dataCenter) { return (dataCenter != null) ? getVCenter(id(dataCenter.getVcenter())) : null; } public static Task<VcenterRestRep> createVCenter(URI tenantId, VcenterCreateParam vcenterCreateParam, boolean validateConnection) { vcenterCreateParam.setCascadeTenancy(Boolean.TRUE); return getViprClient().vcenters().create(tenantId, vcenterCreateParam, validateConnection); } public static Task<VcenterRestRep> updateVCenter(URI vcenterId, VcenterUpdateParam vcenterUpdateParam, boolean validateConnection) { return getViprClient().vcenters().update(vcenterId, vcenterUpdateParam, validateConnection); } public static Task<VcenterRestRep> deactivateVCenter(URI id) { return getViprClient().vcenters().deactivate(id); } public static Task<VcenterRestRep> deactivateVCenter(URI vcenterId, boolean detachStorage) { return getViprClient().vcenters().deactivate(vcenterId, detachStorage); } public static List<VcenterDataCenterRestRep> getDataCentersInVCenter(VcenterRestRep vcenter, URI tenantId) { return getViprClient().vcenterDataCenters().getByVcenter(id(vcenter), tenantId); } public static List<VcenterDataCenterRestRep> getDataCentersInVCenter(VcenterRestRep vcenter) { return getViprClient().vcenterDataCenters().getByVcenter(id(vcenter), null); } public static List<ClusterRestRep> getClustersInDataCenter(VcenterDataCenterRestRep vcenterDataCenter) { return getViprClient().clusters().getByDataCenter(id(vcenterDataCenter)); } public static Task<VcenterRestRep> discover(URI id) { return getViprClient().vcenters().discover(id); } public static boolean checkCompatibleVDCVersion(String expectedVersion) { return getViprClient().vdcs().isCompatibleVDCVersion(expectedVersion); } public static List<ACLEntry> getAcl(URI vCenterId) { try { return (vCenterId != null) ? getViprClient().vcenters().getAcls(vCenterId) : null; } catch (ViPRHttpException e) { if (e.getHttpCode() == 404) { return null; } throw e; } } public static Task<VcenterRestRep> createVCenter(VcenterCreateParam vcenterCreateParam, boolean validateConnection, ACLAssignmentChanges aclAssignmentChanges) { boolean updateAcls = canUpdateVcenterACLs() && isValidAclAssignments(aclAssignmentChanges); Task<VcenterRestRep> vCenterCreateTask = getViprClient().vcenters().create(vcenterCreateParam, validateConnection, !updateAcls); if (updateAcls) { return updateAcl(aclAssignmentChanges, vCenterCreateTask); } else { return vCenterCreateTask; } } public static Task<VcenterRestRep> updateVCenter(URI vcenterId, VcenterUpdateParam vcenterUpdateParam, boolean validateConnection, ACLAssignmentChanges aclAssignmentChanges) { boolean updateAcls = canUpdateVcenterACLs() && isValidAclAssignments(aclAssignmentChanges); Task<VcenterRestRep> vCenterUpdateTask = getViprClient().vcenters().update(vcenterId, vcenterUpdateParam, validateConnection, !updateAcls); if (updateAcls) { return updateAcl(vcenterId, aclAssignmentChanges); } else { return vCenterUpdateTask; } } private static Task<VcenterRestRep> updateAcl(ACLAssignmentChanges aclAssignmentChanges, Task<VcenterRestRep> vCenterTask) { if (canUpdateVcenterACLs() && isValidAclAssignments(aclAssignmentChanges)) { VcenterRestRep vCenter = vCenterTask.get(); return updateAcl(vCenter.getId(), aclAssignmentChanges); } return vCenterTask; } public static Task<VcenterRestRep> updateAcl(URI vCenterId, ACLAssignmentChanges aclAssignmentChanges) { if (canUpdateVcenterACLs() && isValidAclAssignments(aclAssignmentChanges)) { return getViprClient().vcenters().updateAcls(vCenterId, aclAssignmentChanges); } return null; } public static boolean canUpdateVcenterACLs() { return Security.hasAnyRole(Security.SYSTEM_ADMIN, Security.SECURITY_ADMIN); } public static boolean isValidAclAssignments (ACLAssignmentChanges aclAssignmentChanges) { if (!(CollectionUtils.isEmpty(aclAssignmentChanges.getAdd()) && CollectionUtils.isEmpty(aclAssignmentChanges.getRemove()))) { return true; } return false; } }