Guest User

Change a VM's IP address in CloudStack

a guest
Feb 19th, 2014
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.69 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. DB="cloud"
  4. USER="root"
  5. PASS="redacted"
  6. SYSTEM_VM_IDENTITY="/root/.ssh/id_rsa.cloud"
  7.  
  8. # validate arguments
  9. if [ $# -ne 2 ]; then
  10.         echo "Usage: $0 old-address new-address"
  11.         exit 1
  12. fi
  13. for ADDRESS in $1 $2; do
  14.         ipcalc -c $ADDRESS
  15.         if [ $? -ne 0 ]; then
  16.                 echo "Invalid IP address"
  17.                 exit 2
  18.         fi
  19. done
  20.  
  21. # script variables
  22. MYSQL_OPTS="-u$USER -p$PASS -B --disable-column-names"
  23. VM_OLD_ADDRESS=$1
  24. VM_NEW_ADDRESS=$2
  25. VM_OLD_ADDRESS_ESCAPED=$(echo $VM_OLD_ADDRESS | sed 's/\./\\\./g')
  26. VM_NEW_ADDRESS_ESCAPED=$(echo $VM_NEW_ADDRESS | sed 's/\./\\\./g')
  27. VM_OLD_ADDRESS_UNDERSCORE=$(echo $VM_OLD_ADDRESS | sed 's/\./_/g')
  28. VM_NEW_ADDRESS_UNDERSCORE=$(echo $VM_NEW_ADDRESS | sed 's/\./_/g')
  29. ROUTER_ADDRESS=$(mysql $MYSQL_OPTS -e "select ip4_address from nics where vm_type='DomainRouter' and ip4_address like '169.254.%';" $DB)
  30.  
  31. # edit nics table
  32. mysql $MYSQL_OPTS -e "update nics set ip4_address='$VM_NEW_ADDRESS' where ip4_address='$VM_OLD_ADDRESS';" $DB
  33.  
  34. # edit address entries on router
  35. ssh -i $SYSTEM_VM_IDENTITY -p 3922 root@$ROUTER_ADDRESS "sed -i 's/$VM_OLD_ADDRESS_ESCAPED/$VM_NEW_ADDRESS_ESCAPED/g' /var/lib/misc/dnsmasq.leases"
  36. ssh -i $SYSTEM_VM_IDENTITY -p 3922 root@$ROUTER_ADDRESS "sed -i 's/$VM_OLD_ADDRESS_ESCAPED/$VM_NEW_ADDRESS_ESCAPED/g' /etc/dhcphosts.txt"
  37. ssh -i $SYSTEM_VM_IDENTITY -p 3922 root@$ROUTER_ADDRESS "sed -i 's/$VM_OLD_ADDRESS_UNDERSCORE/$VM_NEW_ADDRESS_UNDERSCORE/g' /etc/dhcphosts.txt"
  38.  
  39. # restart dnsmasq
  40. ssh -i $SYSTEM_VM_IDENTITY -p 3922 root@$ROUTER_ADDRESS "service dnsmasq restart"
  41.  
  42. echo "Now reboot the VM or restart the network service in the VM so that it obtains the new address via DHCP."
Advertisement
Add Comment
Please, Sign In to add comment