diff --git a/ansible/baremetal-compute-inspect.yml b/ansible/baremetal-compute-inspect.yml
index d66061ced072f3fd7cab22018a33159553408d8c..45d8c3d296eaf1756b08933fbde0108ab7e34b90 100644
--- a/ansible/baremetal-compute-inspect.yml
+++ b/ansible/baremetal-compute-inspect.yml
@@ -15,8 +15,7 @@
     - role: stackhpc.os_openstacksdk
       os_openstacksdk_venv: "{{ venv }}"
       os_openstacksdk_install_epel: "{{ dnf_install_epel }}"
-      os_openstacksdk_state: latest
-      os_openstacksdk_upper_constraints_file: "{{ pip_upper_constraints_file }}"
+      os_openstacksdk_upper_constraints_file: "{{ openstacksdk_upper_constraints_file }}"
 
 - name: Ensure baremetal compute nodes are inspected in ironic
   hosts: baremetal-compute
diff --git a/ansible/baremetal-compute-manage.yml b/ansible/baremetal-compute-manage.yml
index 27f1fce853da81d2a4ad1fda98ddef2792f362f5..2f1c586d248a50acc40f95725962fc07259136bd 100644
--- a/ansible/baremetal-compute-manage.yml
+++ b/ansible/baremetal-compute-manage.yml
@@ -15,8 +15,7 @@
     - role: stackhpc.os_openstacksdk
       os_openstacksdk_venv: "{{ venv }}"
       os_openstacksdk_install_epel: "{{ dnf_install_epel }}"
-      os_openstacksdk_state: latest
-      os_openstacksdk_upper_constraints_file: "{{ pip_upper_constraints_file }}"
+      os_openstacksdk_upper_constraints_file: "{{ openstacksdk_upper_constraints_file }}"
 
 - name: Ensure baremetal compute nodes are manageable in ironic
   hosts: baremetal-compute
diff --git a/ansible/baremetal-compute-provide.yml b/ansible/baremetal-compute-provide.yml
index 7361c4e660d5b6ea863c0ec6315dc24bdbb8e92b..964e9c272c717cc75126714ada82e4a67af663f7 100644
--- a/ansible/baremetal-compute-provide.yml
+++ b/ansible/baremetal-compute-provide.yml
@@ -15,8 +15,7 @@
     - role: stackhpc.os_openstacksdk
       os_openstacksdk_venv: "{{ venv }}"
       os_openstacksdk_install_epel: "{{ dnf_install_epel }}"
-      os_openstacksdk_state: latest
-      os_openstacksdk_upper_constraints_file: "{{ pip_upper_constraints_file }}"
+      os_openstacksdk_upper_constraints_file: "{{ openstacksdk_upper_constraints_file }}"
 
 - name: Ensure baremetal compute nodes are available in ironic
   hosts: baremetal-compute
diff --git a/ansible/external-net.yml b/ansible/external-net.yml
index 02b70b86242d8a71899151fd58f13c82d7fd9bd7..66d2adb00351d6315de0a093afde86bb6adb01a7 100644
--- a/ansible/external-net.yml
+++ b/ansible/external-net.yml
@@ -5,8 +5,7 @@
   roles:
     - role: stackhpc.os-networks
       os_openstacksdk_install_epel: "{{ dnf_install_epel }}"
-      os_openstacksdk_state: latest
-      os_openstacksdk_upper_constraints_file: "{{ pip_upper_constraints_file }}"
+      os_openstacksdk_upper_constraints_file: "{{ openstacksdk_upper_constraints_file }}"
       os_networks_venv: "{{ virtualenv_path }}/openstacksdk"
       os_networks_openstack_auth_type: "{{ openstack_auth_type }}"
       os_networks_openstack_auth: "{{ openstack_auth }}"
diff --git a/ansible/inventory/group_vars/all/pip b/ansible/inventory/group_vars/all/pip
index 8a9c90562c424d18b94cb6c325ccafd799097100..42444c091caaf5e0f170f97a229a249f41f32d16 100644
--- a/ansible/inventory/group_vars/all/pip
+++ b/ansible/inventory/group_vars/all/pip
@@ -1,3 +1,6 @@
 ---
 # Upper constraints file for installation of python packages.
 pip_upper_constraints_file: "https://releases.openstack.org/constraints/upper/{{ openstack_release }}"
+
+# Upper constraints file for installation of openstacksdk.
+openstacksdk_upper_constraints_file: "https://releases.openstack.org/constraints/upper/yoga"
\ No newline at end of file
diff --git a/ansible/overcloud-introspection-rules-dell-lldp-workaround.yml b/ansible/overcloud-introspection-rules-dell-lldp-workaround.yml
index 4f700661539fb60a78c9133d32224c24a507be18..fd9e9abc713b8e236132b685b9a867cfe87ab5c3 100644
--- a/ansible/overcloud-introspection-rules-dell-lldp-workaround.yml
+++ b/ansible/overcloud-introspection-rules-dell-lldp-workaround.yml
@@ -126,7 +126,7 @@
   roles:
     - role: ironic-inspector-rules
       os_openstacksdk_install_epel: "{{ dnf_install_epel }}"
-      os_openstacksdk_state: latest
+      os_openstacksdk_upper_constraints_file: "{{ openstacksdk_upper_constraints_file }}"
       ironic_inspector_venv: "{{ virtualenv_path }}/openstacksdk"
       ironic_inspector_upper_constraints_file: "{{ pip_upper_constraints_file }}"
       ironic_inspector_auth_type: "{{ openstack_auth_type }}"
diff --git a/ansible/overcloud-introspection-rules.yml b/ansible/overcloud-introspection-rules.yml
index 982f1fd29ce464df0e15892156e4aaf38b4e5172..98d3ca8cce0b1e558afa223cb26f985e4a3cfd66 100644
--- a/ansible/overcloud-introspection-rules.yml
+++ b/ansible/overcloud-introspection-rules.yml
@@ -59,9 +59,9 @@
   roles:
     - role: ironic-inspector-rules
       os_openstacksdk_install_epel: "{{ dnf_install_epel }}"
-      os_openstacksdk_state: latest
+      os_openstacksdk_state: "latest"
       ironic_inspector_venv: "{{ venv }}"
-      ironic_inspector_upper_constraints_file: "{{ pip_upper_constraints_file }}"
+      ironic_inspector_upper_constraints_file: "{{ openstacksdk_upper_constraints_file }}"
       ironic_inspector_auth_type: "{{ openstack_auth_type }}"
       ironic_inspector_auth: "{{ openstack_auth }}"
       ironic_inspector_cacert: "{{ openstack_cacert }}"
diff --git a/ansible/overcloud-ipa-images.yml b/ansible/overcloud-ipa-images.yml
index 7246faf908782fb42e6139743d6a581434a0aa4c..0b8242a15b28ab556da1a9384ad6a480ef49f784 100644
--- a/ansible/overcloud-ipa-images.yml
+++ b/ansible/overcloud-ipa-images.yml
@@ -101,9 +101,9 @@
   roles:
     - role: ipa-images
       os_openstacksdk_install_epel: "{{ dnf_install_epel }}"
-      os_openstacksdk_state: latest
+      os_openstacksdk_state: "latest"
       ipa_images_venv: "{{ virtualenv_path }}/openstacksdk"
-      ipa_images_upper_constraints_file: "{{ pip_upper_constraints_file }}"
+      ipa_images_upper_constraints_file: "{{ openstacksdk_upper_constraints_file }}"
       ipa_images_openstack_auth_type: "{{ openstack_auth_type }}"
       ipa_images_openstack_auth: "{{ openstack_auth }}"
       ipa_images_openstack_auth_env: "{{ openstack_auth_env }}"
diff --git a/ansible/provision-net.yml b/ansible/provision-net.yml
index 54a5b4fc6fbc4db45a4df84240eadede256592ea..e5045f7e84af1c3bb31747baa1a8d10eadfadaeb 100644
--- a/ansible/provision-net.yml
+++ b/ansible/provision-net.yml
@@ -65,8 +65,8 @@
   roles:
     - role: stackhpc.os-networks
       os_openstacksdk_install_epel: "{{ dnf_install_epel }}"
-      os_openstacksdk_state: latest
-      os_networks_upper_constraints_file: "{{ pip_upper_constraints_file }}"
+      os_openstacksdk_state: "latest"
+      os_networks_upper_constraints_file: "{{ openstacksdk_upper_constraints_file }}"
       os_networks_venv: "{{ venv }}"
       os_networks_auth_type: "{{ openstack_auth_type }}"
       os_networks_auth: "{{ openstack_auth }}"
diff --git a/ansible/roles/console-allocation/library/console_allocation.py b/ansible/roles/console-allocation/library/console_allocation.py
index ee652d0ee5e60bb550e8902ba13e2f440ff2a8b7..74ce46036e7733eb0bf5f91d92e7d1816ac0c9e4 100644
--- a/ansible/roles/console-allocation/library/console_allocation.py
+++ b/ansible/roles/console-allocation/library/console_allocation.py
@@ -1,5 +1,3 @@
-#!/usr/bin/python3
-
 # Copyright (c) 2017 StackHPC Ltd.
 #
 # Licensed under the Apache License, Version 2.0 (the "License"); you may
diff --git a/ansible/roles/ip-allocation/library/ip_allocation.py b/ansible/roles/ip-allocation/library/ip_allocation.py
index 1a135518d03ecddb286022ca535691105a7e5e6a..5cf90bd055abf06a7b003f7280f4f4d82750bf8f 100644
--- a/ansible/roles/ip-allocation/library/ip_allocation.py
+++ b/ansible/roles/ip-allocation/library/ip_allocation.py
@@ -1,5 +1,3 @@
-#!/usr/bin/python3
-
 # Copyright (c) 2017 StackHPC Ltd.
 #
 # Licensed under the Apache License, Version 2.0 (the "License"); you may
diff --git a/ansible/roles/ipa-images/meta/main.yml b/ansible/roles/ipa-images/meta/main.yml
index a1914d381905d949853583996fdd9522d25e4e17..4c62fc3636c847ac11e997fecb3ee9b05ff302b9 100644
--- a/ansible/roles/ipa-images/meta/main.yml
+++ b/ansible/roles/ipa-images/meta/main.yml
@@ -2,7 +2,7 @@
 dependencies:
   - role: stackhpc.os_openstacksdk
     os_openstacksdk_venv: "{{ ipa_images_venv }}"
-    os_openstacksdk_upper_constraints_file: "{{ ipa_images_upper_constraints_file }}"
+    os_openstacksdk_upper_constraints_file: "{{ openstacksdk_upper_constraints_file }}"
   - role: stackhpc.os-openstackclient
     os_openstackclient_venv: "{{ ipa_images_venv }}"
     os_openstackclient_upper_constraints_file: "{{ ipa_images_upper_constraints_file }}"
diff --git a/ansible/roles/ironic-inspector-rules/library/os_ironic_inspector_rule.py b/ansible/roles/ironic-inspector-rules/library/os_ironic_inspector_rule.py
index 56c26e0fc359e86131288ca4cfb0c3ab80ab13a8..a8a95efd1a6ee976c175735b851ef0b9d18c5598 100644
--- a/ansible/roles/ironic-inspector-rules/library/os_ironic_inspector_rule.py
+++ b/ansible/roles/ironic-inspector-rules/library/os_ironic_inspector_rule.py
@@ -1,5 +1,3 @@
-#!/usr/bin/python3
-
 # Copyright (c) 2017 StackHPC Ltd.
 #
 # Licensed under the Apache License, Version 2.0 (the "License"); you may
diff --git a/ansible/roles/ironic-inspector-rules/meta/main.yml b/ansible/roles/ironic-inspector-rules/meta/main.yml
index 68a2262c3a17c5bfc1f2122c6fa999f9ed881bfa..225ec9f5cffc26fb83973471ea76af4fa9f6f490 100644
--- a/ansible/roles/ironic-inspector-rules/meta/main.yml
+++ b/ansible/roles/ironic-inspector-rules/meta/main.yml
@@ -2,4 +2,4 @@
 dependencies:
   - role: stackhpc.os_openstacksdk
     os_openstacksdk_venv: "{{ ironic_inspector_venv }}"
-    os_openstacksdk_upper_constraints_file: "{{ ironic_inspector_upper_constraints_file }}"
+    os_openstacksdk_upper_constraints_file: "{{ openstacksdk_upper_constraints_file }}"
\ No newline at end of file
diff --git a/ansible/roles/kolla-ansible/defaults/main.yml b/ansible/roles/kolla-ansible/defaults/main.yml
index 09dc388eb6a01e6cf63b1aa2c49d5f0fc782e364..3cee9c96c3d0f9d15eef527f099e1ecfad7a91a0 100644
--- a/ansible/roles/kolla-ansible/defaults/main.yml
+++ b/ansible/roles/kolla-ansible/defaults/main.yml
@@ -24,7 +24,7 @@ kolla_ansible_venv_extra_requirements: []
 # Pip requirement specifier for the ansible package. NOTE: This limits the
 # version of ansible used by kolla-ansible to avoid new releases from breaking
 # tested code. Changes to this limit should be tested.
-kolla_ansible_venv_ansible: 'ansible>=4,<6.0'
+kolla_ansible_venv_ansible: 'ansible>=5,<7.0'
 
 # Path to a requirements.yml file for Ansible collections.
 kolla_ansible_requirements_yml: "{{ kolla_ansible_venv }}/share/kolla-ansible/requirements.yml"
diff --git a/ansible/roles/kolla-ansible/library/kolla_passwords.py b/ansible/roles/kolla-ansible/library/kolla_passwords.py
index 733f5e038fed154e8cd65d3ab1e2f1a7692bf952..049f2b09f9bc10e7430faeee6752abc23c60b97b 100644
--- a/ansible/roles/kolla-ansible/library/kolla_passwords.py
+++ b/ansible/roles/kolla-ansible/library/kolla_passwords.py
@@ -1,5 +1,3 @@
-#!/usr/bin/python3
-
 # Copyright (c) 2017 StackHPC Ltd.
 #
 # Licensed under the Apache License, Version 2.0 (the "License"); you may
diff --git a/ansible/roles/wipe-disks/library/blockdevice_info.py b/ansible/roles/wipe-disks/library/blockdevice_info.py
index 4a109283f0fd20a17f65ffdfe94f2bfd8fa520d0..b5fa5840c74880c50c6baa183e1a73618118cc70 100644
--- a/ansible/roles/wipe-disks/library/blockdevice_info.py
+++ b/ansible/roles/wipe-disks/library/blockdevice_info.py
@@ -1,5 +1,3 @@
-#!/usr/bin/python3
-
 DOCUMENTATION = '''
 ---
 module: blockdevice_info
diff --git a/ansible/seed-introspection-rules.yml b/ansible/seed-introspection-rules.yml
index f59655af611476b7b729089d4c332efa242633c2..247f2929a8e5b6109e4a433f6b7f581030ef12ab 100644
--- a/ansible/seed-introspection-rules.yml
+++ b/ansible/seed-introspection-rules.yml
@@ -6,9 +6,9 @@
   roles:
     - role: ironic-inspector-rules
       os_openstacksdk_install_epel: "{{ dnf_install_epel }}"
-      os_openstacksdk_state: latest
+      os_openstacksdk_state: "latest"
       ironic_inspector_venv: "{{ virtualenv_path }}/openstacksdk"
-      ironic_inspector_upper_constraints_file: "{{ pip_upper_constraints_file }}"
+      ironic_inspector_upper_constraints_file: "{{ openstacksdk_upper_constraints_file }}"
       ironic_inspector_cloud: bifrost
       ironic_inspector_rules: "{{ kolla_bifrost_inspector_rules }}"
       # These variables may be referenced in the introspection rules.
diff --git a/kayobe/plugins/action/merge_configs.py b/kayobe/plugins/action/merge_configs.py
index 1e7e9da8f6ae3cc3070e95effafd7dcfaa6a200b..ce45bf763f73d680b573dc03edd057903db82c14 100644
--- a/kayobe/plugins/action/merge_configs.py
+++ b/kayobe/plugins/action/merge_configs.py
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
 # Copyright 2015 Sam Yaple
 # Copyright 2017 99Cloud Inc.
 #
diff --git a/kayobe/plugins/action/merge_yaml.py b/kayobe/plugins/action/merge_yaml.py
index b2e5a621a2cf1e1786a585efdc06389007ce1edd..943ca01589a20cfcb65a5a9e668bfaab094c3ed5 100644
--- a/kayobe/plugins/action/merge_yaml.py
+++ b/kayobe/plugins/action/merge_yaml.py
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
 # Copyright 2015 Sam Yaple
 # Copyright 2016 intel
 #
diff --git a/releasenotes/notes/bump-ansible-6-5d7175aa0d962268.yaml b/releasenotes/notes/bump-ansible-6-5d7175aa0d962268.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..b65317635ac21357444ba72a3c3c568619414708
--- /dev/null
+++ b/releasenotes/notes/bump-ansible-6-5d7175aa0d962268.yaml
@@ -0,0 +1,6 @@
+---
+upgrade:
+  - |
+    Updates the maximum supported version of Ansible from 5.x (ansible-core
+    2.12) to 6.x (ansible-core 2.13). The minimum supported version is updated
+    from 4.x to 5.x. This is true for both Kayobe and Kolla Ansible.
diff --git a/requirements.txt b/requirements.txt
index 1078028708b19dad128f13fe6eaff2fa1bf0bcf1..2f4e5b8f7e9cc7b41eb0a2abe30cac26dad89136 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,6 @@
 pbr>=2.0 # Apache-2.0
 Jinja2>3 # BSD
-ansible>=4,<6.0 # GPLv3
+ansible>=5,<7.0 # GPLv3
 cliff>=3.1.0 # Apache
 netaddr!=0.7.16,>=0.7.13 # BSD
 PyYAML>=3.10.0 # MIT