From c70d806666a522e38e812ba287a8f7289e704957 Mon Sep 17 00:00:00 2001
From: Scott Solkhon <scottsolkhon@gmail.com>
Date: Sun, 10 Mar 2019 21:57:05 +0000
Subject: [PATCH] Add mising handlers for external Ceph.

When Nova, Glance, or Cinder are deployed alongside an external Ceph deployment
handlers will fail to trigger if keyring files are updated, which results in the
containers not being restarted.

This change adds the missing 'when' conditions for nova-libvirt, nova-compute,
cinder-volume, cinder-backup, and glance-api containers.

Change-Id: I8e183aac9a72e7a7210f7edc7cdcbaedd4fbcaa9
---
 ansible/roles/cinder/handlers/main.yml       | 2 ++
 ansible/roles/cinder/tasks/external_ceph.yml | 2 ++
 ansible/roles/glance/handlers/main.yml       | 1 +
 ansible/roles/glance/tasks/external_ceph.yml | 1 +
 ansible/roles/nova/handlers/main.yml         | 4 ++++
 ansible/roles/nova/tasks/external_ceph.yml   | 3 +++
 6 files changed, 13 insertions(+)

diff --git a/ansible/roles/cinder/handlers/main.yml b/ansible/roles/cinder/handlers/main.yml
index 8a2d2dde06..08122965a4 100644
--- a/ansible/roles/cinder/handlers/main.yml
+++ b/ansible/roles/cinder/handlers/main.yml
@@ -78,6 +78,7 @@
       or policy_overwriting.changed | bool
       or cinder_volume_container.changed | bool
       or ( ceph_conf is not none and ceph_conf.changed | bool )
+      or ( cinder_volume_ceph_keyring is defined and cinder_volume_ceph_keyring.changed | bool )
 
 - name: Restart cinder-backup container
   vars:
@@ -106,3 +107,4 @@
       or policy_overwriting.changed | bool
       or cinder_backup_container.changed | bool
       or ( ceph_conf is not none and ceph_conf.changed | bool )
+      or ( cinder_backup_ceph_keyring is defined and cinder_backup_ceph_keyring.changed | bool )
diff --git a/ansible/roles/cinder/tasks/external_ceph.yml b/ansible/roles/cinder/tasks/external_ceph.yml
index 66b735d0fc..f60614974e 100644
--- a/ansible/roles/cinder/tasks/external_ceph.yml
+++ b/ansible/roles/cinder/tasks/external_ceph.yml
@@ -26,6 +26,7 @@
     dest: "{{ node_config_directory }}/cinder-volume/"
     mode: "0660"
   become: true
+  register: cinder_volume_ceph_keyring
   with_fileglob:
     - "{{ node_custom_config }}/cinder/cinder-volume/ceph.client*"
   when:
@@ -41,6 +42,7 @@
     dest: "{{ node_config_directory }}/cinder-backup/"
     mode: "0660"
   become: true
+  register: cinder_backup_ceph_keyring
   with_fileglob:
     - "{{ node_custom_config }}/cinder/cinder-backup/ceph.client*"
   when:
diff --git a/ansible/roles/glance/handlers/main.yml b/ansible/roles/glance/handlers/main.yml
index f4a53179be..c6fad22423 100644
--- a/ansible/roles/glance/handlers/main.yml
+++ b/ansible/roles/glance/handlers/main.yml
@@ -27,3 +27,4 @@
       or policy_overwriting.changed | bool
       or glance_api_container.changed | bool
       or glance_upgrading | bool
+      or ( glance_api_ceph_files is defined and glance_api_ceph_files.changed | bool )
diff --git a/ansible/roles/glance/tasks/external_ceph.yml b/ansible/roles/glance/tasks/external_ceph.yml
index 33b20731b8..4bf6f8f87d 100644
--- a/ansible/roles/glance/tasks/external_ceph.yml
+++ b/ansible/roles/glance/tasks/external_ceph.yml
@@ -5,6 +5,7 @@
     dest: "{{ node_config_directory }}/glance-api/"
     mode: "0660"
   become: true
+  register: glance_api_ceph_files
   when: inventory_hostname in groups['glance-api']
   with_fileglob:
     - "{{ node_custom_config }}/glance/ceph*"
diff --git a/ansible/roles/nova/handlers/main.yml b/ansible/roles/nova/handlers/main.yml
index a634128179..e00ca12124 100644
--- a/ansible/roles/nova/handlers/main.yml
+++ b/ansible/roles/nova/handlers/main.yml
@@ -105,6 +105,9 @@
       or nova_libvirt_confs.changed | bool
       or nova_libvirt_container.changed | bool
       or ( ceph_conf is not none and ceph_conf.changed | bool )
+      or ( nova_ceph_keyring is defined and nova_ceph_keyring.changed | bool )
+      or ( libvirt_secrets_xml is defined and libvirt_secrets_xml.changed | bool )
+      or ( libvirt_secrets_key is defined and libvirt_secrets_key.changed | bool )
 
 - name: Restart nova-scheduler container
   vars:
@@ -293,6 +296,7 @@
       or nova_compute_release_file | bool
       or nova_compute_container.changed | bool
       or ( ceph_conf is not none and ceph_conf.changed | bool )
+      or ( nova_ceph_keyring is defined and nova_ceph_keyring.changed | bool )
 
 - name: Restart nova-compute-ironic container
   vars:
diff --git a/ansible/roles/nova/tasks/external_ceph.yml b/ansible/roles/nova/tasks/external_ceph.yml
index 6d5663fa39..20698e9aa3 100644
--- a/ansible/roles/nova/tasks/external_ceph.yml
+++ b/ansible/roles/nova/tasks/external_ceph.yml
@@ -34,6 +34,7 @@
     dest: "{{ node_config_directory }}/{{ item }}/"
     mode: "0660"
   become: true
+  register: nova_ceph_keyring
   with_items:
     - nova-compute
     - nova-libvirt
@@ -67,6 +68,7 @@
     dest: "{{ node_config_directory }}/nova-libvirt/secrets/{{ item.uuid }}.xml"
     mode: "0600"
   become: true
+  register: libvirt_secrets_xml
   when:
     - inventory_hostname in groups['compute']
     - item.enabled | bool
@@ -102,6 +104,7 @@
     dest: "{{ node_config_directory }}/nova-libvirt/secrets/{{ item.uuid }}.base64"
     mode: "0600"
   become: true
+  register: libvirt_secrets_key
   when:
     - inventory_hostname in groups['compute']
     - item.enabled | bool