diff --git a/ansible/roles/prechecks/defaults/main.yml b/ansible/roles/prechecks/defaults/main.yml
new file mode 100644
index 0000000000..6361801c83
--- /dev/null
+++ b/ansible/roles/prechecks/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+# Whether to enable checks for host OS distribution and release.
+prechecks_enable_host_os_checks: true
diff --git a/ansible/roles/prechecks/tasks/host_os_checks.yml b/ansible/roles/prechecks/tasks/host_os_checks.yml
new file mode 100644
index 0000000000..0538419215
--- /dev/null
+++ b/ansible/roles/prechecks/tasks/host_os_checks.yml
@@ -0,0 +1,18 @@
+---
+- name: Checking host OS distribution
+  fail:
+    msg: >-
+      Host OS distribution {{ ansible_distribution }} is not supported.
+      Supported distributions are: {{ host_os_distributions.keys() | join(', ') }}
+  when: ansible_distribution not in host_os_distributions
+
+- name: Checking host OS release or version
+  fail:
+    msg: >-
+      {{ ansible_distribution }} release {{ ansible_distribution_release }} is
+      not supported. Supported releases are:
+      {{ host_os_distributions[ansible_distribution] | join(', ') }}
+  when:
+    - ansible_distribution_release not in host_os_distributions[ansible_distribution]
+    - ansible_distribution_version not in host_os_distributions[ansible_distribution]
+    - ansible_distribution_major_version not in host_os_distributions[ansible_distribution]
diff --git a/ansible/roles/prechecks/tasks/main.yml b/ansible/roles/prechecks/tasks/main.yml
index 2f0f8684b1..b0d1d99d2e 100644
--- a/ansible/roles/prechecks/tasks/main.yml
+++ b/ansible/roles/prechecks/tasks/main.yml
@@ -1,4 +1,7 @@
 ---
+- include_tasks: host_os_checks.yml
+  when: prechecks_enable_host_os_checks | bool
+
 - include_tasks: port_checks.yml
   when:
     - inventory_hostname not in groups['deployment']|default([])
diff --git a/ansible/roles/prechecks/vars/main.yml b/ansible/roles/prechecks/vars/main.yml
index 4f1616589e..5fbffcb478 100644
--- a/ansible/roles/prechecks/vars/main.yml
+++ b/ansible/roles/prechecks/vars/main.yml
@@ -3,3 +3,17 @@ docker_version_min: '1.10.0'
 docker_py_version_min: '2.0.0'
 ansible_version_min: '2.8'
 ansible_version_max: '2.9'
+
+# Top level keys should match ansible_distribution.
+# These map to lists of supported releases (ansible_distribution_release) or
+# versions (ansible_distribution_version or ansible_distribution_major_version)
+# for that distribution.
+host_os_distributions:
+  CentOS:
+    - "8"
+  Debian:
+    - "buster"
+  RHEL:
+    - "8"
+  Ubuntu:
+    - "bionic"
diff --git a/releasenotes/notes/host-os-precheck-e544f27f9012c9e2.yaml b/releasenotes/notes/host-os-precheck-e544f27f9012c9e2.yaml
new file mode 100644
index 0000000000..27cf1bf2a1
--- /dev/null
+++ b/releasenotes/notes/host-os-precheck-e544f27f9012c9e2.yaml
@@ -0,0 +1,7 @@
+---
+features:
+  - |
+    Adds a new precheck for supported host OS distributions. Currently
+    supported distributions are CentOS/RHEL 8, Debian Buster and Ubuntu Bionic.
+    This check can be disabled by setting ``prechecks_enable_host_os_checks``
+    to ``false``.