This his is not a UI feature, it’s a script me and my colleague Art Perkins created a while ago and you need to run it from a Nutanix Controller Virtual Machine (CVM).
To change VM virtual network placement for multiple VM (iIn fact you can use it for a single VM as well but might not make a lot of sense) just:
- Download the script from my GitHub repository or from the script section in the blog post, and copy/upload to a CVM and make it executable
- Run the script
Information about the script:
- When specifying VM name(s) you can use regular expressions
- You can list available networks is decided when running the script as you can see in the below example.
- Each VM that is target for the reconfiguration is listed with Name and NIC MAC address so you get a chance to cancel the reconfiguration if needed.
- All VM NICs, if a VM got more than one NIC, will be reconfigured.
The following sequence shows when I changed virtual network for 3 of 4 selected VMs (db1-1, db1-2, db1-3, db1-4) to virtual network vlan201, db1-4 was powered on and cannot be changed.
- List VM name and VM virtual network configuration by running the following command:
- Run the script by running the command:
- Run the verification command and make sure the VMs were moved to the specified destination virtual network, in my case vlan201. DB1-4 won’t be changed as previously mentioned.
Script
#!/bin/bash
# Script to change powered off VM Virtual Network.
# Authors: Magnus Andersson & Arthur Perkins @Nutanix
#
# Version 2.0 - List Virtual Networksm Virtual Network name (including spaces) management, functionality to manage multiple NICs per VM
# Version 1.0 - Initial release
#
IFS=$'\n'
clear
echo "Enter the name of the VM(s) you want to change network for, regex is accepted."
echo "Important: Single entry only and the VM(s) name is case sensitive."
echo
read -ep "Enter VM Name Search Term: " "vmname"
echo "-----------------------------------------------"
echo "Do you want to list available Virtual Networks?"
read -ep "Available options are Y or N:" "list"
if [ $list == "N" ] || [ $list == "n" ]
then
echo "Important: The Virtual Network name is case sensitive!"
read -ep "Enter the Virtual Network name:" "vmnet"
else
echo "Available Virtual Networks:"
/usr/local/nutanix/bin/acli net.list | awk -F'[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]+-[a-zA-Z0-9]' '{print $1}' | sed -n '1!p'
echo
echo "Important: The Virtual Network name is case sensitive!"
read -ep "Enter the Virtual Network name:" "vmnet"
fi
echo
echo "The VM(s) will be connected to the following Virtual Network when the script is completed:" $vmnet
echo
echo "These VM(s) with their NIC(s) associated MAC address will be changed:"
vmn=`/usr/local/nutanix/bin/acli vm.list | awk '{print $1}' | grep -e $vmname`
for i in ${vmn[@]}; do
echo -------------------------------------------------
echo $i
mac1=`/usr/local/nutanix/bin/acli vm.get $i | grep "mac_addr" | awk '{print $2}'`
echo $mac1
done
read -p "Press Enter to Continue or Ctrl-C to quit"
echo
for i in $vmn; do
echo
echo -------------------------------------------------
echo "Changing Virtual Network for VM $i"
vmstate=`/usr/local/nutanix/bin/acli vm.get $i | grep -i state | awk -F "\"" '{print $2}'`
if [ $vmstate == "kOn" ] ; then
echo "Cannot change Virtual Network for VM $i since it's powered on"
else
mac2=`/usr/local/nutanix/bin/acli vm.get $i | grep "mac_addr" | awk '{print $2}'`
for x in $mac2; do
/usr/local/nutanix/bin/acli vm.nic_update $i $x network=$vmnet
done
fi
done
The script has been tested on AOS 5.8 and AHV 20170830.151




2 pings