freeipa/ipatests/azure/scripts/generate-matrix.py
Stanislav Levin 3ac2cdfd43 Azure: Make it possible to pass additional Pytest args
Some tests require its specific Pytest args. With this change
they can be specified in tests definitions.

Signed-off-by: Stanislav Levin <slev@altlinux.org>
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
2021-03-30 09:58:42 +02:00

51 lines
1.9 KiB
Python

import argparse
import json
import yaml
parser = argparse.ArgumentParser(description='Generate Azure jobs matrix.')
parser.add_argument('azure_template', help='path to Azure template')
parser.add_argument('max_azure_env_jobs', type=int,
help='maximum number of Docker envs within VM')
args = parser.parse_args()
with open(args.azure_template) as f:
data = yaml.safe_load(f)
matrix_jobs = {}
for vm in data['vms']:
vm_jobs = vm['vm_jobs']
jobs = {}
job_name = ''
for job_id, vm_job in enumerate(vm_jobs, 1):
if not job_name:
job_name = f'{vm_job["container_job"]}_{job_id}'
jobs[f'ipa_tests_env_name_{job_id}'] = vm_job['container_job']
jobs[f'ipa_tests_to_run_{job_id}'] = ' '.join(vm_job['tests'])
jobs[f'ipa_tests_to_ignore_{job_id}'] = ' '.join(
vm_job.get('ignore', ''))
jobs[f'ipa_tests_type_{job_id}'] = vm_job.get(
'type', 'integration')
jobs[f'ipa_tests_args_{job_id}'] = vm_job.get('args', '')
containers = vm_job.get('containers')
replicas = 0
clients = 0
if containers:
replicas = containers.get('replicas', 0)
clients = containers.get('clients', 0)
jobs[f'ipa_tests_replicas_{job_id}'] = replicas
jobs[f'ipa_tests_clients_{job_id}'] = clients
if len(vm_jobs) > args.max_azure_env_jobs:
raise ValueError(
f"Number of defined jobs:{len(vm_jobs)} within VM:'{job_name}'"
f" is greater than limit:{args.max_azure_env_jobs}")
job_name = f'{job_name}_to_{len(vm_jobs)}'
if job_name in matrix_jobs:
raise ValueError(f"Environment names should be unique:{job_name}")
matrix_jobs[job_name] = jobs
print("##vso[task.setVariable variable=matrix;isOutput=true]" +
json.dumps(matrix_jobs))