110 lines
3.1 KiB
Python
Executable File
110 lines
3.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
""" Check that there is a playbook to run all role tests with the non-default
|
|
provider as well """
|
|
# vim: fileencoding=utf8
|
|
|
|
import glob
|
|
import os
|
|
import sys
|
|
|
|
|
|
import yaml
|
|
|
|
OTHER_PROVIDER_SUFFIX = "_other_provider.yml"
|
|
|
|
IGNORE = [
|
|
"tests_helpers-and-asserts.yml",
|
|
"tests_states.yml",
|
|
"tests_unit.yml",
|
|
"tests_vlan_mtu_initscripts.yml",
|
|
"tests_vlan_mtu_nm.yml",
|
|
"tests_ethtool_features_initscripts.yml",
|
|
"tests_ethtool_features_nm.yml",
|
|
]
|
|
|
|
OTHER_PLAYBOOK = """
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
---
|
|
- name: Run playbook '{tests_playbook}' with non-default provider
|
|
hosts: all
|
|
vars:
|
|
network_provider_current:
|
|
tasks:
|
|
# required for the code to set network_provider_current
|
|
- name: Get service facts
|
|
service_facts:
|
|
- name: Set network provider
|
|
set_fact:
|
|
network_provider: '{{{{ "initscripts" if network_provider_current == "nm"
|
|
else "nm" }}}}'
|
|
|
|
- import_playbook: "{tests_playbook}"
|
|
when:
|
|
- ansible_distribution_major_version != '6'
|
|
""" # noqa: E501 # ignore that the line is too long
|
|
|
|
|
|
def get_current_provider_code():
|
|
with open("../defaults/main.yml") as defaults:
|
|
yaml_defaults = yaml.safe_load(defaults)
|
|
current_provider = yaml_defaults["network_provider_current"]
|
|
return current_provider
|
|
|
|
|
|
def generate_nominal_other_playbook(tests_playbook):
|
|
nominal_other_testfile_data = OTHER_PLAYBOOK.format(tests_playbook=tests_playbook)
|
|
nominal = yaml.safe_load(nominal_other_testfile_data)
|
|
nominal[0]["vars"]["network_provider_current"] = get_current_provider_code()
|
|
return yaml.dump(nominal, default_flow_style=False, explicit_start=True, width=80)
|
|
|
|
|
|
def main():
|
|
testsfiles = glob.glob("tests_*.yml")
|
|
missing = []
|
|
returncode = 0
|
|
|
|
# Generate files when specified
|
|
generate = bool(len(sys.argv) > 1 and sys.argv[1] == "generate")
|
|
|
|
if not testsfiles:
|
|
print("ERROR: No tests found")
|
|
returncode = 1
|
|
|
|
for filename in testsfiles:
|
|
if filename.endswith(OTHER_PROVIDER_SUFFIX):
|
|
continue
|
|
|
|
if filename in IGNORE:
|
|
continue
|
|
|
|
fileroot = os.path.splitext(filename)[0]
|
|
other_testfile = fileroot + OTHER_PROVIDER_SUFFIX
|
|
nominal_other_testfile_data = generate_nominal_other_playbook(filename)
|
|
|
|
if generate:
|
|
with open(other_testfile, "w") as ofile:
|
|
ofile.write(nominal_other_testfile_data)
|
|
|
|
if other_testfile not in testsfiles and not generate:
|
|
missing.append(filename)
|
|
else:
|
|
with open(other_testfile) as ifile:
|
|
testdata = ifile.read()
|
|
if testdata != nominal_other_testfile_data:
|
|
print(
|
|
"ERROR: Playbook does not match nominal value " + other_testfile
|
|
)
|
|
returncode = 1
|
|
|
|
if missing:
|
|
print("ERROR: No tests for other provider found for:\n" + ", \n".join(missing))
|
|
print("Try to generate them with '{} generate'".format(sys.argv[0]))
|
|
returncode = 1
|
|
|
|
return returncode
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|