diff --git a/ansible/roles/nova/templates/nova.conf.d/libvirt.conf.j2 b/ansible/roles/nova/templates/nova.conf.d/libvirt.conf.j2
new file mode 100644
index 0000000000..f48c63040a
--- /dev/null
+++ b/ansible/roles/nova/templates/nova.conf.d/libvirt.conf.j2
@@ -0,0 +1,19 @@
+[libvirt]
+connection_uri = "qemu+tcp://{{ migration_interface_address }}/system"
+{% if enable_ceph | bool and nova_backend == "rbd" %}
+images_type = rbd
+images_rbd_pool = {{ ceph_nova_pool_name }}
+images_rbd_ceph_conf = /etc/ceph/ceph.conf
+rbd_user = nova
+disk_cachemodes="network=writeback"
+{% if nova_hw_disk_discard != '' %}
+hw_disk_discard = {{ nova_hw_disk_discard }}
+{% endif %}
+{% endif %}
+{% if nova_backend == "rbd" and external_ceph_cephx_enabled | bool %}
+rbd_secret_uuid = {{ rbd_secret_uuid }}
+{% endif %}
+virt_type = {{ nova_compute_virt_type }}
+{% if nova_libvirt_cpu_mode %}
+cpu_mode = {{ nova_libvirt_cpu_mode }}
+{% endif %}
diff --git a/ansible/roles/nova/templates/nova.conf.j2 b/ansible/roles/nova/templates/nova.conf.j2
index 39bb43d9f9..4a6ac8534e 100644
--- a/ansible/roles/nova/templates/nova.conf.j2
+++ b/ansible/roles/nova/templates/nova.conf.j2
@@ -185,27 +185,13 @@ memcache_security_strategy = ENCRYPT
 memcache_secret_key = {{ memcache_secret_key }}
 memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:{{ memcached_port }}{% if not loop.last %},{% endif %}{% endfor %}
 
+{% if service_name == 'nova-compute' %}
 {% if nova_compute_virt_type in ['kvm', 'qemu'] %}
-[libvirt]
-connection_uri = "qemu+tcp://{{ migration_interface_address }}/system"
-{% if enable_ceph | bool and nova_backend == "rbd" %}
-images_type = rbd
-images_rbd_pool = {{ ceph_nova_pool_name }}
-images_rbd_ceph_conf = /etc/ceph/ceph.conf
-rbd_user = nova
-disk_cachemodes="network=writeback"
-{% if nova_hw_disk_discard != '' %}
-hw_disk_discard = {{ nova_hw_disk_discard }}
+{# must be an include because Ansible 2.8 (and earlier) does not like defined variables referencing undefined variables: migration_interface_address here #}
+{# see https://github.com/ansible/ansible/issues/58835 #}
+{% include 'nova.conf.d/libvirt.conf.j2' %}
 {% endif %}
 {% endif %}
-{% if nova_backend == "rbd" and external_ceph_cephx_enabled | bool %}
-rbd_secret_uuid = {{ rbd_secret_uuid }}
-{% endif %}
-virt_type = {{ nova_compute_virt_type }}
-{% endif %}
-{% if nova_libvirt_cpu_mode %}
-cpu_mode = {{ nova_libvirt_cpu_mode }}
-{% endif %}
 
 {% if nova_compute_virt_type == "vmware" %}
 [vmware]