ci: Template Ansible test-targets inventory with Jinja2

pull/1115/head
Alex Willmer 3 months ago
parent be288ad398
commit f3097b5743

@ -6,11 +6,13 @@ import glob
import os import os
import signal import signal
import sys import sys
import textwrap
import jinja2
import ci_lib import ci_lib
TEMPLATES_DIR = os.path.join(ci_lib.GIT_ROOT, 'tests/ansible/templates')
TESTS_DIR = os.path.join(ci_lib.GIT_ROOT, 'tests/ansible') TESTS_DIR = os.path.join(ci_lib.GIT_ROOT, 'tests/ansible')
HOSTS_DIR = os.path.join(ci_lib.TMP, 'hosts') HOSTS_DIR = os.path.join(ci_lib.TMP, 'hosts')
@ -52,37 +54,19 @@ with ci_lib.Fold('job_setup'):
distros[container['distro']].append(container['name']) distros[container['distro']].append(container['name'])
families[container['family']].append(container['name']) families[container['family']].append(container['name'])
inventory_path = os.path.join(HOSTS_DIR, 'target') jinja_env = jinja2.Environment(
with open(inventory_path, 'w') as fp: loader=jinja2.FileSystemLoader(searchpath=TEMPLATES_DIR),
fp.write('[test-targets]\n') lstrip_blocks=True, # Remove spaces and tabs from before a block
fp.writelines( trim_blocks=True, # Remove first newline after a block
"%(name)s "
"ansible_host=%(hostname)s "
"ansible_port=%(port)s "
"ansible_python_interpreter=%(python_path)s "
"ansible_user=mitogen__has_sudo_nopw "
"ansible_password=has_sudo_nopw_password"
"\n"
% container
for container in containers
) )
inventory_template = jinja_env.get_template('test-targets.j2')
inventory_path = os.path.join(HOSTS_DIR, 'target')
for distro, hostnames in sorted(distros.items(), key=lambda t: t[0]): with open(inventory_path, 'w') as fp:
fp.write('\n[%s]\n' % distro) fp.write(inventory_template.render(
fp.writelines('%s\n' % name for name in hostnames) containers=containers,
distros=distros,
for family, hostnames in sorted(families.items(), key=lambda t: t[0]): families=families,
fp.write('\n[%s]\n' % family)
fp.writelines('%s\n' % name for name in hostnames)
fp.write(textwrap.dedent(
'''
[linux:children]
test-targets
[linux_containers:children]
test-targets
'''
)) ))
ci_lib.dump_file(inventory_path) ci_lib.dump_file(inventory_path)

@ -0,0 +1,28 @@
[test-targets]
{% for c in containers %}
{{ c.name }} ansible_host={{ c.hostname }} ansible_port={{ c.port }} ansible_python_interpreter={{ c.python_path }}
{% endfor %}
[test-targets:vars]
ansible_user=mitogen__has_sudo_nopw
ansible_password=has_sudo_nopw_password
{% for distro, hostnames in distros | dictsort %}
[{{ distro }}]
{% for hostname in hostnames %}
{{ hostname }}
{% endfor %}
{% endfor %}
{% for family, hostnames in families | dictsort %}
[{{ family }}]
{% for hostname in hostnames %}
{{ hostname }}
{% endfor %}
{% endfor %}
[linux:children]
test-targets
[linux_containers:children]
test-targets
Loading…
Cancel
Save