From 2646650f35c957a6f135e7032856827b55febf6d Mon Sep 17 00:00:00 2001
From: caoyuan <cao.yuan@99cloud.net>
Date: Mon, 9 Jan 2017 11:22:53 +0800
Subject: [PATCH] Move rabbitmq precheck into its own role

Change-Id: Iab182674f17f21322c88e6f7a728fb534168eb25
Partially-implements: blueprint condition-pre-check
---
 ansible/roles/haproxy/tasks/precheck.yml      | 11 ++++
 ansible/roles/prechecks/tasks/port_checks.yml | 63 -------------------
 ansible/roles/rabbitmq/tasks/precheck.yml     | 56 +++++++++++++++++
 3 files changed, 67 insertions(+), 63 deletions(-)

diff --git a/ansible/roles/haproxy/tasks/precheck.yml b/ansible/roles/haproxy/tasks/precheck.yml
index c287c1c6e8..efb49ac369 100644
--- a/ansible/roles/haproxy/tasks/precheck.yml
+++ b/ansible/roles/haproxy/tasks/precheck.yml
@@ -280,6 +280,17 @@
     - nova_console == 'spice'
     - inventory_hostname in groups['haproxy']
 
+- name: Checking free port for RabbitMQ Management HAProxy
+  wait_for:
+    host: "{{ kolla_internal_vip_address }}"
+    port: "{{ rabbitmq_management_port }}"
+    connect_timeout: 1
+    state: stopped
+  when:
+    - enable_rabbitmq | bool
+    - "{{ 'rabbitmq_management' not in haproxy_stat }}"
+    - inventory_hostname in groups['haproxy']
+
 - name: Checking free port for Sahara API HAProxy
   wait_for:
     host: "{{ kolla_internal_vip_address }}"
diff --git a/ansible/roles/prechecks/tasks/port_checks.yml b/ansible/roles/prechecks/tasks/port_checks.yml
index 2aa15f0dd2..dcba40e442 100644
--- a/ansible/roles/prechecks/tasks/port_checks.yml
+++ b/ansible/roles/prechecks/tasks/port_checks.yml
@@ -173,69 +173,6 @@
     - enable_mariadb | bool
     - inventory_hostname in groups['mariadb']
 
-- name: Checking free port for RabbitMQ
-  wait_for:
-    host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
-    port: "{{ rabbitmq_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - enable_rabbitmq | bool
-    - inventory_hostname in groups['rabbitmq']
-
-- name: Checking free port for RabbitMQ Management
-  wait_for:
-    host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
-    port: "{{ rabbitmq_management_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - enable_rabbitmq | bool
-    - inventory_hostname in groups['rabbitmq']
-
-- name: Checking free port for RabbitMQ Management HAProxy
-  wait_for:
-    host: "{{ kolla_internal_vip_address }}"
-    port: "{{ rabbitmq_management_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - enable_rabbitmq | bool
-    - inventory_hostname in groups['haproxy']
-
-- name: Checking free port for RabbitMQ Cluster
-  wait_for:
-    host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
-    port: "{{ rabbitmq_cluster_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - enable_rabbitmq | bool
-    - inventory_hostname in groups['rabbitmq']
-
-- name: Checking free port for RabbitMQ EPMD
-  wait_for:
-    host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
-    port: "{{ rabbitmq_epmd_port }}"
-    connect_timeout: 1
-    state: stopped
-  when:
-    - enable_rabbitmq | bool
-    - inventory_hostname in groups['rabbitmq']
-
-- name: Check if all rabbit hostnames are resolvable
-  command: "getent ahostsv4 {{ hostvars[item]['ansible_hostname'] }}"
-  changed_when: false
-  register: rabbitmq_hostnames
-  with_items: "{{ groups['rabbitmq'] }}"
-  when: enable_rabbitmq | bool
-
-- fail: msg="Hostname has to resolve to IP address of api_interface"
-  with_items: "{{ rabbitmq_hostnames.results }}"
-  when:
-    - "'{{ hostvars[item['item']]['ansible_' + hostvars[item['item']]['api_interface']]['ipv4']['address'] }}' not in '{{ item.stdout }}'"
-    - enable_rabbitmq | bool
-
 - name: Checking free port for Mongodb
   wait_for:
     host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
diff --git a/ansible/roles/rabbitmq/tasks/precheck.yml b/ansible/roles/rabbitmq/tasks/precheck.yml
index ed97d539c0..e125fb4de5 100644
--- a/ansible/roles/rabbitmq/tasks/precheck.yml
+++ b/ansible/roles/rabbitmq/tasks/precheck.yml
@@ -1 +1,57 @@
 ---
+- name: Get container facts
+  kolla_container_facts:
+    name:
+      - rabbitmq
+  register: container_facts
+
+- name: Checking free port for RabbitMQ
+  wait_for:
+    host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
+    port: "{{ rabbitmq_port }}"
+    connect_timeout: 1
+    state: stopped
+  when:
+    - container_facts['rabbitmq'] is not defined
+    - inventory_hostname in groups['rabbitmq']
+
+- name: Checking free port for RabbitMQ Management
+  wait_for:
+    host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
+    port: "{{ rabbitmq_management_port }}"
+    connect_timeout: 1
+    state: stopped
+  when:
+    - container_facts['rabbitmq'] is not defined
+    - inventory_hostname in groups['rabbitmq']
+
+- name: Checking free port for RabbitMQ Cluster
+  wait_for:
+    host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
+    port: "{{ rabbitmq_cluster_port }}"
+    connect_timeout: 1
+    state: stopped
+  when:
+    - container_facts['rabbitmq'] is not defined
+    - inventory_hostname in groups['rabbitmq']
+
+- name: Checking free port for RabbitMQ EPMD
+  wait_for:
+    host: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
+    port: "{{ rabbitmq_epmd_port }}"
+    connect_timeout: 1
+    state: stopped
+  when:
+    - container_facts['rabbitmq'] is not defined
+    - inventory_hostname in groups['rabbitmq']
+
+- name: Check if all rabbit hostnames are resolvable
+  command: "getent ahostsv4 {{ hostvars[item]['ansible_hostname'] }}"
+  changed_when: false
+  register: rabbitmq_hostnames
+  with_items: "{{ groups['rabbitmq'] }}"
+
+- fail: msg="Hostname has to resolve to IP address of api_interface"
+  with_items: "{{ rabbitmq_hostnames.results }}"
+  when:
+    - "'{{ hostvars[item['item']]['ansible_' + hostvars[item['item']]['api_interface']]['ipv4']['address'] }}' not in '{{ item.stdout }}'"