mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2024-12-25 08:21:05 -06:00
10461b7091
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
73 lines
2.7 KiB
Python
73 lines
2.7 KiB
Python
import argparse
|
|
import copy
|
|
import pprint
|
|
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)
|
|
default_resources = data["default_resources"]
|
|
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', '')
|
|
jobs[f'ipa_tests_network_internal_{job_id}'] = vm_job.get(
|
|
'isolated', 'false'
|
|
)
|
|
|
|
containers = vm_job.get('containers')
|
|
cont_resources = copy.deepcopy(default_resources)
|
|
replicas = 0
|
|
clients = 0
|
|
if containers:
|
|
replicas = containers.get('replicas', 0)
|
|
clients = containers.get('clients', 0)
|
|
|
|
resources = containers.get("resources")
|
|
if resources:
|
|
for cont in ["server", "replica", "client"]:
|
|
cont_resources[cont].update(
|
|
resources.get(cont, {})
|
|
)
|
|
|
|
jobs[f'ipa_tests_replicas_{job_id}'] = replicas
|
|
jobs[f'ipa_tests_clients_{job_id}'] = clients
|
|
|
|
for cont in ["server", "replica", "client"]:
|
|
for res in ["mem_limit", "memswap_limit"]:
|
|
key = f"ipa_tests_{cont}_{res}_{job_id}"
|
|
jobs[key] = cont_resources[cont][res]
|
|
|
|
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
|
|
|
|
pprint.pprint(matrix_jobs)
|
|
print("##vso[task.setVariable variable=matrix;isOutput=true]" +
|
|
json.dumps(matrix_jobs))
|