Update scripts for defining libvirt vms
* added shared functions file
* added env_vars file
* added script for deploying slave
Related-Prod: PROD-29666 (PROD:29666)
Change-Id: Iaa7e6b7383465fda446a61ffb7d74573565b352c
diff --git a/predefine-vm/functions.sh b/predefine-vm/functions.sh
new file mode 100644
index 0000000..eb8b733
--- /dev/null
+++ b/predefine-vm/functions.sh
@@ -0,0 +1,191 @@
+#!/bin/bash
+
+envFile="$(pwd)/env_vars.sh"
+if [[ ! -f ${envFile} ]]; then
+ echo "ERROR: Can not find 'env_vars' libfile (${envFile}), check your mcp/mcp-common-scripts repo."
+ exit 1
+else
+ source ${envFile}
+fi
+
+function check_packages {
+ local slave=$1
+ local packages="libvirt-bin qemu-kvm"
+ if [[ -n "${slave}" ]]; then
+ packages="${packages} qemu-utils python-ipaddress mkisofs"
+ fi
+ for i in $packages; do
+ dpkg -s $i &> /dev/null || { echo "Package $i is not installed!"; exit 1; }
+ done
+}
+
+function create_network {
+ local network=${1}
+ virsh net-destroy ${network} 2> /dev/null || true
+ virsh net-undefine ${network} 2> /dev/null || true
+ virsh net-define ${network}.xml
+ virsh net-autostart ${network}
+ virsh net-start ${network}
+}
+
+function create_bridge_network {
+ local network=$1
+ local bridge_name=$2
+ cat <<EOF > $(pwd)/${network}.xml
+<network>
+ <name>${network}</name>
+ <forward mode="bridge"/>
+ <bridge name="${bridge_name}" />
+</network>
+EOF
+ create_network ${network}
+}
+
+function create_host_network {
+ local network=$1
+ local gateway=$2
+ local netmask=$3
+ local nat=${4:-false}
+ cat <<EOF > $(pwd)/${network}.xml
+<network>
+ <name>${network}</name>
+ <bridge name="${network}" />
+ <ip address="${gateway}" netmask="${netmask}"/>
+EOF
+ if [[ "${nat}" =~ [Tt]rue ]]; then
+ cat <<EOF>> $(pwd)/${network}.xml
+ <forward mode="nat"/>
+EOF
+ fi
+ cat <<EOF>> $(pwd)/${network}.xml
+</network>
+EOF
+ create_network ${network}
+}
+
+function place_file_under_libvirt() {
+ local libvirtPath="/var/lib/libvirt/images"
+ local image=${1}
+ local basenameFile=$(basename ${image})
+ cp "${image}" "${libvirtPath}/${basenameFile}"
+ chown -R libvirt-qemu:kvm "${libvirtPath}"
+ echo "${libvirtPath}/${basenameFile}"
+}
+
+function render_config() {
+ local vmName=$1
+ local vmMemKB=$2
+ local vmCPUs=$3
+ local vmSourceDisk=$4
+ local vmConfigDisk=$5
+ local createNetworks=${6:-true}
+ # Template definition
+ cat <<EOF > $(pwd)/${vmName}-vm.xml
+<domain type='kvm'>
+ <name>$vmName</name>
+ <memory unit='KiB'>$vmMemKB</memory>
+ <currentMemory unit='KiB'>$vmMemKB</currentMemory>
+ <vcpu placement='static'>$vmCPUs</vcpu>
+ <resource>
+ <partition>/machine</partition>
+ </resource>
+ <os>
+ <type >hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <features>
+ <acpi/>
+ </features>
+ <clock offset='utc'>
+ <timer name='rtc' tickpolicy='catchup'/>
+ <timer name='pit' tickpolicy='delay'/>
+ <timer name='hpet' present='no'/>
+ </clock>
+ <pm>
+ <suspend-to-mem enabled='no'/>
+ <suspend-to-disk enabled='no'/>
+ </pm>
+ <devices>
+ <emulator>/usr/bin/kvm-spice</emulator>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2' cache='none'/>
+ <source file='$vmSourceDisk'/>
+ <target dev='vda' bus='virtio'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
+ </disk>
+EOF
+ if [[ -n "${vmConfigDisk}" ]]; then
+ cat <<EOF >> $(pwd)/${vmName}-vm.xml
+ <disk type='file' device='cdrom'>
+ <driver name='qemu' type='raw'/>
+ <source file='$vmConfigDisk'/>
+ <backingStore/>
+ <target dev='hda' bus='ide'/>
+ <readonly/>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+ </disk>
+EOF
+ fi
+
+ if [[ "${VM_MGM_BRIDGE_DISABLE}" =~ [Ff]alse ]]; then
+ [[ "${createNetworks}" =~ [Tt]rue ]] && create_bridge_network "${VM_MGM_NETWORK_NAME}" "${VM_MGM_BRIDGE_NAME}"
+ cat <<EOF >> $(pwd)/${vmName}-vm.xml
+ <interface type='bridge'>
+ <source bridge='$VM_MGM_BRIDGE_NAME'/>
+ <model type='virtio'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+ </interface>
+EOF
+ else
+ [[ "${createNetworks}" =~ [Tt]rue ]] && create_host_network "${VM_MGM_NETWORK_NAME}" "${VM_MGM_NETWORK_GATEWAY}" "${VM_MGM_NETWORK_MASK}" true
+ cat <<EOF >> $(pwd)/${vmName}-vm.xml
+ <interface type='network'>
+ <source network='$VM_MGM_NETWORK_NAME'/>
+ <model type='virtio'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+ </interface>
+EOF
+fi
+
+ if [[ "${VM_MGM_BRIDGE_DISABLE}" =~ [Ff]alse ]]; then
+ [[ "${createNetworks}" =~ [Tt]rue ]] && create_bridge_network "${VM_CTL_NETWORK_NAME}" "${VM_CTL_BRIDGE_NAME}"
+ cat <<EOF >> $(pwd)/${vmName}-vm.xml
+ <interface type='bridge'>
+ <source bridge='$VM_CTL_BRIDGE_NAME'/>
+ <model type='virtio'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+ </interface>
+EOF
+ else
+ [[ "${createNetworks}" =~ [Tt]rue ]] && create_host_network "${VM_CTL_NETWORK_NAME}" "${VM_CTL_NETWORK_GATEWAY}" "${VM_CTL_NETWORK_MASK}"
+ cat <<EOF >> $(pwd)/${vmName}-vm.xml
+ <interface type='network'>
+ <source network='$VM_CTL_NETWORK_NAME'/>
+ <model type='virtio'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+ </interface>
+EOF
+fi
+
+ cat <<EOF >> $(pwd)/${vmName}-vm.xml
+ <serial type='pty'>
+ <source path='/dev/pts/1'/>
+ <target port='0'/>
+ </serial>
+ <console type='pty' tty='/dev/pts/1'>
+ <source path='/dev/pts/1'/>
+ <target type='serial' port='0'/>
+ </console>
+ <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
+ <listen type='address' address='127.0.0.1'/>
+ </graphics>
+ <rng model='virtio'>
+ <backend model='random'>/dev/random</backend>
+ </rng>
+ </devices>
+</domain>
+EOF
+
+ echo "INFO: rendered VM config:"
+ cat $(pwd)/${vmName}-vm.xml
+}
\ No newline at end of file