diff --git a/playbooks/cluster.yml b/playbooks/cluster.yml
index 81da5be46ed125480b106e858aad60bc3c57995f..6e61459a1383b84a4de9ac649ba1aaeed3ed3551 100644
--- a/playbooks/cluster.yml
+++ b/playbooks/cluster.yml
@@ -12,15 +12,6 @@
     - { role: kubespray-defaults }
     - { role: bastion-ssh-config, tags: ["localhost", "bastion"] }
 
-- hosts: k8s_cluster:etcd
-  strategy: linear
-  any_errors_fatal: "{{ any_errors_fatal | default(true) }}"
-  gather_facts: false
-  environment: "{{ proxy_disable_env }}"
-  roles:
-    - { role: kubespray-defaults }
-    - { role: bootstrap-os, tags: bootstrap-os}
-
 - name: Gather facts
   tags: always
   import_playbook: facts.yml
diff --git a/playbooks/facts.yml b/playbooks/facts.yml
index d9ce34081e9025407b18d58f0274cfdf1c74889f..4fff54f11a38c1ac69ff1fe69427dcb3a330be34 100644
--- a/playbooks/facts.yml
+++ b/playbooks/facts.yml
@@ -1,4 +1,17 @@
 ---
+- hosts: k8s_cluster:etcd:calico_rr
+  strategy: linear
+  any_errors_fatal: "{{ any_errors_fatal | default(true) }}"
+  gather_facts: false
+  environment: "{{ proxy_disable_env }}"
+  vars:
+    # Need to disable pipelining for bootstrap-os as some systems have requiretty in sudoers set, which makes pipelining
+    # fail. bootstrap-os fixes this on these systems, so in later plays it can be enabled.
+    ansible_ssh_pipelining: false
+  roles:
+    - { role: kubespray-defaults }
+    - { role: bootstrap-os, tags: bootstrap-os}
+
 - name: Gather facts
   hosts: k8s_cluster:etcd:calico_rr
   gather_facts: False
diff --git a/playbooks/scale.yml b/playbooks/scale.yml
index 8e79bfa038b10d670fb8c2b9ad6c751f4a4c8eb8..4d95543b8d55d7e647923907434898e4adab9040 100644
--- a/playbooks/scale.yml
+++ b/playbooks/scale.yml
@@ -12,16 +12,6 @@
     - { role: kubespray-defaults }
     - { role: bastion-ssh-config, tags: ["localhost", "bastion"] }
 
-- name: Bootstrap any new workers
-  hosts: kube_node
-  strategy: linear
-  any_errors_fatal: "{{ any_errors_fatal | default(true) }}"
-  gather_facts: false
-  environment: "{{ proxy_disable_env }}"
-  roles:
-    - { role: kubespray-defaults }
-    - { role: bootstrap-os, tags: bootstrap-os }
-
 - name: Gather facts
   tags: always
   import_playbook: facts.yml
diff --git a/playbooks/upgrade_cluster.yml b/playbooks/upgrade_cluster.yml
index 15809e845a1b0e863e243ba26d59c7f5821332b7..96a8feb4579e218a9967f83ff5a8275d256d34ce 100644
--- a/playbooks/upgrade_cluster.yml
+++ b/playbooks/upgrade_cluster.yml
@@ -12,19 +12,6 @@
     - { role: kubespray-defaults }
     - { role: bastion-ssh-config, tags: ["localhost", "bastion"] }
 
-- hosts: k8s_cluster:etcd:calico_rr
-  strategy: linear
-  any_errors_fatal: "{{ any_errors_fatal | default(true) }}"
-  gather_facts: false
-  environment: "{{ proxy_disable_env }}"
-  vars:
-    # Need to disable pipelining for bootstrap-os as some systems have requiretty in sudoers set, which makes pipelining
-    # fail. bootstrap-os fixes this on these systems, so in later plays it can be enabled.
-    ansible_ssh_pipelining: false
-  roles:
-    - { role: kubespray-defaults }
-    - { role: bootstrap-os, tags: bootstrap-os}
-
 - name: Gather facts
   tags: always
   import_playbook: facts.yml