aboutsummaryrefslogtreecommitdiff
path: root/kolla/image
diff options
context:
space:
mode:
Diffstat (limited to 'kolla/image')
-rw-r--r--kolla/image/build.py14
-rw-r--r--kolla/image/tasks.py29
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')