From c3c7b4827ecce684886ff05403e1b44000ad214c Mon Sep 17 00:00:00 2001
From: caoyuan <cao.yuan@99cloud.net>
Date: Fri, 13 Apr 2018 00:47:35 +0800
Subject: [PATCH] dev mode: Add support for mistral

Provide support for kolla dev mode in mistral. When
'kolla_dev_mode' or 'mistral_dev_mode' variables are
enabled, source code of mistral project is cloned
and bind mounted.

Partially implements: blueprint mount-sources
Co-Authored-By: chenqiaomin <chen.qiaomin@99cloud.net>

Change-Id: I6e5f9b1a6b35dbb672905987e715cae4bf10af7f
---
 ansible/roles/mistral/defaults/main.yml           | 10 ++++++++++
 ansible/roles/mistral/handlers/main.yml           |  6 +++---
 ansible/roles/mistral/tasks/bootstrap_service.yml |  2 +-
 ansible/roles/mistral/tasks/clone.yml             |  6 ++++++
 ansible/roles/mistral/tasks/config.yml            |  2 +-
 ansible/roles/mistral/tasks/deploy.yml            |  3 +++
 6 files changed, 24 insertions(+), 5 deletions(-)
 create mode 100644 ansible/roles/mistral/tasks/clone.yml

diff --git a/ansible/roles/mistral/defaults/main.yml b/ansible/roles/mistral/defaults/main.yml
index 7fa09e23f9..1c651445d2 100644
--- a/ansible/roles/mistral/defaults/main.yml
+++ b/ansible/roles/mistral/defaults/main.yml
@@ -11,6 +11,7 @@ mistral_services:
       - "{{ node_config_directory }}/mistral-api/:{{ container_config_directory }}/:ro"
       - "/etc/localtime:/etc/localtime:ro"
       - "kolla_logs:/var/log/kolla/"
+      - "{{ kolla_dev_repos_directory ~ '/mistral/mistral:/var/lib/kolla/venv/lib/python2.7/site-packages/mistral' if mistral_dev_mode | bool else '' }}"
   mistral-engine:
     container_name: mistral_engine
     group: mistral-engine
@@ -20,6 +21,7 @@ mistral_services:
       - "{{ node_config_directory }}/mistral-engine/:{{ container_config_directory }}/:ro"
       - "/etc/localtime:/etc/localtime:ro"
       - "kolla_logs:/var/log/kolla/"
+      - "{{ kolla_dev_repos_directory ~ '/mistral/mistral:/var/lib/kolla/venv/lib/python2.7/site-packages/mistral' if mistral_dev_mode | bool else '' }}"
   mistral-executor:
     container_name: mistral_executor
     group: mistral-executor
@@ -29,6 +31,7 @@ mistral_services:
       - "{{ node_config_directory }}/mistral-executor/:{{ container_config_directory }}/:ro"
       - "/etc/localtime:/etc/localtime:ro"
       - "kolla_logs:/var/log/kolla/"
+      - "{{ kolla_dev_repos_directory ~ '/mistral/mistral:/var/lib/kolla/venv/lib/python2.7/site-packages/mistral' if mistral_dev_mode | bool else '' }}"
 
 
 ####################
@@ -70,3 +73,10 @@ mistral_logging_debug: "{{ openstack_logging_debug }}"
 mistral_keystone_user: "mistral"
 
 openstack_mistral_auth: "{{ openstack_auth }}"
+
+####################
+# Kolla
+####################
+mistral_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
+mistral_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
+mistral_dev_mode: "{{ kolla_dev_mode }}"
diff --git a/ansible/roles/mistral/handlers/main.yml b/ansible/roles/mistral/handlers/main.yml
index 5cf73cf0f2..1ed3c9baa0 100644
--- a/ansible/roles/mistral/handlers/main.yml
+++ b/ansible/roles/mistral/handlers/main.yml
@@ -12,7 +12,7 @@
     common_options: "{{ docker_common_options }}"
     name: "{{ service.container_name }}"
     image: "{{ service.image }}"
-    volumes: "{{ service.volumes }}"
+    volumes: "{{ service.volumes|reject('equalto', '')|list }}"
   when:
     - kolla_action != "config"
     - inventory_hostname in groups[service.group]
@@ -35,7 +35,7 @@
     common_options: "{{ docker_common_options }}"
     name: "{{ service.container_name }}"
     image: "{{ service.image }}"
-    volumes: "{{ service.volumes }}"
+    volumes: "{{ service.volumes|reject('equalto', '')|list }}"
   when:
     - kolla_action != "config"
     - inventory_hostname in groups[service.group]
@@ -58,7 +58,7 @@
     common_options: "{{ docker_common_options }}"
     name: "{{ service.container_name }}"
     image: "{{ service.image }}"
-    volumes: "{{ service.volumes }}"
+    volumes: "{{ service.volumes|reject('equalto', '')|list }}"
   when:
     - kolla_action != "config"
     - inventory_hostname in groups[service.group]
diff --git a/ansible/roles/mistral/tasks/bootstrap_service.yml b/ansible/roles/mistral/tasks/bootstrap_service.yml
index 58d4a796bb..42a81b1bfb 100644
--- a/ansible/roles/mistral/tasks/bootstrap_service.yml
+++ b/ansible/roles/mistral/tasks/bootstrap_service.yml
@@ -14,6 +14,6 @@
       BOOTSTRAP:
     name: "bootstrap_mistral"
     restart_policy: "never"
-    volumes: "{{ mistral_api.volumes }}"
+    volumes: "{{ mistral_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[mistral_api.group][0] }}"
diff --git a/ansible/roles/mistral/tasks/clone.yml b/ansible/roles/mistral/tasks/clone.yml
new file mode 100644
index 0000000000..051e4ab410
--- /dev/null
+++ b/ansible/roles/mistral/tasks/clone.yml
@@ -0,0 +1,6 @@
+---
+- name: Cloning mistral source repository for development
+  git:
+    repo: "{{ mistral_git_repository }}"
+    dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
+    update: "{{ mistral_dev_repos_pull }}"
diff --git a/ansible/roles/mistral/tasks/config.yml b/ansible/roles/mistral/tasks/config.yml
index 07ac83e86b..cc22c9d96a 100644
--- a/ansible/roles/mistral/tasks/config.yml
+++ b/ansible/roles/mistral/tasks/config.yml
@@ -83,7 +83,7 @@
     common_options: "{{ docker_common_options }}"
     name: "{{ item.value.container_name }}"
     image: "{{ item.value.image }}"
-    volumes: "{{ item.value.volumes }}"
+    volumes: "{{ item.value.volumes|reject('equalto', '')|list }}"
   register: check_mistral_containers
   when:
     - kolla_action != "config"
diff --git a/ansible/roles/mistral/tasks/deploy.yml b/ansible/roles/mistral/tasks/deploy.yml
index e8b3e135cd..4ca5aa737a 100644
--- a/ansible/roles/mistral/tasks/deploy.yml
+++ b/ansible/roles/mistral/tasks/deploy.yml
@@ -7,6 +7,9 @@
         inventory_hostname in groups['mistral-engine'] or
         inventory_hostname in groups['mistral-executor']
 
+- include: clone.yml
+  when: mistral_dev_mode | bool
+
 - include: bootstrap.yml
   when: inventory_hostname in groups['mistral-api']