Cleanup image prepare script
This commit is contained in:
14
README.rst
14
README.rst
@@ -2,3 +2,17 @@ Shaker
|
|||||||
======
|
======
|
||||||
|
|
||||||
Shake VMs with our sheer-class tests!
|
Shake VMs with our sheer-class tests!
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
The tool requires OpenStack clients to be installed and available from the system shell.
|
||||||
|
OpenStack user must be specified in the environment (e.g. like sourcing openrc file).
|
||||||
|
During installation the tool uploads Ubuntu cloud image, boots VM, installs all needed packages
|
||||||
|
into it and creates snapshot with name `shaker-image`.
|
||||||
|
|
||||||
|
To install:
|
||||||
|
1. Run `./bin/prepare.sh`
|
||||||
|
|
||||||
|
How to run
|
||||||
|
----------
|
||||||
|
@@ -13,5 +13,5 @@ remote_shell() {
|
|||||||
host=$1
|
host=$1
|
||||||
key=$2
|
key=$2
|
||||||
command=$3
|
command=$3
|
||||||
ssh -i ${key} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ubuntu@${host} "$command"
|
ssh -i ${key} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10 ubuntu@${host} "$command"
|
||||||
}
|
}
|
||||||
|
@@ -10,7 +10,8 @@ setup_image() {
|
|||||||
message "Installing Shaker image, will take some time"
|
message "Installing Shaker image, will take some time"
|
||||||
|
|
||||||
message "Downloading Ubuntu cloud image"
|
message "Downloading Ubuntu cloud image"
|
||||||
IMG_FILE="shaker-template-image"
|
UUID=$(cat /proc/sys/kernel/random/uuid)
|
||||||
|
IMG_FILE="shaker-template-${UUID}"
|
||||||
glance image-create --name ${IMG_FILE} --disk-format qcow2 --container-format bare --is-public True --copy-from ${UBUNTU_CLOUD_IMAGE_URL}
|
glance image-create --name ${IMG_FILE} --disk-format qcow2 --container-format bare --is-public True --copy-from ${UBUNTU_CLOUD_IMAGE_URL}
|
||||||
|
|
||||||
until [ -n "$(glance image-show ${IMG_FILE} | grep status | grep active)" ]; do
|
until [ -n "$(glance image-show ${IMG_FILE} | grep status | grep active)" ]; do
|
||||||
@@ -18,25 +19,26 @@ setup_image() {
|
|||||||
done
|
done
|
||||||
|
|
||||||
message "Creating security group"
|
message "Creating security group"
|
||||||
SEC_GROUP="shaker-access"
|
SEC_GROUP="shaker-access-${UUID}"
|
||||||
nova secgroup-create ${SEC_GROUP} "Security Group for Shaker"
|
nova secgroup-create ${SEC_GROUP} "Security Group for Shaker"
|
||||||
nova secgroup-add-rule ${SEC_GROUP} icmp -1 -1 0.0.0.0/0
|
nova secgroup-add-rule ${SEC_GROUP} icmp -1 -1 0.0.0.0/0
|
||||||
nova secgroup-add-rule ${SEC_GROUP} tcp 1 65535 0.0.0.0/0
|
nova secgroup-add-rule ${SEC_GROUP} tcp 1 65535 0.0.0.0/0
|
||||||
nova secgroup-add-rule ${SEC_GROUP} udp 1 65535 0.0.0.0/0
|
nova secgroup-add-rule ${SEC_GROUP} udp 1 65535 0.0.0.0/0
|
||||||
|
|
||||||
message "Creating flavor"
|
message "Creating flavor"
|
||||||
nova flavor-create --is-public true m1.mini 6 1024 10 1
|
FLAVOR_NAME="shaker-flavor"
|
||||||
|
nova flavor-create --is-public true ${FLAVOR_NAME} auto 1024 10 1
|
||||||
|
|
||||||
message "Creating key pair"
|
message "Creating key pair"
|
||||||
KEY_NAME="shaker-key"
|
KEY_NAME="shaker-key-${UUID}"
|
||||||
KEY="`mktemp`"
|
KEY="`mktemp`"
|
||||||
nova keypair-add ${KEY_NAME} > ${KEY_NAME}
|
nova keypair-add ${KEY_NAME} > ${KEY}
|
||||||
chmod og-rw ${KEY}
|
chmod og-rw ${KEY}
|
||||||
|
|
||||||
message "Booting VM"
|
message "Booting VM"
|
||||||
NETWORK_ID=`neutron net-show net04 -f value -c id`
|
NETWORK_ID=`neutron net-show net04 -f value -c id`
|
||||||
VM="shaker-template"
|
VM="shaker-template"
|
||||||
nova boot --poll --flavor m1.mini --image ${IMG_FILE} --key_name ${KEY} --nic net-id=${NETWORK_ID} --security-groups ${SEC_GROUP} ${VM}
|
nova boot --poll --flavor ${FLAVOR_NAME} --image ${IMG_FILE} --key_name ${KEY_NAME} --nic net-id=${NETWORK_ID} --security-groups ${SEC_GROUP} ${VM}
|
||||||
|
|
||||||
message "Associating a floating IP with VM"
|
message "Associating a floating IP with VM"
|
||||||
FLOATING_IP=`neutron floatingip-create -f value -c floating_ip_address net04_ext | tail -1`
|
FLOATING_IP=`neutron floatingip-create -f value -c floating_ip_address net04_ext | tail -1`
|
||||||
@@ -44,23 +46,33 @@ setup_image() {
|
|||||||
|
|
||||||
message "Waiting for VM to boot up"
|
message "Waiting for VM to boot up"
|
||||||
until remote_shell ${FLOATING_IP} ${KEY} "echo"; do
|
until remote_shell ${FLOATING_IP} ${KEY} "echo"; do
|
||||||
sleep 5
|
sleep 10
|
||||||
done
|
done
|
||||||
|
|
||||||
message "Installing packages into VM"
|
message "Installing packages into VM"
|
||||||
remote_shell ${FLOATING_IP} ${KEY} "sudo apt-add-repository \"deb http://nova.clouds.archive.ubuntu.com/ubuntu/ trusty multiverse\""
|
remote_shell ${FLOATING_IP} ${KEY} "sudo apt-add-repository \"deb http://nova.clouds.archive.ubuntu.com/ubuntu/ trusty multiverse\""
|
||||||
remote_shell ${FLOATING_IP} ${KEY} "sudo apt-get update"
|
remote_shell ${FLOATING_IP} ${KEY} "sudo apt-get update"
|
||||||
remote_shell ${FLOATING_IP} ${KEY} "sudo apt-get -y install iperf netperf python-pip python-dev"
|
remote_shell ${FLOATING_IP} ${KEY} "sudo apt-get -y install iperf netperf python-pip git"
|
||||||
remote_shell ${FLOATING_IP} ${KEY} "sudo pip install netperf-wrapper numpy"
|
remote_shell ${FLOATING_IP} ${KEY} "sudo pip install netperf-wrapper"
|
||||||
|
|
||||||
message "Making VM snapshot"
|
message "Making VM snapshot"
|
||||||
nova image-create --poll ${VM} ${IMAGE_NAME}
|
nova image-create --poll ${VM} ${IMAGE_NAME}
|
||||||
|
glance image-update --is-public True ${IMAGE_NAME}
|
||||||
|
|
||||||
message "Destroy VM"
|
message "Destroy VM"
|
||||||
nova delete ${VM}
|
nova delete ${VM}
|
||||||
|
|
||||||
|
message "Waiting for VM to die"
|
||||||
|
until [ -z "$(nova list | grep ${VM})" ]; do
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
|
||||||
|
message "Cleaning up resources"
|
||||||
FP_ID=`neutron floatingip-list -f csv -c id -c floating_ip_address --quote none | grep ${FLOATING_IP} | awk -F "," '{print $1}'`
|
FP_ID=`neutron floatingip-list -f csv -c id -c floating_ip_address --quote none | grep ${FLOATING_IP} | awk -F "," '{print $1}'`
|
||||||
neutron floatingip-delete ${FP_ID}
|
neutron floatingip-delete ${FP_ID}
|
||||||
|
|
||||||
|
nova secgroup-delete ${SEC_GROUP}
|
||||||
|
nova keypair-delete ${KEY_NAME}
|
||||||
}
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
@@ -68,6 +80,8 @@ main() {
|
|||||||
echo "-- ${CHECK_IMAGE} --"
|
echo "-- ${CHECK_IMAGE} --"
|
||||||
if [ "${CHECK_IMAGE}" == "" ]; then
|
if [ "${CHECK_IMAGE}" == "" ]; then
|
||||||
setup_image
|
setup_image
|
||||||
|
else
|
||||||
|
message "Image ${IMAGE_NAME} already exists"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user