From 21ecd9925aaee7ae4193d854daa1634bf60a27a5 Mon Sep 17 00:00:00 2001
From: Steven Dake <stdake@cisco.com>
Date: Wed, 9 Mar 2016 02:17:19 -0500
Subject: [PATCH] Upgrade Heat

This could possibly use gold plating in how bootstrapping
operates to use shade rather than the shell in the container.
It is unclear why stack create failed prior to this patch, but
that fact hasn't changed.  I think the heat domains are not setup
properly in the configuration files, meaning that the domain ID
must be created outside of Heat and registered in the configuration
file.  This is covered in Bug #1553565.

Change-Id: I490d4dd68a101f388c0ecb4acab54d5eaa6e314e
Partially-Implements: blueprint kolla-upgrade
Implements: blueprint upgrade-heat
---
 ansible/roles/heat/tasks/bootstrap.yml        | 25 ++-----------------
 .../roles/heat/tasks/bootstrap_service.yml    | 24 ++++++++++++++++++
 ansible/roles/heat/tasks/upgrade.yml          |  6 +++++
 docker/heat/heat-api/extend_start.sh          | 14 +++++++----
 4 files changed, 41 insertions(+), 28 deletions(-)
 create mode 100644 ansible/roles/heat/tasks/bootstrap_service.yml

diff --git a/ansible/roles/heat/tasks/bootstrap.yml b/ansible/roles/heat/tasks/bootstrap.yml
index 8429c04145..2ac3cfd8c4 100644
--- a/ansible/roles/heat/tasks/bootstrap.yml
+++ b/ansible/roles/heat/tasks/bootstrap.yml
@@ -4,6 +4,7 @@
     -m mysql_db
     -a "login_host='{{ database_address }}'
         login_user='{{ database_user }}'
+        login_port='{{ mariadb_port }}'
         login_password='{{ database_password }}'
         name='{{ heat_database_name }}'"
   register: database
@@ -35,27 +36,5 @@
   run_once: True
   delegate_to: "{{ groups['heat-api'][0] }}"
 
-- name: Running Heat bootstrap container
-  kolla_docker:
-    action: "start_container"
-    common_options: "{{ docker_common_options }}"
-    detach: False
-    environment:
-      KOLLA_BOOTSTRAP:
-      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
-      OS_AUTH_URL: "{{ openstack_auth.auth_url }}"
-      OS_IDENTITY_API_VERSION: "3"
-      OS_USERNAME: "{{ openstack_auth.username }}"
-      OS_PASSWORD: "{{ openstack_auth.password }}"
-      OS_PROJECT_NAME: "{{ openstack_auth.project_name }}"
-      HEAT_DOMAIN_ADMIN_PASSWORD: "{{ heat_domain_admin_password }}"
-    image: "{{ heat_api_image_full }}"
-    labels:
-      BOOTSTRAP:
-    name: "bootstrap_heat"
-    volumes:
-      - "{{ node_config_directory }}/heat-api/:{{ container_config_directory }}/:ro"
-      - "kolla_logs:/var/log/kolla/"
-  run_once: True
-  delegate_to: "{{ groups['heat-api'][0] }}"
+- include: bootstrap_service.yml
   when: database_created
diff --git a/ansible/roles/heat/tasks/bootstrap_service.yml b/ansible/roles/heat/tasks/bootstrap_service.yml
new file mode 100644
index 0000000000..40af8b1759
--- /dev/null
+++ b/ansible/roles/heat/tasks/bootstrap_service.yml
@@ -0,0 +1,24 @@
+- name: Running Heat bootstrap container
+  kolla_docker:
+    action: "start_container"
+    common_options: "{{ docker_common_options }}"
+    detach: False
+    environment:
+      KOLLA_BOOTSTRAP:
+      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
+      OS_AUTH_URL: "{{ openstack_auth.auth_url }}"
+      OS_IDENTITY_API_VERSION: "3"
+      OS_USERNAME: "{{ openstack_auth.username }}"
+      OS_PASSWORD: "{{ openstack_auth.password }}"
+      OS_PROJECT_NAME: "{{ openstack_auth.project_name }}"
+      HEAT_DOMAIN_ADMIN_PASSWORD: "{{ heat_domain_admin_password }}"
+    image: "{{ heat_api_image_full }}"
+    labels:
+      BOOTSTRAP:
+    name: "bootstrap_heat"
+    restart_policy: "never"
+    volumes:
+      - "{{ node_config_directory }}/heat-api/:{{ container_config_directory }}/:ro"
+      - "kolla_logs:/var/log/kolla/"
+  run_once: True
+  delegate_to: "{{ groups['heat-api'][0] }}"
diff --git a/ansible/roles/heat/tasks/upgrade.yml b/ansible/roles/heat/tasks/upgrade.yml
index ed97d539c0..c0e3b19a40 100644
--- a/ansible/roles/heat/tasks/upgrade.yml
+++ b/ansible/roles/heat/tasks/upgrade.yml
@@ -1 +1,7 @@
 ---
+- include: config.yml
+
+- include: bootstrap_service.yml
+
+- include: start.yml
+  serial: "30%"
diff --git a/docker/heat/heat-api/extend_start.sh b/docker/heat/heat-api/extend_start.sh
index ca4f83da58..9c1e5ba3b9 100644
--- a/docker/heat/heat-api/extend_start.sh
+++ b/docker/heat/heat-api/extend_start.sh
@@ -4,10 +4,14 @@
 # of the KOLLA_BOOTSTRAP variable being set, including empty.
 if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
     heat-manage db_sync
-    openstack domain create heat
-    openstack user create --domain heat heat_domain_admin --password ${HEAT_DOMAIN_ADMIN_PASSWORD}
-    openstack role add --domain heat --user heat_domain_admin admin
-    openstack role create heat_stack_owner
-    openstack role create heat_stack_user
+    CURRENT_HEAT_DOMAIN_NAME=$(openstack domain list | grep heat | awk '{print $4}')
+
+    if [[ "heat" != "$CURRENT_HEAT_DOMAIN_NAME" ]]; then
+        openstack domain create heat
+        openstack user create --domain heat heat_domain_admin --password ${HEAT_DOMAIN_ADMIN_PASSWORD}
+        openstack role add --domain heat --user heat_domain_admin admin
+        openstack role create heat_stack_owner
+        openstack role create heat_stack_user
+    fi
     exit 0
 fi