diff --git a/.automation b/.automation
index 8b5e98a64b32a51dce45859eea4f095ad0b516b5..534a2d98dae60b86297b6456dc114f0bd8482d80 160000
--- a/.automation
+++ b/.automation
@@ -1 +1 @@
-Subproject commit 8b5e98a64b32a51dce45859eea4f095ad0b516b5
+Subproject commit 534a2d98dae60b86297b6456dc114f0bd8482d80
diff --git a/etc/kayobe/environments/production/kolla/config/neutron/ml2_conf.ini b/etc/kayobe/environments/production/kolla/config/neutron/ml2_conf.ini
index 758030b83ef809a83755d2d26059bfc4d12a2608..1af4f6f13a0ea13f5b12c230167f6e9cf77fa8fa 100644
--- a/etc/kayobe/environments/production/kolla/config/neutron/ml2_conf.ini
+++ b/etc/kayobe/environments/production/kolla/config/neutron/ml2_conf.ini
@@ -1022,9 +1022,9 @@ ngs_manage_vlans = False
 [genericswitch:ethsw-ar02-u19]
 device_type = netmiko_cumulus
 ip = 10.45.253.79
-username = cumulus
-password = {{ secrets_switch_ssh_password }}
-secret = {{ secrets_switch_ssh_password }}
+username = arcus-ngs
+password = {{ secrets_arcus_ngs_switch_ssh_password }}
+secret = {{ secrets_arcus_ngs_switch_ssh_password }}
 ngs_physical_networks = physnet1
 ngs_port_default_vlan = 610
 ngs_disable_inactive_ports = False
diff --git a/etc/kayobe/environments/staging/inventory/group_vars/controllers/firewall b/etc/kayobe/environments/staging/inventory/group_vars/controllers/firewall
index c92b6700024c504830e68e0a0ac9046e35bb8e76..913c699f351fd2bd724f854e2021b0e2b2b4cfb0 100644
--- a/etc/kayobe/environments/staging/inventory/group_vars/controllers/firewall
+++ b/etc/kayobe/environments/staging/inventory/group_vars/controllers/firewall
@@ -60,6 +60,11 @@ firewallgen_ipv4_input_allow_rules:
     proto: tcp
     destination: "{{ internal_net_name | net_vip_address }}"
     comment: "hint: used by 'haproxy' for horizon"
+  - interface: "{{ internal_net_interface }}"
+    port: 1234
+    proto: tcp
+    destination: "{{ internal_net_name | net_ip }}"
+    comment: "hint: used to expose blazar API"
   - interface: "{{ internal_net_interface }}"
     port: 1984
     proto: tcp
diff --git a/etc/kayobe/kolla.yml b/etc/kayobe/kolla.yml
index 2dba2c7cde33774b3d2089ee5e02d10026ae0cda..7e5e9bd3a12a123f133022ddb3d0106efd8028e8 100644
--- a/etc/kayobe/kolla.yml
+++ b/etc/kayobe/kolla.yml
@@ -694,7 +694,7 @@ kolla_enable_tls_external: true
 
 #kolla_enable_aodh:
 #kolla_enable_barbican:
-#kolla_enable_blazar:
+kolla_enable_blazar: true
 #kolla_enable_cadf_notifications:
 #kolla_enable_caso:
 #kolla_enable_ceilometer:
diff --git a/etc/kayobe/kolla/config/blazar.conf b/etc/kayobe/kolla/config/blazar.conf
new file mode 100644
index 0000000000000000000000000000000000000000..97c8244a3d61cc2552873bd25b43251c78b0bd3c
--- /dev/null
+++ b/etc/kayobe/kolla/config/blazar.conf
@@ -0,0 +1,7 @@
+[DEFAULT]
+{% raw %}
+cafile = {{ openstack_cacert }}
+{% endraw %}
+
+[manager]
+plugins = virtual.instance.plugin,physical.host.plugin,flavor.plugin
diff --git a/etc/kayobe/kolla/config/nova/nova-scheduler.conf b/etc/kayobe/kolla/config/nova/nova-scheduler.conf
index 6b01784e6822ab37b9cf9b832722f8000bade924..395d659740dfdcc3b7aa145696f66c2591ab5441 100644
--- a/etc/kayobe/kolla/config/nova/nova-scheduler.conf
+++ b/etc/kayobe/kolla/config/nova/nova-scheduler.conf
@@ -6,7 +6,8 @@ enable_isolated_aggregate_filtering = true
 
 [filter_scheduler]
 available_filters = nova.scheduler.filters.all_filters
-enabled_filters = AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,PciPassthroughFilter,NUMATopologyFilter,AggregateInstanceExtraSpecsFilter
+available_filters = blazarnova.scheduler.filters.blazar_filter.BlazarFilter
+enabled_filters = AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,PciPassthroughFilter,NUMATopologyFilter,AggregateInstanceExtraSpecsFilter,BlazarFilter
 
 # be sure to pack VMs, when possible, to limit fragmentation
 ram_weight_multiplier = -100.0
diff --git a/etc/kayobe/kolla/globals.yml b/etc/kayobe/kolla/globals.yml
index 215d47b5dd4c070ad16412b75a929b301a2551ea..aaf1653e21a3e578496b9a851310a81dc357ab40 100644
--- a/etc/kayobe/kolla/globals.yml
+++ b/etc/kayobe/kolla/globals.yml
@@ -182,6 +182,9 @@ octavia_service_auth_project: octavia-lbs
 # Currently ahead of release train, remove in Zed
 etcd_image_full: registry.gitlab.com/scientific-openstack/infrastructure/kayobe-config/centos-source-etcd:victoria-20230202152347
 
+# No yoga image at the moment for blazar, so we use antelope: 
+blazar_api_image_full: "{{ docker_registry }}/stackhpc/blazar-api:2023.1-rocky-9-20240611T153543"
+blazar_manager_image_full: "{{ docker_registry }}/stackhpc/blazar-manager:2023.1-rocky-9-20240611T153543"
 # kolla_base_distro must be set here to be resolvable on a per-host basis
 # This is necessary for os migrations where mixed clouds might be deployed
 kolla_base_distro: "{% raw %}{{ 'centos' if ansible_facts.distribution == 'Rocky' and ansible_facts.distribution_major_version == '8' else ansible_facts.distribution | lower }}{% endraw %}"
@@ -191,10 +194,18 @@ kayobe_image_tags:
     centos: yoga-20230905T130221
     rocky: yoga-20231218T141822
     ubuntu: yoga-20231024T093507
+  cinder:
+    centos: yoga-20240701T132344
+    rocky: yoga-20240701T132344
+    ubuntu: yoga-20240701T132344
   cloudkitty:
     centos: yoga-20231107T165648
     rocky: yoga-20231218T141822
     ubuntu: yoga-20231107T165648
+  glance:
+    centos: yoga-20240702T105751
+    rocky: yoga-20240702T105751
+    ubuntu: yoga-20240702T105751
   heat:
     centos: yoga-20240320T082414
     rocky: yoga-20240320T082414
@@ -208,6 +219,10 @@ kayobe_image_tags:
     rocky: yoga-20240105T120257
     ubuntu: yoga-20231114T125927
   nova:
+    centos: yoga-20240702T105751
+    rocky: yoga-20240702T105751
+    ubuntu: yoga-20240702T105751
+  nova_libvirt:
     centos: yoga-20230905T130221
     rocky: yoga-20240105T120257
     ubuntu: yoga-20231103T161400
@@ -217,10 +232,13 @@ kayobe_image_tags:
     ubuntu: yoga-20231024T093507
 
 cloudkitty_tag: "{% raw %}{{ kayobe_image_tags['cloudkitty'][kolla_base_distro] }}{% endraw %}"
+cinder_tag: "{% raw %}{{ kayobe_image_tags['cinder'][kolla_base_distro] }}{% endraw %}"
+glance_tag: "{% raw %}{{ kayobe_image_tags['glance'][kolla_base_distro] }}{% endraw %}"
 heat_tag: "{% raw %}{{ kayobe_image_tags['heat'][kolla_base_distro] }}{% endraw %}"
 magnum_tag: "{% raw %}{{ kayobe_image_tags['magnum'][kolla_base_distro] }}{% endraw %}"
 neutron_tag: "{% raw %}{{ kayobe_image_tags['neutron'][kolla_base_distro] }}{% endraw %}"
 nova_tag: "{% raw %}{{ kayobe_image_tags['nova'][kolla_base_distro] }}{% endraw %}"
+nova_libvirt_tag: "{% raw %}{{ kayobe_image_tags['nova_libvirt'][kolla_base_distro] }}{% endraw %}"
 octavia_tag: "{% raw %}{{ kayobe_image_tags['octavia'][kolla_base_distro] }}{% endraw %}"
 
 opensearch_tag: yoga-20231219T221916
diff --git a/etc/kayobe/kolla/overcloud-services.j2 b/etc/kayobe/kolla/overcloud-services.j2
index a3756d8aaa2455e312cddd1df112e599f45ed703..64318d2cc80a4ea0c76ff509c553aa666f7a8cdf 100644
--- a/etc/kayobe/kolla/overcloud-services.j2
+++ b/etc/kayobe/kolla/overcloud-services.j2
@@ -496,8 +496,10 @@ vitrage
 [blazar-api:children]
 blazar
 
-[blazar-manager:children]
-blazar
+[blazar-manager]
+{% if groups.get('controllers', []) | length > 0 %}
+{{ groups['controllers'][0] }}
+{% endif %}
 
 # Prometheus
 [prometheus-node-exporter:children]
diff --git a/etc/kayobe/overcloud-dib.yml b/etc/kayobe/overcloud-dib.yml
index 7878b66303c388973929e72504cb4894a8afc2e1..07f9eb871bfd799257a2410147e42d0515bc40cf 100644
--- a/etc/kayobe/overcloud-dib.yml
+++ b/etc/kayobe/overcloud-dib.yml
@@ -260,7 +260,7 @@ overcloud_dib_git_elements_extra:
 # Upper constraints file for installing packages in the virtual environment
 # used for building overcloud host disk images. Default is {{
 # pip_upper_constraints_file }}.
-overcloud_dib_upper_constraints_file: https://raw.githubusercontent.com/openstack/requirements/stable/yoga/upper-constraints.txt
+overcloud_dib_upper_constraints_file: https://raw.githubusercontent.com/openstack/requirements/unmaintained/yoga/upper-constraints.txt
 
 ###############################################################################
 # Dummy variable to allow Ansible to accept this file.