diff --git a/playbooks/kayobe-base/pre.yml b/playbooks/kayobe-base/pre.yml
index 01314b693fedff2926beb161a1cd6c35e310c0d2..304a8d80b0b839129beeaac3be4ba45b045f03e3 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 727f9f23b7f78708258d192f77a4dbd9f4e03b23..691240d441aba9bd73f7dc48476c32a7715176a5 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 0000000000000000000000000000000000000000..b5774b1301a7889f7018be939425e65143786d48
--- /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 0000000000000000000000000000000000000000..d39009ef8e4ea21305b85b59558d72ae5b02e236
--- /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 0000000000000000000000000000000000000000..0fcd197f169af71a41ed4473d2ea2cc179af6c65
--- /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 74f34712de8bfb11e844001c34d6b2f8101acae8..d7968c7754583e542fa7016402d5161f93187221 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' }}"