aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compose/README.md25
-rwxr-xr-xcompose/genenv.sh106
-rwxr-xr-xcompose/start.sh85
3 files changed, 216 insertions, 0 deletions
diff --git a/compose/README.md b/compose/README.md
new file mode 100644
index 000000000..ba0ce74e5
--- /dev/null
+++ b/compose/README.md
@@ -0,0 +1,25 @@
+Docker compose
+==============
+
+These scripts and docker compose files can be used to stand up a simple
+installation of openstack. Running the 'genenv.sh' script creates an
+'openstack.env' suitable for running on a single host system as well as 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 'start.sh' 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
+# nova network-create vmnet --fixed-range-v4=10.0.0.0/24 --bridge=br100 --multi-host=T
+# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
+# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
+#
+# nova keypair-add mykey > mykey.pem
+# chmod 600 mykey.pem
+# nova boot --flavor m1.medium --key_name mykey --image puffy_clouds instance_name
+# ssh -i mykey.pem cirros@<ip>
+```
diff --git a/compose/genenv.sh b/compose/genenv.sh
new file mode 100755
index 000000000..76582bddc
--- /dev/null
+++ b/compose/genenv.sh
@@ -0,0 +1,106 @@
+#!/bin/bash
+#
+# This script generates a minimal set of environment variables to allow
+# the openstack containers to operate. It is creating a configuration
+# suitable for an all-in-one installation of openstack.
+#
+# It also creates a suitable 'openrc' for use with the installed system.
+
+MY_IP=$(ip route get $(ip route | awk '$1 == "default" {print $3}') |
+ awk '$4 == "src" {print $5}')
+
+MY_DEV=$(ip route get $(ip route | awk '$1 == "default" {print $3}') |
+ awk '$4 == "src" {print $3}')
+
+echo MY_IP=$MY_IP
+echo MY_DEV=$MY_DEV
+
+# Database
+HOST_IP=$MY_IP
+MYSQL_ROOT_PASSWORD=kolla
+PASSWORD=12345
+
+# Host
+ADMIN_TENANT_NAME=admin
+PUBLIC_IP=$HOST_IP
+
+# RabbitMQ
+RABBITMQ_SERVICE_HOST=$HOST_IP
+RABBIT_USER=guest
+RABBIT_PASSWORD=guest
+
+# Keystone
+KEYSTONE_ADMIN_TOKEN=$PASSWORD
+KEYSTONE_DB_PASSWORD=kolla
+KEYSTONE_ADMIN_PASSWORD=$PASSWORD
+KEYSTONE_PUBLIC_SERVICE_HOST=$HOST_IP
+KEYSTONE_ADMIN_SERVICE_HOST=$HOST_IP
+KEYSTONE_AUTH_PROTOCOL=http
+
+# Glance
+GLANCE_DB_NAME=glance
+GLANCE_DB_USER=glance
+GLANCE_DB_PASSWORD=kolla
+GLANCE_KEYSTONE_USER=glance
+GLANCE_KEYSTONE_PASSWORD=glance
+GLANCE_API_SERVICE_HOST=$HOST_IP
+GLANCE_REGISTRY_SERVICE_HOST=$HOST_IP
+
+# Nova
+NOVA_DB_PASSWORD=nova
+NOVA_DB_NAME=nova
+NOVA_DB_USER=nova
+NOVA_KEYSTONE_USER=nova
+NOVA_KEYSTONE_PASSWORD=nova
+NOVA_API_SERVICE_HOST=$HOST_IP
+NOVA_EC2_SERVICE_HOST=$HOST_IP
+NOVA_PUBLIC_INTERFACE=$MY_DEV
+NOVA_FLAT_INTERFACE=$MY_DEV
+CONFIG_NETWORK=True
+
+cat > openrc <<EOF
+export OS_AUTH_URL="http://${KEYSTONE_PUBLIC_SERVICE_HOST}:5000/v2.0"
+export OS_USERNAME=$ADMIN_TENANT_NAME
+export OS_PASSWORD=$PASSWORD
+export OS_TENANT_NAME=$ADMIN_TENANT_NAME
+EOF
+
+cat > openstack.env <<EOF
+ADMIN_TENANT_NAME=$ADMIN_TENANT_NAME
+CONFIG_NETWORK=$CONFIG_NETWORK
+DB_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
+FLAT_INTERFACE=$NOVA_FLAT_INTERFACE
+GLANCE_API_SERVICE_HOST=$GLANCE_API_SERVICE_HOST
+GLANCE_DB_NAME=$GLANCE_DB_NAME
+GLANCE_DB_PASSWORD=$GLANCE_DB_PASSWORD
+GLANCE_DB_USER=$GLANCE_DB_USER
+GLANCE_KEYSTONE_PASSWORD=$GLANCE_KEYSTONE_PASSWORD
+GLANCE_KEYSTONE_USER=$GLANCE_KEYSTONE_USER
+GLANCE_REGISTRY_SERVICE_HOST=$GLANCE_REGISTRY_SERVICE_HOST
+KEYSTONE_ADMIN_PASSWORD=$KEYSTONE_ADMIN_PASSWORD
+KEYSTONE_ADMIN_SERVICE_HOST=$KEYSTONE_ADMIN_SERVICE_HOST
+KEYSTONE_ADMIN_SERVICE_PORT=5000
+KEYSTONE_ADMIN_TOKEN=$KEYSTONE_ADMIN_TOKEN
+KEYSTONE_AUTH_PROTOCOL=$KEYSTONE_AUTH_PROTOCOL
+KEYSTONE_DB_PASSWORD=$KEYSTONE_DB_PASSWORD
+KEYSTONE_PUBLIC_SERVICE_HOST=$KEYSTONE_PUBLIC_SERVICE_HOST
+MARIADB_SERVICE_HOST=$HOST_IP
+MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
+NETWORK_MANAGER=nova
+NOVA_API_SERVICE_HOST=$NOVA_API_SERVICE_HOST
+NOVA_DB_NAME=$NOVA_DB_NAME
+NOVA_DB_PASSWORD=$NOVA_DB_PASSWORD
+NOVA_DB_USER=$NOVA_DB_USER
+NOVA_EC2_API_SERVICE_HOST=$NOVA_EC2_SERVICE_HOST
+NOVA_EC2_SERVICE_HOST=$NOVA_EC2_SERVICE_HOST
+NOVA_KEYSTONE_PASSWORD=$NOVA_KEYSTONE_PASSWORD
+NOVA_KEYSTONE_USER=$NOVA_KEYSTONE_USER
+PUBLIC_INTERFACE=$NOVA_PUBLIC_INTERFACE
+PUBLIC_IP=$HOST_IP
+PUBLIC_IP=$PUBLIC_IP
+RABBITMQ_PASS=$RABBIT_PASSWORD
+RABBITMQ_SERVICE_HOST=$RABBITMQ_SERVICE_HOST
+RABBITMQ_USER=$RABBIT_USER
+RABBIT_PASSWORD=$RABBIT_PASSWORD
+RABBIT_USERID=$RABBIT_USER
+EOF
diff --git a/compose/start.sh b/compose/start.sh
new file mode 100755
index 000000000..1c533655c
--- /dev/null
+++ b/compose/start.sh
@@ -0,0 +1,85 @@
+#!/bin/bash -x
+#
+# 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.
+
+setenforce 0
+
+# This should probably go into nova-networking or nova-compute containers.
+modprobe ebtables
+
+MY_IP=$(ip route get $(ip route | awk '$1 == "default" {print $3}') |
+ awk '$4 == "src" {print $5}')
+
+# Source openrc for commands
+source openrc
+
+echo Starting rabbitmq and mariadb
+docker-compose -f rabbitmq.yml up -d
+docker-compose -f mariadb.yml up -d
+
+until mysql -u root --password=kolla --host=$MY_IP mysql -e "show tables;"
+do
+ echo waiting for mysql..
+ sleep 3
+done
+
+echo Starting keystone
+docker-compose -f keystone.yml up -d
+
+until keystone user-list
+do
+ echo waiting for keystone..
+ sleep 3
+done
+
+echo Starting glance
+docker-compose -f glance-api-registry.yml up -d
+
+echo Starting nova
+docker-compose -f nova-api-conductor-scheduler.yml up -d
+
+# I think we'll need this..
+#
+# until mysql -u root --password=kolla --host=$MY_IP mysql -e "use nova;"
+# do
+# echo waiting for nova db.
+# sleep 3
+# done
+
+echo "Waiting for nova-api to create keystone user.."
+until keystone user-list | grep nova
+do
+ echo waiting for keystone nova user
+ sleep 2
+done
+
+# This directory is shared with the host to allow qemu instance
+# configs to remain accross restarts.
+mkdir -p /etc/libvirt/qemu
+
+echo Starting nova compute
+
+docker-compose -f nova-compute-network.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 -o $IMAGE $IMAGE_URL/$IMAGE
+fi
+
+echo "Creating glance image.."
+glance image-create --name "puffy_clouds" --is-public true --disk-format qcow2 --container-format bare --file $IMAGE
+
+# Example usage:
+#
+# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
+# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
+# nova network-create vmnet --fixed-range-v4=10.0.0.0/24 --bridge=br100 --multi-host=T
+#
+# nova keypair-add mykey > mykey.pem
+# chmod 600 mykey.pem
+# nova boot --flavor m1.medium --key_name mykey --image puffy_clouds newInstanceName