Ansible callback support both V2.3 and V2.4 47/51447/2
authorHarry Huang <huangxiangyu5@huawei.com>
Thu, 1 Feb 2018 07:56:03 +0000 (15:56 +0800)
committerHarry Huang <huangxiangyu5@huawei.com>
Thu, 1 Feb 2018 11:14:35 +0000 (19:14 +0800)
JIRA: COMPASS-585

1. Add conditional branch to support both ansible
versions
2. Keep callback in ansible_plugins directory which
will contains all plugins upcoming in the future

Change-Id: I11f3d9700e07ad5bd7f03ad56f4e0bc061df05ec
Signed-off-by: Harry Huang <huangxiangyu5@huawei.com>
deploy/ansible_plugins/callback/playbook_done.py [moved from deploy/playbook_done.py with 90% similarity]
deploy/ansible_plugins/callback/status_callback.py [moved from deploy/status_callback.py with 94% similarity]
deploy/compass_conf/templates/ansible_installer/openstack_pike/ansible_cfg/HA-ansible-multinodes.tmpl
util/docker-compose/roles/compass/tasks/main.yml
util/docker-compose/roles/compass/templates/docker-compose.yml.j2

similarity index 90%
rename from deploy/playbook_done.py
rename to deploy/ansible_plugins/callback/playbook_done.py
index 6b1043d..4784ff6 100644 (file)
@@ -17,6 +17,8 @@
 """Ansible playbook callback after a playbook run has completed."""
 import sys
 
+from distutils.version import LooseVersion
+from ansible import __version__ as __ansible_version__
 from ansible.plugins.callback import CallbackBase
 
 compass_bin = "/opt/compass/bin"
@@ -85,7 +87,10 @@ class CallbackModule(CallbackBase):
         return
 
     def v2_playbook_on_stats(self, stats):
-        all_vars = self.play.get_variable_manager().get_vars(self.loader)
+        if LooseVersion(__ansible_version__) < LooseVersion("2.4"):
+            all_vars = self.play.get_variable_manager().get_vars(self.loader)
+        else:
+            all_vars = self.play.get_variable_manager().get_vars()
         host_vars = all_vars["hostvars"]
         hosts = sorted(stats.processed.keys())
         cluster_name = host_vars[hosts[0]]['cluster_name']
similarity index 94%
rename from deploy/status_callback.py
rename to deploy/ansible_plugins/callback/status_callback.py
index 6169b87..b87d209 100644 (file)
@@ -11,6 +11,8 @@ import httplib
 import simplejson as json
 import sys  # noqa:F401
 
+from distutils.version import LooseVersion
+from ansible import __version__ as __ansible_version__
 from ansible.plugins.callback import CallbackBase
 
 COMPASS_HOST = "compass-deck"
@@ -101,7 +103,10 @@ class CallbackModule(CallbackBase):
 
     def v2_playbook_on_stats(self, stats):
         self._display.display("playbook_on_stats enter")
-        all_vars = self.play.get_variable_manager().get_vars(self.loader)
+        if LooseVersion(__ansible_version__) < LooseVersion("2.4"):
+            all_vars = self.play.get_variable_manager().get_vars(self.loader)
+        else:
+            all_vars = self.play.get_variable_manager().get_vars()
         host_vars = all_vars["hostvars"]
         hosts = sorted(stats.processed.keys())
         cluster_name = host_vars[hosts[0]]['cluster_name']
index cd8c8d3..1d0d647 100755 (executable)
@@ -3,7 +3,7 @@
 log_path = /var/ansible/run/openstack_pike-$cluster_name/ansible.log
 host_key_checking = False
 callback_whitelist = playbook_done, status_callback
-callback_plugins = /opt/ansible_callbacks
+callback_plugins = /opt/ansible_plugins/callback
 forks=100
 
 [ssh_connection]
index c7dba96..46a413b 100755 (executable)
              "{{ docker_compose_dir }}"/ansible/$i
     done
 
+- name: copy ansible plugins
+  copy:
+    src: "{{ compass_dir }}/deploy/ansible_plugins"
+    dest: "{{ docker_compose_dir }}"
+
 - name: create run dir
   file:
     path: "{{ docker_compose_dir }}/ansible/run"
   tags:
     - redploy
 
-- name: add ansible callback
-  shell: |
-    docker cp "{{ item }}" \
-    compass-deck:/root/compass-deck/bin/ansible_callbacks
-    docker cp "{{ item }}" \
-    compass-tasks:/opt/ansible_callbacks
-  with_items:
-    - "{{ compass_dir }}/deploy/status_callback.py"
-    - "{{ compass_dir }}/deploy/playbook_done.py"
-
 - name: rm ansible run
   shell: |
     docker exec compass-tasks bash -c "rm -rf /var/ansible/run/*"
index 7fc8ea3..f774863 100755 (executable)
@@ -43,6 +43,7 @@ services:
     volumes:
     - {{ docker_compose_dir }}/compass_conf:/etc/compass
     - {{ docker_compose_dir }}/ansible:/var/ansible
+    - {{ docker_compose_dir }}/ansible_plugins:/opt/ansible_plugins
     command:
     - /usr/local/bin/start.sh
 {% endif %}