Let rename old podman varlink package as podman1
This allows to import old varlink based podman client ase podman1 while keeping safe to install the new client podman-py package as podman. To archive such result it first temporarly rename existing podman dir, then install podman package on its place, renames it as podman1, and finally restore pre-existing podman directory if any initially found. Change-Id: If834cc383f11e656f17e49d5e6fa401ac8bee829
This commit is contained in:
parent
a655a71c7d
commit
6a56f0f0fb
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
ansi2html # LGPLv3+
|
ansi2html # LGPLv3+
|
||||||
pandas # BSD
|
pandas # BSD
|
||||||
podman # Apache-2.0
|
|
||||||
pytest-cov # MIT
|
pytest-cov # MIT
|
||||||
pytest-rerunfailures # MPL-2.0
|
pytest-rerunfailures # MPL-2.0
|
||||||
pytest-timeout # MIT
|
pytest-timeout # MIT
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import podman
|
import podman1
|
||||||
|
|
||||||
import tobiko
|
import tobiko
|
||||||
from tobiko.podman import _exception
|
from tobiko.podman import _exception
|
||||||
|
@ -42,7 +42,7 @@ def podman_client(obj=None):
|
||||||
obj = get_podman_client()
|
obj = get_podman_client()
|
||||||
if tobiko.is_fixture(obj):
|
if tobiko.is_fixture(obj):
|
||||||
obj = tobiko.setup_fixture(obj).client
|
obj = tobiko.setup_fixture(obj).client
|
||||||
if isinstance(obj, podman.Client):
|
if isinstance(obj, podman1.Client):
|
||||||
return obj
|
return obj
|
||||||
raise TypeError('Cannot obtain a Podman client from {!r}'.format(obj))
|
raise TypeError('Cannot obtain a Podman client from {!r}'.format(obj))
|
||||||
|
|
||||||
|
@ -118,9 +118,9 @@ class PodmanClientFixture(tobiko.SharedFixture):
|
||||||
host=host,
|
host=host,
|
||||||
socket=socket)
|
socket=socket)
|
||||||
|
|
||||||
client = podman.Client(uri=podman_remote_socket_uri,
|
client = podman1.Client(uri=podman_remote_socket_uri,
|
||||||
remote_uri=remote_uri,
|
remote_uri=remote_uri,
|
||||||
identity_file='~/.ssh/id_rsa')
|
identity_file='~/.ssh/id_rsa')
|
||||||
client.system.ping()
|
client.system.ping()
|
||||||
return client
|
return client
|
||||||
except (ConnectionRefusedError, ConnectionResetError):
|
except (ConnectionRefusedError, ConnectionResetError):
|
||||||
|
|
|
@ -6,7 +6,7 @@ import functools
|
||||||
|
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
import pandas
|
import pandas
|
||||||
import podman as podmanlib
|
import podman1
|
||||||
import docker as dockerlib
|
import docker as dockerlib
|
||||||
|
|
||||||
import tobiko
|
import tobiko
|
||||||
|
@ -376,7 +376,7 @@ def action_on_container(action,
|
||||||
# we get the specified action as function from podman lib
|
# we get the specified action as function from podman lib
|
||||||
if container_runtime_module == podman:
|
if container_runtime_module == podman:
|
||||||
container_function = getattr(
|
container_function = getattr(
|
||||||
podmanlib.libs.containers.Container, '{}'.format(action))
|
podman1.libs.containers.Container, '{}'.format(action))
|
||||||
else:
|
else:
|
||||||
container_function = getattr(
|
container_function = getattr(
|
||||||
dockerlib.models.containers.Container, '{}'.format(action))
|
dockerlib.models.containers.Container, '{}'.format(action))
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import contextlib
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import shlex
|
import shlex
|
||||||
|
@ -127,3 +128,21 @@ def remove_file(filename):
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def stash_dir(*target_dirs: str):
|
||||||
|
stashed_dirs = []
|
||||||
|
for target_dir in target_dirs:
|
||||||
|
if os.path.isdir(target_dir):
|
||||||
|
stashed_dir = target_dir + '.stash'
|
||||||
|
LOG.info(f"Renaming directory: {target_dir} -> {stashed_dir}")
|
||||||
|
os.rename(target_dir, stashed_dir)
|
||||||
|
stashed_dirs.append((stashed_dir, target_dir))
|
||||||
|
|
||||||
|
yield
|
||||||
|
|
||||||
|
for stashed_dir, target_dir in stashed_dirs:
|
||||||
|
if os.path.isdir(stashed_dir):
|
||||||
|
LOG.info(f"Restoring directory: {stashed_dir} -> {target_dir}")
|
||||||
|
os.rename(stashed_dir, target_dir)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Copyright (c) 2019 Red Hat, Inc.
|
#!/usr/bin/env python3
|
||||||
#
|
# Copyright 2018 Red Hat
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
# 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
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
@ -14,3 +13,34 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
TOP_DIR = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))
|
||||||
|
|
||||||
|
if TOP_DIR not in sys.path:
|
||||||
|
sys.path.insert(0, TOP_DIR)
|
||||||
|
|
||||||
|
from tools import common # noqa
|
||||||
|
from tools import install # noqa
|
||||||
|
|
||||||
|
|
||||||
|
LOG = common.get_logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
common.setup_logging()
|
||||||
|
ensure_podman1()
|
||||||
|
|
||||||
|
|
||||||
|
def ensure_podman1():
|
||||||
|
try:
|
||||||
|
import podman1
|
||||||
|
except ImportError:
|
||||||
|
install.install_podman1()
|
||||||
|
import podman1
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -15,7 +15,10 @@
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import site
|
||||||
import sys
|
import sys
|
||||||
|
import typing
|
||||||
|
|
||||||
|
|
||||||
TOP_DIR = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))
|
TOP_DIR = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))
|
||||||
|
|
||||||
|
@ -41,6 +44,7 @@ def main():
|
||||||
common.setup_logging()
|
common.setup_logging()
|
||||||
install_tox()
|
install_tox()
|
||||||
install_bindeps()
|
install_bindeps()
|
||||||
|
install_podman1()
|
||||||
install_tobiko()
|
install_tobiko()
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,11 +65,51 @@ def install_tobiko():
|
||||||
pip_install(f"-e '{TOP_DIR}'")
|
pip_install(f"-e '{TOP_DIR}'")
|
||||||
|
|
||||||
|
|
||||||
|
def install_podman1(version=''):
|
||||||
|
pip_unisntall('podman')
|
||||||
|
|
||||||
|
LOG.info(f"Installing Podman... (version: {version})")
|
||||||
|
|
||||||
|
site_dirs = {os.path.dirname(os.path.realpath(site_dir))
|
||||||
|
for site_dir in site.getsitepackages()
|
||||||
|
if os.path.isdir(site_dir)}
|
||||||
|
more_site_dirs = {os.path.join(site_dir, 'site-packages')
|
||||||
|
for site_dir in site_dirs
|
||||||
|
if os.path.isdir(os.path.join(site_dir, 'site-packages'))}
|
||||||
|
site_dirs.update(more_site_dirs)
|
||||||
|
LOG.debug(f"Site packages dirs: {site_dirs}")
|
||||||
|
|
||||||
|
# Must ensure pre-existing podman directories are restored
|
||||||
|
# after installation
|
||||||
|
podman_dirs = [os.path.join(site_dir, 'podman')
|
||||||
|
for site_dir in sorted(site_dirs)]
|
||||||
|
LOG.debug(f"Possible podman directories: {podman_dirs}")
|
||||||
|
with common.stash_dir(*podman_dirs):
|
||||||
|
for podman_dir in podman_dirs:
|
||||||
|
assert not os.path.exists(podman_dir)
|
||||||
|
pip_install(f"'podman{version}'")
|
||||||
|
for podman_dir in podman_dirs:
|
||||||
|
if os.path.isdir(podman_dir):
|
||||||
|
# Rename podman directory to podman1
|
||||||
|
os.rename(podman_dir, podman_dir + '1')
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
raise RuntimeError("Podman directory not found!")
|
||||||
|
for podman_dir in podman_dirs:
|
||||||
|
assert not os.path.exists(podman_dir)
|
||||||
|
|
||||||
|
|
||||||
def pip_install(args):
|
def pip_install(args):
|
||||||
LOG.debug(f"Installing packages: {args}...")
|
LOG.debug(f"Installing packages: {args}...")
|
||||||
common.execute_python(f"-m pip install {TOX_CONSTRAINTS} {args}",
|
common.execute_python(f"-m pip install {TOX_CONSTRAINTS} {args}",
|
||||||
capture_stdout=False)
|
capture_stdout=False)
|
||||||
|
|
||||||
|
|
||||||
|
def pip_unisntall(args):
|
||||||
|
LOG.debug(f"Uninstalling packages: {args}...")
|
||||||
|
common.execute_python(f"-m pip uninstall -y {args}",
|
||||||
|
capture_stdout=False)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
2
tox.ini
2
tox.ini
|
@ -39,6 +39,8 @@ setenv =
|
||||||
TOX_CONSTRAINTS_FILE = {env:TOX_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
|
TOX_CONSTRAINTS_FILE = {env:TOX_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
|
||||||
TOX_EXTRA_REQUIREMENTS = {env:TOX_EXTRA_REQUIREMENTS:-r{toxinidir}/extra-requirements.txt}
|
TOX_EXTRA_REQUIREMENTS = {env:TOX_EXTRA_REQUIREMENTS:-r{toxinidir}/extra-requirements.txt}
|
||||||
VIRTUAL_ENV = {envdir}
|
VIRTUAL_ENV = {envdir}
|
||||||
|
commands_pre =
|
||||||
|
{envpython} {toxinidir}/tools/ensure_podman1.py
|
||||||
commands =
|
commands =
|
||||||
{envpython} {toxinidir}/tools/run_tests.py {posargs:{env:RUN_TESTS_EXTRA_ARGS}}
|
{envpython} {toxinidir}/tools/run_tests.py {posargs:{env:RUN_TESTS_EXTRA_ARGS}}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue