From 46cbe821a23db393d5e0e9693f13c0e1bc482026 Mon Sep 17 00:00:00 2001
From: Steven Dake <sdake@redhat.com>
Date: Thu, 2 Oct 2014 23:35:27 -0700
Subject: [PATCH] Initial libvirt and nova-compute structure

This lays the groundwork for the docker compute container.

The compute node is composed of libvirt container and a nove-compute
container.  We are going to have to sort out how to get k8s to schedule
this pod 1 per node.

Change-Id: I1e06e4b5f5bde83b582edfc1094084a4ee353371
Partial-blueprint: kube-libvirt-container
Partial-blueprint: kube-nova-container
---
 docker/build                                |  2 +-
 docker/nova-compute/build                   |  2 +
 docker/nova-compute/nova-base/Dockerfile    |  7 +++
 docker/nova-compute/nova-base/build         |  2 +
 docker/nova-compute/nova-base/push          |  2 +
 docker/nova-compute/nova-compute.json       | 56 +++++++++++++++++++++
 docker/nova-compute/nova-compute/Dockerfile | 22 ++++++++
 docker/nova-compute/nova-compute/build      |  2 +
 docker/nova-compute/nova-compute/push       |  2 +
 docker/nova-compute/nova-compute/start.sh   | 40 +++++++++++++++
 docker/nova-compute/nova-libvirt/Dockerfile |  8 +++
 docker/nova-compute/nova-libvirt/build      |  2 +
 docker/nova-compute/nova-libvirt/push       |  2 +
 docker/nova-compute/nova-libvirt/start.sh   |  2 +
 docker/nova-compute/push                    |  2 +
 15 files changed, 152 insertions(+), 1 deletion(-)
 create mode 100755 docker/nova-compute/build
 create mode 100644 docker/nova-compute/nova-base/Dockerfile
 create mode 100755 docker/nova-compute/nova-base/build
 create mode 100755 docker/nova-compute/nova-base/push
 create mode 100644 docker/nova-compute/nova-compute.json
 create mode 100644 docker/nova-compute/nova-compute/Dockerfile
 create mode 100755 docker/nova-compute/nova-compute/build
 create mode 100755 docker/nova-compute/nova-compute/push
 create mode 100644 docker/nova-compute/nova-compute/start.sh
 create mode 100644 docker/nova-compute/nova-libvirt/Dockerfile
 create mode 100755 docker/nova-compute/nova-libvirt/build
 create mode 100755 docker/nova-compute/nova-libvirt/push
 create mode 100644 docker/nova-compute/nova-libvirt/start.sh
 create mode 100755 docker/nova-compute/push

diff --git a/docker/build b/docker/build
index eea68befee..34b8e6cc87 100755
--- a/docker/build
+++ b/docker/build
@@ -1,7 +1,7 @@
 #!/bin/bash
 # If the directories were numbered, a simple find could be used to build ;-)
 
-CONTAINERS=(fedora-rdo-base cinder glance/glance-base glance/glance-api glance/glance-registry heat/heat-base heat/heat-api heat/heat-engine keystone mariadb rabbitmq swift/swift-base swift/swift-account swift/swift-container swift/swift-object swift/swift-proxy-server)
+CONTAINERS=(fedora-rdo-base cinder glance/glance-base glance/glance-api glance/glance-registry heat/heat-base heat/heat-api heat/heat-engine keystone mariadb rabbitmq swift/swift-base swift/swift-account swift/swift-container swift/swift-object swift/swift-proxy-server nova-compute/nova-base nova-compute/nova-compute nova-compute/nova-libvirt)
 
 for IMAGE in ${CONTAINERS[@]}; do
         pushd .
diff --git a/docker/nova-compute/build b/docker/nova-compute/build
new file mode 100755
index 0000000000..2c0ff1588e
--- /dev/null
+++ b/docker/nova-compute/build
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker build --tag kollaglue/fedora-rdo-nova-compute .
diff --git a/docker/nova-compute/nova-base/Dockerfile b/docker/nova-compute/nova-base/Dockerfile
new file mode 100644
index 0000000000..79675f772c
--- /dev/null
+++ b/docker/nova-compute/nova-base/Dockerfile
@@ -0,0 +1,7 @@
+FROM fedora-rdo-base
+MAINTAINER Steven Dake <sdake@redhat.com>
+
+RUN yum -y install \
+	openstack-utils \
+        openstack-nova-common \
+        mariadb && yum clean all
diff --git a/docker/nova-compute/nova-base/build b/docker/nova-compute/nova-base/build
new file mode 100755
index 0000000000..266c59185d
--- /dev/null
+++ b/docker/nova-compute/nova-base/build
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker build --tag kollaglue/fedora-rdo-nova-base .
diff --git a/docker/nova-compute/nova-base/push b/docker/nova-compute/nova-base/push
new file mode 100755
index 0000000000..ea92f760cb
--- /dev/null
+++ b/docker/nova-compute/nova-base/push
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker push kollaglue/fedora-rdo-nova-base .
diff --git a/docker/nova-compute/nova-compute.json b/docker/nova-compute/nova-compute.json
new file mode 100644
index 0000000000..062a65d852
--- /dev/null
+++ b/docker/nova-compute/nova-compute.json
@@ -0,0 +1,56 @@
+{
+  "id": "nova",
+  "desiredState": {
+    "manifest": {
+      "version": "v1beta1",
+      "id": "nova-1",
+      "containers": [
+        {
+          "name": "nova-compute",
+          "image": "fedora-rdo-nova-compute",
+          "ports": [
+            {"containerPort": 9292}
+          ],
+          "env": [
+            {
+              "name": "DB_ROOT_PASSWORD",
+              "value": "password"
+            },
+            {
+              "name": "HEAT_DB_PASSWORD",
+              "value": "novadbpassword"
+            },
+            {
+              "name": "KEYSTONE_ADMIN_TOKEN",
+              "value": "ADMINTOKEN"
+            }
+          ]
+        },
+        {
+          "name": "nova-libvirt",
+          "image": "fedora-rdo-nova-libvirt",
+          "ports": [
+            {"containerPort": 9292}
+          ],
+          "env": [
+            {
+              "name": "DB_ROOT_PASSWORD",
+              "value": "password"
+            },
+            {
+              "name": "HEAT_DB_PASSWORD",
+              "value": "novadbpassword"
+            },
+            {
+              "name": "KEYSTONE_ADMIN_TOKEN",
+              "value": "ADMINTOKEN"
+            }
+          ]
+        }
+      ]
+    }
+  },
+  "labels": {
+    "name": "nova-compute"
+  }
+}
diff --git a/docker/nova-compute/nova-compute/Dockerfile b/docker/nova-compute/nova-compute/Dockerfile
new file mode 100644
index 0000000000..3f14566b4e
--- /dev/null
+++ b/docker/nova-compute/nova-compute/Dockerfile
@@ -0,0 +1,22 @@
+FROM kollaglue/fedora-rdo-nova-base
+MAINTAINER Steven Dake <sdake@redhat.com>
+
+# broken out by operation - we don't need libvirt and
+# 200 deps for libguestfs (?)
+RUN yum -y install curl
+RUN yum -y install iscsi-initiator-utils
+RUN yum -y install iptables
+RUN yum -y install iptables-ipv6
+RUN yum -y install ipmitool
+RUN yum -y install libvirt-python
+RUN yum -y install python-libguestfs
+RUN yum -y install openssh-clients
+RUN yum -y install rsync
+RUN yum -y install lvm2
+RUN yum -y install python-cinderclient
+RUN yum -y install genisoimage
+RUN yum -y install bridge-utils
+RUN yum -y install openstack-nova-compute
+
+ADD ./start.sh /start.sh
+CMD ["/start.sh"]
diff --git a/docker/nova-compute/nova-compute/build b/docker/nova-compute/nova-compute/build
new file mode 100755
index 0000000000..2c0ff1588e
--- /dev/null
+++ b/docker/nova-compute/nova-compute/build
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker build --tag kollaglue/fedora-rdo-nova-compute .
diff --git a/docker/nova-compute/nova-compute/push b/docker/nova-compute/nova-compute/push
new file mode 100755
index 0000000000..5fe18cb3b8
--- /dev/null
+++ b/docker/nova-compute/nova-compute/push
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker push kollaglue/fedora-rdo-nova-compute .
diff --git a/docker/nova-compute/nova-compute/start.sh b/docker/nova-compute/nova-compute/start.sh
new file mode 100644
index 0000000000..58b4a3f18f
--- /dev/null
+++ b/docker/nova-compute/nova-compute/start.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+: ${NOVA_DB_USER:=nova}
+: ${NOVA_DB_NAME:=nova}
+: ${KEYSTONE_AUTH_PROTOCOL:=http}
+: ${NOVA_KEYSTONE_USER:=nova}
+: ${ADMIN_TENANT_NAME:=admin}
+
+if ! [ "$KEYSTONE_ADMIN_TOKEN" ]; then
+	echo "*** Missing KEYSTONE_ADMIN_TOKEN" >&2
+	exit 1
+fi
+
+if ! [ "$DB_ROOT_PASSWORD" ]; then
+	echo "*** Missing DB_ROOT_PASSWORD" >&2
+	exit 1
+fi
+
+if ! [ "$NOVA_DB_PASSWORD" ]; then
+	NOVA_DB_PASSWORD=$(openssl rand -hex 15)
+	export NOVA_DB_PASSWORD
+fi
+
+sh /opt/nova/config-nova.sh compute
+
+mysql -h ${MARIADBMASTER_PORT_3306_TCP_ADDR} -u root \
+	-p${DB_ROOT_PASSWORD} mysql <<EOF
+CREATE DATABASE IF NOT EXISTS ${NOVA_DB_NAME};
+GRANT ALL PRIVILEGES ON nova* TO
+	'${NOVA_DB_USER}'@'%' IDENTIFIED BY '${NOVA_DB_PASSWORD}'
+EOF
+
+export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
+export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONEMASTER_35357_PORT_35357_TCP_ADDR}:35357/v2.0"
+
+/usr/bin/keystone user-create --name ${NOVA_KEYSTONE_USER} --pass ${NOVA_ADMIN_PASSWORD}
+/usr/bin/keystone role-create --name ${NOVA_KEYSTONE_USER}
+/usr/bin/keystone user-role-add --user ${NOVA_KEYSTONE_USER} --role admin --tenant ${ADMIN_TENANT_NAME}
+
+exec /usr/bin/nova-compute
diff --git a/docker/nova-compute/nova-libvirt/Dockerfile b/docker/nova-compute/nova-libvirt/Dockerfile
new file mode 100644
index 0000000000..b5b70b1e20
--- /dev/null
+++ b/docker/nova-compute/nova-libvirt/Dockerfile
@@ -0,0 +1,8 @@
+FROM kollaglue/fedora-rdo-base
+MAINTAINER Steven Dake <sdake@redhat.com>
+
+RUN yum -y install libvirt \
+        libvirt-daemon-kvm && yum clean all
+
+ADD ./start.sh /start.sh
+CMD ["/start.sh"]
diff --git a/docker/nova-compute/nova-libvirt/build b/docker/nova-compute/nova-libvirt/build
new file mode 100755
index 0000000000..ec01bd27dc
--- /dev/null
+++ b/docker/nova-compute/nova-libvirt/build
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker build --tag kollaglue/fedora-rdo-nova-libvirt .
diff --git a/docker/nova-compute/nova-libvirt/push b/docker/nova-compute/nova-libvirt/push
new file mode 100755
index 0000000000..604e44afdb
--- /dev/null
+++ b/docker/nova-compute/nova-libvirt/push
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker push kollaglue/fedora-rdo-nova-libvirt .
diff --git a/docker/nova-compute/nova-libvirt/start.sh b/docker/nova-compute/nova-libvirt/start.sh
new file mode 100644
index 0000000000..0fe90e1a41
--- /dev/null
+++ b/docker/nova-compute/nova-libvirt/start.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+# placeholder for libvirt startup script
diff --git a/docker/nova-compute/push b/docker/nova-compute/push
new file mode 100755
index 0000000000..5fe18cb3b8
--- /dev/null
+++ b/docker/nova-compute/push
@@ -0,0 +1,2 @@
+#!/bin/bash
+docker push kollaglue/fedora-rdo-nova-compute .