From fca732b81e4eb5daa56da16e338bdd305a56d5bd Mon Sep 17 00:00:00 2001 From: Alex Schultz Date: Tue, 15 Jan 2019 16:33:24 -0700 Subject: [PATCH] Add base_package_type Currently in all the Dockerfile.j2 files, we are doing base distro if conditions for package names when installing via a binary. Rather than duplicating these base_distro in [], let's provide a single value for determining the binary installation method. This change adds a base_package_type which we can use to lookup if 'rpm' or if 'deb' rather than relying on specific distro names. Change-Id: I8a0c6c8fbc32a8cfa6932fddf28a449fceda3d49 --- kolla/common/config.py | 4 ++++ kolla/image/build.py | 9 +++++++++ kolla/tests/test_build.py | 18 ++++++++++++++++++ .../base-package-type-bf53d8d63611b5ac.yaml | 7 +++++++ 4 files changed, 38 insertions(+) create mode 100644 releasenotes/notes/base-package-type-bf53d8d63611b5ac.yaml diff --git a/kolla/common/config.py b/kolla/common/config.py index e1c682b4fe..5d1082f658 100755 --- a/kolla/common/config.py +++ b/kolla/common/config.py @@ -270,6 +270,10 @@ _BASE_OPTS = [ help=('Enable this to force python3 packaging names. By ' 'default this will try and determine the value of this ' 'based on the base_distro and base_distro_tag.')), + cfg.StrOpt('base_package_type', default=None, + help=('Set the package type of the distro. If not set then ' + 'the packaging type is set to "rpm" if a RHEL based ' + 'distro and "deb" if a Debian based distro.')), cfg.ListOpt('rpm_setup_config', default=[DELOREAN, DELOREAN_DEPS], help=('Comma separated list of .rpm or .repo file(s) ' 'or URL(s) to install before building containers')), diff --git a/kolla/image/build.py b/kolla/image/build.py index 6cb1cb2da9..4dd3daec71 100755 --- a/kolla/image/build.py +++ b/kolla/image/build.py @@ -697,6 +697,14 @@ class KollaWorker(object): else: self.distro_python3 = False + # Determine base packaging type for use in Dockerfiles. + if self.conf.base_package_type: + self.base_package_type = self.conf.base_package_type + elif self.base in rh_base: + self.base_package_type = 'rpm' + elif self.base in deb_base: + self.base_package_type = 'deb' + 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 exception.KollaMismatchBaseTypeException( @@ -886,6 +894,7 @@ class KollaWorker(object): 'base_image': self.conf.base_image, 'base_distro_tag': self.base_tag, 'base_arch': self.base_arch, + 'base_package_type': self.base_package_type, 'supported_distro_release': supported_distro_release, 'install_metatype': self.install_metatype, 'image_prefix': self.image_prefix, diff --git a/kolla/tests/test_build.py b/kolla/tests/test_build.py index c6a9530034..6ed50fbf1a 100644 --- a/kolla/tests/test_build.py +++ b/kolla/tests/test_build.py @@ -401,6 +401,24 @@ class KollaWorkerTest(base.TestCase): kolla = build.KollaWorker(self.conf) self.assertFalse(kolla.distro_python3) + def test_base_package_type(self): + """check base_package_type conf value is taken""" + self.conf.set_override('base_package_type', 'pip') + kolla = build.KollaWorker(self.conf) + self.assertEqual('pip', kolla.base_package_type) + + def test_base_package_type_rhel(self): + """check base_package_type rpm for rhel""" + self.conf.set_override('base', 'rhel') + kolla = build.KollaWorker(self.conf) + self.assertEqual('rpm', kolla.base_package_type) + + def test_base_package_type_debian(self): + """check base_package_type deb for debian""" + self.conf.set_override('base', 'debian') + kolla = build.KollaWorker(self.conf) + self.assertEqual('deb', kolla.base_package_type) + def test_pre_defined_exist_profile(self): # default profile include the fake image: image-base self.conf.set_override('profile', ['default']) diff --git a/releasenotes/notes/base-package-type-bf53d8d63611b5ac.yaml b/releasenotes/notes/base-package-type-bf53d8d63611b5ac.yaml new file mode 100644 index 0000000000..c072ead29a --- /dev/null +++ b/releasenotes/notes/base-package-type-bf53d8d63611b5ac.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Add `base_package_type` which can be used in Dockerfile.j2 files instead + of checking based on distro names. This will default to "rpm" for RHEL + based distros and "deb" for Debian based systems. This can also be overriden + to any string value via a configuration file.