From 3efc551e7ef97a351350ac54791a17aa938fe9aa Mon Sep 17 00:00:00 2001
From: Mark Goddard <mark@stackhpc.com>
Date: Mon, 17 Jan 2022 16:44:43 +0000
Subject: [PATCH] Install Ansible collections for kolla-ansible

This change uses the new Galaxy requirements file in Kolla Ansible to
install the openstack.kolla collection.

Cross-project dependencies on ansible-collection-kolla are supported.

Story: 2009854
Task: 44504

Depends-On: https://review.opendev.org/c/openstack/kolla-ansible/+/819430
Change-Id: Iac185dd2bbbca128c6cf71b2734e94b3e1c6133b
---
 ansible/roles/kolla-ansible/defaults/main.yml   |  3 +++
 ansible/roles/kolla-ansible/tasks/install.yml   |  7 +++++++
 playbooks/kayobe-base/pre.yml                   | 17 +++++++++++++++++
 .../kayobe-overcloud-base/overrides.yml.j2      |  1 +
 .../overrides.yml.j2                            |  3 +++
 playbooks/kayobe-seed-base/overrides.yml.j2     |  1 +
 .../kayobe-seed-upgrade-base/overrides.yml.j2   |  3 +++
 playbooks/kayobe-seed-vm-base/overrides.yml.j2  |  1 +
 zuul.d/jobs.yaml                                |  1 +
 9 files changed, 37 insertions(+)

diff --git a/ansible/roles/kolla-ansible/defaults/main.yml b/ansible/roles/kolla-ansible/defaults/main.yml
index 63e1cbd6..8a3ff899 100644
--- a/ansible/roles/kolla-ansible/defaults/main.yml
+++ b/ansible/roles/kolla-ansible/defaults/main.yml
@@ -21,6 +21,9 @@ kolla_ansible_venv_python: python3
 # Extra requirements to install inside the kolla-ansible virtualenv.
 kolla_ansible_venv_extra_requirements: []
 
+# Path to a requirements.yml file for Ansible collections.
+kolla_ansible_requirements_yml: "{{ kolla_ansible_venv }}/share/kolla-ansible/requirements.yml"
+
 # Virtualenv directory where Kolla-ansible's ansible modules will execute
 # remotely on the target nodes. If None, no virtualenv will be used.
 kolla_ansible_target_venv:
diff --git a/ansible/roles/kolla-ansible/tasks/install.yml b/ansible/roles/kolla-ansible/tasks/install.yml
index 95bea4da..c1fd6ac3 100644
--- a/ansible/roles/kolla-ansible/tasks/install.yml
+++ b/ansible/roles/kolla-ansible/tasks/install.yml
@@ -106,3 +106,10 @@
     extra_args: "{% if kolla_upper_constraints_file %}-c {{ kolla_upper_constraints_file }}{% endif %}"
     virtualenv: "{{ kolla_ansible_venv }}"
     virtualenv_python: "{{ kolla_ansible_venv_python }}"
+
+- name: Ensure Ansible collections are installed
+  command:
+    cmd: >-
+      ansible-galaxy collection install
+      -r {{ kolla_ansible_requirements_yml }}
+      -p {{ kolla_ansible_venv }}/share/kolla-ansible/ansible/collections/
diff --git a/playbooks/kayobe-base/pre.yml b/playbooks/kayobe-base/pre.yml
index 304a8d80..b6e7db53 100644
--- a/playbooks/kayobe-base/pre.yml
+++ b/playbooks/kayobe-base/pre.yml
@@ -42,6 +42,13 @@
       vars:
         kayobe_galaxy_requirements_src_dir: "{{ kayobe_src_dir }}"
 
+    - name: Update kolla-ansible requirements.yml
+      include_role:
+        name: kayobe-galaxy-requirements
+      vars:
+        kayobe_galaxy_requirements_src_dir: "{{ kolla_ansible_src_dir }}"
+        kayobe_galaxy_requirements_dest_path: "/tmp/kolla-ansible-requirements.yml"
+
     - block:
         - name: Ensure previous kayobe directory exists
           file:
@@ -76,4 +83,14 @@
           # TODO(mgoddard): Always do this when previous release is Yoga.
           when: previous_release != 'xena'
 
+        - name: Update kolla-ansible requirements.yml
+          include_role:
+            name: kayobe-galaxy-requirements
+          vars:
+            kayobe_galaxy_requirements_src_dir: "{{ previous_kolla_ansible_src_dir }}"
+            kayobe_galaxy_requirements_branch: "stable/{{ previous_release | lower }}"
+            kayobe_galaxy_requirements_dest_path: "/tmp/previous-kolla-ansible-requirements.yml"
+          # TODO(mgoddard): Always do this when previous release is Yoga.
+          when: previous_release != 'xena'
+
       when: is_upgrade
diff --git a/playbooks/kayobe-overcloud-base/overrides.yml.j2 b/playbooks/kayobe-overcloud-base/overrides.yml.j2
index ba970bc5..ab14f994 100644
--- a/playbooks/kayobe-overcloud-base/overrides.yml.j2
+++ b/playbooks/kayobe-overcloud-base/overrides.yml.j2
@@ -14,6 +14,7 @@ kolla_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/opensta
 kolla_source_version: "{{ zuul.projects['opendev.org/openstack/kolla'].checkout }}"
 kolla_ansible_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/kolla-ansible'].src_dir }}"
 kolla_ansible_source_version: "{{ zuul.projects['opendev.org/openstack/kolla-ansible'].checkout }}"
+kolla_ansible_requirements_yml: "/tmp/kolla-ansible-requirements.yml"
 kolla_openstack_logging_debug: True
 pip_upper_constraints_file: "/tmp/upper-constraints.txt"
 
diff --git a/playbooks/kayobe-overcloud-upgrade-base/overrides.yml.j2 b/playbooks/kayobe-overcloud-upgrade-base/overrides.yml.j2
index 85dc3445..f679ce13 100644
--- a/playbooks/kayobe-overcloud-upgrade-base/overrides.yml.j2
+++ b/playbooks/kayobe-overcloud-upgrade-base/overrides.yml.j2
@@ -15,7 +15,10 @@ kolla_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/opensta
 kolla_source_version: "{{ zuul.projects['opendev.org/openstack/kolla'].checkout }}"
 kolla_ansible_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/kolla-ansible'].src_dir }}"
 kolla_ansible_source_version: "{{ zuul.projects['opendev.org/openstack/kolla-ansible'].checkout }}"
+kolla_ansible_requirements_yml: "/tmp/kolla-ansible-requirements.yml"
 pip_upper_constraints_file: "/tmp/upper-constraints.txt"
+{% else %}
+kolla_ansible_requirements_yml: "/tmp/previous-kolla-ansible-requirements.yml"
 {% endif %}
 kolla_openstack_logging_debug: true
 
diff --git a/playbooks/kayobe-seed-base/overrides.yml.j2 b/playbooks/kayobe-seed-base/overrides.yml.j2
index 5c9c948c..df0b5364 100644
--- a/playbooks/kayobe-seed-base/overrides.yml.j2
+++ b/playbooks/kayobe-seed-base/overrides.yml.j2
@@ -16,6 +16,7 @@ kolla_source_url: "/tmp/kolla"
 kolla_source_version: "{{ zuul.projects['opendev.org/openstack/kolla'].checkout }}"
 kolla_ansible_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/kolla-ansible'].src_dir }}"
 kolla_ansible_source_version: "{{ zuul.projects['opendev.org/openstack/kolla-ansible'].checkout }}"
+kolla_ansible_requirements_yml: "/tmp/kolla-ansible-requirements.yml"
 kolla_openstack_logging_debug: True
 pip_upper_constraints_file: "/tmp/upper-constraints.txt"
 
diff --git a/playbooks/kayobe-seed-upgrade-base/overrides.yml.j2 b/playbooks/kayobe-seed-upgrade-base/overrides.yml.j2
index 54780e97..5b13be36 100644
--- a/playbooks/kayobe-seed-upgrade-base/overrides.yml.j2
+++ b/playbooks/kayobe-seed-upgrade-base/overrides.yml.j2
@@ -15,7 +15,10 @@ kolla_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/opensta
 kolla_source_version: "{{ zuul.projects['opendev.org/openstack/kolla'].checkout }}"
 kolla_ansible_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/kolla-ansible'].src_dir }}"
 kolla_ansible_source_version: "{{ zuul.projects['opendev.org/openstack/kolla-ansible'].checkout }}"
+kolla_ansible_requirements_yml: "/tmp/kolla-ansible-requirements.yml"
 pip_upper_constraints_file: "/tmp/upper-constraints.txt"
+{% else %}
+kolla_ansible_requirements_yml: "/tmp/previous-kolla-ansible-requirements.yml"
 {% endif %}
 kolla_openstack_logging_debug: True
 
diff --git a/playbooks/kayobe-seed-vm-base/overrides.yml.j2 b/playbooks/kayobe-seed-vm-base/overrides.yml.j2
index 35a46c31..1b85b171 100644
--- a/playbooks/kayobe-seed-vm-base/overrides.yml.j2
+++ b/playbooks/kayobe-seed-vm-base/overrides.yml.j2
@@ -11,6 +11,7 @@ kolla_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/opensta
 kolla_source_version: "{{ zuul.projects['opendev.org/openstack/kolla'].checkout }}"
 kolla_ansible_source_url: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/kolla-ansible'].src_dir }}"
 kolla_ansible_source_version: "{{ zuul.projects['opendev.org/openstack/kolla-ansible'].checkout }}"
+kolla_ansible_requirements_yml: "/tmp/kolla-ansible-requirements.yml"
 kolla_openstack_logging_debug: True
 pip_upper_constraints_file: "/tmp/upper-constraints.txt"
 
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
index d7968c77..2b2ba3c3 100644
--- a/zuul.d/jobs.yaml
+++ b/zuul.d/jobs.yaml
@@ -79,6 +79,7 @@
       ansible_collection_kolla_src_dir: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/ansible-collection-kolla'].src_dir }}"
       kayobe_src_dir: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/kayobe'].src_dir }}"
       kayobe_config_src_dir: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/kayobe-config-dev'].src_dir }}"
+      kolla_ansible_src_dir: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/kolla-ansible'].src_dir }}"
       previous_kayobe_src_dir: "{{ ansible_env.PWD ~ '/previous/kayobe' }}"
       previous_kayobe_config_src_dir: "{{ ansible_env.PWD ~ '/previous/kayobe-config' }}"
       requirements_src_dir: "{{ ansible_env.PWD ~ '/' ~ zuul.projects['opendev.org/openstack/requirements'].src_dir }}"
-- 
GitLab