From 06c619179933103f2e701d3e6d33857c5078071e Mon Sep 17 00:00:00 2001
From: Mark Goddard <mark@stackhpc.com>
Date: Mon, 17 Jan 2022 16:31:36 +0000
Subject: [PATCH] Install openstack.kolla collection

This patch adds the openstack.kolla collection to the Galaxy
requirements. It is installed from the OpenDev git repository. The
collection is not yet used by Kayobe.

Zuul cross-project dependencies on the ansible-collection-kolla
repository are supported (and used in this commit).

Story: 2009854
Task: 44503

Depends-On: https://review.opendev.org/c/openstack/ansible-collection-kolla/+/820165/
Change-Id: I91cbac839f816a00ac54bc4a350f44b5ae457cc3
---
 playbooks/kayobe-base/pre.yml                 | 16 +++++++++++++++
 requirements.yml                              |  4 ++++
 roles/kayobe-galaxy-requirements/README.rst   |  6 ++++++
 .../defaults/main.yml                         |  5 +++++
 .../kayobe-galaxy-requirements/tasks/main.yml | 20 +++++++++++++++++++
 zuul.d/jobs.yaml                              |  2 ++
 6 files changed, 53 insertions(+)
 create mode 100644 roles/kayobe-galaxy-requirements/README.rst
 create mode 100644 roles/kayobe-galaxy-requirements/defaults/main.yml
 create mode 100644 roles/kayobe-galaxy-requirements/tasks/main.yml

diff --git a/playbooks/kayobe-base/pre.yml b/playbooks/kayobe-base/pre.yml
index 01314b69..304a8d80 100644
--- a/playbooks/kayobe-base/pre.yml
+++ b/playbooks/kayobe-base/pre.yml
@@ -36,6 +36,12 @@
         content: "{{ ansible_cfg }}"
         dest: "{{ kayobe_config_src_dir }}/etc/kayobe/ansible.cfg"
 
+    - name: Update kayobe requirements.yml
+      include_role:
+        name: kayobe-galaxy-requirements
+      vars:
+        kayobe_galaxy_requirements_src_dir: "{{ kayobe_src_dir }}"
+
     - block:
         - name: Ensure previous kayobe directory exists
           file:
@@ -60,4 +66,14 @@
             path: "{{ previous_kayobe_src_dir }}/dev/config.sh"
             line: "export KAYOBE_EXTRA_ARGS=-vvv"
             regexp: "^#export KAYOBE_EXTRA_ARGS=$"
+
+        - name: Update kayobe requirements.yml
+          include_role:
+            name: kayobe-galaxy-requirements
+          vars:
+            kayobe_galaxy_requirements_src_dir: "{{ previous_kayobe_src_dir }}"
+            kayobe_galaxy_requirements_branch: "stable/{{ previous_release | lower }}"
+          # TODO(mgoddard): Always do this when previous release is Yoga.
+          when: previous_release != 'xena'
+
       when: is_upgrade
diff --git a/requirements.yml b/requirements.yml
index 727f9f23..691240d4 100644
--- a/requirements.yml
+++ b/requirements.yml
@@ -1,4 +1,8 @@
 ---
+collections:
+  - name: https://opendev.org/openstack/ansible-collection-kolla
+    type: git
+    version: master
 roles:
   - src: ahuffman.resolv
     version: 1.3.1
diff --git a/roles/kayobe-galaxy-requirements/README.rst b/roles/kayobe-galaxy-requirements/README.rst
new file mode 100644
index 00000000..b5774b13
--- /dev/null
+++ b/roles/kayobe-galaxy-requirements/README.rst
@@ -0,0 +1,6 @@
+==========================
+Kayobe Galaxy Requirements
+==========================
+
+Ansible role to modify an Ansible Galaxy requirements file to include Ansible
+content in Zuul required projects.
diff --git a/roles/kayobe-galaxy-requirements/defaults/main.yml b/roles/kayobe-galaxy-requirements/defaults/main.yml
new file mode 100644
index 00000000..d39009ef
--- /dev/null
+++ b/roles/kayobe-galaxy-requirements/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+kayobe_galaxy_requirements_src_dir:
+kayobe_galaxy_requirements_branch: "{{ zuul.branch }}"
+kayobe_galaxy_requirements_src_path: "requirements.yml"
+kayobe_galaxy_requirements_dest_path: "{{ kayobe_galaxy_requirements_src_dir }}/{{ kayobe_galaxy_requirements_src_path }}"
diff --git a/roles/kayobe-galaxy-requirements/tasks/main.yml b/roles/kayobe-galaxy-requirements/tasks/main.yml
new file mode 100644
index 00000000..0fcd197f
--- /dev/null
+++ b/roles/kayobe-galaxy-requirements/tasks/main.yml
@@ -0,0 +1,20 @@
+---
+- name: Slurp requirements.yml
+  command:
+    cmd: "git show {{ kayobe_galaxy_requirements_branch }}:{{ kayobe_galaxy_requirements_src_path }}"
+    chdir: "{{ kayobe_galaxy_requirements_src_dir }}"
+  register: requirements_yml
+
+- name: Write requirements.yml
+  copy:
+    content: "{{ new_requirements | to_nice_yaml }}"
+    dest: "{{ kayobe_galaxy_requirements_dest_path }}"
+  vars:
+    old_requirements: "{{ requirements_yml.stdout | from_yaml }}"
+    new_requirement:
+      name: "file://{{ ansible_collection_kolla_src_dir }}"
+      type: git
+      version: "{{ kayobe_galaxy_requirements_branch }}"
+    new_requirements:
+      collections: "{{ (old_requirements.collections | rejectattr('name', 'search', 'ansible-collection-kolla') | list) + [new_requirement] }}"
+      roles: "{{ old_requirements.roles | default([]) }}"
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
index 74f34712..d7968c77 100644
--- a/zuul.d/jobs.yaml
+++ b/zuul.d/jobs.yaml
@@ -56,6 +56,7 @@
     attempts: 5
     required-projects:
       # Include kayobe to ensure other projects can use this job.
+      - name: openstack/ansible-collection-kolla
       - name: openstack/kayobe
       - name: openstack/kayobe-config-dev
       - name: openstack/kolla
@@ -75,6 +76,7 @@
       # Name of the release to upgrade from for upgrade jobs.
       previous_release: xena
       logs_dir: "/tmp/logs"
+      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 }}"
       previous_kayobe_src_dir: "{{ ansible_env.PWD ~ '/previous/kayobe' }}"
-- 
GitLab