diff --git a/roles/kubernetes/preinstall/tasks/0040-verify-settings.yml b/roles/kubernetes/preinstall/tasks/0040-verify-settings.yml
index 3ae1c45390f8292eb054c743d84a44f904bfc48c..e911c76ccbdebaff71002684c69bcd0d30aaf0fd 100644
--- a/roles/kubernetes/preinstall/tasks/0040-verify-settings.yml
+++ b/roles/kubernetes/preinstall/tasks/0040-verify-settings.yml
@@ -1,10 +1,10 @@
 ---
 - name: Stop if any host not in '--limit' does not have a fact cache
   vars:
-    uncached_hosts: "{{ (hostvars | selectattr('ansible_default_ipv4', 'undefined')).keys() }}"
-    excluded_hosts: "{{ hostvars.keys() | difference(lookup('inventory_hostnames', ansible_limit)) }}"
+    uncached_hosts: "{{ hostvars | dict2items | selectattr('value.ansible_default_ipv4', 'undefined') | map(attribute='key') }}"
+    excluded_hosts: "{{ hostvars.keys() | difference(query('inventory_hostnames', ansible_limit)) }}"
   assert:
-    that: uncached_hosts | intersect(excluded_hosts) == 0
+    that: uncached_hosts | intersect(excluded_hosts) == []
     fail_msg: |
       Kubespray does not support '--limit' without a populated facts cache for the excluded hosts.
       Please run the facts.yml playbook first without '--limit'.