mirror of
https://opendev.org/openstack/kolla.git
synced 2026-01-16 23:10:33 +00:00
Add podman as an option to choose for container engine for kolla-build (--engine podman) Signed-off-by: Konstantin Yarovoy <konstantin.yarovoy@tietoevry.com> Co-Authored-By: Michal Arbet <michal.arbet@ultimum.io> Change-Id: I068c906df97745e397408d8c3ef6af47ee037638
69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
from enum import Enum
|
|
from kolla.image.utils import LOG
|
|
|
|
try:
|
|
import docker
|
|
except (ImportError):
|
|
LOG.debug("Docker python library was not found")
|
|
|
|
try:
|
|
import podman
|
|
except (ImportError, ModuleNotFoundError):
|
|
LOG.debug("Podman python library was not found")
|
|
pass
|
|
|
|
|
|
class Engine(Enum):
|
|
|
|
DOCKER = "docker"
|
|
PODMAN = "podman"
|
|
|
|
|
|
class UnsupportedEngineError(ValueError):
|
|
|
|
def __init__(self, engine_name):
|
|
super().__init__()
|
|
self.engine_name = engine_name
|
|
|
|
def __str__(self):
|
|
return f'Unsupported engine name given: "{self.engine_name}"'
|
|
|
|
|
|
def getEngineException(conf):
|
|
if conf.engine == Engine.DOCKER.value:
|
|
return (docker.errors.DockerException)
|
|
elif conf.engine == Engine.PODMAN.value:
|
|
return (podman.errors.exceptions.APIError,
|
|
podman.errors.exceptions.PodmanError)
|
|
else:
|
|
raise UnsupportedEngineError(conf.engine)
|
|
|
|
|
|
def getEngineClient(conf):
|
|
if conf.engine == Engine.DOCKER.value:
|
|
kwargs_env = docker.utils.kwargs_from_env()
|
|
return docker.DockerClient(version='auto', **kwargs_env)
|
|
elif conf.engine == Engine.PODMAN.value:
|
|
client = podman.PodmanClient(base_url=conf.podman_base_url)
|
|
try:
|
|
client.version()
|
|
except podman.errors.exceptions.APIError as e:
|
|
e.explanation += (". Check if podman service is active and "
|
|
"the address to podman.sock is set correctly "
|
|
"through --podman_base_url")
|
|
raise e
|
|
return client
|
|
else:
|
|
raise UnsupportedEngineError(conf.engine)
|