Make the yum repositories configurable in the base image
- Removed hardcoded yum repository configuration in favor of commands dynamically generated based on repo-url and repo-file arguments. We maintain a sane default set of repositories. - Added generic rpm_setup_config parameter to add support for installing .rpm or .repo files before building containers. Co-Authored-By: Ryan Hallisey <rhallise@redhat.com> Implements: blueprint custom-repos Change-Id: I1b3a7647a9e7239de3cd162cb6f464f05632bde1
This commit is contained in:
parent
d7095790a2
commit
e8ad7488f6
@ -53,9 +53,9 @@ RUN rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB && \
|
|||||||
|
|
||||||
{% if install_metatype in ['rdo', 'mixed'] %}
|
{% if install_metatype in ['rdo', 'mixed'] %}
|
||||||
|
|
||||||
# These repos provide latest packages built from trunk master into RPMs
|
{% for cmd in rpm_setup %}
|
||||||
RUN curl http://trunk.rdoproject.org/centos7/current/delorean.repo -o /etc/yum.repos.d/delorean.repo
|
{{ cmd }}
|
||||||
RUN curl http://trunk.rdoproject.org/centos7/delorean-deps.repo -o /etc/yum.repos.d/delorean-deps.repo
|
{% endfor %}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{# endif for repo setup for all RHEL except RHEL OSP #}
|
{# endif for repo setup for all RHEL except RHEL OSP #}
|
||||||
|
@ -48,6 +48,9 @@
|
|||||||
# The registry host. The default registry host is Docker Hub.
|
# The registry host. The default registry host is Docker Hub.
|
||||||
#registry = None
|
#registry = None
|
||||||
|
|
||||||
|
# Comma separated list of .rpm or .repo file(s) or URL(s) to install before
|
||||||
|
# building containers.
|
||||||
|
#rpm_setup_config = http://trunk.rdoproject.org/centos7/currrent/delorean.repo,http://trunk.rdoproject.org/centos7/delorean-deps.repo
|
||||||
|
|
||||||
# Preset build profiles can be set here to easily build common sets of images
|
# Preset build profiles can be set here to easily build common sets of images
|
||||||
[profiles]
|
[profiles]
|
||||||
|
@ -43,6 +43,10 @@ LOG.setLevel(logging.INFO)
|
|||||||
|
|
||||||
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
||||||
|
|
||||||
|
RDO_MIRROR = "http://trunk.rdoproject.org/centos7"
|
||||||
|
DELOREAN = "{}/current/delorean.repo".format(RDO_MIRROR)
|
||||||
|
DELOREAN_DEPS = "{}/delorean-deps.repo".format(RDO_MIRROR)
|
||||||
|
|
||||||
|
|
||||||
class KollaDirNotFoundException(Exception):
|
class KollaDirNotFoundException(Exception):
|
||||||
pass
|
pass
|
||||||
@ -52,6 +56,10 @@ class KollaUnknownBuildTypeException(Exception):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class KollaRpmSetupUnknownConfig(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def docker_client():
|
def docker_client():
|
||||||
docker_kwargs = docker.utils.kwargs_from_env()
|
docker_kwargs = docker.utils.kwargs_from_env()
|
||||||
return docker.Client(version='auto', **docker_kwargs)
|
return docker.Client(version='auto', **docker_kwargs)
|
||||||
@ -282,6 +290,7 @@ def merge_args_and_config(settings_from_config_file):
|
|||||||
"push": False,
|
"push": False,
|
||||||
"registry": None,
|
"registry": None,
|
||||||
"retries": 3,
|
"retries": 3,
|
||||||
|
"rpm_setup_config": '',
|
||||||
"tag": get_kolla_version(),
|
"tag": get_kolla_version(),
|
||||||
"threads": 8
|
"threads": 8
|
||||||
}
|
}
|
||||||
@ -373,6 +382,10 @@ class KollaWorker(object):
|
|||||||
self.install_type = config['install_type']
|
self.install_type = config['install_type']
|
||||||
self.tag = config['tag']
|
self.tag = config['tag']
|
||||||
self.images = list()
|
self.images = list()
|
||||||
|
rpm_setup_config = [cfg.strip()
|
||||||
|
for cfg in config['rpm_setup_config'].split(',')
|
||||||
|
if cfg]
|
||||||
|
self.rpm_setup = self.build_rpm_setup(rpm_setup_config)
|
||||||
|
|
||||||
if self.install_type == 'binary':
|
if self.install_type == 'binary':
|
||||||
self.install_metatype = 'rdo'
|
self.install_metatype = 'rdo'
|
||||||
@ -403,6 +416,40 @@ class KollaWorker(object):
|
|||||||
self.image_statuses_unmatched = dict()
|
self.image_statuses_unmatched = dict()
|
||||||
self.maintainer = config['maintainer']
|
self.maintainer = config['maintainer']
|
||||||
|
|
||||||
|
def build_rpm_setup(self, rpm_setup_config):
|
||||||
|
"""Generates a list of docker commands based on provided configuration.
|
||||||
|
|
||||||
|
:param rpm_setup_config: A list of .rpm or .repo paths or URLs
|
||||||
|
:return: A list of docker commands
|
||||||
|
"""
|
||||||
|
rpm_setup = list()
|
||||||
|
|
||||||
|
if not rpm_setup_config:
|
||||||
|
rpm_setup_config = [DELOREAN, DELOREAN_DEPS]
|
||||||
|
|
||||||
|
for config in rpm_setup_config:
|
||||||
|
if config.endswith('.rpm'):
|
||||||
|
# RPM files can be installed with yum from file path or url
|
||||||
|
cmd = "RUN yum -y install {}".format(config)
|
||||||
|
elif config.endswith('.repo'):
|
||||||
|
if config.startswith('http'):
|
||||||
|
# Curl http://url/etc.repo to /etc/yum.repos.d/etc.repo
|
||||||
|
name = config.split('/')[-1]
|
||||||
|
cmd = "RUN curl {} -o /etc/yum.repos.d/{}".format(config,
|
||||||
|
name)
|
||||||
|
else:
|
||||||
|
# Copy .repo file from filesystem
|
||||||
|
cmd = "COPY {} /etc/yum.repos.d/".format(config)
|
||||||
|
else:
|
||||||
|
raise KollaRpmSetupUnknownConfig(
|
||||||
|
'RPM setup must be provided as .rpm or .repo files.'
|
||||||
|
' Attempted configuration was {}'.format(config)
|
||||||
|
)
|
||||||
|
|
||||||
|
rpm_setup.append(cmd)
|
||||||
|
|
||||||
|
return rpm_setup
|
||||||
|
|
||||||
def setup_working_dir(self):
|
def setup_working_dir(self):
|
||||||
"""Creates a working directory for use while building"""
|
"""Creates a working directory for use while building"""
|
||||||
ts = time.time()
|
ts = time.time()
|
||||||
@ -433,7 +480,8 @@ class KollaWorker(object):
|
|||||||
'namespace': self.namespace,
|
'namespace': self.namespace,
|
||||||
'tag': self.tag,
|
'tag': self.tag,
|
||||||
'maintainer': self.maintainer,
|
'maintainer': self.maintainer,
|
||||||
'kolla_version': get_kolla_version()}
|
'kolla_version': get_kolla_version(),
|
||||||
|
'rpm_setup': self.rpm_setup}
|
||||||
if self.include_header:
|
if self.include_header:
|
||||||
with open(self.include_header, 'r') as f:
|
with open(self.include_header, 'r') as f:
|
||||||
values['include_header'] = f.read()
|
values['include_header'] = f.read()
|
||||||
|
Loading…
Reference in New Issue
Block a user