diff --git a/ansible/roles/nova/tasks/discover_computes.yml b/ansible/roles/nova/tasks/discover_computes.yml
index 1a0c904f26..647bd5d59c 100644
--- a/ansible/roles/nova/tasks/discover_computes.yml
+++ b/ansible/roles/nova/tasks/discover_computes.yml
@@ -23,15 +23,16 @@
     - nova_compute_services is success
     - nova_compute_services.stdout | from_json | length != 0
 
-- name: Discovering nova hosts
+# TODO(yoctozepto): no need to do --by-service if ironic not used
+- name: Discover nova hosts
   become: true
   command: >
     docker exec nova_api nova-manage cell_v2 discover_hosts --by-service
-  register: discover_hosts
   changed_when: False
   run_once: True
   delegate_to: "{{ groups['nova-api'][0] }}"
 
+# NOTE(yoctozepto): SIGHUP is probably unnecessary
 - name: Refresh cell cache in nova scheduler
   become: true
   command: docker kill --signal HUP nova_scheduler
diff --git a/ansible/roles/nova/templates/nova.conf.j2 b/ansible/roles/nova/templates/nova.conf.j2
index 04b196b916..39bb43d9f9 100644
--- a/ansible/roles/nova/templates/nova.conf.j2
+++ b/ansible/roles/nova/templates/nova.conf.j2
@@ -254,7 +254,10 @@ secure_proxy_ssl_header = HTTP_X_FORWARDED_PROTO
 
 [scheduler]
 max_attempts = 10
-discover_hosts_in_cells_interval = 60
+# NOTE(yoctozepto): kolla-ansible handles cell mapping by itself on each deploy
+# periodic run must be disabled to avoid random failures (where both try to map)
+# -1 is default and means periodic discovery is disabled
+discover_hosts_in_cells_interval = -1
 
 {% if enable_nova_fake | bool %}
 default_filters = RetryFilter,AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter