From 75a6c3bc9f9569b615b055597e9d73a9bccef287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Andr=C3=A9?= Date: Wed, 15 Apr 2015 17:24:04 +0900 Subject: [PATCH] Introduce `tools/kolla` to interact with kolla This is supposed to prevent proliferation of scripts in "tools" directory and reduce code duplication. This first patch replaces tools/{start,stop,pull,status} scripts and more commands are to be added in the future. Change-Id: I3d99cf5033be8631d8e6f32a4c34d3b5ffcae7e8 --- compose/README.md | 8 +-- devenv/README.md | 2 +- docs/developer-env.md | 2 +- tools/kolla | 140 ++++++++++++++++++++++++++++++++++++++++++ tools/pull | 102 ------------------------------ tools/start | 92 --------------------------- tools/status | 47 -------------- tools/stop | 44 ------------- 8 files changed, 146 insertions(+), 291 deletions(-) create mode 100755 tools/kolla delete mode 100755 tools/pull delete mode 100755 tools/start delete mode 100755 tools/status delete mode 100755 tools/stop diff --git a/compose/README.md b/compose/README.md index a513f78a09..a60e3b883a 100644 --- a/compose/README.md +++ b/compose/README.md @@ -7,10 +7,10 @@ installation of openstack. Running the 'tools/genenv' script creates an 'openrc' to allow access to the installation. Once you have run that you can either manually start the containers using the -'docker-compose' command or try the 'tools/start' script which tries to start them -all in a reasonable order, waiting at key points for services to become -available. Once stood up you can issue the typical openstack commands to use -the installation: +'docker-compose' command or try the 'tools/kolla start' script which tries to +start them all in a reasonable order, waiting at key points for services to +become available. Once stood up you can issue the typical openstack commands +to use the installation: ``` # source openrc diff --git a/devenv/README.md b/devenv/README.md index 1f6d149f8a..ab9f10cbc5 100644 --- a/devenv/README.md +++ b/devenv/README.md @@ -127,7 +127,7 @@ you can edit for a different setup. Next, run the start script. - $ ./tools/start + $ ./tools/kolla start The `start` script is responsible for starting the containers using `docker-compose -f up -d`. diff --git a/docs/developer-env.md b/docs/developer-env.md index 165d37bade..c582c36aa7 100644 --- a/docs/developer-env.md +++ b/docs/developer-env.md @@ -61,7 +61,7 @@ you can edit for a different setup. Next, run the start script. - $ ./tools/start + $ ./tools/kolla start The `start` script is responsible for starting the containers using `docker-compose -f up -d`. diff --git a/tools/kolla b/tools/kolla new file mode 100755 index 0000000000..d8ebf508ec --- /dev/null +++ b/tools/kolla @@ -0,0 +1,140 @@ +#!/bin/bash +# +# This script can be used to interact with kolla. + +if [[ $EUID -ne 0 ]]; then + echo "You must execute this script as root." 1>&2 + exit 1 +fi + +# Move to top level directory +REAL_PATH=$(python -c "import os,sys;print os.path.realpath('$0')") +cd "$(dirname "$REAL_PATH")/.." + +NETWORK_MANAGER=$(grep -sri NETWORK_MANAGER ./compose/openstack.env | cut -f2 -d'=') +if [[ -z "$NETWORK_MANAGER" ]]; then + echo 'No network manager defined in ./compose/openstack.env, defaulting to "neutron".' + NETWORK_MANAGER="neutron" +fi + +function process { + local service=$1 + echo "$ACTION $service" + docker-compose -f ./compose/${service}.yml $COMPOSE_CMD +} + +function process_all { + process rabbit + process mariadb + process keystone + process glance-api-registry + process nova-api-conductor-scheduler + if [[ "${NETWORK_MANAGER}" == "nova" ]] ; then + process nova-compute-network + else + # Defaulting to neutron + process nova-compute + process neutron-server + process neutron-agents + fi + process heat-api-engine + process horizon +} + +function check_selinux { + # Check for SELinux in Enforcing mode and exit if found + if [[ -x /usr/sbin/getenforce ]]; then + if [[ $(/usr/sbin/getenforce) == "Enforcing" ]]; then + echo "You must execute this script without SELinux enforcing mode." + echo "Turn off SELinux enforcing mode by running:" + echo "$ sudo setenforce permissive" + exit 1 + fi + fi +} + +function pre_start { + check_selinux + + if [[ -r ./openrc ]]; then + # Source openrc for commands + source ./openrc + else + echo 'Could not find ./openrc; bootstrap your environment with "./tools/genenv".' + exit 1 + fi +} + +function post_start { + IMAGE_URL=http://download.cirros-cloud.net/0.3.3/ + IMAGE=cirros-0.3.3-x86_64-disk.img + if ! [ -f "$IMAGE" ]; then + curl -L -o ./$IMAGE $IMAGE_URL/$IMAGE + fi + + until keystone user-list | grep glance + do + echo "Waiting for OpenStack services to become available" + sleep 2 + done + + sleep 3 + + echo Creating glance image. + glance image-create --name cirros --is-public false --disk-format qcow2 --container-format bare --file ./$IMAGE + + echo Example usage: + echo + echo nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 + echo nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 + echo nova network-create vmnet --fixed-range-v4=10.0.0.0/24 --bridge=br100 --multi-host=T + echo + echo nova keypair-add mykey > mykey.pem + echo chmod 600 mykey.pem + echo nova boot --flavor m1.medium --key_name mykey --image cirros kolla_vm +} + +function usage { + cat <&2 - exit 1 -fi - -usage () { - cat <&2 - exit 1 -fi - -# Move to top level directory -REAL_PATH=$(python -c "import os,sys;print os.path.realpath('$0')") -cd "$(dirname "$REAL_PATH")/.." - -# Check for SELinux in Enforcing mode and exit if found -if [[ -x /usr/sbin/getenforce ]]; then - if [[ $(/usr/sbin/getenforce) == "Enforcing" ]]; then - echo "You must execute this script without SELinux enforcing mode." - echo "Turn off SELinux enforcing mode by running:" - echo "$ sudo setenforce permissive" - exit 1 - fi -fi - -MY_IP=$(ip route get $(ip route | awk '$1 == "default" {print $3}') | - awk '$4 == "src" {print $5}') - -NETWORK_MANAGER=$(grep -ri NETWORK_MANAGER compose/openstack.env | cut -f2 -d'=') - -# Source openrc for commands -source ./openrc - -echo Starting rabbitmq. -docker-compose -f ./compose/rabbitmq.yml up -d - -echo Starting mariadb. -docker-compose -f ./compose/mariadb.yml up -d - -echo Starting keystone. -docker-compose -f ./compose/keystone.yml up -d - -echo Starting glance. -docker-compose -f ./compose/glance-api-registry.yml up -d - -echo Starting nova. -docker-compose -f ./compose/nova-api-conductor-scheduler.yml up -d - -if [[ "${NETWORK_MANAGER}" == "nova" ]] ; then - echo Starting nova compute with nova networking. - docker-compose -f ./compose/nova-compute-network.yml up -d -elif [[ "${NETWORK_MANAGER}" == "neutron" ]] ; then - echo Starting nova compute with neutron networking. - docker-compose -f ./compose/nova-compute.yml up -d - docker-compose -f ./compose/neutron-server.yml up -d - docker-compose -f ./compose/neutron-agents.yml up -d -fi - -echo Starting heat. -docker-compose -f ./compose/heat-api-engine.yml up -d - -echo Starting Horizon. -docker-compose -f ./compose/horizon.yml up -d - -IMAGE_URL=http://download.cirros-cloud.net/0.3.3/ -IMAGE=cirros-0.3.3-x86_64-disk.img -if ! [ -f "$IMAGE" ]; then - curl -L -o ./$IMAGE $IMAGE_URL/$IMAGE -fi - -until keystone user-list | grep glance -do - echo "Waiting for OpenStack services to become available" - sleep 2 -done - -sleep 3 - -echo Creating glance image. -glance image-create --name cirros --is-public false --disk-format qcow2 --container-format bare --file ./$IMAGE - -echo Example usage: -echo -echo nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 -echo nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 -echo nova network-create vmnet --fixed-range-v4=10.0.0.0/24 --bridge=br100 --multi-host=T -echo -echo nova keypair-add mykey > mykey.pem -echo chmod 600 mykey.pem -echo nova boot --flavor m1.medium --key_name mykey --image cirros kolla_vm diff --git a/tools/status b/tools/status deleted file mode 100755 index 8a1a18f7ce..0000000000 --- a/tools/status +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash -# -# This script can be used to check the Kolla containers deployed -# from the start script. - -if [[ $EUID -ne 0 ]]; then - echo "You must execute this script as root." 1>&2 - exit 1 -fi - -# Move to top level directory -REAL_PATH=$(python -c "import os,sys;print os.path.realpath('$0')") -cd "$(dirname "$REAL_PATH")/.." - -# Check what network manager is set in the ENV file. -NETWORK_MANAGER=$(grep -ri NETWORK_MANAGER compose/openstack.env | cut -f2 -d'=') - -echo Checking rabbitmq. -docker-compose -f ./compose/rabbitmq.yml ps - -echo Checking mariadb. -docker-compose -f ./compose/mariadb.yml ps - -echo Checking keystone. -docker-compose -f ./compose/keystone.yml ps - -echo Checking glance. -docker-compose -f ./compose/glance-api-registry.yml ps - -echo Checking nova. -docker-compose -f ./compose/nova-api-conductor-scheduler.yml ps - -if [[ "${NETWORK_MANAGER}" == "nova" ]] ; then - echo Checking nova compute with nova networking. - docker-compose -f ./compose/nova-compute-network.yml ps -elif [[ "${NETWORK_MANAGER}" == "neutron" ]] ; then - echo Checking nova compute with neutron networking. - docker-compose -f ./compose/nova-compute.yml ps - docker-compose -f ./compose/neutron-server.yml ps - docker-compose -f ./compose/neutron-agents.yml ps -fi - -echo Checking heat. -docker-compose -f ./compose/heat-api-engine.yml ps - -echo Checking Horizon. -docker-compose -f ./compose/horizon.yml ps diff --git a/tools/stop b/tools/stop deleted file mode 100755 index 3a3db3d516..0000000000 --- a/tools/stop +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -# -# This script can be used to start a minimal set of containers that allows -# you to boot an instance. Note that it requires that you have some openstack -# clients available: keystone, glance, and nova, as well as mysql to ensure -# services are up. You will also need these in order to interact with the -# installation once started. - -# Move to top level directory -REAL_PATH=$(python -c "import os,sys;print os.path.realpath('$0')") -cd "$(dirname "$REAL_PATH")/.." - -NETWORK_MANAGER=$(grep -ri NETWORK_MANAGER compose/openstack.env | cut -f2 -d'=') - -echo Stopping rabbitmq. -docker-compose -f ./compose/rabbitmq.yml stop - -echo Stopping mariadb. -docker-compose -f ./compose/mariadb.yml stop - -echo Stopping keystone. -docker-compose -f ./compose/keystone.yml stop - -echo Stopping glance. -docker-compose -f ./compose/glance-api-registry.yml stop - -echo Stopping nova. -docker-compose -f ./compose/nova-api-conductor-scheduler.yml stop - -if [[ "${NETWORK_MANAGER}" == "nova" ]] ; then - echo Stopping nova compute with nova networking. - docker-compose -f ./compose/nova-compute-network.yml stop -elif [[ "${NETWORK_MANAGER}" == "neutron" ]] ; then - echo Stopping nova compute with neutron networking. - docker-compose -f ./compose/nova-compute.yml stop - docker-compose -f ./compose/neutron-server.yml up -d - docker-compose -f ./compose/neutron-agents.yml stop -fi - -echo Stopping heat. -docker-compose -f ./compose/heat-api-engine.yml stop - -echo Stopping Horizon. -docker-compose -f ./compose/horizon.yml stop