diff --git a/docker/base/Dockerfile.j2 b/docker/base/Dockerfile.j2
index f0284d29340432c6015142ba5c7d472fd7bc33c4..4fe02e7e1e70af87b21352e3a1583ad00369b2bd 100644
--- a/docker/base/Dockerfile.j2
+++ b/docker/base/Dockerfile.j2
@@ -3,28 +3,6 @@ MAINTAINER {{ maintainer }}
 
 LABEL kolla_version="{{ kolla_version }}"
 
-{# Early failure for bases and types #}
-{% if base_distro in ['fedora', 'centos', 'oraclelinux', 'rhel'] %}
-    {% if install_type not in ['source', 'binary', 'rdo', 'rhel'] %}
-
-RUN echo 'ERROR: {{ install_type }} is unavailable for {{ base_distro }}' \
-    && /bin/false
-
-    {% endif %}
-{% elif base_distro in ['ubuntu', 'debian'] %}
-    {% if install_type not in ['source','binary'] %}
-
-RUN echo 'ERROR: {{ install_type }} is unavailable for {{ base_distro }}' \
-    && /bin/false
-
-    {% endif %}
-{% else %}
-
-RUN echo 'ERROR: The specified distro has no Kolla images to build: "{{ base_distro }}"' \
-    && /bin/false
-
-{% endif %}
-
 
 {{ include_header }}
 
diff --git a/kolla/cmd/build.py b/kolla/cmd/build.py
index 1e51dde75f9b38e9972961f9ab816e0770d8be83..68babfa75998053eb520f1baf5ecdd417b23f38f 100755
--- a/kolla/cmd/build.py
+++ b/kolla/cmd/build.py
@@ -64,6 +64,10 @@ class KollaUnknownBuildTypeException(Exception):
     pass
 
 
+class KollaMismatchBaseTypeException(Exception):
+    pass
+
+
 class KollaRpmSetupUnknownConfig(Exception):
     pass
 
@@ -322,6 +326,17 @@ class KollaWorker(object):
         rpm_setup_config = filter(None, conf.rpm_setup_config)
         self.rpm_setup = self.build_rpm_setup(rpm_setup_config)
 
+        rh_base = ['fedora', 'centos', 'oraclelinux', 'rhel']
+        rh_type = ['source', 'binary', 'rdo', 'rhos']
+        deb_base = ['ubuntu', 'debian']
+        deb_type = ['source', 'binary']
+
+        if not ((self.base in rh_base and self.install_type in rh_type) or
+                (self.base in deb_base and self.install_type in deb_type)):
+            raise KollaMismatchBaseTypeException(
+                '{} is unavailable for {}'.format(self.install_type, self.base)
+            )
+
         if self.install_type == 'binary':
             self.install_metatype = 'rdo'
         elif self.install_type == 'source':
diff --git a/kolla/tests/test_build.py b/kolla/tests/test_build.py
index d1ace9ec8e3adfc1ca34c44b59aa9b7b7711b33a..634fa3abbba18dec71a911504e70c407b6dd2e00 100644
--- a/kolla/tests/test_build.py
+++ b/kolla/tests/test_build.py
@@ -11,6 +11,7 @@
 # limitations under the License.
 
 import fixtures
+import itertools
 import mock
 import os
 
@@ -102,3 +103,28 @@ class WorkerThreadTest(base.TestCase):
             path=FAKE_IMAGE['path'], tag=FAKE_IMAGE['fullname'],
             nocache=False, rm=True, pull=True, forcerm=True,
             buildargs=build_args)
+
+
+class KollaWorkerTest(base.TestCase):
+
+    def test_supported_base_type(self):
+        rh_base = ['fedora', 'centos', 'oraclelinux', 'rhel']
+        rh_type = ['source', 'binary', 'rdo', 'rhos']
+        deb_base = ['ubuntu', 'debian']
+        deb_type = ['source', 'binary']
+
+        for base_distro, install_type in itertools.chain(
+                itertools.product(rh_base, rh_type),
+                itertools.product(deb_base, deb_type)):
+            self.conf.set_override('base', base_distro)
+            self.conf.set_override('install_type', install_type)
+            # should no exception raised
+            build.KollaWorker(self.conf)
+
+    def test_unsupported_base_type(self):
+        for base_distro, install_type in itertools.product(
+                ['ubuntu', 'debian'], ['rdo', 'rhos']):
+            self.conf.set_override('base', base_distro)
+            self.conf.set_override('install_type', install_type)
+            self.assertRaises(build.KollaMismatchBaseTypeException,
+                              build.KollaWorker, self.conf)