I was able to reproduce it although: * JUJU_AVAILABILITY_ZONE is set correctly; * the charm correctly renders the default_availability_zone config in the DEFAULT section of nova.conf. So it does what it is supposed to do but the intended result is not achieved. We only check this functionality via a unit test that's why we haven't caught it in functional testing. Based on the Nova code, unless the host aggregate overrides the AZ value, it is taken from nova.conf's default_availability_zone: (stein) https://opendev.org/openstack/nova/src/commit/e91540f96538c7ba568617db7c03cf3a195b87ff/nova/availability_zones.py#L93-L100 https://opendev.org/openstack/nova/src/commit/e91540f96538c7ba568617db7c03cf3a195b87ff/nova/availability_zones.py#L71-L109 https://opendev.org/openstack/nova/src/commit/e91540f96538c7ba568617db7c03cf3a195b87ff/nova/conf/availability_zone.py#L32-L34 juju config keystone openstack-origin cloud:bionic-stein openstack compute service list +-----+------------------+----------------------+----------+---------+-------+----------------------------+ | ID | Binary | Host | Zone | Status | State | Updated At | +-----+------------------+----------------------+----------+---------+-------+----------------------------+ | 1 | nova-scheduler | juju-554d51-27-lxd-6 | internal | enabled | up | 2020-07-24T10:50:55.000000 | | 7 | nova-conductor | juju-554d51-27-lxd-6 | internal | enabled | up | 2020-07-24T10:50:55.000000 | | 19 | nova-consoleauth | juju-554d51-27-lxd-6 | internal | enabled | up | 2020-07-24T10:50:57.000000 | | 22 | nova-compute | server-maas-6.maas | nova | enabled | up | 2020-07-24T10:50:58.000000 | | 25 | nova-compute | server-maas-11.maas | nova | enabled | up | 2020-07-24T10:50:59.000000 | | 28 | nova-compute | server-maas-2.maas | nova | enabled | up | 2020-07-24T10:50:55.000000 | | 31 | nova-compute | server-maas-8.maas | nova | enabled | up | 2020-07-24T10:50:53.000000 | | 64 | nova-compute | server-maas-3.maas | nova | enabled | up | 2020-07-24T10:50:56.000000 | | 67 | nova-compute | server-maas-10.maas | nova | enabled | up | 2020-07-24T10:50:54.000000 | | 70 | nova-compute | server-maas-4.maas | nova | enabled | up | 2020-07-24T10:50:59.000000 | | 73 | nova-consoleauth | juju-554d51-24-lxd-6 | internal | enabled | up | 2020-07-24T10:50:56.000000 | | 76 | nova-conductor | juju-554d51-24-lxd-6 | internal | enabled | up | 2020-07-24T10:50:56.000000 | | 82 | nova-scheduler | juju-554d51-24-lxd-6 | internal | enabled | up | 2020-07-24T10:50:57.000000 | | 91 | nova-scheduler | juju-554d51-31-lxd-6 | internal | enabled | up | 2020-07-24T10:50:57.000000 | | 100 | nova-consoleauth | juju-554d51-31-lxd-6 | internal | enabled | up | 2020-07-24T10:50:56.000000 | | 103 | nova-conductor | juju-554d51-31-lxd-6 | internal | enabled | up | 2020-07-24T10:50:57.000000 | +-----+------------------+----------------------+----------+---------+-------+----------------------------+ openstack aggregate list ; echo $? 0 juju config nova-compute-kvm customize-failure-domain true juju config nova-compute-kvm default-availability-zone nova juju run --application nova-compute-kvm 'printenv JUJU_AVAILABILITY_ZONE ; sudo grep default_availability_zone /etc/nova/nova.conf' - Stdout: | zone2 default_availability_zone = zone2 UnitId: nova-compute-kvm/1 - Stdout: | zone1 default_availability_zone = zone1 UnitId: nova-compute-kvm/10 - Stdout: | zone2 default_availability_zone = zone2 UnitId: nova-compute-kvm/6 - Stdout: | zone1 default_availability_zone = zone1 UnitId: nova-compute-kvm/9 - Stdout: | zone1 default_availability_zone = zone1 UnitId: nova-compute-kvm/3 - Stdout: | zone3 default_availability_zone = zone3 UnitId: nova-compute-kvm/8 - Stdout: | zone3 default_availability_zone = zone3 UnitId: nova-compute-kvm/4 juju run --application nova-compute-kvm 'hostname -f -A ; printenv JUJU_AVAILABILITY_ZONE ; sudo grep default_availability_zone /etc/nova/nova.conf' - Stdout: "bond0.16.server-maas-6.maas server-maas-6 server-maas-6.maas bond1.13.server-maas-6.maas bond0.12.server-maas-6.maas bond0.17.server-maas-6.maas bond1.14.server-maas-6.maas bond0.15.server-maas-6.maas \nzone2\ndefault_availability_zone = zone2\n" UnitId: nova-compute-kvm/1 - Stdout: "bond0.15.server-maas-4.maas bond0.16.server-maas-4.maas server-maas-4 server-maas-4.maas bond1.13.server-maas-4.maas bond0.12.server-maas-4.maas bond1.14.server-maas-4.maas \nzone1\ndefault_availability_zone = zone1\n" UnitId: nova-compute-kvm/10 - Stdout: "bond0.15.server-maas-8.maas bond0.16.server-maas-8.maas server-maas-8 server-maas-8.maas bond0.12.server-maas-8.maas bond1.13.server-maas-8.maas bond1.14.server-maas-8.maas \nzone2\ndefault_availability_zone = zone2\n" UnitId: nova-compute-kvm/6 - Stdout: "bond0.12.server-maas-11.maas bond0.16.server-maas-11.maas bond0.15.server-maas-11.maas bond1.13.server-maas-11.maas bond1.14.server-maas-11.maas server-maas-11 server-maas-11.maas \nzone3\ndefault_availability_zone = zone3\n" UnitId: nova-compute-kvm/4 - Stdout: "bond0.16.server-maas-10.maas server-maas-10 server-maas-10.maas bond1.14.server-maas-10.maas bond1.13.server-maas-10.maas bond0.12.server-maas-10.maas bond0.15.server-maas-10.maas bond0.17.server-maas-10.maas \nzone3\ndefault_availability_zone = zone3\n" UnitId: nova-compute-kvm/8 - Stdout: "bond0.15.server-maas-3.maas bond0.16.server-maas-3.maas server-maas-3 server-maas-3.maas bond1.13.server-maas-3.maas bond0.12.server-maas-3.maas bond1.14.server-maas-3.maas \nzone1\ndefault_availability_zone = zone1\n" UnitId: nova-compute-kvm/3 - Stdout: "server-maas-2.maas bond1.14.server-maas-2.maas bond1.13.server-maas-2.maas bond0.17.server-maas-2.maas bond0.15.server-maas-2.maas bond0.12.server-maas-2.maas bond0.16.server-maas-2.maas server-maas-2 \nzone1\ndefault_availability_zone = zone1\n" UnitId: nova-compute-kvm/9