111 lines
2.7 KiB
Plaintext
111 lines
2.7 KiB
Plaintext
![]() |
#!/bin/bash
|
||
|
#set -o xtrace
|
||
|
#Author: Naveen Joy: najoy@cisco.com
|
||
|
#Usage: boot-vm <vm-name> <network-name> [<availability-zon>] [<fixed_ip>]
|
||
|
|
||
|
###Program Variables###
|
||
|
#Cirros Image:
|
||
|
#image=02fffc39-807f-4890-bdff-48d665cca290
|
||
|
#Ubuntu 14.04 Image
|
||
|
image=ff03d4f4-f68a-4a32-9a8e-ce3f142d8a34
|
||
|
flavor=2
|
||
|
devstack_dir=/home/demo/devstack
|
||
|
source $devstack_dir/openrc admin admin
|
||
|
key_name=demo_key
|
||
|
#######################
|
||
|
|
||
|
if [[ $# < 2 ]]; then
|
||
|
echo "Usage $0 <vm-name> <network> [<availability-zone>] [<fixed_ip>]"
|
||
|
echo "When fixed_ip is null, DHCP is used.."
|
||
|
echo "When the availability-zone is null, the default AZ=nova is used"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
vm_name=${1:-}
|
||
|
net_name=${2:-}
|
||
|
az=${3:-"nova"}
|
||
|
fixed_ip=${4:-}
|
||
|
|
||
|
if [[ ${az} = "nova" ]] && [[ -n ${fixed_ip} ]]; then
|
||
|
gateway=10.0.0.101
|
||
|
else
|
||
|
gateway=10.0.0.100
|
||
|
fi
|
||
|
|
||
|
function make-user-data-fixed-ip() {
|
||
|
local -r fixed_ip=$1
|
||
|
local -r netmask="255.255.255.0"
|
||
|
local -r gateway=$2
|
||
|
read -r -d '' userdata << EOF
|
||
|
#cloud-config
|
||
|
bootcmd:
|
||
|
- ifconfig eth0 ${fixed_ip}
|
||
|
- ifconfig eth0 netmask ${netmask}
|
||
|
- route add default gw ${gateway}
|
||
|
- ifconfig eth0 up
|
||
|
|
||
|
users:
|
||
|
- default
|
||
|
- name: ubuntu
|
||
|
gecos: ubuntu
|
||
|
ssh_pwauth: True
|
||
|
|
||
|
chpasswd:
|
||
|
list: |
|
||
|
root:password
|
||
|
cloud-user:atomic
|
||
|
ubuntu:ubuntu
|
||
|
admin:ubuntu
|
||
|
expire: False
|
||
|
|
||
|
write_files:
|
||
|
- content: |
|
||
|
auto eth0
|
||
|
iface eth0 inet static
|
||
|
address ${fixed_ip}
|
||
|
netmask ${netmask}
|
||
|
gateway ${gateway}
|
||
|
dns-nameservers 171.68.226.120 171.70.168.183
|
||
|
dns-search cisco.com
|
||
|
path: /etc/network/interfaces.d/eth0.cfg
|
||
|
permissions: '0644'
|
||
|
|
||
|
runcmd:
|
||
|
- ifconfig eth0 down
|
||
|
- ifconfig eth0 up
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
function make-user-data() {
|
||
|
read -r -d '' userdata << EOF
|
||
|
#cloud-config
|
||
|
users:
|
||
|
- default
|
||
|
- name: ubuntu
|
||
|
gecos: ubuntu
|
||
|
ssh_pwauth: True
|
||
|
|
||
|
chpasswd:
|
||
|
list: |
|
||
|
root:password
|
||
|
cloud-user:atomic
|
||
|
ubuntu:ubuntu
|
||
|
admin:ubuntu
|
||
|
expire: False
|
||
|
EOF
|
||
|
}
|
||
|
|
||
|
if [[ -z "${fixed_ip}" ]]; then
|
||
|
echo "Booting with DHCP - VM:${vm_name}, image:${image}, flavor:${flavor}, network:${net_name}"
|
||
|
make-user-data
|
||
|
echo "${userdata}" > userdata
|
||
|
nova boot --image ${image} --flavor ${flavor} --nic net-name=${net_name} \
|
||
|
--user-data userdata --key-name ${key_name} --availability-zone ${az} ${vm_name}
|
||
|
else
|
||
|
echo "Booting with Static IP - VM:${vm_name}, IP:${fixed_ip}, image:${image}, flavor:${flavor}, network:${net_name} and AZ:${az}"
|
||
|
make-user-data-fixed-ip "${fixed_ip}" "${gateway}"
|
||
|
echo "${userdata}" > userdata
|
||
|
nova boot --image ${image} --flavor ${flavor} --nic net-name=${net_name},v4-fixed-ip=${fixed_ip} \
|
||
|
--user-data userdata --key-name ${key_name} --availability-zone ${az} ${vm_name}
|
||
|
fi
|