From 13978627a05115c5830c6e65e8e966871ba3613e Mon Sep 17 00:00:00 2001
From: Mate Lakat <mate.lakat@citrix.com>
Date: Fri, 17 Jan 2014 15:06:37 +0000
Subject: [PATCH] Separated image creation

---
 functions            |  16 +++++
 update-node-image.sh |  88 +++++++++++++++++++++++
 xenapi-os-testing.sh | 167 -------------------------------------------
 3 files changed, 104 insertions(+), 167 deletions(-)
 create mode 100644 functions
 create mode 100755 update-node-image.sh
 delete mode 100755 xenapi-os-testing.sh

diff --git a/functions b/functions
new file mode 100644
index 0000000..2a4dbbd
--- /dev/null
+++ b/functions
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+function get_dependencies() {
+    for dep in xenapi-in-the-cloud remote-bash; do
+        if [ -e $dep ]; then
+            ( cd $dep; git pull; )
+        else
+            git clone https://github.com/citrix-openstack/$dep
+        fi
+
+        if [ -e "$dep/bin" ]; then
+            export PATH=$PATH:$(pwd)/$dep/bin
+        fi
+
+    done
+}
diff --git a/update-node-image.sh b/update-node-image.sh
new file mode 100755
index 0000000..db96711
--- /dev/null
+++ b/update-node-image.sh
@@ -0,0 +1,88 @@
+#!/bin/bash
+
+set -eux
+
+THISDIR=$(dirname $(readlink -f $0))
+
+XENSERVER_PASSWORD="password"
+APPLIANCE_URL="http://downloads.vmd.citrix.com/OpenStack/xenapi-in-the-cloud-appliances/master.xva"
+KEY_NAME="matekey"
+KEY_PATH="$(pwd)/../xenapi-in-the-cloud/$KEY_NAME.pem"
+INSTANCE_NAME="$1"
+NODE_IMAGE="node"
+
+# Use this configuration to start with a cloud image
+IMAGE="62df001e-87ee-407c-b042-6f4e13f5d7e1"
+
+. $THISDIR/functions
+
+get_dependencies
+
+cd xenapi-in-the-cloud
+
+STAMP_FILE=$(./print-stamp-path.sh)
+
+nova delete "$INSTANCE_NAME" || true
+nova image-delete "$NODE_IMAGE" || true
+
+nova boot \
+    --poll \
+    --image "$IMAGE" \
+    --flavor "performance1-8" \
+    --key-name $KEY_NAME $INSTANCE_NAME
+
+IP=$(./get-ip-address-of-instance.sh $INSTANCE_NAME)
+
+eval $(ssh-agent)
+
+ssh-add $KEY_PATH
+
+{
+    cat << EOF
+    mkdir -p /opt/xenapi-in-the-cloud
+    dd of=/opt/xenapi-in-the-cloud/xenapi-in-rs.sh
+EOF
+    cat xenapi-in-rs.sh
+} | remote-bash root@IP
+
+remote-bash root@IP << EOF
+bash /opt/xenapi-in-the-cloud/xenapi-in-rs.sh $XENSERVER_PASSWORD $APPLIANCE_URL
+EOF
+
+./wait-until-done.sh $IP $KEY_PATH
+
+# Use this key for jenkins
+SSH_PUBLIC_KEY=$(ssh-keygen -y -f $KEY_PATH)
+
+remote-bash-agentfw root@$IP << EOF
+set -eux
+apt-get update
+
+apt-get -qy install git python-pip curl
+
+git clone https://review.openstack.org/p/openstack-infra/config
+
+# Copy nodepool scripts
+mkdir -p scripts
+cp config/modules/openstack_project/files/nodepool/scripts/* scripts/
+mv scripts /opt/nodepool-scripts
+chmod -R a+rx /opt/nodepool-scripts
+cd /opt/nodepool-scripts
+
+cd /root
+config/install_puppet.sh
+config/install_modules.sh
+puppet apply --modulepath=/root/config/modules:/etc/puppet/modules -e "class { openstack_project::slave_template: install_users => false,ssh_key => \\"${SSH_PUBLIC_KEY}\\" }"
+echo HostKey /etc/ssh/ssh_host_ecdsa_key >> /etc/ssh/sshd_config
+sudo -u jenkins -i /opt/nodepool-scripts/prepare_devstack.sh
+rm -f $STAMP_FILE
+sync
+ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.33.2 halt -p
+EOF
+
+# Wait until machine is halted
+sleep 30
+
+nova image-create --poll $INSTANCE_NAME $NODE_IMAGE
+nova delete $INSTANCE_NAME
+ssh-agent -k
diff --git a/xenapi-os-testing.sh b/xenapi-os-testing.sh
deleted file mode 100755
index 9be8d07..0000000
--- a/xenapi-os-testing.sh
+++ /dev/null
@@ -1,167 +0,0 @@
-#!/bin/bash
-
-set -eux
-
-XENSERVER_PASSWORD="password"
-APPLIANCE_URL="http://downloads.vmd.citrix.com/OpenStack/xenapi-in-the-cloud-appliances/master.xva"
-KEY_NAME="matekey"
-KEY_PATH="$(pwd)/../xenapi-in-the-cloud/$KEY_NAME.pem"
-INSTANCE_NAME="$1"
-
-# Use this configuration to start with a cloud image
-IMAGE="62df001e-87ee-407c-b042-6f4e13f5d7e1"
-IMAGE_CONTAINS_XENSERVER=0
-
-# If you already have a xenserver image, use that:
-# IMAGE="xssnap"
-# IMAGE_CONTAINS_XENSERVER=1
-
-# Download dependencies
-
-for dep in xenapi-in-the-cloud remote-bash; do
-    if [ -e $dep ]; then
-        ( cd $dep; git pull; )
-    else
-        git clone https://github.com/citrix-openstack/$dep
-    fi
-
-    if [ -e "$dep/bin" ]; then
-        export PATH=$PATH:$(pwd)/$dep/bin
-    fi
-
-done
-
-cd xenapi-in-the-cloud
-
-nova delete "$INSTANCE_NAME" || true
-
-nova boot \
-    --poll \
-    --image "$IMAGE" \
-    --flavor "performance1-8" \
-    --key-name $KEY_NAME $INSTANCE_NAME
-
-IP=$(./get-ip-address-of-instance.sh $INSTANCE_NAME)
-SSH_PARAMS="-i $KEY_PATH -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
-
-if [ "0" = "$IMAGE_CONTAINS_XENSERVER" ]; then
-    ssh \
-        $SSH_PARAMS \
-        root@$IP mkdir -p /opt/xenapi-in-the-cloud
-
-    scp \
-        $SSH_PARAMS \
-        xenapi-in-rs.sh root@$IP:/opt/xenapi-in-the-cloud/
-
-    ssh \
-        $SSH_PARAMS \
-        root@$IP bash /opt/xenapi-in-the-cloud/xenapi-in-rs.sh $XENSERVER_PASSWORD $APPLIANCE_URL
-fi
-
-./wait-until-done.sh $IP $KEY_PATH
-
-cat << EOF
-Instance is accessible with:
-
-ssh $SSH_PARAMS root@$IP
-EOF
-
-eval $(ssh-agent)
-
-ssh-add $KEY_PATH
-
-
-set +e
-remote-bash-agentfw root@$IP << EOF
-set -eux
-apt-get update
-
-apt-get -qy install git python-pip curl
-
-SSH_KEYS="\$(cat .ssh/authorized_keys)"
-
-git clone https://review.openstack.org/p/openstack-infra/config
-
-# Copy nodepool scripts
-mkdir -p scripts
-cp config/modules/openstack_project/files/nodepool/scripts/* scripts/
-mv scripts /opt/nodepool-scripts
-chmod -R a+rx /opt/nodepool-scripts
-cd /opt/nodepool-scripts
-
-cd /root
-config/install_puppet.sh
-config/install_modules.sh
-puppet apply --modulepath=/root/config/modules:/etc/puppet/modules -e "class { openstack_project::slave_template: install_users => false,ssh_key => \\"\${SSH_KEYS}\\" }"
-echo HostKey /etc/ssh/ssh_host_ecdsa_key >> /etc/ssh/sshd_config
-sudo -u jenkins -i /opt/nodepool-scripts/prepare_devstack.sh
-rm -f /root/done.stamp
-sync
-ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.33.2 halt -p
-EOF
-
-
-RESULT="$?"
-
-if ! [ "$RESULT" = "0" ]; then
-    ssh-agent -k
-    exit $RESULT
-fi
-
-ssh-agent -k
-exit 0
-
-# Wait until the box comes back
-while true; do
-    remote-bash jenkins@$IP << EOF
-set -eux
-true
-EOF
-    if [ "$?" = "0" ]; then
-        break
-    fi
-    sleep 1
-done
-
-remote-bash jenkins@$IP << EOF
-set -eux
-
-# This is originally executed by nodepool
-
-
-# These came from the Readme
-export REPO_URL=https://review.openstack.org/p
-export ZUUL_URL=/home/jenkins/workspace-cache
-export ZUUL_REF=HEAD
-export WORKSPACE=/home/jenkins/workspace/testing
-mkdir -p \$WORKSPACE
-
-export ZUUL_PROJECT=openstack/nova
-export ZUUL_BRANCH=master
-
-git clone \$REPO_URL/\$ZUUL_PROJECT \$ZUUL_URL/\$ZUUL_PROJECT
-cd \$ZUUL_URL/\$ZUUL_PROJECT
-git checkout remotes/origin/\$ZUUL_BRANCH
-
-cd \$WORKSPACE
-git clone https://github.com/matelakat/devstack-gate -b xenserver-integration
-
-# Values from the job template
-export PYTHONUNBUFFERED=true
-export DEVSTACK_GATE_TEMPEST=1
-export DEVSTACK_GATE_TEMPEST_FULL=1
-export DEVSTACK_GATE_VIRT_DRIVER=xenapi
-
-cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
-./safe-devstack-vm-gate-wrap.sh
-EOF
-
-RESULT="$?"
-
-ssh-agent -k
-
-cat << EOF
-Result is: $RESULT
-EOF
-
-exit $RESULT