From 793d68a29ca0a3724714b27441ddd87ecbe0e44d Mon Sep 17 00:00:00 2001
From: Ryan Hallisey <rhallise@redhat.com>
Date: Tue, 14 Apr 2015 11:39:38 -0400
Subject: [PATCH] Cinder container

Cinder is going to be split up into four containers.
- cinder-api
- cinder-scheduler
- cinder-volume
- cinder-backup

Co-Authored-By: Daneyon Hansen <danehans@cisco.com>
Co-Authored-By: Ian Main <imain@redhat.com>

Implements: blueprint cinder-container
Closes-bug: #1460136

Change-Id: I688471151ffa54d547b9aa0f2f2e2ea7f68f288d
---
 .../binary/cinder-app/cinder-api/Dockerfile   |   6 +
 .../centos/binary/cinder-app/cinder-api/build |   1 +
 .../binary/cinder-app/cinder-api/check.sh     |  16 ++
 .../binary/cinder-app/cinder-api/start.sh     |  73 +++++++++
 .../cinder-app/cinder-backup/Dockerfile       |   6 +
 .../binary/cinder-app/cinder-backup/build     |   1 +
 .../binary/cinder-app/cinder-backup/start.sh  |  36 +++++
 .../cinder-base}/Dockerfile                   |   3 +-
 .../binary/cinder-app/cinder-base/build       |   1 +
 .../cinder-app/cinder-base/config-cinder.sh   | 132 ++++++++++++++++
 .../cinder-app/cinder-scheduler/Dockerfile    |   6 +
 .../binary/cinder-app/cinder-scheduler/build  |   1 +
 .../cinder-app/cinder-scheduler/start.sh      |  32 ++++
 .../cinder-app/cinder-volume/Dockerfile       |  17 ++
 .../binary/cinder-app/cinder-volume/build     |   1 +
 .../binary/cinder-app/cinder-volume/start.sh  |  75 +++++++++
 .../cinder-volume/volume-group-create.sh      |  22 +++
 docker/centos/binary/cinder-data/Dockerfile   |   9 ++
 .../binary/{cinder => cinder-data}/build      |   0
 docker/centos/binary/cinder/start.sh          | 145 ------------------
 20 files changed, 436 insertions(+), 147 deletions(-)
 create mode 100644 docker/centos/binary/cinder-app/cinder-api/Dockerfile
 create mode 120000 docker/centos/binary/cinder-app/cinder-api/build
 create mode 100755 docker/centos/binary/cinder-app/cinder-api/check.sh
 create mode 100755 docker/centos/binary/cinder-app/cinder-api/start.sh
 create mode 100644 docker/centos/binary/cinder-app/cinder-backup/Dockerfile
 create mode 120000 docker/centos/binary/cinder-app/cinder-backup/build
 create mode 100755 docker/centos/binary/cinder-app/cinder-backup/start.sh
 rename docker/centos/binary/{cinder => cinder-app/cinder-base}/Dockerfile (77%)
 create mode 120000 docker/centos/binary/cinder-app/cinder-base/build
 create mode 100644 docker/centos/binary/cinder-app/cinder-base/config-cinder.sh
 create mode 100644 docker/centos/binary/cinder-app/cinder-scheduler/Dockerfile
 create mode 120000 docker/centos/binary/cinder-app/cinder-scheduler/build
 create mode 100755 docker/centos/binary/cinder-app/cinder-scheduler/start.sh
 create mode 100644 docker/centos/binary/cinder-app/cinder-volume/Dockerfile
 create mode 120000 docker/centos/binary/cinder-app/cinder-volume/build
 create mode 100755 docker/centos/binary/cinder-app/cinder-volume/start.sh
 create mode 100755 docker/centos/binary/cinder-app/cinder-volume/volume-group-create.sh
 create mode 100644 docker/centos/binary/cinder-data/Dockerfile
 rename docker/centos/binary/{cinder => cinder-data}/build (100%)
 delete mode 100755 docker/centos/binary/cinder/start.sh

diff --git a/docker/centos/binary/cinder-app/cinder-api/Dockerfile b/docker/centos/binary/cinder-app/cinder-api/Dockerfile
new file mode 100644
index 0000000000..6fcb41eecc
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-api/Dockerfile
@@ -0,0 +1,6 @@
+FROM %%KOLLA_NAMESPACE%%/%%KOLLA_PREFIX%%cinder-base:%%KOLLA_TAG%%
+MAINTAINER Kolla Project (https://launchpad.net/kolla)
+
+COPY ./start.sh ./check.sh /
+
+CMD ["/start.sh"]
diff --git a/docker/centos/binary/cinder-app/cinder-api/build b/docker/centos/binary/cinder-app/cinder-api/build
new file mode 120000
index 0000000000..ec19138031
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-api/build
@@ -0,0 +1 @@
+../../../../../tools/build-docker-image
\ No newline at end of file
diff --git a/docker/centos/binary/cinder-app/cinder-api/check.sh b/docker/centos/binary/cinder-app/cinder-api/check.sh
new file mode 100755
index 0000000000..57b88f5669
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-api/check.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+RES=0
+
+. /openrc
+if ! keystone token-get > /dev/null; then
+    echo "ERROR: keystone token-get failed" >&2
+    RES=1
+else
+    if ! cinder list > /dev/null; then
+        echo "ERROR: cinder list failed" >&2
+        RES=1
+    fi
+fi
+
+exit $RES
diff --git a/docker/centos/binary/cinder-app/cinder-api/start.sh b/docker/centos/binary/cinder-app/cinder-api/start.sh
new file mode 100755
index 0000000000..28293ac6cc
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-api/start.sh
@@ -0,0 +1,73 @@
+#!/bin/bash
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-cinder.sh
+
+check_required_vars KEYSTONE_ADMIN_TOKEN KEYSTONE_ADMIN_SERVICE_HOST \
+                    ADMIN_TENANT_NAME PUBLIC_IP CINDER_API_SERVICE_HOST \
+                    KEYSTONE_AUTH_PROTOCOL KEYSTONE_ADMIN_SERVICE_PORT \
+                    CINDER_KEYSTONE_USER CINDER_KEYSTONE_PASSWORD \
+                    CINDER_API_LOG_FILE CINDER_API_SERVICE_LISTEN \
+                    CINDER_API_SERVICE_PORT CINDER_API_SERVICE_LISTEN
+
+fail_unless_os_service_running keystone
+
+cfg=/etc/cinder/cinder.conf
+
+# Set the auth credentials
+export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
+export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v2.0"
+
+# Create Keystone User
+crux user-create --update \
+    -n "${CINDER_KEYSTONE_USER}" \
+    -p "${CINDER_KEYSTONE_PASSWORD}" \
+    -t "${ADMIN_TENANT_NAME}" \
+    -r admin
+
+# Configure Keystone
+crux endpoint-create --remove-all \
+    -n cinder \
+    -t volume \
+    -P "http://${CINDER_API_SERVICE_HOST}:${CINDER_API_SERVICE_PORT}/v1/\$(tenant_id)s" \
+    -A "http://${CINDER_API_SERVICE_HOST}:${CINDER_API_SERVICE_PORT}/v1/\$(tenant_id)s" \
+    -I "http://${CINDER_API_SERVICE_HOST}:${CINDER_API_SERVICE_PORT}/v1/\$(tenant_id)s"
+
+crux endpoint-create --remove-all \
+    -n cinderv2 \
+    -t volumev2 \
+    -P "http://${CINDER_API_SERVICE_HOST}:${CINDER_API_SERVICE_PORT}/v2/\$(tenant_id)s" \
+    -A "http://${CINDER_API_SERVICE_HOST}:${CINDER_API_SERVICE_PORT}/v2/\$(tenant_id)s" \
+    -I "http://${CINDER_API_SERVICE_HOST}:${CINDER_API_SERVICE_PORT}/v2/\$(tenant_id)s"
+
+# Logging
+crudini --set $cfg \
+        DEFAULT \
+        log_file \
+        "${CINDER_API_LOG_FILE}"
+
+# API Configuration
+crudini --set $cfg \
+        DEFAULT \
+        osapi_volume_listen \
+        "${CINDER_API_SERVICE_LISTEN}"
+
+crudini --set $cfg \
+        DEFAULT \
+        osapi_volume_listen_port \
+        "${CINDER_API_SERVICE_PORT}"
+
+crudini --set $cfg \
+        DEFAULT \
+        enable_v1_api \
+        "true"
+
+crudini --set $cfg \
+        DEFAULT \
+        enable_v2_api \
+        "true"
+
+echo "Starting cinder-api"
+exec /usr/bin/cinder-api --config-file $cfg
diff --git a/docker/centos/binary/cinder-app/cinder-backup/Dockerfile b/docker/centos/binary/cinder-app/cinder-backup/Dockerfile
new file mode 100644
index 0000000000..fb44155b30
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-backup/Dockerfile
@@ -0,0 +1,6 @@
+FROM %%KOLLA_NAMESPACE%%/%%KOLLA_PREFIX%%cinder-base:%%KOLLA_TAG%%
+MAINTAINER Kolla Project (https://launchpad.net/kolla)
+
+COPY ./start.sh /start.sh
+
+CMD ["/start.sh"]
diff --git a/docker/centos/binary/cinder-app/cinder-backup/build b/docker/centos/binary/cinder-app/cinder-backup/build
new file mode 120000
index 0000000000..ec19138031
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-backup/build
@@ -0,0 +1 @@
+../../../../../tools/build-docker-image
\ No newline at end of file
diff --git a/docker/centos/binary/cinder-app/cinder-backup/start.sh b/docker/centos/binary/cinder-app/cinder-backup/start.sh
new file mode 100755
index 0000000000..5dff79b356
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-backup/start.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-cinder.sh
+
+check_required_vars CINDER_BACKUP_DRIVER CINDER_BACKUP_MANAGER \
+                    CINDER_BACKUP_API_CLASS CINDER_BACKUP_NAME_TEMPLATE
+
+cfg=/etc/cinder/cinder.conf
+
+# volume backup configuration
+crudini --set $cfg \
+        DEFAULT \
+        backup_driver \
+        "${CINDER_BACKUP_DRIVER}"
+crudini --set $cfg \
+        DEFAULT \
+        backup_topic \
+        "cinder-backup"
+crudini --set $cfg \
+        DEFAULT \
+        backup_manager \
+        "${CINDER_BACKUP_MANAGER}"
+crudini --set $cfg \
+        DEFAULT \
+        backup_api_class \
+        "${CINDER_BACKUP_API_CLASS}"
+crudini --set $cfg \
+        DEFAULT \
+        backup_name_template \
+        "${CINDER_BACKUP_NAME_TEMPLATE}"
+
+echo "Starting cinder-backup"
+exec /usr/bin/cinder-backup --config-file $cfg
diff --git a/docker/centos/binary/cinder/Dockerfile b/docker/centos/binary/cinder-app/cinder-base/Dockerfile
similarity index 77%
rename from docker/centos/binary/cinder/Dockerfile
rename to docker/centos/binary/cinder-app/cinder-base/Dockerfile
index 3dd7eca59b..643f0645ba 100644
--- a/docker/centos/binary/cinder/Dockerfile
+++ b/docker/centos/binary/cinder-app/cinder-base/Dockerfile
@@ -3,6 +3,5 @@ MAINTAINER Kolla Project (https://launchpad.net/kolla)
 
 RUN yum -y install openstack-cinder && yum clean all
 
-ADD ./start.sh /start.sh
-CMD ["/start.sh"]
+COPY config-cinder.sh /opt/kolla/config-cinder.sh
 
diff --git a/docker/centos/binary/cinder-app/cinder-base/build b/docker/centos/binary/cinder-app/cinder-base/build
new file mode 120000
index 0000000000..ec19138031
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-base/build
@@ -0,0 +1 @@
+../../../../../tools/build-docker-image
\ No newline at end of file
diff --git a/docker/centos/binary/cinder-app/cinder-base/config-cinder.sh b/docker/centos/binary/cinder-app/cinder-base/config-cinder.sh
new file mode 100644
index 0000000000..f82cb5510c
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-base/config-cinder.sh
@@ -0,0 +1,132 @@
+#!/bin/sh
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+
+check_required_vars CINDER_DB_PASSWORD CINDER_KEYSTONE_PASSWORD \
+                    KEYSTONE_PUBLIC_SERVICE_HOST RABBITMQ_SERVICE_HOST \
+                    GLANCE_API_SERVICE_HOST MARIADB_SERVICE_HOST \
+                    RABBITMQ_SERVICE_HOST RABBITMQ_SERVICE_PORT \
+                    RABBIT_USERID RABBIT_PASSWORD GLANCE_API_SERVICE_HOST \
+                    GLANCE_API_SERVICE_PORT ADMIN_TENANT_NAME \
+                    CINDER_DB_NAME CINDER_DB_USER CINDER_KEYSTONE_USER \
+                    PUBLIC_IP KEYSTONE_AUTH_PROTOCOL CINDER_LOG_DIR
+
+dump_vars
+
+cat > /openrc <<EOF
+export OS_AUTH_URL="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_PUBLIC_SERVICE_HOST}:${KEYSTONE_PUBLIC_SERVICE_PORT}/v2.0"
+export OS_USERNAME="${CINDER_KEYSTONE_USER}"
+export OS_PASSWORD="${CINDER_KEYSTONE_PASSWORD}"
+export OS_TENANT_NAME="${ADMIN_TENANT_NAME}"
+EOF
+
+cfg=/etc/cinder/cinder.conf
+
+# Logging
+crudini --set $cfg \
+        DEFAULT \
+        log_dir \
+        "${CINDER_LOG_DIR}"
+crudini --set $cfg \
+        DEFAULT \
+        verbose \
+        "${VERBOSE_LOGGING}"
+crudini --set $cfg \
+        DEFAULT \
+        debug \
+        "${DEBUG_LOGGING}"
+
+# backend
+crudini --set $cfg \
+        DEFAULT \
+        rpc_backend \
+        "cinder.openstack.common.rpc.impl_kombu"
+
+# rabbit
+crudini --set $cfg \
+        DEFAULT \
+        rabbit_host \
+        "${RABBITMQ_SERVICE_HOST}"
+crudini --set $cfg \
+        DEFAULT \
+        rabbit_port \
+        "${RABBITMQ_SERVICE_PORT}"
+crudini --set $cfg \
+        DEFAULT \
+        rabbit_hosts \
+        "${RABBITMQ_SERVICE_HOST}:${RABBITMQ_SERVICE_PORT}"
+crudini --set $cfg \
+        DEFAULT \
+        rabbit_userid \
+        "${RABBIT_USERID}"
+crudini --set $cfg \
+        DEFAULT \
+        rabbit_password \
+        "${RABBIT_PASSWORD}"
+crudini --set /etc/cinder/cinder.conf \
+        DEFAULT \
+        rabbit_virtual_host \
+        "/"
+crudini --set /etc/cinder/cinder.conf \
+        DEFAULT \
+        rabbit_ha_queues \
+        "False"
+
+# control_exchange
+crudini --set /etc/cinder/cinder.conf \
+        DEFAULT \
+        control_exchange \
+        "openstack"
+
+# glance
+crudini --set $cfg \
+        DEFAULT \
+        glance_host \
+        "${GLANCE_API_SERVICE_HOST}"
+crudini --set $cfg \
+        DEFAULT \
+        glance_port \
+        "${GLANCE_API_SERVICE_PORT}"
+
+# database
+crudini --set $cfg \
+        database \
+        connection \
+        "mysql://${CINDER_DB_USER}:${CINDER_DB_PASSWORD}@${MARIADB_SERVICE_HOST}/${CINDER_DB_NAME}"
+
+# keystone
+crudini --set $cfg \
+        DEFAULT \
+        auth_strategy \
+        "keystone"
+crudini --del $cfg \
+        keystone_authtoken \
+        auth_protocol
+crudini --del $cfg \
+        keystone_authtoken \
+        auth_host
+crudini --del $cfg \
+        keystone_authtoken \
+        auth_port
+crudini --set $cfg \
+        keystone_authtoken \
+        auth_uri \
+        "${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_PUBLIC_SERVICE_HOST}:${KEYSTONE_PUBLIC_SERVICE_PORT}/v2.0"
+crudini --set $cfg \
+        keystone_authtoken \
+        identity_uri \
+        "${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}"
+crudini --set $cfg \
+        keystone_authtoken \
+        admin_tenant_name \
+        "${ADMIN_TENANT_NAME}"
+crudini --set $cfg \
+        keystone_authtoken \
+        admin_user \
+        "${CINDER_KEYSTONE_USER}"
+crudini --set $cfg \
+        keystone_authtoken \
+        admin_password \
+        "${CINDER_KEYSTONE_PASSWORD}"
diff --git a/docker/centos/binary/cinder-app/cinder-scheduler/Dockerfile b/docker/centos/binary/cinder-app/cinder-scheduler/Dockerfile
new file mode 100644
index 0000000000..344dc142f5
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-scheduler/Dockerfile
@@ -0,0 +1,6 @@
+FROM %%KOLLA_NAMESPACE%%/%%KOLLA_PREFIX%%cinder-base:%%KOLLA_TAG%%
+MAINTAINER Kolla Project (https://launchpad.net/kolla)
+
+ADD ./start.sh /start.sh
+
+CMD ["/start.sh"]
diff --git a/docker/centos/binary/cinder-app/cinder-scheduler/build b/docker/centos/binary/cinder-app/cinder-scheduler/build
new file mode 120000
index 0000000000..ec19138031
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-scheduler/build
@@ -0,0 +1 @@
+../../../../../tools/build-docker-image
\ No newline at end of file
diff --git a/docker/centos/binary/cinder-app/cinder-scheduler/start.sh b/docker/centos/binary/cinder-app/cinder-scheduler/start.sh
new file mode 100755
index 0000000000..93efeb4062
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-scheduler/start.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-cinder.sh
+
+fail_unless_db
+
+check_required_vars MARIADB_SERVICE_HOST DB_ROOT_PASSWORD \
+                    CINDER_DB_NAME CINDER_DB_USER CINDER_DB_PASSWORD \
+                    CINDER_SCHEDULER_LOG_FILE INIT_CINDER_DB
+
+cfg=/etc/cinder/cinder.conf
+
+if [ "${INIT_CINDER_DB}" == "true" ]; then
+    mysql -h ${MARIADB_SERVICE_HOST} -u root -p${DB_ROOT_PASSWORD} mysql <<EOF
+CREATE DATABASE IF NOT EXISTS ${CINDER_DB_NAME};
+GRANT ALL PRIVILEGES ON ${CINDER_DB_NAME}.* TO
+'${CINDER_DB_USER}'@'%' IDENTIFIED BY '${CINDER_DB_PASSWORD}'
+EOF
+
+    su -s /bin/sh -c "cinder-manage db sync" cinder
+fi
+
+crudini --set $cfg \
+    DEFAULT \
+    log_file \
+    "${CINDER_SCHEDULER_LOG_FILE}"
+
+echo "Starting cinder-scheduler"
+exec /usr/bin/cinder-scheduler --config-file $cfg
diff --git a/docker/centos/binary/cinder-app/cinder-volume/Dockerfile b/docker/centos/binary/cinder-app/cinder-volume/Dockerfile
new file mode 100644
index 0000000000..d82fed03c3
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-volume/Dockerfile
@@ -0,0 +1,17 @@
+FROM %%KOLLA_NAMESPACE%%/%%KOLLA_PREFIX%%cinder-base:%%KOLLA_TAG%%
+MAINTAINER Kolla Project (https://launchpad.net/kolla)
+
+# Install required packages
+# https://bugs.launchpad.net/kolla/+bug/1460129
+# Iscsi will be removed from cinder-volume in a later patch
+# so that we continue to follow the container best practices.
+# There will also be other backends for cinder and iscsi should
+# not be hardcoded here.
+RUN yum install -y lvm2 scsi-target-utils && yum clean all
+
+# Add start scripts
+COPY start.sh /start.sh
+COPY volume-group-create.sh /opt/kolla/volume-group-create.sh
+
+# Start supervisor
+CMD ["/start.sh"]
diff --git a/docker/centos/binary/cinder-app/cinder-volume/build b/docker/centos/binary/cinder-app/cinder-volume/build
new file mode 120000
index 0000000000..ec19138031
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-volume/build
@@ -0,0 +1 @@
+../../../../../tools/build-docker-image
\ No newline at end of file
diff --git a/docker/centos/binary/cinder-app/cinder-volume/start.sh b/docker/centos/binary/cinder-app/cinder-volume/start.sh
new file mode 100755
index 0000000000..db29e75deb
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-volume/start.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-cinder.sh
+. /opt/kolla/volume-group-create.sh
+
+check_required_vars CINDER_VOLUME_API_LISTEN ISCSI_HELPER ISCSI_IP_ADDRESS \
+                    CINDER_VOLUME_GROUP CINDER_LVM_LO_VOLUME_SIZE \
+                    CINDER_VOLUME_BACKEND_NAME CINDER_VOLUME_DRIVER \
+                    CINDER_ENABLED_BACKEND CINDER_VOLUME_LOG_FILE
+
+cfg=/etc/cinder/cinder.conf
+
+# Logging
+crudini --set $cfg \
+    DEFAULT \
+    log_file \
+    "${CINDER_VOLUME_LOG_FILE}"
+
+# IP address on which OpenStack Volume API listens
+crudini --set $cfg \
+    DEFAULT \
+    osapi_volume_listen \
+    "${CINDER_VOLUME_API_LISTEN}"
+
+# The IP address that the iSCSI daemon is listening on
+crudini --set $cfg \
+    DEFAULT \
+    iscsi_ip_address \
+    "${ISCSI_IP_ADDRESS}"
+
+# Set to false when using loopback devices (testing)
+crudini --set $cfg \
+    DEFAULT \
+    secure_delete \
+    "false"
+
+crudini --set $cfg \
+    DEFAULT \
+    enabled_backends \
+    "${CINDER_ENABLED_BACKEND}"
+
+crudini --set $cfg \
+    lvm57 \
+    iscsi_helper \
+    "${ISCSI_HELPER}"
+
+crudini --set $cfg \
+    lvm57 \
+    volume_group \
+    "${CINDER_VOLUME_GROUP}"
+
+crudini --set $cfg \
+    lvm57 \
+    volume_driver \
+    "${CINDER_VOLUME_DRIVER}"
+
+crudini --set $cfg \
+    lvm57 \
+    iscsi_ip_address \
+    "${ISCSI_IP_ADDRESS}"
+
+crudini --set $cfg \
+    lvm57 \
+    volume_backend_name \
+    "${CINDER_VOLUME_BACKEND_NAME}"
+
+sed -i 's/udev_sync = 1/udev_sync = 0/' /etc/lvm/lvm.conf
+sed -i 's/udev_rules = 1/udev_rules = 0/' /etc/lvm/lvm.conf
+sed -i 's/use_lvmetad = 1/use_lvmetad = 0/' /etc/lvm/lvm.conf
+
+echo "Starting cinder-volume"
+exec /usr/bin/cinder-volume --config-file /etc/cinder/cinder.conf
diff --git a/docker/centos/binary/cinder-app/cinder-volume/volume-group-create.sh b/docker/centos/binary/cinder-app/cinder-volume/volume-group-create.sh
new file mode 100755
index 0000000000..908d987b0d
--- /dev/null
+++ b/docker/centos/binary/cinder-app/cinder-volume/volume-group-create.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+# The script will create the cinder-volume volume group that will
+# allow cinder to create volumes from a backing file.
+# This is based off devstack.
+set -e
+
+backing_file=/opt/data/cinder_volume
+
+check_required_vars CINDER_LVM_LO_VOLUME_SIZE CINDER_VOLUME_GROUP
+
+if ! vgs ${CINDER_VOLUME_GROUP}; then
+    [[ ! -f $backing_file ]] && truncate -s ${CINDER_LVM_LO_VOLUMES_SIZE} $backing_file
+    vg_dev=`losetup -f --show $backing_file`
+    if ! vgs ${CINDER_VOLUME_GROUP}; then
+        vgcreate ${CINDER_VOLUME_GROUP} $vg_dev
+    fi
+fi
+
+# Remove iscsi targets
+cinder-rtstool get-targets | xargs -rn 1 cinder-rtstool delete
+
diff --git a/docker/centos/binary/cinder-data/Dockerfile b/docker/centos/binary/cinder-data/Dockerfile
new file mode 100644
index 0000000000..117e74da1f
--- /dev/null
+++ b/docker/centos/binary/cinder-data/Dockerfile
@@ -0,0 +1,9 @@
+FROM %%KOLLA_NAMESPACE%%/%%KOLLA_PREFIX%%base:%%KOLLA_TAG%%
+MAINTAINER Kolla Project (https://launchpad.net/kolla)
+
+RUN mkdir -p /opt/data
+VOLUME [ "/opt/data" ]
+
+# Command needed to start the data container.
+# Note: data containers do not need to be persistent.
+CMD ["/bin/true"]
diff --git a/docker/centos/binary/cinder/build b/docker/centos/binary/cinder-data/build
similarity index 100%
rename from docker/centos/binary/cinder/build
rename to docker/centos/binary/cinder-data/build
diff --git a/docker/centos/binary/cinder/start.sh b/docker/centos/binary/cinder/start.sh
deleted file mode 100755
index c0d796f02c..0000000000
--- a/docker/centos/binary/cinder/start.sh
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/bin/bash -e
-
-: ${CINDER_DB_USER:=cinder}
-: ${CINDER_DB_NAME:=cinder}
-: ${KEYSTONE_AUTH_PROTOCOL:=http}
-: ${CINDER_KEYSTONE_USER:=cinder}
-: ${ADMIN_TENANT_NAME:=admin}
-
-if ! [ "$CINDER_DB_PASSWORD" ]; then
-        CINDER_DB_PASSWORD=$(openssl rand -hex 15)
-        export CINDER_DB_PASSWORD
-fi
-
-check_required_vars KEYSTONE_ADMIN_TOKEN KEYSTONE_ADMIN_SERVICE_HOST \
-                    CINDER_ADMIN_PASSWORD
-fail_unless_db
-
-mysql -h ${MARIADB_SERVICE_HOST} -u root -p"${DB_ROOT_PASSWORD}" mysql <<EOF
-CREATE DATABASE IF NOT EXISTS ${CINDER_DB_NAME};
-GRANT ALL PRIVILEGES ON glance* TO
-        '${CINDER_DB_USER}'@'%' IDENTIFIED BY '${CINDER_DB_PASSWORD}'
-EOF
-
-#-----Cinder.conf setup-----
-
-# Cinder database
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	db_driver \
-	"cinder.db"
-
-# Rabbit
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	rabbit_host \
-	"127.0.0.1"
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	rabbit_port \
-	"5672"
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	rabbit_hosts \
-	"127.0.0.1:5672"
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	rabbit_userid \
-	"guest"
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-        rabbit_password \
-	"guest"
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	rabbit_virtual_host \
-	"/"
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	rabbit_ha_queues \
-	"False"
-
-# backend
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	rpc_backend \
-	"cinder.openstack.common.rpc.impl_kombu"
-
-# control_exchange
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	control_exchange \
-	"openstack"
-
-# osapi
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-        osapi_volume_listen \
-	"0.0.0.0"
-
-# api_paste_config
-crudini --set /etc/cinder/cinder.conf \
-	DEFUALT \
-	api_paste_config \
-        "/etc/cinder/api-paste.ini"
-
-# auth_strategy
-crudini --set /etc/cinder/cinder.conf \
-	DEFUALT \
-	auth_strategy \
-	"keystone"
-
-# debug
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	debug \
-	"False"
-
-# verbose
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-        verbose \
-	"True"
-
-# logs
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	log_dir \
-	"/var/log/cinder/"
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	log_file \
-	"/var/log/cinder/cinder.log"
-
-# use_sysloge
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	use_syslog \
-	"False"
-
-# iscsi
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	iscsi_ip_address \
-	"127.0.0.1"
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-    	iscsi_helper \
-	"tgtadm"
-
-# volume_group
-crudini --set /etc/cinder/cinder.conf \
-	DEFAULT \
-	volume_group \
-    	"cinder-volumes"
-
-
-export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
-export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:35357/v2.0"
-
-/bin/keystone user-create --name ${CINDER_KEYSTONE_USER} --pass ${CINDER_ADMIN_PASSWORD}
-/bin/keystone role-create --name ${CINDER_KEYSTONE_USER}
-/bin/keystone user-role-add --user ${CINDER_KEYSTONE_USER} --role admin --tenant ${ADMIN_TENANT_NAME}
-
-exec /usr/bin/cinder-all
-