Add scripts to setup development env 95/4795/4
authorQiLiang <liangqi1@huawei.com>
Thu, 17 Dec 2015 14:09:28 +0000 (14:09 +0000)
committerQiLiang <liangqi1@huawei.com>
Thu, 17 Dec 2015 14:32:21 +0000 (14:32 +0000)
Usage:

    apt-get install -y genisoimage \
        libvirt-bin \
        qemu-kvm
    service libvirt-bin restart

    cd bottlenecks/utils/rubbos_dev_env_setup
    ./deploy.sh

The deploy.sh will create 9 vms (ip from 192.168.122.11 ~ 19):
control,httpd,mysql,tomcat,client1,client2,client3,client4,benchmark

TODO: add scripts to build initial disk.img

JIRA:BOTTLENECK-24

Change-Id: I99b5bcae8b795cee80e8688aae18b69e46249548
Signed-off-by: QiLiang <liangqi1@huawei.com>
utils/rubbos_dev_env_setup/deploy.sh [new file with mode: 0755]
utils/rubbos_dev_env_setup/env_config.sh [new file with mode: 0644]
utils/rubbos_dev_env_setup/libvirt_template.xml [new file with mode: 0644]
utils/rubbos_dev_env_setup/mac_generator.sh [new file with mode: 0755]
utils/rubbos_dev_env_setup/meta-data_template [new file with mode: 0644]
utils/rubbos_dev_env_setup/user-data_template [new file with mode: 0644]

diff --git a/utils/rubbos_dev_env_setup/deploy.sh b/utils/rubbos_dev_env_setup/deploy.sh
new file mode 100755 (executable)
index 0000000..0b53d48
--- /dev/null
@@ -0,0 +1,98 @@
+#!/bin/bash
+
+# this is a modified copy of compass4nfv/deploy/host_virtual.sh
+
+set -x
+
+SCRIPT_DIR=`cd ${BASH_SOURCE[0]%/*};pwd`
+WORK_DIR=${SCRIPT_DIR}/work
+
+mkdir -p $WORK_DIR
+
+source ./env_config.sh
+
+host_vm_dir=$WORK_DIR/vm
+
+
+function download_iso()
+{
+    mkdir -p ${WORK_DIR}/cache
+    curl --connect-timeout 10 -o ${WORK_DIR}/cache/$IMAGE_NAME $IMAGE_URL
+}
+
+
+function tear_down_machines() {
+    for i in $HOSTNAMES; do
+        echo "tear down machine:" $i
+        sudo virsh destroy $i
+        sudo virsh undefine $i
+        rm -rf $host_vm_dir/$i
+    done
+}
+
+
+function get_host_macs() {
+    local mac_generator=${SCRIPT_DIR}/mac_generator.sh
+    local machines=
+
+    chmod +x $mac_generator
+    mac_array=$($mac_generator $VIRT_NUMBER)
+    machines=$(echo $mac_array)
+
+    echo $machines
+}
+
+function launch_host_vms() {
+    mac_array=($(get_host_macs))
+
+    echo ${mac_array[2]}
+    echo ${mac_array[*]}
+
+    old_ifs=$IFS
+    IFS=,
+    tear_down_machines
+    echo "bringing up vms ${mac_array[*]}"
+    i=0
+    for host in $HOSTNAMES; do
+        echo "creating vm disk for instance $host" \
+             "ip ${IPADDR_PREFIX}${i}" \
+             "mac ${mac_array[$i]}"
+        vm_dir=$host_vm_dir/$host
+        mkdir -p $vm_dir
+
+        cp ${WORK_DIR}/cache/$IMAGE_NAME $vm_dir
+
+        # create seed.iso
+        sed -e "s/REPLACE_IPADDR/${IPADDR_PREFIX}$((i+11))/g" \
+            -e "s/REPLACE_GATEWAY/${IPADDR_PREFIX}1/g" \
+            -e "s/REPLACE_HOSTNAME/${host}/g" \
+            meta-data_template \
+            > meta-data
+        cp user-data_template user-data
+        genisoimage  -output seed.iso -volid cidata -joliet -rock user-data meta-data
+        cp seed.iso $vm_dir
+
+        # create vm xml
+        sed -e "s/REPLACE_MEM/$VIRT_MEM/g" \
+            -e "s/REPLACE_CPU/$VIRT_CPUS/g" \
+            -e "s/REPLACE_NAME/$host/g" \
+            -e "s#REPLACE_IMAGE#$vm_dir/disk.img#g" \
+            -e "s#REPLACE_SEED_IMAGE#$vm_dir/seed.iso#g" \
+            -e "s/REPLACE_MAC_ADDR/${mac_array[$i]}/g" \
+            libvirt_template.xml \
+            > $vm_dir/libvirt.xml
+
+        sudo virsh define $vm_dir/libvirt.xml
+        sudo virsh start $host
+        let i=i+1
+    done
+    IFS=$old_ifs
+    rm -rf meta-data user-data seed.iso
+}
+
+
+download_iso
+launch_host_vms
+
+set +x
+
diff --git a/utils/rubbos_dev_env_setup/env_config.sh b/utils/rubbos_dev_env_setup/env_config.sh
new file mode 100644 (file)
index 0000000..326b9a5
--- /dev/null
@@ -0,0 +1,7 @@
+export HOSTNAMES=${HOSTNAMES:-"control,httpd,mysql,tomcat,client1,client2,client3,client4,benchmark"}
+export VIRT_NUMBER=9
+export VIRT_MEM=4096
+export VIRT_CPUS=4
+export IMAGE_URL=${IMAGE_URL:-"file:///bottlenecks/trusty-server-cloudimg-amd64-disk1.img"}
+export IMAGE_NAME=disk.img
+export IPADDR_PREFIX="192.168.122."
diff --git a/utils/rubbos_dev_env_setup/libvirt_template.xml b/utils/rubbos_dev_env_setup/libvirt_template.xml
new file mode 100644 (file)
index 0000000..eddeff0
--- /dev/null
@@ -0,0 +1,41 @@
+<domain type='kvm'>
+  <name>REPLACE_NAME</name>
+  <memory unit='MiB'>REPLACE_MEM</memory>
+  <currentMemory unit='MiB'>REPLACE_MEM</currentMemory>
+  <vcpu placement='static'>REPLACE_CPU</vcpu>
+  <os>
+    <type arch='x86_64'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <features>
+    <acpi/><apic/><pae/>
+  </features>
+  <clock offset="utc"/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+  <devices>
+    <disk type='file' device='disk'>
+      <driver name='qemu' type='qcow2'/>
+      <source file='REPLACE_IMAGE'/>
+      <target dev='vda' bus='virtio'/>
+    </disk>
+    <disk type='file' device='cdrom'>
+      <driver name='qemu'/>
+      <source file='REPLACE_SEED_IMAGE'/>
+      <target dev='hdb'/>
+      <readonly/>
+    </disk>
+    <interface type='network'>
+      <source network='default'/>
+      <mac address='REPLACE_MAC_ADDR'/>
+      <model type='virtio'/>
+    </interface>
+    <input type='tablet' bus='usb'/>
+    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/>
+    <console type='pty'/>
+    <video>
+      <model type='cirrus'/>
+    </video>
+  </devices>
+</domain>
diff --git a/utils/rubbos_dev_env_setup/mac_generator.sh b/utils/rubbos_dev_env_setup/mac_generator.sh
new file mode 100755 (executable)
index 0000000..bc5f6c2
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+# this is a modified copy from compass4nfv/deploy/mac_generator.sh
+
+function mac_address_part() {
+    hex_number=$(printf '%02x' $RANDOM)
+    number_length=${#hex_number}
+    number_start=$(expr $number_length - 2)
+    echo ${hex_number:$number_start:2}
+}
+
+function mac_address() {
+    echo "00:00:$(mac_address_part):$(mac_address_part):$(mac_address_part):$(mac_address_part)"
+}
+
+machines=''
+for i in `seq $1`; do
+  mac=$(mac_address)
+
+  if [[ -z $machines ]]; then
+    machines="${mac}"
+  else
+    machines="${machines} ${mac}"
+  fi
+done
+
+echo ${machines}
+
diff --git a/utils/rubbos_dev_env_setup/meta-data_template b/utils/rubbos_dev_env_setup/meta-data_template
new file mode 100644 (file)
index 0000000..43db659
--- /dev/null
@@ -0,0 +1,11 @@
+instance-id: iid-abcdeff
+network-interfaces: |
+  # The primary network interface
+  auto eth0
+  iface eth0 inet static
+  address REPLACE_IPADDR
+  netmask 255.255.255.0
+  gateway REPLACE_GATEWAY
+  dns-nameservers 8.8.8.8
+local-hostname: REPLACE_HOSTNAME
+
diff --git a/utils/rubbos_dev_env_setup/user-data_template b/utils/rubbos_dev_env_setup/user-data_template
new file mode 100644 (file)
index 0000000..77f616d
--- /dev/null
@@ -0,0 +1,2 @@
+#cloud-config
+