From 4c25113d30ae951e7d3a2f23fa5758e62ead8a8f Mon Sep 17 00:00:00 2001
From: Swapnil Kulkarni <me@coolsvap.net>
Date: Fri, 3 Jul 2015 06:14:29 +0000
Subject: [PATCH] Add config-internal/config-external for Ceilometer

Partially Implements: Blueprint standard-start

Change-Id: I0c9fea2014a23ca0b08f9a0946472cc877edacbc
---
 .../ceilometer/ceilometer-alarm/Dockerfile    |  2 +
 .../ceilometer-alarm/config-external.sh       |  1 +
 .../ceilometer-alarm/config-internal.sh       |  1 +
 .../ceilometer/ceilometer-api/Dockerfile      |  1 +
 .../ceilometer-api/config-external.sh         |  1 +
 .../ceilometer-api/config-internal.sh         |  1 +
 .../ceilometer/ceilometer-central/Dockerfile  |  2 +
 .../ceilometer-central/config-external.sh     |  1 +
 .../ceilometer-central/config-internal.sh     |  1 +
 .../ceilometer-collector/Dockerfile           |  2 +
 .../ceilometer-collector/config-external.sh   |  1 +
 .../ceilometer-collector/config-internal.sh   |  1 +
 .../ceilometer/ceilometer-compute/Dockerfile  |  2 +
 .../ceilometer-compute/config-external.sh     |  1 +
 .../ceilometer-compute/config-internal.sh     |  1 +
 .../ceilometer-notification/Dockerfile        |  2 +
 .../config-external.sh                        |  1 +
 .../config-internal.sh                        |  1 +
 .../ceilometer-alarm/config-external.sh       | 10 ++++
 .../ceilometer-alarm/config-internal.sh       | 10 ++++
 .../ceilometer/ceilometer-alarm/start.sh      | 14 +++--
 .../ceilometer-api/config-external.sh         | 10 ++++
 .../ceilometer-api/config-internal.sh         | 51 ++++++++++++++++
 .../common/ceilometer/ceilometer-api/start.sh | 58 +++++--------------
 .../ceilometer-central/config-external.sh     | 10 ++++
 .../ceilometer-central/config-internal.sh     | 14 +++++
 .../ceilometer/ceilometer-central/start.sh    | 16 ++---
 .../ceilometer-collector/config-external.sh   | 10 ++++
 .../ceilometer-collector/config-internal.sh   |  9 +++
 .../ceilometer/ceilometer-collector/start.sh  | 13 +++--
 .../ceilometer-compute/config-external.sh     | 10 ++++
 .../ceilometer-compute/config-internal.sh     | 25 ++++++++
 .../ceilometer/ceilometer-compute/start.sh    | 27 +++------
 .../config-external.sh                        | 10 ++++
 .../config-internal.sh                        |  9 +++
 .../ceilometer-notification/start.sh          | 13 +++--
 36 files changed, 258 insertions(+), 84 deletions(-)
 create mode 120000 docker/centos/binary/ceilometer/ceilometer-alarm/config-external.sh
 create mode 120000 docker/centos/binary/ceilometer/ceilometer-alarm/config-internal.sh
 create mode 120000 docker/centos/binary/ceilometer/ceilometer-api/config-external.sh
 create mode 120000 docker/centos/binary/ceilometer/ceilometer-api/config-internal.sh
 create mode 120000 docker/centos/binary/ceilometer/ceilometer-central/config-external.sh
 create mode 120000 docker/centos/binary/ceilometer/ceilometer-central/config-internal.sh
 create mode 120000 docker/centos/binary/ceilometer/ceilometer-collector/config-external.sh
 create mode 120000 docker/centos/binary/ceilometer/ceilometer-collector/config-internal.sh
 create mode 120000 docker/centos/binary/ceilometer/ceilometer-compute/config-external.sh
 create mode 120000 docker/centos/binary/ceilometer/ceilometer-compute/config-internal.sh
 create mode 120000 docker/centos/binary/ceilometer/ceilometer-notification/config-external.sh
 create mode 120000 docker/centos/binary/ceilometer/ceilometer-notification/config-internal.sh
 create mode 100644 docker/common/ceilometer/ceilometer-alarm/config-external.sh
 create mode 100644 docker/common/ceilometer/ceilometer-alarm/config-internal.sh
 create mode 100644 docker/common/ceilometer/ceilometer-api/config-external.sh
 create mode 100644 docker/common/ceilometer/ceilometer-api/config-internal.sh
 create mode 100644 docker/common/ceilometer/ceilometer-central/config-external.sh
 create mode 100644 docker/common/ceilometer/ceilometer-central/config-internal.sh
 create mode 100644 docker/common/ceilometer/ceilometer-collector/config-external.sh
 create mode 100644 docker/common/ceilometer/ceilometer-collector/config-internal.sh
 create mode 100644 docker/common/ceilometer/ceilometer-compute/config-external.sh
 create mode 100644 docker/common/ceilometer/ceilometer-compute/config-internal.sh
 create mode 100644 docker/common/ceilometer/ceilometer-notification/config-external.sh
 create mode 100644 docker/common/ceilometer/ceilometer-notification/config-internal.sh

diff --git a/docker/centos/binary/ceilometer/ceilometer-alarm/Dockerfile b/docker/centos/binary/ceilometer/ceilometer-alarm/Dockerfile
index fe6c44fc2..24e036925 100644
--- a/docker/centos/binary/ceilometer/ceilometer-alarm/Dockerfile
+++ b/docker/centos/binary/ceilometer/ceilometer-alarm/Dockerfile
@@ -4,4 +4,6 @@ MAINTAINER Kolla Project (https://launchpad.net/kolla)
 RUN yum install -y openstack-ceilometer-alarm && yum clean all
 
 ADD ./start.sh /start.sh
+COPY config-internal.sh config-external.sh /opt/kolla/
+
 CMD ["/start.sh"]
diff --git a/docker/centos/binary/ceilometer/ceilometer-alarm/config-external.sh b/docker/centos/binary/ceilometer/ceilometer-alarm/config-external.sh
new file mode 120000
index 000000000..0a48ebf52
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-alarm/config-external.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-alarm/config-external.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-alarm/config-internal.sh b/docker/centos/binary/ceilometer/ceilometer-alarm/config-internal.sh
new file mode 120000
index 000000000..0f009e4be
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-alarm/config-internal.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-alarm/config-internal.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-api/Dockerfile b/docker/centos/binary/ceilometer/ceilometer-api/Dockerfile
index 7a1337c7b..387660fff 100644
--- a/docker/centos/binary/ceilometer/ceilometer-api/Dockerfile
+++ b/docker/centos/binary/ceilometer/ceilometer-api/Dockerfile
@@ -4,4 +4,5 @@ MAINTAINER Kolla Project (https://launchpad.net/kolla)
 RUN yum install -y openstack-ceilometer-api && yum clean all
 
 ADD ./start.sh /start.sh
+COPY config-internal.sh config-external.sh /opt/kolla/
 CMD ["/start.sh"]
diff --git a/docker/centos/binary/ceilometer/ceilometer-api/config-external.sh b/docker/centos/binary/ceilometer/ceilometer-api/config-external.sh
new file mode 120000
index 000000000..4ea59dad7
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-api/config-external.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-api/config-external.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-api/config-internal.sh b/docker/centos/binary/ceilometer/ceilometer-api/config-internal.sh
new file mode 120000
index 000000000..589c797ec
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-api/config-internal.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-api/config-internal.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-central/Dockerfile b/docker/centos/binary/ceilometer/ceilometer-central/Dockerfile
index bd5137306..29ebbdc93 100644
--- a/docker/centos/binary/ceilometer/ceilometer-central/Dockerfile
+++ b/docker/centos/binary/ceilometer/ceilometer-central/Dockerfile
@@ -4,4 +4,6 @@ MAINTAINER Kolla Project (https://launchpad.net/kolla)
 RUN yum install -y openstack-ceilometer-central && yum clean all
 
 ADD ./start.sh /start.sh
+COPY config-internal.sh config-external.sh /opt/kolla/
+
 CMD ["/start.sh"]
diff --git a/docker/centos/binary/ceilometer/ceilometer-central/config-external.sh b/docker/centos/binary/ceilometer/ceilometer-central/config-external.sh
new file mode 120000
index 000000000..cfc69e75d
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-central/config-external.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-central/config-external.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-central/config-internal.sh b/docker/centos/binary/ceilometer/ceilometer-central/config-internal.sh
new file mode 120000
index 000000000..86fd40c4a
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-central/config-internal.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-central/config-internal.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-collector/Dockerfile b/docker/centos/binary/ceilometer/ceilometer-collector/Dockerfile
index 6c54dce4a..a715014ce 100644
--- a/docker/centos/binary/ceilometer/ceilometer-collector/Dockerfile
+++ b/docker/centos/binary/ceilometer/ceilometer-collector/Dockerfile
@@ -4,4 +4,6 @@ MAINTAINER Kolla Project (https://launchpad.net/kolla)
 RUN yum install -y openstack-ceilometer-collector && yum clean all
 
 ADD ./start.sh /start.sh
+COPY config-internal.sh config-external.sh /opt/kolla/
+
 CMD ["/start.sh"]
diff --git a/docker/centos/binary/ceilometer/ceilometer-collector/config-external.sh b/docker/centos/binary/ceilometer/ceilometer-collector/config-external.sh
new file mode 120000
index 000000000..e16dcecc1
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-collector/config-external.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-collector/config-external.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-collector/config-internal.sh b/docker/centos/binary/ceilometer/ceilometer-collector/config-internal.sh
new file mode 120000
index 000000000..de90be372
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-collector/config-internal.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-collector/config-internal.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-compute/Dockerfile b/docker/centos/binary/ceilometer/ceilometer-compute/Dockerfile
index 9f2a701d8..3d476d8e5 100644
--- a/docker/centos/binary/ceilometer/ceilometer-compute/Dockerfile
+++ b/docker/centos/binary/ceilometer/ceilometer-compute/Dockerfile
@@ -5,4 +5,6 @@ RUN yum install -y openstack-ceilometer-compute python-ceilometerclient python-p
     && yum clean all
 
 ADD ./start.sh /start.sh
+COPY config-internal.sh config-external.sh /opt/kolla/
+
 CMD ["/start.sh"]
diff --git a/docker/centos/binary/ceilometer/ceilometer-compute/config-external.sh b/docker/centos/binary/ceilometer/ceilometer-compute/config-external.sh
new file mode 120000
index 000000000..1d0c728e5
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-compute/config-external.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-compute/config-external.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-compute/config-internal.sh b/docker/centos/binary/ceilometer/ceilometer-compute/config-internal.sh
new file mode 120000
index 000000000..ceefe1a9e
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-compute/config-internal.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-compute/config-internal.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-notification/Dockerfile b/docker/centos/binary/ceilometer/ceilometer-notification/Dockerfile
index 72d291bcb..7d6f2763d 100644
--- a/docker/centos/binary/ceilometer/ceilometer-notification/Dockerfile
+++ b/docker/centos/binary/ceilometer/ceilometer-notification/Dockerfile
@@ -4,4 +4,6 @@ MAINTAINER Kolla Project (https://launchpad.net/kolla)
 RUN yum install -y openstack-ceilometer-notification && yum clean all
 
 ADD ./start.sh /start.sh
+COPY config-internal.sh config-external.sh /opt/kolla/
+
 CMD ["/start.sh"]
diff --git a/docker/centos/binary/ceilometer/ceilometer-notification/config-external.sh b/docker/centos/binary/ceilometer/ceilometer-notification/config-external.sh
new file mode 120000
index 000000000..12d98d9ee
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-notification/config-external.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-notification/config-external.sh
\ No newline at end of file
diff --git a/docker/centos/binary/ceilometer/ceilometer-notification/config-internal.sh b/docker/centos/binary/ceilometer/ceilometer-notification/config-internal.sh
new file mode 120000
index 000000000..75a4ba990
--- /dev/null
+++ b/docker/centos/binary/ceilometer/ceilometer-notification/config-internal.sh
@@ -0,0 +1 @@
+../../../../common/ceilometer/ceilometer-notification/config-internal.sh
\ No newline at end of file
diff --git a/docker/common/ceilometer/ceilometer-alarm/config-external.sh b/docker/common/ceilometer/ceilometer-alarm/config-external.sh
new file mode 100644
index 000000000..2835bd5aa
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-alarm/config-external.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+SOURCE="/opt/kolla/ceilometer/ceilometer.conf"
+TARGET="/etc/ceilometer/ceilometer.conf"
+OWNER="ceilometer"
+
+if [[ -f "$SOURCE" ]]; then
+    cp $SOURCE $TARGET
+    chown ${OWNER}: $TARGET
+    chmod 0644 $TARGET
+fi
diff --git a/docker/common/ceilometer/ceilometer-alarm/config-internal.sh b/docker/common/ceilometer/ceilometer-alarm/config-internal.sh
new file mode 100644
index 000000000..7470ae608
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-alarm/config-internal.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-ceilometer.sh
+
+
+exec /usr/bin/ceilometer-alarm-evaluator &
+exec /usr/bin/ceilometer-alarm-notifier
diff --git a/docker/common/ceilometer/ceilometer-alarm/start.sh b/docker/common/ceilometer/ceilometer-alarm/start.sh
index 7470ae608..cd42a83ef 100644
--- a/docker/common/ceilometer/ceilometer-alarm/start.sh
+++ b/docker/common/ceilometer/ceilometer-alarm/start.sh
@@ -1,10 +1,14 @@
 #!/bin/bash
 
-set -e
+set -o errexit
 
-. /opt/kolla/kolla-common.sh
-. /opt/kolla/config-ceilometer.sh
+CMD="/usr/bin/ceilometer-alarm"
+ARGS=""
 
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
 
-exec /usr/bin/ceilometer-alarm-evaluator &
-exec /usr/bin/ceilometer-alarm-notifier
+# Config-internal script exec out of this function, it does not return here.
+set_configs
+
+exec $CMD $ARGS
diff --git a/docker/common/ceilometer/ceilometer-api/config-external.sh b/docker/common/ceilometer/ceilometer-api/config-external.sh
new file mode 100644
index 000000000..2835bd5aa
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-api/config-external.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+SOURCE="/opt/kolla/ceilometer/ceilometer.conf"
+TARGET="/etc/ceilometer/ceilometer.conf"
+OWNER="ceilometer"
+
+if [[ -f "$SOURCE" ]]; then
+    cp $SOURCE $TARGET
+    chown ${OWNER}: $TARGET
+    chmod 0644 $TARGET
+fi
diff --git a/docker/common/ceilometer/ceilometer-api/config-internal.sh b/docker/common/ceilometer/ceilometer-api/config-internal.sh
new file mode 100644
index 000000000..f081c9f84
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-api/config-internal.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-ceilometer.sh
+
+check_required_vars CEILOMETER_DB_USER CEILOMETER_DB_NAME \
+                    CEILOMETER_DB_PASSWORD KEYSTONE_ADMIN_TOKEN \
+                    KEYSTONE_AUTH_PROTOCOL KEYSTONE_ADMIN_SERVICE_HOST \
+                    KEYSTONE_ADMIN_SERVICE_PORT ADMIN_TENANT_NAME \
+                    CEILOMETER_KEYSTONE_USER CEILOMETER_ADMIN_PASSWORD \
+                    CEILOMETER_API_SERVICE_HOST PUBLIC_IP
+
+fail_unless_os_service_running keystone
+fail_unless_db
+
+#TODO(pkilambi): Add mongodb support
+
+mysql -h ${MARIADB_SERVICE_HOST} -u root -p${DB_ROOT_PASSWORD} mysql <<EOF
+CREATE DATABASE IF NOT EXISTS ${CEILOMETER_DB_NAME} DEFAULT CHARACTER SET utf8;
+GRANT ALL PRIVILEGES ON ${CEILOMETER_DB_NAME}.* TO
+       '${CEILOMETER_DB_USER}'@'%' IDENTIFIED BY '${CEILOMETER_DB_PASSWORD}'
+
+EOF
+
+
+export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
+export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v2.0"
+
+
+crux user-create -n ${CEILOMETER_KEYSTONE_USER} \
+    -p ${CEILOMETER_ADMIN_PASSWORD} \
+    -t ${ADMIN_TENANT_NAME} \
+    -r admin
+
+crux service-create -n ${CEILOMETER_KEYSTONE_USER} -t metering \
+    -d "Ceilometer Telemetry Service"
+
+crux endpoint-create i--remove-all -n ${CEILOMETER_KEYSTONE_USER} -t metering \
+    -I "${KEYSTONE_AUTH_PROTOCOL}://${CEILOMETER_API_SERVICE_HOST}:8777" \
+    -P "${KEYSTONE_AUTH_PROTOCOL}://${PUBLIC_IP}:8777" \
+    -A "${KEYSTONE_AUTH_PROTOCOL}://${CEILOMETER_API_SERVICE_HOST}:8777"
+
+cfg=/etc/ceilometer/ceilometer.conf
+crudini --set $cfg \
+    DEFAULT connection
+    "mysql://${CEILOMETER_DB_USER}:${CEILOMETER_DB_PASSWORD}@${MARIADB_SERVICE_HOST}/${CEILOMETER_DB_NAME}"
+
+
+exec /usr/bin/ceilometer-api
diff --git a/docker/common/ceilometer/ceilometer-api/start.sh b/docker/common/ceilometer/ceilometer-api/start.sh
index f081c9f84..0f660e025 100644
--- a/docker/common/ceilometer/ceilometer-api/start.sh
+++ b/docker/common/ceilometer/ceilometer-api/start.sh
@@ -1,51 +1,21 @@
 #!/bin/bash
 
-set -e
+set -o errexit
 
-. /opt/kolla/kolla-common.sh
-. /opt/kolla/config-ceilometer.sh
+CMD="/usr/bin/ceilometer-api"
+ARGS=""
 
-check_required_vars CEILOMETER_DB_USER CEILOMETER_DB_NAME \
-                    CEILOMETER_DB_PASSWORD KEYSTONE_ADMIN_TOKEN \
-                    KEYSTONE_AUTH_PROTOCOL KEYSTONE_ADMIN_SERVICE_HOST \
-                    KEYSTONE_ADMIN_SERVICE_PORT ADMIN_TENANT_NAME \
-                    CEILOMETER_KEYSTONE_USER CEILOMETER_ADMIN_PASSWORD \
-                    CEILOMETER_API_SERVICE_HOST PUBLIC_IP
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
 
-fail_unless_os_service_running keystone
-fail_unless_db
+# Config-internal script exec out of this function, it does not return here.
+set_configs
 
-#TODO(pkilambi): Add mongodb support
+# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases
+# of the KOLLA_BOOTSTRAP variable being set, including empty.
+if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
+    su -s /bin/sh -c "ceilometer-manage db_sync" ceilometer
+    exit 0
+fi
 
-mysql -h ${MARIADB_SERVICE_HOST} -u root -p${DB_ROOT_PASSWORD} mysql <<EOF
-CREATE DATABASE IF NOT EXISTS ${CEILOMETER_DB_NAME} DEFAULT CHARACTER SET utf8;
-GRANT ALL PRIVILEGES ON ${CEILOMETER_DB_NAME}.* TO
-       '${CEILOMETER_DB_USER}'@'%' IDENTIFIED BY '${CEILOMETER_DB_PASSWORD}'
-
-EOF
-
-
-export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
-export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v2.0"
-
-
-crux user-create -n ${CEILOMETER_KEYSTONE_USER} \
-    -p ${CEILOMETER_ADMIN_PASSWORD} \
-    -t ${ADMIN_TENANT_NAME} \
-    -r admin
-
-crux service-create -n ${CEILOMETER_KEYSTONE_USER} -t metering \
-    -d "Ceilometer Telemetry Service"
-
-crux endpoint-create i--remove-all -n ${CEILOMETER_KEYSTONE_USER} -t metering \
-    -I "${KEYSTONE_AUTH_PROTOCOL}://${CEILOMETER_API_SERVICE_HOST}:8777" \
-    -P "${KEYSTONE_AUTH_PROTOCOL}://${PUBLIC_IP}:8777" \
-    -A "${KEYSTONE_AUTH_PROTOCOL}://${CEILOMETER_API_SERVICE_HOST}:8777"
-
-cfg=/etc/ceilometer/ceilometer.conf
-crudini --set $cfg \
-    DEFAULT connection
-    "mysql://${CEILOMETER_DB_USER}:${CEILOMETER_DB_PASSWORD}@${MARIADB_SERVICE_HOST}/${CEILOMETER_DB_NAME}"
-
-
-exec /usr/bin/ceilometer-api
+exec $CMD $ARGS
diff --git a/docker/common/ceilometer/ceilometer-central/config-external.sh b/docker/common/ceilometer/ceilometer-central/config-external.sh
new file mode 100644
index 000000000..2835bd5aa
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-central/config-external.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+SOURCE="/opt/kolla/ceilometer/ceilometer.conf"
+TARGET="/etc/ceilometer/ceilometer.conf"
+OWNER="ceilometer"
+
+if [[ -f "$SOURCE" ]]; then
+    cp $SOURCE $TARGET
+    chown ${OWNER}: $TARGET
+    chmod 0644 $TARGET
+fi
diff --git a/docker/common/ceilometer/ceilometer-central/config-internal.sh b/docker/common/ceilometer/ceilometer-central/config-internal.sh
new file mode 100644
index 000000000..76f9a1fc2
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-central/config-internal.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-ceilometer.sh
+
+check_required_vars KEYSTONE_ADMIN_TOKEN KEYSTONE_AUTH_PROTOCOL \
+                    KEYSTONE_ADMIN_SERVICE_HOST KEYSTONE_ADMIN_SERVICE_PORT
+
+fail_unless_os_service_running keystone
+
+export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
+export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v2.0"
+
+exec /usr/bin/ceilometer-agent-central
diff --git a/docker/common/ceilometer/ceilometer-central/start.sh b/docker/common/ceilometer/ceilometer-central/start.sh
index 76f9a1fc2..f9c317828 100644
--- a/docker/common/ceilometer/ceilometer-central/start.sh
+++ b/docker/common/ceilometer/ceilometer-central/start.sh
@@ -1,14 +1,14 @@
 #!/bin/bash
 
-. /opt/kolla/kolla-common.sh
-. /opt/kolla/config-ceilometer.sh
+set -o errexit
 
-check_required_vars KEYSTONE_ADMIN_TOKEN KEYSTONE_AUTH_PROTOCOL \
-                    KEYSTONE_ADMIN_SERVICE_HOST KEYSTONE_ADMIN_SERVICE_PORT
+CMD="/usr/bin/ceilometer-agent-central"
+ARGS=""
 
-fail_unless_os_service_running keystone
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
 
-export SERVICE_TOKEN="${KEYSTONE_ADMIN_TOKEN}"
-export SERVICE_ENDPOINT="${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_ADMIN_SERVICE_HOST}:${KEYSTONE_ADMIN_SERVICE_PORT}/v2.0"
+# Config-internal script exec out of this function, it does not return here.
+set_configs
 
-exec /usr/bin/ceilometer-agent-central
+exec $CMD $ARGS
diff --git a/docker/common/ceilometer/ceilometer-collector/config-external.sh b/docker/common/ceilometer/ceilometer-collector/config-external.sh
new file mode 100644
index 000000000..2835bd5aa
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-collector/config-external.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+SOURCE="/opt/kolla/ceilometer/ceilometer.conf"
+TARGET="/etc/ceilometer/ceilometer.conf"
+OWNER="ceilometer"
+
+if [[ -f "$SOURCE" ]]; then
+    cp $SOURCE $TARGET
+    chown ${OWNER}: $TARGET
+    chmod 0644 $TARGET
+fi
diff --git a/docker/common/ceilometer/ceilometer-collector/config-internal.sh b/docker/common/ceilometer/ceilometer-collector/config-internal.sh
new file mode 100644
index 000000000..1ed4c9e7d
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-collector/config-internal.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-ceilometer.sh
+
+
+exec /usr/bin/ceilometer-collector
diff --git a/docker/common/ceilometer/ceilometer-collector/start.sh b/docker/common/ceilometer/ceilometer-collector/start.sh
index 1ed4c9e7d..dee31e404 100644
--- a/docker/common/ceilometer/ceilometer-collector/start.sh
+++ b/docker/common/ceilometer/ceilometer-collector/start.sh
@@ -1,9 +1,14 @@
 #!/bin/bash
 
-set -e
+set -o errexit
 
-. /opt/kolla/kolla-common.sh
-. /opt/kolla/config-ceilometer.sh
+CMD="/usr/bin/ceilometer-collector"
+ARGS=""
 
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
 
-exec /usr/bin/ceilometer-collector
+# Config-internal script exec out of this function, it does not return here.
+set_configs
+
+exec $CMD $ARGS
diff --git a/docker/common/ceilometer/ceilometer-compute/config-external.sh b/docker/common/ceilometer/ceilometer-compute/config-external.sh
new file mode 100644
index 000000000..2835bd5aa
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-compute/config-external.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+SOURCE="/opt/kolla/ceilometer/ceilometer.conf"
+TARGET="/etc/ceilometer/ceilometer.conf"
+OWNER="ceilometer"
+
+if [[ -f "$SOURCE" ]]; then
+    cp $SOURCE $TARGET
+    chown ${OWNER}: $TARGET
+    chmod 0644 $TARGET
+fi
diff --git a/docker/common/ceilometer/ceilometer-compute/config-internal.sh b/docker/common/ceilometer/ceilometer-compute/config-internal.sh
new file mode 100644
index 000000000..f4fc30bae
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-compute/config-internal.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-ceilometer.sh
+
+
+check_required_vars KEYSTONE_ADMIN_TOKEN RABBITMQ_SERVICE_HOST RABBIT_PASSWORD
+
+fail_unless_os_service_running keystone
+
+# Nova conf settings
+crudini --set /etc/nova/nova.conf DEFAULT instance_usage_audit True
+crudini --set /etc/nova/nova.conf DEFAULT instance_usage_audit_period hour
+crudini --set /etc/nova/nova.conf DEFAULT notify_on_state_change vm_and_task_state
+crudini --set /etc/nova/nova.conf DEFAULT notification_driver nova.openstack.common.notifier.rpc_notifier
+crudini --set /etc/nova/nova.conf DEFAULT notification_driver ceilometer.compute.nova_notifier
+
+#ceilometer settings
+cfg=/etc/ceilometer/ceilometer.conf
+crudini --set $cfg publisher_rpc metering_secret ${KEYSTONE_ADMIN_TOKEN}
+crudini --set $cfg rabbit_host ${RABBITMQ_SERVICE_HOST}
+crudini --set $cfg rabbit_password ${RABBIT_PASSWORD}
+
+
+exec /usr/bin/ceilometer-agent-compute
diff --git a/docker/common/ceilometer/ceilometer-compute/start.sh b/docker/common/ceilometer/ceilometer-compute/start.sh
index f4fc30bae..dff79dd1b 100644
--- a/docker/common/ceilometer/ceilometer-compute/start.sh
+++ b/docker/common/ceilometer/ceilometer-compute/start.sh
@@ -1,25 +1,14 @@
 #!/bin/bash
 
-. /opt/kolla/kolla-common.sh
-. /opt/kolla/config-ceilometer.sh
+set -o errexit
 
+CMD="/usr/bin/ceilometer-agent-compute"
+ARGS=""
 
-check_required_vars KEYSTONE_ADMIN_TOKEN RABBITMQ_SERVICE_HOST RABBIT_PASSWORD
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
 
-fail_unless_os_service_running keystone
+# Config-internal script exec out of this function, it does not return here.
+set_configs
 
-# Nova conf settings
-crudini --set /etc/nova/nova.conf DEFAULT instance_usage_audit True
-crudini --set /etc/nova/nova.conf DEFAULT instance_usage_audit_period hour
-crudini --set /etc/nova/nova.conf DEFAULT notify_on_state_change vm_and_task_state
-crudini --set /etc/nova/nova.conf DEFAULT notification_driver nova.openstack.common.notifier.rpc_notifier
-crudini --set /etc/nova/nova.conf DEFAULT notification_driver ceilometer.compute.nova_notifier
-
-#ceilometer settings
-cfg=/etc/ceilometer/ceilometer.conf
-crudini --set $cfg publisher_rpc metering_secret ${KEYSTONE_ADMIN_TOKEN}
-crudini --set $cfg rabbit_host ${RABBITMQ_SERVICE_HOST}
-crudini --set $cfg rabbit_password ${RABBIT_PASSWORD}
-
-
-exec /usr/bin/ceilometer-agent-compute
+exec $CMD $ARGS
diff --git a/docker/common/ceilometer/ceilometer-notification/config-external.sh b/docker/common/ceilometer/ceilometer-notification/config-external.sh
new file mode 100644
index 000000000..2835bd5aa
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-notification/config-external.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+SOURCE="/opt/kolla/ceilometer/ceilometer.conf"
+TARGET="/etc/ceilometer/ceilometer.conf"
+OWNER="ceilometer"
+
+if [[ -f "$SOURCE" ]]; then
+    cp $SOURCE $TARGET
+    chown ${OWNER}: $TARGET
+    chmod 0644 $TARGET
+fi
diff --git a/docker/common/ceilometer/ceilometer-notification/config-internal.sh b/docker/common/ceilometer/ceilometer-notification/config-internal.sh
new file mode 100644
index 000000000..939734549
--- /dev/null
+++ b/docker/common/ceilometer/ceilometer-notification/config-internal.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+set -e
+
+. /opt/kolla/kolla-common.sh
+. /opt/kolla/config-ceilometer.sh
+
+
+exec /usr/bin/ceilometer-agent-notification
diff --git a/docker/common/ceilometer/ceilometer-notification/start.sh b/docker/common/ceilometer/ceilometer-notification/start.sh
index 939734549..1fc97ff21 100644
--- a/docker/common/ceilometer/ceilometer-notification/start.sh
+++ b/docker/common/ceilometer/ceilometer-notification/start.sh
@@ -1,9 +1,14 @@
 #!/bin/bash
 
-set -e
+set -o errexit
 
-. /opt/kolla/kolla-common.sh
-. /opt/kolla/config-ceilometer.sh
+CMD="/usr/bin/ceilometer-agent-notification"
+ARGS=""
 
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
 
-exec /usr/bin/ceilometer-agent-notification
+# Config-internal script exec out of this function, it does not return here.
+set_configs
+
+exec $CMD $ARGS
-- 
GitLab