diff --git a/tests/templates/globals-default.j2 b/tests/templates/globals-default.j2
index 31d96bc619cd54b4f17f68eb6fff52737941d4ab..c548417b5cfe81c3a4c3b67da5db21fb84e37fc3 100644
--- a/tests/templates/globals-default.j2
+++ b/tests/templates/globals-default.j2
@@ -23,6 +23,8 @@ keepalived_virtual_router_id: "{{ 250 | random(1) }}"
 mariadb_wsrep_extra_provider_options:
   - "gmcast.peer_timeout=PT15S"
 
+nova_compute_virt_type: "{{ virt_type }}"
+
 enable_openstack_core: "{{ openstack_core_enabled }}"
 enable_horizon: "{{ dashboard_enabled }}"
 enable_heat: "{{ openstack_core_tested }}"
diff --git a/tests/templates/nova-compute-overrides.j2 b/tests/templates/nova-compute-overrides.j2
index 5ad30c8e4b0bcf877168996ee6f7505b458615c6..26c756a0430d5c9e7f3e4c17f79f8c9e6a49ce45 100644
--- a/tests/templates/nova-compute-overrides.j2
+++ b/tests/templates/nova-compute-overrides.j2
@@ -1,9 +1,5 @@
 [libvirt]
-virt_type=qemu
-# NOTE(Jeffrey4l): fix the gate in iax-ord nodes for libvirt 2.0.
 {% if ansible_architecture == 'aarch64' %}
 cpu_mode=custom
 cpu_model=max
-{% else %}
-cpu_mode=none
 {% endif %}
diff --git a/zuul.d/base.yaml b/zuul.d/base.yaml
index c59141e57be5a07e62a557faae84f903c869e688..e554a2d2d8a7287f7d7548a6f10bb95c549dd12e 100644
--- a/zuul.d/base.yaml
+++ b/zuul.d/base.yaml
@@ -28,6 +28,7 @@
     vars:
       previous_release: ussuri
       scenario: core
+      virt_type: qemu
       is_upgrade: no
       api_network_prefix: "192.0.2."
       api_network_prefix_length: "24"
@@ -44,6 +45,15 @@
     roles:
       - zuul: zuul/zuul-jobs
 
+- job:
+    name: kolla-ansible-kvm-base
+    parent: kolla-ansible-base
+    voting: false
+    files:
+      - ^ansible/roles/(nova-cell)/
+    vars:
+      virt_type: kvm
+
 - job:
     name: kolla-ansible-ipv6-base
     parent: kolla-ansible-base
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
index c7e9f3f220c5dc6d3579b6f8cb8b5fd8a34aea15..ff91397e1fd7e80b33de0cff2477f9370b28b469 100644
--- a/zuul.d/jobs.yaml
+++ b/zuul.d/jobs.yaml
@@ -36,6 +36,14 @@
       install_type: source
       tls_enabled: true
 
+- job:
+    name: kolla-ansible-ubuntu-source-kvm
+    parent: kolla-ansible-kvm-base
+    nodeset: kolla-ansible-bionic-nested-virt
+    vars:
+      base_distro: ubuntu
+      install_type: source
+
 - job:
     name: kolla-ansible-ubuntu-source-multinode-ipv6
     parent: kolla-ansible-ipv6-base
diff --git a/zuul.d/nodesets.yaml b/zuul.d/nodesets.yaml
index d6f573b0255d0150bd6e8c36ae1eee51bbdc9462..25ad0936e044cec15f5afb82f522259937231d53 100644
--- a/zuul.d/nodesets.yaml
+++ b/zuul.d/nodesets.yaml
@@ -82,3 +82,9 @@
         nodes:
           - secondary1
           - secondary2
+
+- nodeset:
+    name: kolla-ansible-bionic-nested-virt
+    nodes:
+      - name: primary
+        label: nested-virt-ubuntu-bionic
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index dfb23cda50707f3e3726ec08fbd845a5c25fb029..16286751e0efb4d051cec53c69d5b67b8a26d120 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -14,6 +14,7 @@
         - kolla-ansible-centos8-source
         - kolla-ansible-debian-source
         - kolla-ansible-ubuntu-source
+        - kolla-ansible-ubuntu-source-kvm
         - kolla-ansible-ubuntu-source-multinode-ipv6
         - kolla-ansible-centos8-source-bifrost
         - kolla-ansible-centos8-source-zun