Browse Source

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
changes/52/791452/11
Federico Ressi 4 weeks ago
parent
commit
6a56f0f0fb
7 changed files with 105 additions and 11 deletions
  1. +0
    -1
      extra-requirements.txt
  2. +5
    -5
      tobiko/podman/_client.py
  3. +2
    -2
      tobiko/tripleo/containers.py
  4. +19
    -0
      tools/common.py
  5. +33
    -3
      tools/ensure_podman1.py
  6. +44
    -0
      tools/install.py
  7. +2
    -0
      tox.ini

+ 0
- 1
extra-requirements.txt View File

@ -2,7 +2,6 @@
ansi2html # LGPLv3+
pandas # BSD
podman # Apache-2.0
pytest-cov # MIT
pytest-rerunfailures # MPL-2.0
pytest-timeout # MIT


+ 5
- 5
tobiko/podman/_client.py View File

@ -15,7 +15,7 @@
# under the License.
from __future__ import absolute_import
import podman
import podman1
import tobiko
from tobiko.podman import _exception
@ -42,7 +42,7 @@ def podman_client(obj=None):
obj = get_podman_client()
if tobiko.is_fixture(obj):
obj = tobiko.setup_fixture(obj).client
if isinstance(obj, podman.Client):
if isinstance(obj, podman1.Client):
return obj
raise TypeError('Cannot obtain a Podman client from {!r}'.format(obj))
@ -118,9 +118,9 @@ class PodmanClientFixture(tobiko.SharedFixture):
host=host,
socket=socket)
client = podman.Client(uri=podman_remote_socket_uri,
remote_uri=remote_uri,
identity_file='~/.ssh/id_rsa')
client = podman1.Client(uri=podman_remote_socket_uri,
remote_uri=remote_uri,
identity_file='~/.ssh/id_rsa')
client.system.ping()
return client
except (ConnectionRefusedError, ConnectionResetError):


+ 2
- 2
tobiko/tripleo/containers.py View File

@ -6,7 +6,7 @@ import functools
from oslo_log import log
import pandas
import podman as podmanlib
import podman1
import docker as dockerlib
import tobiko
@ -376,7 +376,7 @@ def action_on_container(action,
# we get the specified action as function from podman lib
if container_runtime_module == podman:
container_function = getattr(
podmanlib.libs.containers.Container, '{}'.format(action))
podman1.libs.containers.Container, '{}'.format(action))
else:
container_function = getattr(
dockerlib.models.containers.Container, '{}'.format(action))


+ 19
- 0
tools/common.py View File

@ -13,6 +13,7 @@
# under the License.
from __future__ import absolute_import
import contextlib
import logging
import os
import shlex
@ -127,3 +128,21 @@ def remove_file(filename):
return True
else:
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)

tobiko/podman/config.py → tools/ensure_podman1.py View File


+ 44
- 0
tools/install.py View File

@ -15,7 +15,10 @@
from __future__ import absolute_import
import os
import site
import sys
import typing
TOP_DIR = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))
@ -41,6 +44,7 @@ def main():
common.setup_logging()
install_tox()
install_bindeps()
install_podman1()
install_tobiko()
@ -61,11 +65,51 @@ def install_tobiko():
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):
LOG.debug(f"Installing packages: {args}...")
common.execute_python(f"-m pip install {TOX_CONSTRAINTS} {args}",
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__':
main()

+ 2
- 0
tox.ini View File

@ -39,6 +39,8 @@ setenv =
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}
VIRTUAL_ENV = {envdir}
commands_pre =
{envpython} {toxinidir}/tools/ensure_podman1.py
commands =
{envpython} {toxinidir}/tools/run_tests.py {posargs:{env:RUN_TESTS_EXTRA_ARGS}}


Loading…
Cancel
Save