diff --git a/Vagrantfile b/Vagrantfile
index 5e690cffff285e192eae80a06d3149a531129ae6..1c0d6d7b91952e4a311f47f9b81967fce4e69d58 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -13,15 +13,15 @@ COREOS_URL_TEMPLATE = "https://storage.googleapis.com/%s.release.core-os.net/amd
 DISK_UUID = Time.now.utc.to_i
 
 SUPPORTED_OS = {
-  "coreos-stable" => {box: "coreos-stable",      bootstrap_os: "coreos", user: "core", box_url: COREOS_URL_TEMPLATE % ["stable"]},
-  "coreos-alpha"  => {box: "coreos-alpha",       bootstrap_os: "coreos", user: "core", box_url: COREOS_URL_TEMPLATE % ["alpha"]},
-  "coreos-beta"   => {box: "coreos-beta",        bootstrap_os: "coreos", user: "core", box_url: COREOS_URL_TEMPLATE % ["beta"]},
-  "ubuntu1604"    => {box: "generic/ubuntu1604", bootstrap_os: "ubuntu", user: "vagrant"},
-  "ubuntu1804"    => {box: "generic/ubuntu1804", bootstrap_os: "ubuntu", user: "vagrant"},
-  "centos"        => {box: "centos/7",           bootstrap_os: "centos", user: "vagrant"},
-  "fedora"        => {box: "fedora/28-cloud-base", bootstrap_os: "fedora", user: "vagrant"},
-  "opensuse"      => {box: "opensuse/openSUSE-42.3-x86_64", bootstrap_os: "opensuse", use: "vagrant"},
-  "opensuse-tumbleweed" => {box: "opensuse/openSUSE-Tumbleweed-x86_64", bootstrap_os: "opensuse", use: "vagrant"},
+  "coreos-stable" => {box: "coreos-stable",      user: "core", box_url: COREOS_URL_TEMPLATE % ["stable"]},
+  "coreos-alpha"  => {box: "coreos-alpha",       user: "core", box_url: COREOS_URL_TEMPLATE % ["alpha"]},
+  "coreos-beta"   => {box: "coreos-beta",        user: "core", box_url: COREOS_URL_TEMPLATE % ["beta"]},
+  "ubuntu1604"    => {box: "generic/ubuntu1604", user: "vagrant"},
+  "ubuntu1804"    => {box: "generic/ubuntu1804", user: "vagrant"},
+  "centos"        => {box: "centos/7",           user: "vagrant"},
+  "fedora"        => {box: "fedora/28-cloud-base", user: "vagrant"},
+  "opensuse"      => {box: "opensuse/openSUSE-42.3-x86_64", use: "vagrant"},
+  "opensuse-tumbleweed" => {box: "opensuse/openSUSE-Tumbleweed-x86_64", use: "vagrant"},
 }
 
 # Defaults for config options defined in CONFIG
@@ -138,7 +138,6 @@ Vagrant.configure("2") do |config|
       ip = "#{$subnet}.#{i+100}"
       host_vars[vm_name] = {
         "ip": ip,
-        "bootstrap_os": SUPPORTED_OS[$os][:bootstrap_os],
         "local_release_dir" => $local_release_dir,
         "download_run_once": "False",
         "kube_network_plugin": $network_plugin
diff --git a/contrib/terraform/aws/README.md b/contrib/terraform/aws/README.md
index e677869d6146e3f6a9a419f8b94d4e91f63ee465..bb7e42476437fefe4a7ee58032302b191f41d169 100644
--- a/contrib/terraform/aws/README.md
+++ b/contrib/terraform/aws/README.md
@@ -43,7 +43,7 @@ ssh -F ./ssh-bastion.conf user@$ip
 
 Example (this one assumes you are using CoreOS)
 ```commandline
-ansible-playbook -i ./inventory/hosts ./cluster.yml -e ansible_user=core -e bootstrap_os=coreos -b --become-user=root --flush-cache
+ansible-playbook -i ./inventory/hosts ./cluster.yml -e ansible_user=core -b --become-user=root --flush-cache
 ```
 ***Using other distrib than CoreOs***
 If you want to use another distribution than CoreOS, you can modify the search filters of the 'data "aws_ami" "distro"' in variables.tf.
diff --git a/contrib/terraform/openstack/README.md b/contrib/terraform/openstack/README.md
index fbfc38990c3e55a25ba6051f058ae95175a18916..1b49603c9d0c975fcdb18f2f98bd3bd3e74d38b7 100644
--- a/contrib/terraform/openstack/README.md
+++ b/contrib/terraform/openstack/README.md
@@ -341,11 +341,6 @@ If it fails try to connect manually via SSH.  It could be something as simple as
 ### Configure cluster variables
 
 Edit `inventory/$CLUSTER/group_vars/all.yml`:
-- Set variable **bootstrap_os** appropriately for your desired image:
-```
-# Valid bootstrap options (required): ubuntu, coreos, centos, none
-bootstrap_os: coreos
-```
 - **bin_dir**:
 ```
 # Directory where the binaries will be installed
diff --git a/docs/coreos.md b/docs/coreos.md
index f2884bba3593b056e051ac315d7b872031f500a9..bd0c735f6c0c5ee9bb9bb4412d421a25fcfa0978 100644
--- a/docs/coreos.md
+++ b/docs/coreos.md
@@ -6,7 +6,6 @@ Example with Ansible:
 Before running the cluster playbook you must satisfy the following requirements:
 
 General CoreOS Pre-Installation Notes:
-- You should set the bootstrap_os variable to `coreos`
 - Ensure that the bin_dir is set to `/opt/bin`
 - ansible_python_interpreter should be `/opt/bin/python`. This will be laid down by the bootstrap task.
 - The default resolvconf_mode setting of `docker_dns` **does not** work for CoreOS. This is because we do not edit the systemd service file for docker on CoreOS nodes. Instead, just use the `host_resolvconf` mode. It should work out of the box.
diff --git a/inventory/sample/group_vars/all/all.yml b/inventory/sample/group_vars/all/all.yml
index 68e670ba9ffa04a50f31360646bfe0c021d9f1d2..042f1580a8333cd64f84e6eedc9d6f42cb39f9e0 100644
--- a/inventory/sample/group_vars/all/all.yml
+++ b/inventory/sample/group_vars/all/all.yml
@@ -1,9 +1,3 @@
-## Valid bootstrap options (required): ubuntu, coreos, centos, none
-## If the OS is not listed here, it means it doesn't require extra/bootstrap steps.
-## In example, python is not available on 'coreos' so it must be installed before
-## anything else. In the opposite, Debian has already all its dependencies fullfiled, then bootstrap_os should be set to `none`.
-bootstrap_os: none
-
 ## Directory where etcd data stored
 etcd_data_dir: /var/lib/etcd
 
diff --git a/roles/bootstrap-os/tasks/main.yml b/roles/bootstrap-os/tasks/main.yml
index af49faefed62867d919a47fb0fbc44dfcefad5a5..c8e63a21185eb3fe8b4fa2dfd40130605b8dbe77 100644
--- a/roles/bootstrap-os/tasks/main.yml
+++ b/roles/bootstrap-os/tasks/main.yml
@@ -1,4 +1,25 @@
 ---
+- name: Fetch /etc/os-release
+  raw: cat /etc/os-release
+  register: os_release
+  changed_when: false
+
+- name: Set bootstrap_os
+  set_fact:
+    os_family: >-
+      {%- if 'Ubuntu' in os_release.stdout -%}
+      ubuntu
+      {%- elif 'Debian' in os_release.stdout -%}
+      debian
+      {%- elif 'CoreOS' in os_release.stdout -%}
+      coreos
+      {%- elif 'Fedora' in os_release.stdout -%}
+      fedora
+      {%- elif 'CentOS' in os_release.stdout -%}
+      centos
+      {%- elif 'OpenSUSE' in os_release.stdout -%}
+      opensuse
+      {% endif %}
 
 - include_tasks: bootstrap-ubuntu.yml
   when: os_family == "ubuntu"
diff --git a/roles/kubespray-defaults/defaults/main.yaml b/roles/kubespray-defaults/defaults/main.yaml
index 6d8f8c497146d59ade01f1fa197f66656e8ab881..91a1e5cfa71728a5de35b39923cdaaa740f277b5 100644
--- a/roles/kubespray-defaults/defaults/main.yaml
+++ b/roles/kubespray-defaults/defaults/main.yaml
@@ -1,8 +1,4 @@
 ---
-## Required for bootstrap-os/preinstall/download roles and setting facts
-# Valid bootstrap options (required): ubuntu, coreos, centos, none
-bootstrap_os: none
-
 # Use proxycommand if bastion host is in group all
 # This change obseletes editing ansible.cfg file depending on bastion existance
 ansible_ssh_common_args: "{% if 'bastion' in groups['all'] %} -o ProxyCommand='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -W %h:%p {{ hostvars['bastion']['ansible_user'] }}@{{ hostvars['bastion']['ansible_host'] }} {% if ansible_ssh_private_key_file is defined %}-i {{ ansible_ssh_private_key_file }}{% endif %} ' {% endif %}"
diff --git a/tests/files/do_ubuntu-canal-ha.yml b/tests/files/do_ubuntu-canal-ha.yml
index e91dfd7c171a2aaf645a054c7390cf68f4ba0ccb..05b5737d71cfaa433ac6c16712a331a5c43a5f60 100644
--- a/tests/files/do_ubuntu-canal-ha.yml
+++ b/tests/files/do_ubuntu-canal-ha.yml
@@ -3,7 +3,6 @@ cloud_region: nyc3
 mode: ha
 
 # Deployment settings
-bootstrap_os: ubuntu
 kube_network_plugin: canal
 deploy_netchecker: true
 kubedns_min_replicas: 1
diff --git a/tests/files/gce_coreos-alpha-weave-ha.yml b/tests/files/gce_coreos-alpha-weave-ha.yml
index 883a67e2ac0db3279fb33dcaa6dd99496c8ff8f0..6754a515596566d647eabddb144d5d508e3c298f 100644
--- a/tests/files/gce_coreos-alpha-weave-ha.yml
+++ b/tests/files/gce_coreos-alpha-weave-ha.yml
@@ -7,7 +7,6 @@ startup_script: 'systemctl disable locksmithd && systemctl stop locksmithd'
 
 # Deployment settings
 kube_network_plugin: weave
-bootstrap_os: coreos
 resolvconf_mode: host_resolvconf # this is required as long as the coreos stable channel uses docker < 1.12
 deploy_netchecker: true
 kubedns_min_replicas: 1
diff --git a/tests/files/gce_coreos-calico-aio.yml b/tests/files/gce_coreos-calico-aio.yml
index 7f395abf10ab5d9d8ed07fa067dbd1fb612e367d..ca33bd98242a47bb80e01988d73f1bee02454481 100644
--- a/tests/files/gce_coreos-calico-aio.yml
+++ b/tests/files/gce_coreos-calico-aio.yml
@@ -8,7 +8,6 @@ startup_script: 'systemctl disable locksmithd && systemctl stop locksmithd'
 
 # Deployment settings
 no_group_vars: true
-bootstrap_os: coreos
 kube_network_plugin: calico
 resolvconf_mode: host_resolvconf # this is required as long as the coreos stable channel uses docker < 1.12
 deploy_netchecker: true
diff --git a/tests/files/gce_coreos-canal.yml b/tests/files/gce_coreos-canal.yml
index a3a750fd9134bf11e7c8da98aaa320810e58136e..ca4cdd98d5c6648561036f0163350094cb6d66a6 100644
--- a/tests/files/gce_coreos-canal.yml
+++ b/tests/files/gce_coreos-canal.yml
@@ -6,7 +6,6 @@ startup_script: 'systemctl disable locksmithd && systemctl stop locksmithd'
 
 # Deployment settings
 kube_network_plugin: canal
-bootstrap_os: coreos
 resolvconf_mode: host_resolvconf # this is required as long as the coreos stable channel uses docker < 1.12
 deploy_netchecker: true
 kubedns_min_replicas: 1
diff --git a/tests/files/gce_coreos-cilium.yml b/tests/files/gce_coreos-cilium.yml
index 1778929f09bf3289bf6becd867d432e4a159f4c5..eb2b002c52a4f75b6511e6865242aa3a25f2ff01 100644
--- a/tests/files/gce_coreos-cilium.yml
+++ b/tests/files/gce_coreos-cilium.yml
@@ -6,7 +6,6 @@ startup_script: 'systemctl disable locksmithd && systemctl stop locksmithd'
 
 # Deployment settings
 kube_network_plugin: cilium
-bootstrap_os: coreos
 resolvconf_mode: host_resolvconf # this is required as long as the coreos stable channel uses docker < 1.12
 deploy_netchecker: true
 enable_network_policy: true
diff --git a/tests/files/gce_coreos-vault-upgrade.yml b/tests/files/gce_coreos-vault-upgrade.yml
index 6430271885368c55cb01d0f149044979fcbf3cba..e0c2ac7d5a28ef84a32467d30e76f6f0278c75ac 100644
--- a/tests/files/gce_coreos-vault-upgrade.yml
+++ b/tests/files/gce_coreos-vault-upgrade.yml
@@ -5,7 +5,6 @@ cloud_region: us-central1-b
 mode: aio
 
 # Instance settings
-bootstrap_os: coreos
 cert_management: vault
 kube_network_plugin: flannel
 deploy_netchecker: true
diff --git a/tests/files/gce_debian8-calico-upgrade.yml b/tests/files/gce_debian8-calico-upgrade.yml
index 01041007a6feb6706e396923b77084ecf5566d68..54c5979250d9cee543753a5eee45f5485d90d9b8 100644
--- a/tests/files/gce_debian8-calico-upgrade.yml
+++ b/tests/files/gce_debian8-calico-upgrade.yml
@@ -5,7 +5,6 @@ mode: default
 
 # Deployment settings
 kube_network_plugin: calico
-bootstrap_os: debian
 deploy_netchecker: true
 kubedns_min_replicas: 1
 cloud_provider: gce
diff --git a/tests/files/gce_opensuse-canal.yml b/tests/files/gce_opensuse-canal.yml
index e5bea621cc64d95f991b9d9160635cfa38a13dd4..eb30255edcf8be011d5ba1464d4011a4ffb67fe8 100644
--- a/tests/files/gce_opensuse-canal.yml
+++ b/tests/files/gce_opensuse-canal.yml
@@ -4,7 +4,6 @@ cloud_region: us-central1-c
 mode: default
 
 # Deployment settings
-bootstrap_os: opensuse
 kube_network_plugin: canal
 deploy_netchecker: true
 kubedns_min_replicas: 1
diff --git a/tests/files/gce_ubuntu-canal-ha.yml b/tests/files/gce_ubuntu-canal-ha.yml
index 241c7d5a29ae2047462a0a07b361de5b825f212c..351d646222a7a8b205aca1ca165421d04c66719c 100644
--- a/tests/files/gce_ubuntu-canal-ha.yml
+++ b/tests/files/gce_ubuntu-canal-ha.yml
@@ -4,7 +4,6 @@ cloud_region: us-central1-c
 mode: ha
 
 # Deployment settings
-bootstrap_os: ubuntu
 kube_network_plugin: canal
 deploy_netchecker: true
 kubedns_min_replicas: 1
diff --git a/tests/files/gce_ubuntu-canal-kubeadm.yml b/tests/files/gce_ubuntu-canal-kubeadm.yml
index affb852fe7a0710caf54ef601c24020b31186ffe..afe46938bd37e190cf410a46589f9a60d585fe7e 100644
--- a/tests/files/gce_ubuntu-canal-kubeadm.yml
+++ b/tests/files/gce_ubuntu-canal-kubeadm.yml
@@ -5,7 +5,6 @@ cloud_region: us-central1-c
 mode: ha
 
 # Deployment settings
-bootstrap_os: ubuntu
 kube_network_plugin: canal
 kubeadm_enabled: true
 dynamic_kubelet_configuration: true
diff --git a/tests/files/gce_ubuntu-flannel-sep.yml b/tests/files/gce_ubuntu-flannel-sep.yml
index df77a46b3a9522da1d66ea78883d5eb070bcee59..6a5568e1d88837c9ab2f5bbc97c74d50a52cc0a6 100644
--- a/tests/files/gce_ubuntu-flannel-sep.yml
+++ b/tests/files/gce_ubuntu-flannel-sep.yml
@@ -4,7 +4,6 @@ cloud_region: us-central1-a
 mode: separate
 
 # Deployment settings
-bootstrap_os: ubuntu
 kube_network_plugin: flannel
 deploy_netchecker: true
 kubedns_min_replicas: 1
diff --git a/tests/files/gce_ubuntu-rkt-sep.yml b/tests/files/gce_ubuntu-rkt-sep.yml
index b15989231e311597e8c7a837b1a09b1ae67ce805..718a23ba1d79edbcfdf54e2b59750a9def528dd0 100644
--- a/tests/files/gce_ubuntu-rkt-sep.yml
+++ b/tests/files/gce_ubuntu-rkt-sep.yml
@@ -4,7 +4,6 @@ cloud_region: us-central1-c
 mode: separate
 
 # Deployment settings
-bootstrap_os: ubuntu
 kube_network_plugin: flannel
 etcd_deployment: rkt
 kubelet_deployment: rkt
diff --git a/tests/files/gce_ubuntu-vault-sep.yml b/tests/files/gce_ubuntu-vault-sep.yml
index 60ce0c37ff83e1250ed59a67da4b3060d1f70e79..c09be7c3822a5e53417593d686d333aaaf5bec56 100644
--- a/tests/files/gce_ubuntu-vault-sep.yml
+++ b/tests/files/gce_ubuntu-vault-sep.yml
@@ -5,7 +5,6 @@ cloud_region: us-central1-b
 mode: separate
 
 # Instance settings
-bootstrap_os: ubuntu
 cert_management: vault
 kube_network_plugin: canal
 deploy_netchecker: true
diff --git a/tests/files/gce_ubuntu-weave-sep.yml b/tests/files/gce_ubuntu-weave-sep.yml
index 4598672d10c3a0afeb2ada83d6f1611c2f7035b7..a805b24bfb319445e14f1d2190858f510f081c22 100644
--- a/tests/files/gce_ubuntu-weave-sep.yml
+++ b/tests/files/gce_ubuntu-weave-sep.yml
@@ -4,7 +4,6 @@ cloud_region: us-central1-c
 mode: separate
 
 # Deployment settings
-bootstrap_os: ubuntu
 kube_network_plugin: weave
 deploy_netchecker: true
 kubedns_min_replicas: 1
diff --git a/tests/files/gce_ubuntu18-flannel-aio.yml b/tests/files/gce_ubuntu18-flannel-aio.yml
index 9df1fa7edbf44413b82126f808da96397c161726..3ef7aa83c511fb06f7fd2531d3a25ed36288fccc 100644
--- a/tests/files/gce_ubuntu18-flannel-aio.yml
+++ b/tests/files/gce_ubuntu18-flannel-aio.yml
@@ -5,8 +5,6 @@ cloud_machine_type: "n1-standard-1"
 mode: aio
 
 # Deployment settings
-kubeadm_enabled: false
-bootstrap_os: ubuntu
 kube_network_plugin: flannel
 dynamic_kubelet_configuration: true
 deploy_netchecker: true