diff --git a/cluster.yml b/cluster.yml
index 45d4183b911c451679e75fc0f24384bc437ba581..0518ef28e9052c4f5ae7237a0ce9b923710e4499 100644
--- a/cluster.yml
+++ b/cluster.yml
@@ -1,13 +1,19 @@
 ---
 - hosts: all
-  gather_facts: true
+  gather_facts: false
+  roles:
+    - bootstrap-os
+  tags:
+    - bootstrap-os
 
 - hosts: etcd:!k8s-cluster
+  gather_facts: true
   roles:
     - { role: kubernetes/preinstall, tags: preinstall }
     - { role: etcd, tags: etcd }
 
 - hosts: k8s-cluster
+  gather_facts: true
   roles:
     - { role: kubernetes/preinstall, tags: preinstall }
     - { role: etcd, tags: etcd }
@@ -15,14 +21,17 @@
     - { role: network_plugin, tags: network }
 
 - hosts: kube-master
+  gather_facts: true
   roles:
     - { role: kubernetes/preinstall, tags: preinstall }
     - { role: kubernetes/master, tags: master }
 
 - hosts: k8s-cluster
+  gather_facts: true
   roles:
     - { role: dnsmasq, tags: dnsmasq }
 
 - hosts: kube-master[0]
+  gather_facts: true
   roles:
     - {role: kubernetes-apps, tags: apps}
diff --git a/inventory/group_vars/all.yml b/inventory/group_vars/all.yml
index 547a9d6129fe9a36d3079397efdc82d2f8c107be..32f34c31017ef6ab484adc9f9188af85dd5dc152 100644
--- a/inventory/group_vars/all.yml
+++ b/inventory/group_vars/all.yml
@@ -1,3 +1,6 @@
+# Valid bootstrap options (required): xenial, coreos, none
+bootstrap_os: none
+
 # Directory where the binaries will be installed
 bin_dir: /usr/local/bin
 
diff --git a/roles/coreos-bootstrap/defaults/main.yml b/roles/bootstrap-os/defaults/main.yml
similarity index 100%
rename from roles/coreos-bootstrap/defaults/main.yml
rename to roles/bootstrap-os/defaults/main.yml
diff --git a/roles/coreos-bootstrap/files/bootstrap.sh b/roles/bootstrap-os/files/bootstrap.sh
similarity index 100%
rename from roles/coreos-bootstrap/files/bootstrap.sh
rename to roles/bootstrap-os/files/bootstrap.sh
diff --git a/roles/coreos-bootstrap/files/get-pip.py b/roles/bootstrap-os/files/get-pip.py
similarity index 100%
rename from roles/coreos-bootstrap/files/get-pip.py
rename to roles/bootstrap-os/files/get-pip.py
diff --git a/roles/coreos-bootstrap/files/runner b/roles/bootstrap-os/files/runner
similarity index 100%
rename from roles/coreos-bootstrap/files/runner
rename to roles/bootstrap-os/files/runner
diff --git a/roles/coreos-bootstrap/tasks/main.yml b/roles/bootstrap-os/tasks/bootstrap-coreos.yml
similarity index 82%
rename from roles/coreos-bootstrap/tasks/main.yml
rename to roles/bootstrap-os/tasks/bootstrap-coreos.yml
index 4d9e11ea628d01e56d0a0370a8c35fd31a6c3f75..a638ad82b2fd17ee357ccd776f383bd872acef03 100644
--- a/roles/coreos-bootstrap/tasks/main.yml
+++ b/roles/bootstrap-os/tasks/bootstrap-coreos.yml
@@ -4,9 +4,10 @@
   register: need_bootstrap
   ignore_errors: True
 
+
 - name: Bootstrap | Run bootstrap.sh
   script: bootstrap.sh
-  when: need_bootstrap | failed
+  when: (need_bootstrap | failed)
 
 - set_fact:
     ansible_python_interpreter: "/opt/bin/python"
@@ -16,23 +17,23 @@
   register: need_pip
   ignore_errors: True
   changed_when: false
-  when: need_bootstrap | failed
+  when: (need_bootstrap | failed)
 
 - name: Bootstrap | Copy get-pip.py
   copy: src=get-pip.py dest=~/get-pip.py
-  when: need_pip | failed
+  when: (need_pip | failed)
 
 - name: Bootstrap | Install pip
   shell: "{{ansible_python_interpreter}} ~/get-pip.py"
-  when: need_pip | failed
+  when: (need_pip | failed)
 
 - name: Bootstrap | Remove get-pip.py
   file: path=~/get-pip.py state=absent
-  when: need_pip | failed
+  when: (need_pip | failed)
 
 - name: Bootstrap | Install pip launcher
   copy: src=runner dest=/opt/bin/pip mode=0755
-  when: need_pip | failed
+  when: (need_pip | failed)
 
 - name: Install required python modules
   pip:
@@ -45,4 +46,4 @@
 
 - name: Assign inventory name to unconfigured hostnames
   shell: sh -c "echo \"{{inventory_hostname}}\" > /etc/hostname; hostname \"{{inventory_hostname}}\""
-  when: configured_hostname.stdout == 'localhost'
+  when: (configured_hostname.stdout == 'localhost')
diff --git a/roles/bootstrap-os/tasks/bootstrap-ubuntu.yml b/roles/bootstrap-os/tasks/bootstrap-ubuntu.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2d3becd4478d6b13fe8615c890c72553d2331590
--- /dev/null
+++ b/roles/bootstrap-os/tasks/bootstrap-ubuntu.yml
@@ -0,0 +1,14 @@
+---
+#  raw: cat /etc/issue.net | grep '{{ bootstrap_versions }}'
+
+- name: Bootstrap | Check if bootstrap is needed
+  raw: which python
+  register: need_bootstrap
+  ignore_errors: True
+
+- name: Bootstrap | Install python 2.x
+  raw: DEBIAN_FRONTEND=noninteractive apt-get install -y python-minimal
+  when: need_bootstrap | failed
+
+- set_fact:
+    ansible_python_interpreter: "/usr/bin/python"
diff --git a/roles/bootstrap-os/tasks/main.yml b/roles/bootstrap-os/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5d084ec744b1d0635a0aab49830d658ccc765ce2
--- /dev/null
+++ b/roles/bootstrap-os/tasks/main.yml
@@ -0,0 +1,6 @@
+---
+- include: bootstrap-ubuntu.yml
+  when: bootstrap_os == "ubuntu"
+
+- include: bootstrap-coreos.yml
+  when: bootstrap_os == "coreos"
\ No newline at end of file
diff --git a/roles/coreos-bootstrap/templates/python_shim.j2 b/roles/bootstrap-os/templates/python_shim.j2
similarity index 100%
rename from roles/coreos-bootstrap/templates/python_shim.j2
rename to roles/bootstrap-os/templates/python_shim.j2
diff --git a/coreos-bootstrap.yml b/ubuntu-bootstrap.yml
similarity index 67%
rename from coreos-bootstrap.yml
rename to ubuntu-bootstrap.yml
index 88fcb888f62a9860807772d26d68801dad7edf37..b6adf783d2ff1cd181c0a4ca8079aacf0f767913 100644
--- a/coreos-bootstrap.yml
+++ b/ubuntu-bootstrap.yml
@@ -2,4 +2,4 @@
 - hosts: all
   gather_facts: False
   roles:
-    - coreos-bootstrap
+    - ubuntu-bootstrap