diff --git a/docker/base/Dockerfile.j2 b/docker/base/Dockerfile.j2 index f0284d2934..4fe02e7e1e 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 1e51dde75f..68babfa759 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 d1ace9ec8e..634fa3abbb 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)