Orchestrator Function: Create a Distributed Virtual Switch

by Simon Sparks · 22 May 2014

To use this function add it to the class library file named OrchestratorService.ts

GitHub Repository: https://github.com/SimonSparksUK/Orchestrator

Filename: OrchestratorService.ts

Description: Orchestrator Function to Create a Distributed Virtual Switch – Part 1

Function serverFindAllForType

publicVcVmwareDistributedVirtualSwitchCreate(objVcNetworkFolder:VcNetworkFolder):VcVmwareDistributedVirtualSwitch{
letarrUplinkPortName:string[]= [];
arrUplinkPortName.push("dvUplink-A");
arrUplinkPortName.push("dvUplink-B");

letarrPortGroup:{ strPortgroupName:string, intVLANNumber:number, arr:any[], strLoadBalancingMethod:string}[]= [];
arrPortGroup.push({strPortgroupName:"pgVLAN-10-Management",intVLANNumber:10,strLoadBalancingMethod:"loadbalance_loadbased",arr: ["dvUplink-A","dvUplink-B"]});
arrPortGroup.push({strPortgroupName:"pgVLAN-20-Provisioning",intVLANNumber:20,strLoadBalancingMethod:"loadbalance_loadbased",arr: ["dvUplink-A","dvUplink-B"]});
arrPortGroup.push({strPortgroupName:"pgVLAN-30-vMotion-A",intVLANNumber:30,strLoadBalancingMethod:"loadbalance_loadbased",arr: ["dvUplink-A"]});
arrPortGroup.push({strPortgroupName:"pgVLAN-30-vMotion-B",intVLANNumber:30,strLoadBalancingMethod:"loadbalance_loadbased",arr: ["dvUplink-B"]});

letobjVcDVSNameArrayUplinkPortPolicy:VcDVSNameArrayUplinkPortPolicy=newVcDVSNameArrayUplinkPortPolicy();
objVcDVSNameArrayUplinkPortPolicy.uplinkPortName=arrUplinkPortName;

letobjVcDVSContactInfo:VcDVSContactInfo=newVcDVSContactInfo();
objVcDVSContactInfo.name="Administrator";
objVcDVSContactInfo.contact="Administrator";

letobjVcDVSPolicy:VcDVSPolicy=newVcDVSPolicy();
objVcDVSPolicy.autoPreInstallAllowed=true;
objVcDVSPolicy.autoUpgradeAllowed=true;
objVcDVSPolicy.partialUpgradeAllowed=true;

letobjVcBoolPolicy:VcBoolPolicy=newVcBoolPolicy();
objVcBoolPolicy.inherited=false;
objVcBoolPolicy.value=false;

letobjVcStringPolicy:VcStringPolicy=newVcStringPolicy();
objVcStringPolicy.inherited=false;
objVcStringPolicy.value="-1";

letarrVcNumericRangeVLANs:VcNumericRange[]= [];

arrPortGroup.forEach((objPortGroup)=>{

letintPortGroupVLAN:number=objPortGroup.intVLANNumber;

letobjVcNumericRangeCheck:VcNumericRange=arrVcNumericRangeVLANs.find((objVcNumericRange:VcNumericRange):boolean=>{

returnobjVcNumericRange.start===intPortGroupVLAN||objVcNumericRange.end===intPortGroupVLAN;

});

if (!objVcNumericRangeCheck){
letobjVcNumericRange:VcNumericRange=newVcNumericRange();
objVcNumericRange.start=intPortGroupVLAN;
objVcNumericRange.end=intPortGroupVLAN;

this.objLogger.info("Adding VLAN"+intPortGroupVLAN+" to the Trunk Allowed VLANs");

arrVcNumericRangeVLANs.push(objVcNumericRange);
}

});

letobjVcVmwareDistributedVirtualSwitchTrunkVlanSpec:VcVmwareDistributedVirtualSwitchTrunkVlanSpec=newVcVmwareDistributedVirtualSwitchTrunkVlanSpec();
objVcVmwareDistributedVirtualSwitchTrunkVlanSpec.inherited=false;
objVcVmwareDistributedVirtualSwitchTrunkVlanSpec.vlanId=arrVcNumericRangeVLANs;

letobjVcVMwareDVSPortSetting:VcVMwareDVSPortSetting=newVcVMwareDVSPortSetting();
objVcVMwareDVSPortSetting.vlan=objVcVmwareDistributedVirtualSwitchTrunkVlanSpec;
objVcVMwareDVSPortSetting.blocked=objVcBoolPolicy;
objVcVMwareDVSPortSetting.vmDirectPathGen2Allowed=objVcBoolPolicy;
objVcVMwareDVSPortSetting.networkResourcePoolKey=objVcStringPolicy;

letobjVcLinkDiscoveryProtocolConfig:VcLinkDiscoveryProtocolConfig=newVcLinkDiscoveryProtocolConfig();
objVcLinkDiscoveryProtocolConfig.protocol="cdp";
objVcLinkDiscoveryProtocolConfig.operation="both";

letarrVcDistributedVirtualSwitchHostMemberConfigSpec:VcDistributedVirtualSwitchHostMemberConfigSpec[]= [];

letarrVcSdkConnection:VcSdkConnection[]=VcPlugin.allSdkConnections;

arrVcSdkConnection.forEach((objVcSdkConnection:VcSdkConnection):void=>{

letarrVcHostSystem:VcHostSystem[]=objVcSdkConnection.allHostSystems;

arrVcHostSystem.forEach((objVcHostSystem:VcHostSystem):void=>{

letobjVcDistributedVirtualSwitchHostMemberConfigSpec:VcDistributedVirtualSwitchHostMemberConfigSpec=newVcDistributedVirtualSwitchHostMemberConfigSpec();
objVcDistributedVirtualSwitchHostMemberConfigSpec.operation="add";
objVcDistributedVirtualSwitchHostMemberConfigSpec.host=objVcHostSystem;

arrVcDistributedVirtualSwitchHostMemberConfigSpec.push(objVcDistributedVirtualSwitchHostMemberConfigSpec);
});
});

letobjVcVMwareDVSConfigSpec:VcVMwareDVSConfigSpec=newVcVMwareDVSConfigSpec();
objVcVMwareDVSConfigSpec.name="dvSwitch-vSphere-Services";
objVcVMwareDVSConfigSpec.description="dvSwitch-vSphere-Services";
objVcVMwareDVSConfigSpec.uplinkPortPolicy=objVcDVSNameArrayUplinkPortPolicy;
objVcVMwareDVSConfigSpec.configVersion="5.1.0";
objVcVMwareDVSConfigSpec.contact=objVcDVSContactInfo;
objVcVMwareDVSConfigSpec.defaultProxySwitchMaxNumPorts=1024;
objVcVMwareDVSConfigSpec.policy=objVcDVSPolicy;
objVcVMwareDVSConfigSpec.defaultPortConfig=objVcVMwareDVSPortSetting;
objVcVMwareDVSConfigSpec.maxMtu=9000;
objVcVMwareDVSConfigSpec.linkDiscoveryProtocolConfig=objVcLinkDiscoveryProtocolConfig;
objVcVMwareDVSConfigSpec.host=arrVcDistributedVirtualSwitchHostMemberConfigSpec;

//TO DO - SS - Check this
letobjVcDistributedVirtualSwitchProductSpec:VcDistributedVirtualSwitchProductSpec=newVcDistributedVirtualSwitchProductSpec();
objVcDistributedVirtualSwitchProductSpec.name="DVS";
objVcDistributedVirtualSwitchProductSpec.vendor="VMware";
objVcDistributedVirtualSwitchProductSpec.version="5.1.0";

letobjVcDistributedVirtualSwitchHostProductSpec:VcDistributedVirtualSwitchHostProductSpec=newVcDistributedVirtualSwitchHostProductSpec();
objVcDistributedVirtualSwitchHostProductSpec.productLineId="";
objVcDistributedVirtualSwitchHostProductSpec.version="";

letarrVcDistributedVirtualSwitchHostProductSpec:VcDistributedVirtualSwitchHostProductSpec[]= [];
arrVcDistributedVirtualSwitchHostProductSpec.push(objVcDistributedVirtualSwitchHostProductSpec);

letobjVcDVSCapability:VcDVSCapability=newVcDVSCapability();
objVcDVSCapability.compatibleHostComponentProductInfo=arrVcDistributedVirtualSwitchHostProductSpec;
objVcDVSCapability.dvPortGroupOperationSupported=true;
objVcDVSCapability.dvPortOperationSupported=true;
objVcDVSCapability.dvsOperationSupported=true;

letobjVcDVSCreateSpec:VcDVSCreateSpec=newVcDVSCreateSpec();
objVcDVSCreateSpec.configSpec=objVcVMwareDVSConfigSpec;
objVcDVSCreateSpec.productInfo=objVcDistributedVirtualSwitchProductSpec;
objVcDVSCreateSpec.capability=objVcDVSCapability;

letobjVcTask:VcTask=objVcNetworkFolder.createDVS_Task(objVcDVSCreateSpec);

letobjVcVmwareDistributedVirtualSwitch:VcVmwareDistributedVirtualSwitch=this.WaitForVcTaskEnd(objVcTask,1);

returnobjVcVmwareDistributedVirtualSwitch;
}

Discover more from Cloud Build Tools

Subscribe to get the latest posts sent to your email.

You may also like