07-24-2015 07:59 AM - edited 03-01-2019 06:36 AM
Task Name | Create Tenant VDC and its policies |
Description |
|
Prerequisites |
|
Category | Workflow |
Components | vSphere 5.x |
User Inputs |
|
Output |
Instructions for Regular Workflow Use:
A big thank you goes out to Lucas Hoge for this contribution:
This also uses datastore clusters!
The workflow via custom task:
The User input:
The Code all done in functions and no API calls:
importPackage(java.lang);
importPackage(java.util);
importPackage(com.cloupia.model.cIM);
importPackage(com.cloupia.service.cIM.inframgr);
importPackage(com.cloupia.service.cIM.inframgr.profiles);
importPackage(com.cloupia.lib.cIaaS.vmware);
var vDCID;
var compPolicyId;
var storPolicyId;
var netPolicyId;
var sysPolicyId;
function createTenantPolicy(){
var vdcProfile = input.vDCProfile;
var vdcName = input.VDCName;
var sysPolicyName = input.SysPolicyName;
var compPolicyName = input.CompPolicyName;
var storPolicyName = input.StorPolicyName;
var netPolicyName = input.NetPolicyName;
var groupId = input.GroupId;
var cluster = input.Cluster;
var resourcePool = input.ResourcePool;
//var datastore = input.Datastore;
var datastoreClusterIdentity = input.DatastoreCluster;
var datastoreClusterArray =[];
datastoreClusterArray = datastoreClusterIdentity.split("@");
var datastoreCluster=[];
datastoreCluster[0] = datastoreClusterArray[2];
var scopeType=input.datastoreClusterScope;
logger.addInfo("scopeType Var Defined, Value: " +scopeType);
var dvPortGroup = input.PortGroup;
var ipPool = input.StaticIPPool;
var domainName = input.DomainName;
var userName = input.UserName;
var password = input.Password;
var nicAlias = input.NICAlias;
logger.addInfo("dvPortGroup: "+dvPortGroup);
logger.addInfo("ipPool: "+ipPool);
logger.addInfo("datastoreCluster: "+datastoreCluster);
logger.addInfo("cluster: "+cluster);
var oldVDC = VDCUtil.getVDC(vdcProfile);
var vdcExists = VDCUtil.getVDCByName(vdcName);
try{
if(oldVDC != null){
if(vdcExists == null){
var compPolicy = createCompPolicy(oldVDC, compPolicyName, cluster, resourcePool);
var netPolicy = createNetPolicy(oldVDC, netPolicyName, nicAlias, dvPortGroup, ipPool);
var storPolicy = createStorPolicy(oldVDC, storPolicyName, datastoreCluster, scopeType);
var sysPolicy = createSysPolicy(oldVDC, sysPolicyName, domainName, userName, password);
}else{
throw new Exception("VDC with name "+vdcName+" already exist");
}
}else{
throw new Exception("vDC Profile does not exist");
}
var vdc = new VDC();
vdc.setVdcName(vdcName);
vdc.setVdcDescription("Desc");
vdc.setGroupId(groupId);
vdc.setCloudName(oldVDC.getCloudName());
if (oldVDC.getApproverList() != null) {
vdc.setApproverList(oldVDC.getApproverList());
}
vdc.setPrimaryApprovers(oldVDC.getPrimaryApprovers());
vdc.setSecondaryApprovers(oldVDC.getSecondaryApprovers());
vdc.setApprovalReqUsers(oldVDC.isApprovalReqUsers());
vdc.setResendMailCount(oldVDC.getResendMailCount());
vdc.setReminderInterval(oldVDC.getReminderInterval());
vdc.setVdcSupportEmail(oldVDC.getVdcSupportEmail());
vdc.setVdcCustomerNoticationEmail(oldVDC.getVdcCustomerNoticationEmail());
vdc.setComputingPolicy(compPolicy.getPolicyName());
vdc.setStoragePolicy(storPolicy.getPolicyName());
vdc.setNetworkPolicy(netPolicy.getPolicyName());
vdc.setPrimaryDeployPolicy(sysPolicy.getPolicyName());
vdc.setSecondaryDeployPolicy(null);
vdc.setIsoMappingPolicy(oldVDC.getIsoMappingPolicy());
vdc.setCostModel(oldVDC.getCostModel());
vdc.setDisableCostModelDisplay(oldVDC.isDisableCostModelDisplay());
vdc.setUserActionsPolicy(oldVDC.getUserActionsPolicy());
vdc.setEnableStorageEfficiency(oldVDC.isEnableStorageEfficiency());
vdc.setDeletable(true);
vdc.setInactivityPeriodForDeletion(-1);
vdc.setSelfServiceEndUserPolicyId(oldVDC.getSelfServiceEndUserPolicyId());
var appCatList = AppCategoryUtil.getAllCategories();
var vdcCatList = new ArrayList();
for (var i=0; i<appCatList.size(); i++)
{
var vdcCat = new VDCAppCategory();
vdcCat.setVdcCatId(appCatList.get(i).getCategoryId());
vdcCatList.add(vdcCat);
}
vdc.setAppCategoryList(vdcCatList);
var isCreated = VDCUtil.addVDC(vdc);
logger.addInfo("VDC created: "+isCreated);
vDCID = vdc.getVdcId();
}catch(e){
logger.addError("Error occured"+e);
ctxt.setFailed("error occured while creating VDC");
ctxt.exit();
}
}
function createCompPolicy(oldVDC, compPolicyName, cluster, resourcePool)
{
var policy;
policy = InfraPersistenceUtil.getPrivateCloudComputingPolicy(compPolicyName);
if (policy != null)
{
ctxt.setFailed("Compute policy with name "+compPolicyName+" already exists");
ctxt.exit();
}
var profile = InfraPersistenceUtil.getPrivateCloudComputingPolicy(oldVDC.getComputingPolicy());
policy = new PrivateCloudComputingPolicy();
policy.setPolicyName(compPolicyName);
policy.setPolicyDescription(compPolicyName+" created by SR "+ctxt.getSrId());
policy.setCloudName(oldVDC.getCloudName());
var scopeList = new ArrayList();
var scope = new DRAPScope();
scope.setEnabled(true);
scope.setInclude(true);
scope.setScopeContextName("Clusters");
scope.setScopeContextValue(cluster);
scopeList.add(scope);
policy.setScopeList(scopeList);
var rps = resourcePool.split(",");
var resourcePoolName = new StringBuffer();
for(var i = 0; i<rps.length; i++){
var detailedIdentity = new ResourcePoolDetailedIdentity(rps[i]);
resourcePoolName = resourcePoolName.append(detailedIdentity.getRpIdentity());
resourcePoolName = resourcePoolName.append(",");
}
resourcePoolName = resourcePoolName.substring(0,resourcePoolName.lastIndexOf(","));
policy.setResourcePoolName(resourcePoolName);
policy.setEsxType(profile.getEsxType());
policy.setEsxVersion(profile.getEsxVersion());
policy.setRules(profile.getRules());
policy.setOverrideTemplateProperties(profile.isOverrideTemplateProperties());
if(profile.isOverrideTemplateProperties()){
policy.setNumVCPUs(profile.getNumVCPUs());
policy.setCpuReservationMhz(profile.getCpuReservationMhz());
policy.setCpuLimitMhz(profile.getCpuLimitMhz());
policy.setCpuShares(profile.getCpuShares());
policy.setMemoryMB(profile.getMemoryMB());
policy.setReserveAllGuestMem(profile.isReserveAllGuestMem());
if(!profile.isReserveAllGuestMem()){
policy.setMemReservationMB(profile.getMemReservationMB());
policy.setMemLimitMB(profile.getMemLimitMB());
policy.setMemShares(profile.getMemShares());
}
}
policy.setAllowResizing(profile.isAllowResizing());
if(profile.isAllowResizing()){
policy.setResizeAllowedCPUs(profile.getResizeAllowedCPUs());
policy.setResizeAllowedMemoryMB(profile.getResizeAllowedMemoryMB());
}
if(profile.getDeployToFolder() != null)
policy.setDeployToFolder(profile.getDeployToFolder());
InfraPersistenceUtil.persistPrivateCloudComputingPolicy(policy);
compPolicyId = policy.getPolicyId();
logger.addInfo("Compute Policy Created: " +compPolicyName)
return policy;
}
function createNetPolicy(oldVDC, netPolicyName, nicAlias, dvPortGroup, ipPool)
{
var policy;
policy = InfraPersistenceUtil.getPrivateCloudNetworkPolicy(netPolicyName);
if (policy !== null)
{
ctxt.setFailed("Network policy with name "+netPolicyName+" already exists");
ctxt.exit();
}
var profilePolicy = InfraPersistenceUtil.getPrivateCloudNetworkPolicy(oldVDC.getNetworkPolicy());
var policy = new PrivateCloudNetworkPolicy();
policy.setPolicyName(netPolicyName);
policy.setPolicyDescription(netPolicyName+" created by SR "+ctxt.getSrId());
policy.setCloudName(oldVDC.getCloudName());
policy.setAllowOptionalNICs(profilePolicy.isAllowOptionalNICs());
var nicList = profilePolicy.getVmNetworks().getList();
/*for(var i = 0; i<nicList.size(); i++){
if(nicList.get(i).getNicAlias().equalsIgnoreCase(nicAlias)){
ctxt.setFailed("NIC Alias name should be unique");
ctxt.exit();
}
}*/
var profileNIC = nicList.get(0);
var nic = new PrivateCloudNetworkPolicyNIC();
nic.setNicAlias(nicAlias);
nic.setMandatory(true);
nic.setAllowToChangePortGroups(profileNIC.isAllowToChangePortGroups());
nic.setCopyFromTemplate(profileNIC.isCopyFromTemplate());
if(!profileNIC.isCopyFromTemplate())
nic.setAdapterType(profileNIC.getAdapterType());
var nicPortGroup = new PrivateCloudNetworkPolicyNICPortGroup();
nicPortGroup.setPortGroup(dvPortGroup);
nicPortGroup.setIpAddressType(1);//DHCP:0,Static:1
nicPortGroup.setIpAddressSource(0);//IP Pool Policy:0, Inline Pool Policy:1
var staticIPs = ipPool.split(",");
nicPortGroup.setStaticIPPool(staticIPs);
nic.getVmPortGroups().getList().add(nicPortGroup);
var newNICList = new ArrayList();
//newNICList.addAll(nicList);
newNICList.add(nic);
var def=new PrivateCloudNetworkPolicyNICDef();
def.setNics(newNICList);
var vmNicsDefInfoStr=VMWareUtils.getPrivateCloudNetworkPolicyNICDefStr(def);
policy.setVmNicsDefInfoStr(vmNicsDefInfoStr);
InfraPersistenceUtil.persistPrivateCloudNetworkPolicy(policy);
netPolicyId = policy.getPolicyId();
logger.addInfo("Network Policy Created: " +netPolicyName);
return policy;
}
function createStorPolicy(oldVDC, storPolicyName, datastoreCluster, scopeType)
{
var policy;
var policy = InfraPersistenceUtil.getPrivateCloudStoragePolicy(storPolicyName);
if (policy != null)
{
ctxt.setFailed("Storage policy with name "+storPolicyName+" already exists");
ctxt.exit();
}
var profile = InfraPersistenceUtil.getPrivateCloudStoragePolicy(oldVDC.getStoragePolicy());
policy = new PrivateCloudStoragePolicy();
policy.setPolicyName(storPolicyName);
policy.setPolicyDescription(storPolicyName+" created by SR "+ctxt.getSrId());
policy.setCloudName(oldVDC.getCloudName());
var result = new DRAPScope();
result.setEnabled(true);
result.setInclude(true);
result.setScopeContextName(DRAPFormUtil.SCOPE_CONTEXT_NAME_DATASTORE_CLUSTERS);
result.setScopeContextValue(datastoreCluster);
var list = new ArrayList();
list.add(result);
logger.addInfo("ScopeType Output: " +scopeType);
policy.setScopeType(scopeType);
policy.setDatastoreCluster(datastoreCluster);
policy.setScopeList(list);
policy.setLocalStorage(profile.isLocalStorage());
policy.setNfsStorage(profile.isNfsStorage());
policy.setISCSIStorage(profile.isISCSIStorage());
policy.setRules(profile.getRules());
policy.setUseLinkedClone(profile.isUseLinkedClone());
if(profile.isOverrideTemplateProperties()){
policy.setOverrideTemplateProperties(profile.isOverrideTemplateProperties());
policy.setDoThinProvisioning(profile.isDoThinProvisioning());
if(profile.isManualDiskSize()){
policy.setManualDiskSize(profile.isManualDiskSize());
policy.setCustomDiskSizeGB(profile.getCustomDiskSizeGB());
}
}
if(profile.isAllowResizing()){
policy.setAllowResizing(profile.isAllowResizing());
policy.setResizeAllowedDiskGB(profile.getResizeAllowedDiskGB());
}
policy.setAllowDataStoreSelect(profile.isAllowDataStoreSelect());
InfraPersistenceUtil.persistPrivateCloudStoragePolicy(policy);
storPolicyId = policy.getPolicyId();
logger.addInfo("Storage Policy Created: " +storPolicyName);
return policy;
}
function createSysPolicy(oldVDC, sysPolicyName, domainName, userName, password)
{
var policy;
policy = InfraPersistenceUtil.getPrivateCloudSystemProfile(sysPolicyName);
if (policy != null)
{
ctxt.setFailed("System policy with name "+sysPolicyName+" already exists");
ctxt.exit();
}
var profile = InfraPersistenceUtil.getPrivateCloudSystemProfile(oldVDC.getPrimaryDeployPolicy());
policy = new PrivateCloudSystemProfile();
policy.setPolicyName(sysPolicyName);
policy.setPolicyDescription(sysPolicyName+" created by SR "+ctxt.getSrId());
policy.setVmNameTemplate(profile.getVmNameTemplate());
policy.setVmNameValidationPolicy(profile.getVmNameValidationPolicy());
policy.setAllowEndUserSuffix(profile.isAllowEndUserSuffix());
policy.setPowerOn(profile.isPowerOn());
policy.setHostNameTemplate(profile.getHostNameTemplate());
policy.setHostNameValidationPolicy(profile.getHostNameValidationPolicy());
policy.setDnsDomain(profile.getDnsDomain());
policy.setLinuxTimezone(profile.getLinuxTimezone());
if(profile.getDnsSuffixList() != null)
policy.setDnsSuffixList(profile.getDnsSuffixList());
if(profile.getDnsServerList() != null)
policy.setDnsServerList(profile.getDnsServerList());
policy.setImageType(profile.getImageType());
if(profile.getProductId() != null)
policy.setProductId(profile.getProductId());
policy.setFullName(profile.getFullName());
policy.setOrgName(profile.getOrgName());
policy.setLicenseMode(profile.getLicenseMode());
if(profile.getLicenseUsers() != null)
policy.setLicenseUsers(profile.getLicenseUsers());
if(profile.getWinList() != null)
policy.setWinList(profile.getWinList());
policy.setSIDUnique(profile.isSIDUnique());
policy.setAutoLogon(profile.isAutoLogon());
if(profile.getAutoLogonCount() != null)
policy.setAutoLogonCount(profile.getAutoLogonCount());
policy.setPassword(profile.getPassword());
policy.setWindowsTimezone(profile.getWindowsTimezone());
policy.setDomain(domainName);
policy.setDomainAdmin(userName);
policy.setDomainPassword(password);
if(profile.isDefineAnnotation()){
policy.setDefineAnnotation(profile.isDefineAnnotation());
if(profile.getNotes() != null)
policy.setNotes(profile.getNotes());
policy.setCustomAttributesList(profile.getCustomAttributesList());
}
InfraPersistenceUtil.persistPrivateCloudSystemProfile(policy);
sysPolicyId = policy.getPolicyId();
logger.addInfo("Storage Policy Created: " +sysPolicyName);
return policy;
}
function registerUndoTask(vDCID, compPolicyId, netPolicyId, storPolicyId, sysPolicyId) {
// register undo task
var undoHandler = "custom_rollback_tenant_vdc";
var undoContext = ctxt.createInnerTaskContext(undoHandler);
var undoConfig = undoContext.getConfigObject();
undoConfig.vDCId = vDCID;
undoConfig.compPolicyId = compPolicyId;
undoConfig.netPolicyId = netPolicyId;
undoConfig.storPolicyId = storPolicyId;
undoConfig.sysPolicyId = sysPolicyId;
ctxt.getChangeTracker().undoableResourceModified("Rollback vdc ",
""+vDCID,"rollback ",
"Rollback "+vDCID,undoHandler,undoConfig);
}
createTenantPolicy();
//registerUndoTask(vDCID, compPolicyId, netPolicyId, storPolicyId, sysPolicyId);
This is very helpful - but what if you want to create the Tenant and then the vDC? The above assumes that there is a vDC profile to select - I am looking to create a Tenant and then a set of vDCs - there is no function I can find to create the vDC service profile specifying the Tenant/Group and then selecting the cloud.
I have 3x vCenters - one for Linux (but not Oracle) and Windows, 1x for Oracle Single and 1x for Oracle RAC - Is there a function that can be written to create the vDC Service Profile too (or supply the values for it)?
Thanks
Phil
31-05-2017 - Update
I have resolved this by creating 3x Service profiles (one for each vCenter for the Default Group) and the built in task to Create a vDC has the GroupID as an input - so I then ran this 3 times in my workflow using the vDC profile as a Base and supplying the GroupId input. This goes and creates a Network, Storage, Compute and Service Delivery Policy based on the vDC Profile and associates them within each of the new vDCs. I end up with 3x of each of the Network, Storage, Compute and Service Delivery (one for each vDC) per Tenant/Group but I am happy with that
Cool – glad it is working.
Orf Gelbrich
Check out UCS Director Workflow INDEX<https://communities.cisco.com/docs/DOC-56419> on Cisco Communities Site (Twitter @UCSDGURU)
Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community: