Skip to content

Commit

Permalink
Add a mechanism to swap nailgun versions on demand
Browse files Browse the repository at this point in the history
Satellite._swap_nailgun("x.y.z") can be used to change out the operating
version of nailgun.

(cherry picked from commit f10676e)
  • Loading branch information
JacobCallahan committed Nov 15, 2023
1 parent d7894c1 commit 39a4a49
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions robottelo/hosts.py
Original file line number Diff line number Diff line change
Expand Up @@ -1698,14 +1698,26 @@ def __init__(self, hostname=None, **kwargs):
self._api = type('api', (), {'_configured': False})
self._cli = type('cli', (), {'_configured': False})

def _swap_nailgun(self, new_version):
"""Install a different version of nailgun from GitHub and invalidate the module cache."""
import sys

from pip._internal import main as pip_main

pip_main(['uninstall', '-y', 'nailgun'])
pip_main(['install', f'https://github.com/SatelliteQE/nailgun/archive/{new_version}.zip'])
self._api = type('api', (), {'_configured': False})
to_clear = [k for k in sys.modules.keys() if 'nailgun' in k]
[sys.modules.pop(k) for k in to_clear]

@property
def api(self):
"""Import all nailgun entities and wrap them under self.api"""
if not self._api:
self._api = type('api', (), {'_configured': False})
if self._api._configured:
return self._api

from nailgun import entities as _entities # use a private import
from nailgun.config import ServerConfig
from nailgun.entity_mixins import Entity

Expand All @@ -1725,7 +1737,7 @@ class DecClass(cls):
verify=settings.server.verify_ca,
)
# add each nailgun entity to self.api, injecting our server config
for name, obj in entities.__dict__.items():
for name, obj in _entities.__dict__.items():
try:
if Entity in obj.mro():
# create a copy of the class and inject our server config into the __init__
Expand Down

0 comments on commit 39a4a49

Please sign in to comment.