From 7215a537c77519a672edc94f47c4c64170f4e287 Mon Sep 17 00:00:00 2001
From: caoyuan <cao.yuan@99cloud.net>
Date: Thu, 12 Apr 2018 23:37:37 +0800
Subject: [PATCH] dev mode: Add support for barbican

Provide support fot kolla dev mode in barbican. When
'kolla_dev_mode' or 'barbican_dev_mode' variables are
enabled, source code of barbican project is cloned
and bindmounted.

Partially implements: blueprint mount-sources

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

diff --git a/ansible/roles/barbican/defaults/main.yml b/ansible/roles/barbican/defaults/main.yml
index 199303f052..a1a06edf64 100644
--- a/ansible/roles/barbican/defaults/main.yml
+++ b/ansible/roles/barbican/defaults/main.yml
@@ -12,6 +12,7 @@ barbican_services:
       - "/etc/localtime:/etc/localtime:ro"
       - "barbican:/var/lib/barbican/"
       - "kolla_logs:/var/log/kolla/"
+      - "{{ kolla_dev_repos_directory ~ '/barbican/barbican:/var/lib/kolla/venv/lib/python2.7/site-packages/barbican' if barbican_dev_mode | bool else '' }}"
   barbican-keystone-listener:
     container_name: barbican_keystone_listener
     group: barbican-keystone-listener
@@ -21,6 +22,7 @@ barbican_services:
       - "{{ node_config_directory }}/barbican-keystone-listener/:{{ container_config_directory }}/:ro"
       - "/etc/localtime:/etc/localtime:ro"
       - "kolla_logs:/var/log/kolla/"
+      - "{{ kolla_dev_repos_directory ~ '/barbican/barbican:/var/lib/kolla/venv/lib/python2.7/site-packages/barbican' if barbican_dev_mode | bool else '' }}"
   barbican-worker:
     container_name: barbican_worker
     group: barbican-worker
@@ -30,6 +32,8 @@ barbican_services:
       - "{{ node_config_directory }}/barbican-worker/:{{ container_config_directory }}/:ro"
       - "/etc/localtime:/etc/localtime:ro"
       - "kolla_logs:/var/log/kolla/"
+      - "{{ kolla_dev_repos_directory ~ '/barbican/barbican:/var/lib/kolla/venv/lib/python2.7/site-packages/barbican' if barbican_dev_mode | bool else '' }}"
+
 
 ####################
 # Database
@@ -74,3 +78,11 @@ barbican_observer_role: "observer"
 barbican_audit_role: "audit"
 
 openstack_barbican_auth: "{{ openstack_auth }}"
+
+
+####################
+# Kolla
+####################
+barbican_git_repository: "{{ kolla_dev_repos_git }}/{{ project_name }}"
+barbican_dev_repos_pull: "{{ kolla_dev_repos_pull }}"
+barbican_dev_mode: "{{ kolla_dev_mode }}"
diff --git a/ansible/roles/barbican/handlers/main.yml b/ansible/roles/barbican/handlers/main.yml
index 90f1080ed2..df1b8938ff 100644
--- a/ansible/roles/barbican/handlers/main.yml
+++ b/ansible/roles/barbican/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]
@@ -37,7 +37,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]
@@ -60,7 +60,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/barbican/tasks/bootstrap_service.yml b/ansible/roles/barbican/tasks/bootstrap_service.yml
index 862b727c0a..a7cd8089eb 100644
--- a/ansible/roles/barbican/tasks/bootstrap_service.yml
+++ b/ansible/roles/barbican/tasks/bootstrap_service.yml
@@ -14,6 +14,6 @@
       BOOTSTRAP:
     name: "bootstrap_barbican"
     restart_policy: "never"
-    volumes: "{{ barbican_api.volumes }}"
+    volumes: "{{ barbican_api.volumes|reject('equalto', '')|list }}"
   run_once: True
   delegate_to: "{{ groups[barbican_api.group][0] }}"
diff --git a/ansible/roles/barbican/tasks/clone.yml b/ansible/roles/barbican/tasks/clone.yml
new file mode 100644
index 0000000000..573965753b
--- /dev/null
+++ b/ansible/roles/barbican/tasks/clone.yml
@@ -0,0 +1,6 @@
+---
+- name: Cloning barbican source repository for development
+  git:
+    repo: "{{ barbican_git_repository }}"
+    dest: "{{ kolla_dev_repos_directory }}/{{ project_name }}"
+    update: "{{ barbican_dev_repos_pull }}"
diff --git a/ansible/roles/barbican/tasks/config.yml b/ansible/roles/barbican/tasks/config.yml
index a9dd04395b..44165deae5 100644
--- a/ansible/roles/barbican/tasks/config.yml
+++ b/ansible/roles/barbican/tasks/config.yml
@@ -128,7 +128,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_barbican_containers
   when:
     - kolla_action != "config"
diff --git a/ansible/roles/barbican/tasks/deploy.yml b/ansible/roles/barbican/tasks/deploy.yml
index 3951ff2902..7990dda9c5 100644
--- a/ansible/roles/barbican/tasks/deploy.yml
+++ b/ansible/roles/barbican/tasks/deploy.yml
@@ -7,6 +7,9 @@
         inventory_hostname in groups['barbican-worker'] or
         inventory_hostname in groups['barbican-keystone-listener']
 
+- include: clone.yml
+  when: barbican_dev_mode | bool
+
 - include: bootstrap.yml
   when: inventory_hostname in groups['barbican-api']