first commit of deploy.sh for compass 96/296/6
authorJerry Zhao <zhaoxinyu@huawei.com>
Sat, 11 Apr 2015 00:21:10 +0000 (08:21 +0800)
committerJerry Zhao <zhaoxinyu@huawei.com>
Mon, 20 Apr 2015 12:46:01 +0000 (20:46 +0800)
with deploy.sh in this patch, a compass vagrant box
will be spawned along with 5 libvirt vms. compass api
will be called to install ubuntu 14.04 on those libvirt vms.
in a patch later, openstack will be configured to be installed.

JIRA: BGS-28

Change-Id: Ie5f8442331081289a1a81a8e3295c881b0504c3c
Signed-off-by: Jerry Zhao <zhaoxinyu@huawei.com>
compass/ci/deploy.sh [changed mode: 0644->0755]
compass/deploy/conf/base.conf [new file with mode: 0644]
compass/deploy/conf/five.conf [new file with mode: 0644]
compass/deploy/deploy-vm.sh [new file with mode: 0644]
compass/deploy/func.sh [new file with mode: 0644]
compass/deploy/mac_generator.sh [new file with mode: 0755]
compass/deploy/prepare.sh [new file with mode: 0644]
compass/deploy/setup-env.sh [new file with mode: 0644]

old mode 100644 (file)
new mode 100755 (executable)
index e69de29..fe754aa
@@ -0,0 +1,5 @@
+SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+CONF_NAME=$1
+source ${SCRIPT_DIR}/../deploy/prepare.sh || exit $?
+source ${SCRIPT_DIR}/../deploy/setup-env.sh || exit $?
+source ${SCRIPT_DIR}/../deploy/deploy-vm.sh || exit $?
diff --git a/compass/deploy/conf/base.conf b/compass/deploy/conf/base.conf
new file mode 100644 (file)
index 0000000..8362b9a
--- /dev/null
@@ -0,0 +1,60 @@
+export COMPASS_SERVER_URL="http://10.1.0.12/api"
+export COMPASS_USER_EMAIL="admin@huawei.com"
+export COMPASS_USER_PASSWORD="admin"
+export CLUSTER_NAME="opnfv2"
+export LANGUAGE="EN"
+export TIMEZONE="America/Los_Angeles"
+export NTP_SERVER="10.1.0.12"
+export NAMESERVERS="10.1.0.12"
+export DOMAIN="ods.com"
+export PARTITIONS="/home=5%,/tmp=5%,/var=20%"
+export SUBNETS="10.1.0.0/24,172.16.2.0/24,172.16.3.0/24,172.16.4.0/24"
+export MANAGEMENT_IP_START=${MANAGEMENT_IP_START:-'10.1.0.50'}
+export TENANT_IP_START=${TENANT_IP_START:-'172.16.2.50'}
+export PUBLIC_IP_START=${PUBLIC_IP_START:-'172.16.3.50'}
+export STORAGE_IP_START=${STORAGE_IP_START:-'172.16.4.50'}
+export MANAGEMENT_INTERFACE=${MANAGEMENT_INTERFACE:-eth0}
+export TENANT_INTERFACE=${TENANT_INTERFACE:-eth1}
+export STORAGE_INTERFACE=${STORAGE_INTERFACE:-eth3}
+export PUBLIC_INTERFACE=${PUBLIC_INTERFACE:-eth2}
+
+function next_ip {
+    ip_addr=$1
+    ip_base="$(echo $ip_addr | cut -d. -f'1 2 3')"
+    ip_last="$(echo $ip_addr | cut -d. -f4)"
+    let ip_last_next=$ip_last+1
+    echo "${ip_base}.${ip_last_next}"
+}
+
+if [ -z "$HOST_NETWORKS" ]; then
+    IFS=, read -a HOSTNAME_LIST <<< "$HOSTNAMES"
+    MANAGE_IP=${MANAGEMENT_IP_START}
+    TENANT_IP=${TENANT_IP_START}
+    PUBLIC_IP=${PUBLIC_IP_START}
+    STORAGE_IP=${STORAGE_IP_START}
+    for HOSTNAME in ${HOSTNAME_LIST[@]}; do
+        if [ -z "$HOST_NETWORKS" ]; then
+            HOST_NETWORKS="${HOSTNAME}:${MANAGEMENT_INTERFACE}=${MANAGE_IP}|is_mgmt,${TENANT_INTERFACE}=${TENANT_IP},${PUBLIC_INTERFACE}=${PUBLIC_IP}|is_promiscuous,${STORAGE_INTERFACE}=${STORAGE_IP}"
+        else
+            HOST_NETWORKS="${HOST_NETWORKS};${HOSTNAME}:${MANAGEMENT_INTERFACE}=${MANAGE_IP}|is_mgmt,${TENANT_INTERFACE}=${TENANT_IP},${PUBLIC_INTERFACE}=${PUBLIC_IP}|is_promiscuous,${STORAGE_INTERFACE}=${STORAGE_IP}"
+        fi
+        MANAGE_IP=$(next_ip ${MANAGE_IP})
+        TENANT_IP=$(next_ip ${TENANT_IP})
+        PUBLIC_IP=$(next_ip ${PUBLIC_IP})
+        STORAGE_IP=$(next_ip ${STORAGE_IP})
+    done
+    export HOST_NETWORKS
+fi
+
+export NETWORK_MAPPING=${NETWORK_MAPPING:-"management=${MANAGEMENT_INTERFACE},tenant=${TENANT_INTERFACE},storage=${STORAGE_INTERFACE},external=${PUBLIC_INTERFACE}"}
+
+export PROXY=""
+export IGNORE_PROXY=""
+export SEARCH_PATH="ods.com"
+export GATEWAY="10.1.0.1"
+export SERVER_CREDENTIAL="root=root"
+export LOCAL_REPO_URL=""
+export OS_CONFIG_FILENAME=""
+export SERVICE_CREDENTIALS="image:service=service,compute:service=service,dashboard:service=service,identity:service=service,metering:service=service,rabbitmq:service=service,volume:service=service,mysql:service=service"
+export CONSOLE_CREDENTIALS="admin:console=console,compute:console=console,dashboard:console=console,image:console=console,metering:console=console,network:console=console,object-store:console=console,volume:console=console"
+export PACKAGE_CONFIG_FILENAME=""
diff --git a/compass/deploy/conf/five.conf b/compass/deploy/conf/five.conf
new file mode 100644 (file)
index 0000000..e63e514
--- /dev/null
@@ -0,0 +1,19 @@
+export VIRT_NUMBER=5
+export VIRT_CPUS=4
+export VIRT_MEM=4096
+export VIRT_DISK=30G
+export 'ADAPTER_OS_PATTERN=(?i)ubuntu-14\.04.*'
+#export 'ADAPTER_OS_PATTERN=(?i)centos-6\.5.*'
+export ADAPTER_NAME="openstack_juno"
+export ADAPTER_TARGET_SYSTEM_PATTERN="^openstack$"
+export ADAPTER_FLAVOR_PATTERN="single-controller"
+export HOSTNAMES="host1,host2,host3,host4,host5"
+export HOST_ROLES="host1=controller,network;host2=compute,storage;host3=compute,storage;host4=compute,storage;host5=compute,storage"
+export DEFAULT_ROLES=""
+export SWITCH_IPS="1.1.1.1"
+export SWITCH_CREDENTIAL="version=2c,community=public"
+export DEPLOYMENT_TIMEOUT="90"
+export POLL_SWITCHES_FLAG="nopoll_switches"
+export DASHBOARD_URL=""
+export REGTEST_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+source ${REGTEST_DIR}/base.conf
diff --git a/compass/deploy/deploy-vm.sh b/compass/deploy/deploy-vm.sh
new file mode 100644 (file)
index 0000000..18857cd
--- /dev/null
@@ -0,0 +1,45 @@
+cd ..
+rm -rf compass-core
+git clone http://git.openstack.org/stackforge/compass-core -b dev/experimental
+cd compass-core
+virtualenv venv
+source venv/bin/activate
+pip install -i http://pypi.douban.com/simple -e .
+if [[ ! -f /var/log/compass ]]; then
+    sudo mkdir /var/log/compass
+    sudo chown -R 777 /var/log/compass
+fi
+if [[ ! -f /etc/compass ]]; then
+    sudo mkdir /etc/compass
+    sudo cp -rf conf/setting /etc/compass/.
+fi
+cp bin/switch_virtualenv.py.template bin/switch_virtualenv.py
+sed -i "s|\$PythonHome|$VIRTUAL_ENV|g" bin/switch_virtualenv.py
+#source ../compass-install/ci/allinone.conf
+bin/client.py --logfile= --loglevel=debug --logdir= --compass_server="${COMPASS_SERVER_URL}" \
+--compass_user_email="${COMPASS_USER_EMAIL}" --compass_user_password="${COMPASS_USER_PASSWORD}" \
+--cluster_name="${CLUSTER_NAME}" --language="${LANGUAGE}" --timezone="${TIMEZONE}" \
+--hostnames="${HOSTNAMES}" --partitions="${PARTITIONS}" --subnets="${SUBNETS}" \
+--adapter_os_pattern="${ADAPTER_OS_PATTERN}" --adapter_name="${ADAPTER_NAME}" \
+--adapter_target_system_pattern="${ADAPTER_TARGET_SYSTEM_PATTERN}" \
+--adapter_flavor_pattern="${ADAPTER_FLAVOR_PATTERN}" \
+--http_proxy="${PROXY}" --https_proxy="${PROXY}" --no_proxy="${IGNORE_PROXY}" \
+--ntp_server="${NTP_SERVER}" --dns_servers="${NAMESERVERS}" --domain="${DOMAIN}" \
+--search_path="${SEARCH_PATH}" --default_gateway="${GATEWAY}" \
+--server_credential="${SERVER_CREDENTIAL}" --local_repo_url="${LOCAL_REPO_URL}" \
+--os_config_json_file="${OS_CONFIG_FILENAME}" --service_credentials="${SERVICE_CREDENTIALS}" \
+--console_credentials="${CONSOLE_CREDENTIALS}" --host_networks="${HOST_NETWORKS}" \
+--network_mapping="${NETWORK_MAPPING}" --package_config_json_file="${PACKAGE_CONFIG_FILENAME}" \
+--host_roles="${HOST_ROLES}" --default_roles="${DEFAULT_ROLES}" --switch_ips="${SWITCH_IPS}" \
+--machines=${machines//\'} --switch_credential="${SWITCH_CREDENTIAL}" \
+--deployment_timeout="${DEPLOYMENT_TIMEOUT}" --${POLL_SWITCHES_FLAG} --dashboard_url="${DASHBOARD_URL}"
+deploy_result=$?
+tear_down_machines
+cd ../compass-install
+sudo vagrant destroy compass_nodocker
+if [[ $deploy_result != 0 ]]; then
+    echo "deployment failed"
+    exit 1
+else
+    echo "deployment complete"
+fi
diff --git a/compass/deploy/func.sh b/compass/deploy/func.sh
new file mode 100644 (file)
index 0000000..29c2c23
--- /dev/null
@@ -0,0 +1,20 @@
+function tear_down_machines() {
+    virtmachines=$(virsh list --name |grep pxe)
+    for virtmachine in $virtmachines; do
+        echo "destroy $virtmachine"
+        virsh destroy $virtmachine
+        if [[ "$?" != "0" ]]; then
+            echo "destroy instance $virtmachine failed"
+            exit 1
+        fi
+    done
+    virtmachines=$(virsh list --all --name |grep pxe)
+    for virtmachine in $virtmachines; do
+        echo "undefine $virtmachine"
+        virsh undefine $virtmachine
+        if [[ "$?" != "0" ]]; then
+            echo "undefine instance $virtmachine failed"
+            exit 1
+        fi
+    done
+}
diff --git a/compass/deploy/mac_generator.sh b/compass/deploy/mac_generator.sh
new file mode 100755 (executable)
index 0000000..ca898cb
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/bash
+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/compass/deploy/prepare.sh b/compass/deploy/prepare.sh
new file mode 100644 (file)
index 0000000..2086c5d
--- /dev/null
@@ -0,0 +1,35 @@
+sudo apt-get update -y
+sudo apt-get install git python-pip python-dev -y
+vagrant --version
+if [[ $? != 0 ]]; then
+    vagrant_pkg_url=https://dl.bintray.com/mitchellh/vagrant/vagrant_1.7.2_x86_64.deb
+    wget ${vagrant_pkg_url}
+    sudo dpkg -i $(basename ${vagrant_pkg_url})
+else
+    echo "vagrant is already installed"
+fi
+sudo apt-get install libxslt-dev libxml2-dev libvirt-dev build-essential qemu-utils qemu-kvm libvirt-bin virtinst libmysqld-dev -y
+sudo service libvirt-bin restart
+
+for plugin in vagrant-libvirt vagrant-mutate; do
+    vagrant plugin list |grep $plugin
+    if [[ $? != 0 ]]; then
+        vagrant plugin install $plugin --plugin-source https://ruby.taobao.org
+    else
+        echo "$plugin plugin is already installed"
+    fi
+done
+sudo pip install --upgrade ansible virtualenv
+#precise_box_vb_url=https://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box
+#precise_box_vb_filename=$(basename ${precise_box_vb_url})
+centos65_box_vb_url=https://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.5-x86_64-v20140504.box
+centos65_box_vb_filename=$(basename ${centos65_box_vb_url})
+#wget ${precise_box_vb_url}
+vagrant box list |grep centos65
+if [[ $? != 0 ]]; then
+    wget ${centos65_box_vb_url}
+    mv ${centos65_box_vb_filename} centos65.box
+    vagrant mutate centos65.box libvirt
+else
+    echo "centos65 box already exists"
+fi
diff --git a/compass/deploy/setup-env.sh b/compass/deploy/setup-env.sh
new file mode 100644 (file)
index 0000000..ffa9aa5
--- /dev/null
@@ -0,0 +1,61 @@
+rm -rf compass-install
+git clone http://git.openstack.org/stackforge/compass-install
+cd compass-install
+
+function join { local IFS="$1"; shift; echo "$*"; }
+source ${SCRIPT_DIR}/../deploy/conf/${CONF_NAME}.conf
+source ${SCRIPT_DIR}/../deploy/func.sh
+if [[ ! -z $VIRT_NUMBER ]]; then
+    mac_array=$(${SCRIPT_DIR}/../deploy/mac_generator.sh $VIRT_NUMBER)
+    mac_list=$(join , $mac_array)
+    echo "pxe_boot_macs: [${mac_list}]" >> install/group_vars/all
+    echo "test: true" >> install/group_vars/all
+fi
+virsh list |grep compass
+if [[ $? == 0 ]]; then
+    compass_old=`virsh list |grep compass|awk '{print$2}'`
+    virsh destroy ${compass_old}
+    virsh undefine ${compass_old}
+fi
+sudo vagrant up compass_nodocker
+if [[ $? != 0 ]]; then
+    echo "installation of compass failed"
+    sudo vagrant destroy compass_nodocker
+    exit 1
+fi
+echo "compass is up"
+
+tear_down_machines
+if [[ -n $mac_array ]]; then
+    echo "bringing up pxe boot vms"
+    i=0
+    for mac in $mac_array; do
+        echo "creating vm disk for instance pxe${i}"
+        sudo qemu-img create -f raw /home/pxe${i}.raw ${VIRT_DISK}
+        sudo virt-install --accelerate --hvm --connect qemu:///system \
+             --name pxe$i --ram=$VIRT_MEM --pxe --disk /home/pxe$i.raw,format=raw \
+             --vcpus=$VIRT_CPUS --graphics vnc,listen=0.0.0.0 \
+             --network=bridge:virbr2,mac=$mac \
+             --network=bridge:virbr2 \
+             --network=bridge:virbr2 \
+             --network=bridge:virbr2 \
+             --noautoconsole --autostart --os-type=linux --os-variant=rhel6
+        if [[ $? != 0 ]]; then
+            echo "launching pxe${i} failed"
+            exit 1
+        fi
+        echo "checking pxe${i} state"
+        state=$(virsh domstate pxe${i})
+        if [[ "$state" == "running" ]]; then
+            echo "pxe${i} is running"
+            sudo virsh destroy pxe${i}
+        fi
+        echo "add network boot option and make pxe${i} reboot if failing"
+        sudo sed -i "/<boot dev='hd'\/>/ a\    <boot dev='network'\/>" /etc/libvirt/qemu/pxe${i}.xml
+        sudo sed -i "/<boot dev='network'\/>/ a\    <bios useserial='yes' rebootTimeout='0'\/>" /etc/libvirt/qemu/pxe${i}.xml
+        sudo virsh define /etc/libvirt/qemu/pxe${i}.xml
+        sudo virsh start pxe${i}
+        let i=i+1
+    done
+fi
+machines=${mac_list}