Have a set of new VMware hosts you need to configure matching vSwitch configurations on?
Have a cluster that needs updating with some new VLAN additions on a standard vSwitch?
If you answered ‘yes’ to either of those questions then continue reading!
In this script, we will loop through requesting the password from the user for each host (if each host has differing root passwords), or if you have vifp set up then use the vifptarget command for credentials.
Create a text file with either host names or IP addresses like so:
192.168.31.14 vmhost01.geekandi.net 172.28.91.194
and we will use this as input to the for loop.
#!/bin/sh # set username for authentication, normally this is 'root' VI_USERNAME=root ; export VI_USERNAME # within the for loop it will prompt you for each host's # root password. This section could be commented out if # you have already set up vifp parameters for host in `cat that-text-file.txt` ; do # if using the vifp then comment out this section echo -n "Enter ${host} root password: " read VI_PASSWORD ; export VI_PASSWORD # if using vifp then uncomment out this section # vifptarget --set ${i} # now the meat of the script # example: add a port group for a new NFS segment on VLAN 200 esxcfg-vswitch --server ${i} --add-pg NFS_VLAN200 vSwitch0 esxcfg-vswitch --server ${i} --vlan=200 --pg=NFS_VLAN200 vSwitch0 # example: add a port group to set up a vMotion segment on VLAN 300 esxcfg-vswitch --server ${i} --add-pg vMotion_VLAN300 vSwitch0 esxcfg-vswitch --server ${i} --vlan=300 --pg=vMotion_VLAN300 vSwitch0 done
But we still need vmkernel interfaces added and this isn’t as scriptable unless you have your servers set up with a known numbering scheme and it is easy to figure out the pattern to script, here are the command lines used to add vmkernel interfaces for the port groups above.
esxcfg-vmknic --add --ip 172.17.29.131 --netmask 255.255.0.0 --server <server_name> NFS_VLAN200 esxcfg-vmknic --add --ip 172.18.29.131 --netmask 255.255.0.0 --server <server_name> vMotion_VLAN300
Easy and simple to edit for your needs.
I used the above script fragments to create standard port groups on the default vSwitch0 when I rolled out my last VMware cluster then converted the vmkernel networking from standard to vDS via the vSphere client.
If you want to do the same for a vSphere Distributed Switch then you’ll need to hop on over to PowerCLI and load a 3rd party module (as of 5.x that is, where x < 5 at the time of this article, or using PowerCLI 5.1 R2 which was recently released). I have used this multiple times for another customer to set up their networking for VXLAN + VLAN + vCloud Director configuration(s).
Leave me a comment if you would like to see the same script via PowerCLI.