diff --git a/ansible/group_vars/all/pip b/ansible/group_vars/all/pip
index 8a9c90562c424d18b94cb6c325ccafd799097100..928099ff3b19068b10b2059acb4ed8a289472386 100644
--- a/ansible/group_vars/all/pip
+++ b/ansible/group_vars/all/pip
@@ -1,3 +1,3 @@
 ---
 # Upper constraints file for installation of python packages.
-pip_upper_constraints_file: "https://releases.openstack.org/constraints/upper/{{ openstack_release }}"
+pip_upper_constraints_file: "https://releases.openstack.org/constraints/upper/yoga"
diff --git a/dev/tenks-deploy-config-compute-libvirt-on-host.yml b/dev/tenks-deploy-config-compute-libvirt-on-host.yml
index d8cd1a14f30de0012e704686d2bb3969f1784634..7e636c65f092ff3348ff759221afc2da0248ff0d 100644
--- a/dev/tenks-deploy-config-compute-libvirt-on-host.yml
+++ b/dev/tenks-deploy-config-compute-libvirt-on-host.yml
@@ -54,3 +54,5 @@ libvirt_vm_emulator: "{% if ansible_facts.os_family == 'RedHat' %}/usr/libexec/q
 # Specify a log path in the kolla_logs Docker volume. It is accessible on the
 # host at the same path.
 libvirt_vm_default_console_log_dir: "/var/log/kolla/tenks"
+
+python_upper_constraints_url: "https://releases.openstack.org/constraints/upper/yoga"
diff --git a/dev/tenks-deploy-config-compute.yml b/dev/tenks-deploy-config-compute.yml
index 0f859ccd9aa074d9caefc16c62fda7c7ee84e972..79a4e073eaec6263136d4b817a962579f81f166e 100644
--- a/dev/tenks-deploy-config-compute.yml
+++ b/dev/tenks-deploy-config-compute.yml
@@ -55,3 +55,5 @@ libvirt_vm_default_console_log_dir: "/var/log/kolla/tenks"
 # Console logs are owned by the ID of the Nova user in the nova_libvirt
 # container.
 libvirt_vm_log_owner: 42436
+
+python_upper_constraints_url: "https://releases.openstack.org/constraints/upper/yoga"
diff --git a/dev/tenks-deploy-config-overcloud.yml b/dev/tenks-deploy-config-overcloud.yml
index 521f7d03a29a13f9a9bc5ffd0cf8f8c5e0ea837e..a3f0aa3067d1b02ca250510c68e2a24b0002dff3 100644
--- a/dev/tenks-deploy-config-overcloud.yml
+++ b/dev/tenks-deploy-config-overcloud.yml
@@ -42,3 +42,5 @@ wait_for_placement: false
 # Nested virtualisation is not working well in CI currently. Force the use of
 # QEMU.
 libvirt_vm_engine: "qemu"
+
+python_upper_constraints_url: "https://releases.openstack.org/constraints/upper/yoga"
diff --git a/playbooks/kayobe-overcloud-base/run.yml b/playbooks/kayobe-overcloud-base/run.yml
index 350b47dfd502ae5253e80867ce9e2d164c0455da..bf79cc05a6c4f579d04f8cca0f9d7c5d75946dc4 100644
--- a/playbooks/kayobe-overcloud-base/run.yml
+++ b/playbooks/kayobe-overcloud-base/run.yml
@@ -5,6 +5,7 @@
     KAYOBE_OVERCLOUD_GENERATE_CERTIFICATES: "{{ tls_enabled | ternary(1, 0) }}"
     # TODO(mgoddard): Remove this when libvirt on host is used by default.
     TENKS_CONFIG_PATH: "dev/tenks-deploy-config-compute{% if tls_enabled %}-libvirt-on-host{% endif %}.yml"
+    UPPER_CONSTRAINTS_FILE: "https://releases.openstack.org/constraints/upper/yoga"
   tasks:
     - name: Ensure overcloud is deployed
       shell:
diff --git a/playbooks/kayobe-overcloud-upgrade-base/run.yml b/playbooks/kayobe-overcloud-upgrade-base/run.yml
index 97569e0bdd28dd328412bc725f3108e901b01f7e..9b13e5386d2cf854e5d6d552b420550a3709c241 100644
--- a/playbooks/kayobe-overcloud-upgrade-base/run.yml
+++ b/playbooks/kayobe-overcloud-upgrade-base/run.yml
@@ -1,5 +1,7 @@
 ---
 - hosts: primary
+  environment:
+    UPPER_CONSTRAINTS_FILE: "https://releases.openstack.org/constraints/upper/yoga"
   tasks:
 
     # Install the previous release of Kayobe, and use it to deploy a control
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
index f14cb559c294e9fd4a9dd3f72d05a694ce42dd06..66042c067114a98056cc41328242c2bfb0a22f82 100644
--- a/zuul.d/jobs.yaml
+++ b/zuul.d/jobs.yaml
@@ -71,6 +71,7 @@
       - name: openstack/kolla
       - name: openstack/kolla-ansible
       - name: openstack/requirements
+        override-checkout: stable/yoga
       - name: openstack/tenks
     irrelevant-files:
       - ^\..+