Control molecule tags with test molecule script

Make test_molecule.py script reading scenario test_vars.yml
and react based on existing test_tags, molecule_tags_enforce,
test_skip_tags, and molecule_skip_tags_enforce variables of it:
* (skip_)tags configured, not enforced - molecule ignores it, leaving
  it for the converge playbook control or not;
* (skip_)tags configured, and enforced - molecule applies it, even if
  the converge playbook controls it as well (likely making it wrong);

This is required because converge may not always control skipping tags.
For example, include_tasks can only apply tags, but not skip it.

Also, molecule tags, if included, might conflict with tags management
of converge playbooks. So provided enfore-or-not it options help to
tweak that behavior case by case.

Change-Id: I0e3193c5f64457e55209891105df990c01dd2657
Signed-off-by: Bogdan Dobrelya <bdobreli@redhat.com>
This commit is contained in:
Bogdan Dobrelya 2022-08-23 18:07:25 +02:00
parent e61bf7e53a
commit be9db4572e
1 changed files with 35 additions and 0 deletions

View File

@ -34,6 +34,35 @@ def set_proper_molecule_config(role_path, scenario='default'):
return mol_config
def set_molecule_tags(role_path, scenario='default'):
mol_tags = []
if os.path.exists(os.path.join(role_path, 'molecule',
f'{scenario}/test_vars.yml')):
test_vars_path = os.path.join(role_path, 'molecule',
f'{scenario}/test_vars.yml')
with open(test_vars_path) as content:
data = yaml.safe_load(content)
if not data:
return []
if ('test_skip_tags' in data.keys() and data['test_skip_tags']
and data.get('molecule_skip_tags_enforce', True)):
mol_tags.append('--skip-tags')
if type(data['test_skip_tags']) == str:
mol_tags.append(data['test_skip_tags'])
elif type(data['test_skip_tags']) == list:
mol_tags.append(",".join(data['test_skip_tags']))
if ('test_tags' in data.keys() and data['test_tags']
and data.get('molecule_tags_enforce', True)):
mol_tags.append('--tags')
if type(data['test_tags']) == str:
mol_tags.append(data['test_tags'])
elif type(data['test_tags']) == list:
mol_tags.append(",".join(data['test_tags']))
return mol_tags
def run_molecule(pytestconfig, scenario=None):
cmd = ['python', '-m', 'molecule']
if not scenario:
@ -55,6 +84,12 @@ def run_molecule(pytestconfig, scenario=None):
else:
cmd.append('--all')
alltags = set_molecule_tags(os.getcwd(), scenario)
if alltags:
if '--' not in cmd:
cmd.append('--')
cmd.extend(alltags)
try:
assert subprocess.call(cmd) == 0
finally: