File: ansible_tests.py

package info (click to toggle)
python-mitogen 0.3.44-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,824 kB
  • sloc: python: 24,965; sh: 144; makefile: 74; perl: 19; ansic: 18
file content (64 lines) | stat: -rwxr-xr-x 1,941 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env python
# Run tests/ansible/all.yml under Ansible and Ansible-Mitogen

import collections
import glob
import os
import sys

import jinja2

import ci_lib


TMP = ci_lib.TempDir(prefix='mitogen_ci_ansible')
TMP_HOSTS_DIR = os.path.join(TMP.path, 'hosts')

interesting = ci_lib.get_interesting_procs()

with ci_lib.Fold('docker_setup'):
    containers = ci_lib.container_specs(ci_lib.DISTRO_SPECS.split())
    ci_lib.start_containers(containers)


with ci_lib.Fold('job_setup'):
    os.chdir(ci_lib.ANSIBLE_TESTS_DIR)

    os.mkdir(TMP_HOSTS_DIR)
    for path in glob.glob(os.path.join(ci_lib.ANSIBLE_TESTS_HOSTS_DIR, '*')):
        if not path.endswith('default.hosts'):
            os.symlink(path, os.path.join(TMP_HOSTS_DIR, os.path.basename(path)))

    distros = collections.defaultdict(list)
    families = collections.defaultdict(list)
    for container in containers:
        distros[container['distro']].append(container['name'])
        families[container['family']].append(container['name'])

    jinja_env = jinja2.Environment(
        loader=jinja2.FileSystemLoader(
            searchpath=ci_lib.ANSIBLE_TESTS_TEMPLATES_DIR,
        ),
        lstrip_blocks=True,  # Remove spaces and tabs from before a block
        trim_blocks=True,  # Remove first newline after a block
    )
    inventory_template = jinja_env.get_template('test-targets.j2')
    inventory_path = os.path.join(TMP_HOSTS_DIR, 'test-targets.ini')

    with open(inventory_path, 'w') as fp:
        fp.write(inventory_template.render(
            containers=containers,
            distros=distros,
            families=families,
        ))

    ci_lib.dump_file(inventory_path)

with ci_lib.Fold('ansible'):
    playbook = os.environ.get('PLAYBOOK', 'all.yml')
    ci_lib.run(
        './run_ansible_playbook.py %s -i "%s" %s',
        playbook, TMP_HOSTS_DIR, ' '.join(sys.argv[1:]),
    )

ci_lib.check_stray_processes(interesting, containers)