From 0adbbb268e4f4c0c422fd6ac069dd202c1fefd05 Mon Sep 17 00:00:00 2001
From: Alexis Deberg <alexis.deberg@ubisoft.com>
Date: Fri, 20 Sep 2019 11:46:36 -0400
Subject: [PATCH] Swift: add swift_extra_ring_files variable to handle
 multi-policies deployment

The current tasks only use a hardcoded list deploying only the required files.
When using multiple custom policies, additionnal object-*.builder and
object*.gz files are to be deployed as well.
This adds a new default-empty variable that can be overridden when needed

Change-Id: I29c8e349c7cc83e3a2e01ff702d235a0cd97340e
Closes-Bug: #1844752
---
 ansible/roles/swift/defaults/main.yml                  |  2 ++
 ansible/roles/swift/tasks/config.yml                   |  1 +
 ansible/roles/swift/tasks/precheck.yml                 |  1 +
 doc/source/reference/storage/swift-guide.rst           | 10 ++++++++++
 .../notes/swift-multi-policies-28bc322b54a82bf9.yaml   |  6 ++++++
 5 files changed, 20 insertions(+)
 create mode 100644 releasenotes/notes/swift-multi-policies-28bc322b54a82bf9.yaml

diff --git a/ansible/roles/swift/defaults/main.yml b/ansible/roles/swift/defaults/main.yml
index 96ab2093e5..1533670648 100644
--- a/ansible/roles/swift/defaults/main.yml
+++ b/ansible/roles/swift/defaults/main.yml
@@ -78,6 +78,8 @@ syslog_swift_facility: "local0"
 
 swift_enable_rolling_upgrade: "yes"
 
+swift_extra_ring_files: []
+
 ####################
 # Keystone
 ####################
diff --git a/ansible/roles/swift/tasks/config.yml b/ansible/roles/swift/tasks/config.yml
index 21ef7aa67b..1fd6981fc5 100644
--- a/ansible/roles/swift/tasks/config.yml
+++ b/ansible/roles/swift/tasks/config.yml
@@ -190,6 +190,7 @@
     - "container.ring.gz"
     - "object.builder"
     - "object.ring.gz"
+    - "{{ swift_extra_ring_files }}"
 
 - name: Check if policies shall be overwritten
   local_action: stat path="{{ node_custom_config }}/swift/policy.json"
diff --git a/ansible/roles/swift/tasks/precheck.yml b/ansible/roles/swift/tasks/precheck.yml
index 297b65be0b..6b6767972e 100644
--- a/ansible/roles/swift/tasks/precheck.yml
+++ b/ansible/roles/swift/tasks/precheck.yml
@@ -108,6 +108,7 @@
     - "container.ring.gz"
     - "object.builder"
     - "object.ring.gz"
+    - "{{ swift_extra_ring_files }}"
 
 - name: Fail if ring files don't exist
   run_once: True
diff --git a/doc/source/reference/storage/swift-guide.rst b/doc/source/reference/storage/swift-guide.rst
index 0742f84bd4..022b8a814c 100644
--- a/doc/source/reference/storage/swift-guide.rst
+++ b/doc/source/reference/storage/swift-guide.rst
@@ -215,6 +215,16 @@ Enable Swift in ``/etc/kolla/globals.yml``:
 
    enable_swift : "yes"
 
+If you are to deploy multiple policies, override the variable
+``swift_extra_ring_files`` with the list of your custom ring files, .builder
+and .ring.gz all together. This will append them to the list of default rings.
+
+.. code-block:: yaml
+
+   swift_extra_ring_files:
+      - object-1.builder
+      - object-1.ring.gz
+
 Once the rings are in place, deploying Swift is the same as any other Kolla
 Ansible service:
 
diff --git a/releasenotes/notes/swift-multi-policies-28bc322b54a82bf9.yaml b/releasenotes/notes/swift-multi-policies-28bc322b54a82bf9.yaml
new file mode 100644
index 0000000000..5e33122837
--- /dev/null
+++ b/releasenotes/notes/swift-multi-policies-28bc322b54a82bf9.yaml
@@ -0,0 +1,6 @@
+---
+features:
+  - |
+    Add a new variable to be used by the swift role, ``swift_extra_ring_files``.
+    It allows to pass additional ring files to be deployed in the context of
+    a multi-policy setup.