Skip to content

Commit 966e768

Browse files
committed
rewrite epel feature as feature plugin
1 parent c436b2c commit 966e768

File tree

3 files changed

+53
-30
lines changed

3 files changed

+53
-30
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ ignore = [
246246
"tmt/steps/discover/*.py",
247247
"tmt/steps/execute/*.py",
248248
"tmt/steps/finish/*.py",
249-
"tmt/steps/prepare/feature.py",
249+
"tmt/steps/prepare/feature/__init__.py",
250250
"tmt/steps/prepare/__init__.py",
251251
"tmt/steps/prepare/install.py",
252252
"tmt/steps/provision/*.py",

tmt/steps/prepare/feature.py renamed to tmt/steps/prepare/feature/__init__.py

Lines changed: 43 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,22 @@ def _provides_feature(feature_cls: FeatureClass) -> FeatureClass:
3838
return _provides_feature
3939

4040

41+
def find_plugin(name: str) -> 'FeatureClass':
42+
"""
43+
Find a plugin by its name.
44+
45+
:raises GeneralError: when the plugin does not exist.
46+
"""
47+
48+
plugin = _FEATURE_PLUGIN_REGISTRY.get_plugin(name)
49+
50+
if plugin is None:
51+
raise tmt.utils.GeneralError(
52+
f"Feature plugin '{name}' was not found in feature registry.")
53+
54+
return plugin
55+
56+
4157
class Feature(tmt.utils.Common):
4258
""" Base class for ``feature`` prepare plugin implementations """
4359

@@ -54,28 +70,37 @@ def __init__(
5470

5571
self.guest = guest
5672

57-
def enable(self) -> None:
73+
@classmethod
74+
def enable(cls, guest: Guest, logger: tmt.log.Logger) -> None:
5875
raise NotImplementedError
5976

60-
def disable(self) -> None:
77+
@classmethod
78+
def disable(cls, guest: Guest, logger: tmt.log.Logger) -> None:
6179
raise NotImplementedError
6280

63-
def _find_playbook(self, filename: str) -> Optional[Path]:
81+
@classmethod
82+
def _find_playbook(cls, filename: str, logger: tmt.log.Logger) -> Optional[Path]:
6483
filepath = FEATURE_PLAYEBOOK_DIRECTORY / filename
6584
if filepath.exists():
6685
return filepath
6786

68-
self.warn(f"Cannot find any suitable playbook for '{filename}'.")
87+
logger.warning(f"Cannot find any suitable playbook for '{filename}'.", 0)
6988
return None
7089

71-
def _run_playbook(self, op: str, playbook_filename: str) -> None:
72-
playbook_path = self._find_playbook(playbook_filename)
90+
@classmethod
91+
def _run_playbook(
92+
cls,
93+
op: str,
94+
playbook_filename: str,
95+
guest: Guest,
96+
logger: tmt.log.Logger) -> None:
97+
playbook_path = cls._find_playbook(playbook_filename, logger)
7398
if not playbook_path:
7499
raise tmt.utils.GeneralError(
75-
f"{op.capitalize()} {self.NAME.upper()} is not supported on this guest.")
100+
f"{op.capitalize()} {cls.NAME.upper()} is not supported on this guest.")
76101

77-
self.info(f'{op.capitalize()} {self.NAME.upper()}')
78-
self.guest.ansible(playbook_path)
102+
logger.info(f'{op.capitalize()} {cls.NAME.upper()}')
103+
guest.ansible(playbook_path)
79104

80105

81106
@dataclasses.dataclass
@@ -125,27 +150,20 @@ def go(
125150
if self.opt('dry'):
126151
return []
127152

128-
print("### DEBUG IZMI ###")
129-
print(f"obsah registru: {list(_FEATURE_PLUGIN_REGISTRY.iter_plugins())}")
130-
print_value = cast(Optional[str], getattr(self.data, "epel", None))
131-
print(f"obsah value: {print_value}")
132-
133153
for feature_id in _FEATURE_PLUGIN_REGISTRY.iter_plugin_ids():
134-
feature = _FEATURE_PLUGIN_REGISTRY.get_plugin(feature_id)
135-
136-
assert feature is not None # narrow type
154+
feature = find_plugin(feature_id)
137155

138156
value = cast(Optional[str], getattr(self.data, feature.NAME, None))
139157
if value is None:
140158
continue
141-
if isinstance(feature, Feature):
142-
value = value.lower()
143-
if value == 'enabled':
144-
feature.enable()
145-
elif value == 'disabled':
146-
feature.disable()
147-
else:
148-
raise tmt.utils.GeneralError(f"Unknown feature setting '{value}'.")
159+
160+
value = value.lower()
161+
if value == 'enabled':
162+
feature.enable(guest, logger)
163+
elif value == 'disabled':
164+
feature.disable(guest, logger)
165+
else:
166+
raise tmt.utils.GeneralError(f"Unknown feature setting '{value}'.")
149167

150168
return results
151169

tmt/steps/prepare/feature/epel.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
from typing import TYPE_CHECKING, Any
22

3+
import tmt.log
4+
from tmt.steps.provision import Guest
5+
36
if TYPE_CHECKING:
47
pass
58

@@ -13,8 +16,10 @@ class Epel(Feature):
1316
def __init__(self, *args: Any, **kwargs: Any) -> None:
1417
super().__init__(*args, **kwargs)
1518

16-
def enable(self) -> None:
17-
self._run_playbook('enable', "epel-enable.yaml")
19+
@classmethod
20+
def enable(cls, guest: Guest, logger: tmt.log.Logger) -> None:
21+
cls._run_playbook('enable', "epel-enable.yaml", guest, logger)
1822

19-
def disable(self) -> None:
20-
self._run_playbook('disable', "epel-disable.yaml")
23+
@classmethod
24+
def disable(cls, guest: Guest, logger: tmt.log.Logger) -> None:
25+
cls._run_playbook('disable', "epel-disable.yaml", guest, logger)

0 commit comments

Comments
 (0)