diff options
Diffstat (limited to 'kolla/image')
| -rw-r--r-- | kolla/image/build.py | 14 | ||||
| -rw-r--r-- | kolla/image/tasks.py | 29 |
2 files changed, 40 insertions, 3 deletions
diff --git a/kolla/image/build.py b/kolla/image/build.py index 41cc11708..f75ca64c8 100644 --- a/kolla/image/build.py +++ b/kolla/image/build.py @@ -106,7 +106,8 @@ def run_build(): if conf.debug: LOG.setLevel(logging.DEBUG) - if conf.engine not in (engine.Engine.DOCKER.value,): + if conf.engine not in (engine.Engine.DOCKER.value, + engine.Engine.PODMAN.value): LOG.error(f'Unsupported engine name "{conf.engine}", exiting.') sys.exit(1) LOG.info(f'Using engine: {conf.engine}') @@ -123,12 +124,21 @@ def run_build(): except AttributeError: LOG.error("Error, Docker Python library is too old, " "Try running 'pip install docker --upgrade'") - if conf.squash: squash_version = utils.get_docker_squash_version() LOG.info('Image squash is enabled and "docker-squash" version ' 'is %s', squash_version) + if conf.engine == engine.Engine.PODMAN.value: + try: + import podman + podman.__version__ + except ImportError: + LOG.error("Error, you have set podman as container engine, " + "but library is not found." + "Try running pip install podman") + exit(1) + kolla = KollaWorker(conf) kolla.setup_working_dir() kolla.find_dockerfiles() diff --git a/kolla/image/tasks.py b/kolla/image/tasks.py index 1fbfbd6b5..ada30d664 100644 --- a/kolla/image/tasks.py +++ b/kolla/image/tasks.py @@ -12,11 +12,16 @@ import datetime import errno +import json import os import shutil import tarfile import docker.errors +try: + import podman.errors.exceptions +except (ImportError, ModuleNotFoundError): + pass import git import requests from requests import exceptions as requests_exc @@ -367,6 +372,20 @@ class BuildTask(EngineTask): pull = self.conf.pull if image.parent is None else False buildargs = self.update_buildargs() + + kwargs = {} + if self.conf.engine == engine.Engine.PODMAN.value: + # TODO(kevko): dockerfile path is a workaround, + # should be removed as soon as it will be fixed in podman-py + # https://github.com/containers/podman-py/issues/177 + kwargs["dockerfile"] = image.path + '/Dockerfile' + # Podman squash is different by default + # https://github.com/containers/buildah/issues/1234 + if self.conf.squash: + kwargs["squash"] = False + kwargs["layers"] = False + else: + kwargs["layers"] = True try: for stream in self.engine_client.images.build( path=image.path, @@ -376,7 +395,10 @@ class BuildTask(EngineTask): network_mode=self.conf.network_mode, pull=pull, forcerm=self.forcerm, - buildargs=buildargs)[1]: + buildargs=buildargs, + **kwargs)[1]: + if self.conf.engine == engine.Engine.PODMAN.value: + stream = json.loads(stream) if 'stream' in stream: for line in stream['stream'].split('\n'): if line: @@ -399,6 +421,11 @@ class BuildTask(EngineTask): for line in e.build_log: if 'stream' in line: self.logger.error(line['stream'].strip()) + if isinstance(e, podman.errors.exceptions.BuildError): + for line in e.build_log: + line = json.loads(line) + if 'stream' in line: + self.logger.error(line['stream'].strip()) self.logger.exception('Unknown container engine ' 'error when building') |
