VMware Cloud Community
BWinchell
Enthusiast
Enthusiast

Find virtual network based on naming convention

Hello,

I am working on my new 'VM auto deploy' workflow.  The one thing I learned from the 1st I built was I do not like to use configuration items (too clumsy and breaks everything when an object changes).

I have this part of a module that finds networks based on naming convention, then selects a preferred network (VDS higher priority).

Convention:

[%network address%_(DPortGrp || vNet)_VM##]

E.g. 192.168.1.0_DPortGrp_VM01 = network->192.168.1.0 DPortGrp->vds VM01-> virtual machine network

E.g. 192.168.1.0_vNetVM01 = network->192.168.1.0 vNet->vss VM01-> virtual machine network

My main question is around the code concerning building the object based array.  Is it the most efficient way to accomplish this?  (the full module is attached)

// Find networks matching RegEx

var ipNetworkRegEx = ipNetwork.replace("\.","\\\.","g");

var regExNetwork = "^(" + ipNetworkRegEx + ")_(" + vdsNetworkBody + "|" + vssNetworkBody + ")(_" + vmNetworkSuffix + "|" + vmNetworkSuffix + ")";

var matchedHostNetworks = [];

  for (i in allHostNetworks) {

  var currentObj = allHostNetworks[i];

  if (currentObj.name.match(new RegExp(regExNetwork,"gmi"))) {

  matchedHostNetworks.push({

  network:currentObj,

  type:currentObj.vimType

  });

  }

  }

  for (key in matchedHostNetworks) {

  System.log("Matched networks: " + matchedHostNetworks[key].network + " with type of " + matchedHostNetworks[key].type);

  }

  if (matchedHostNetworks.length < 1) {

  System.error("!!!!!!!!!!!!!!!!!!!!!Error!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

  System.error("Module=SetVmNetwork");

  System.error("No networks were found to match criteria: " + regExNetwork);

  System.error("!!!!!!!!!!!!!!!!!!!!!Error!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");

  throw exception;

  }

  if (matchedHostNetworks.length == 1) {

  System.log("ESXi host " + host.name + " has a network that matched the criteria: " + matchedHostNetworks[0].network);

  var choosenHostNetworks = matchedHostNetworks;

  }

  if (matchedHostNetworks.length > 1) {

  System.log("Multiple networks matched the criteria.");

  System.log("The following network meet the preference priority.");

  var choosenHostNetworks = matchedHostNetworks.filter(function(item){

  return item.type === networkPreference;

  })

  }

System.log("The final network choosen is: " + choosenHostNetworks[0].network);

Reply
0 Kudos
0 Replies