summaryrefslogtreecommitdiffstats
path: root/ipatests/ipa-test-config
blob: eb2da10f29fab89f6a8ec7a85322b4d5f0ebdedd (plain)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#! /usr/bin/python

import sys
import os
import argparse

from ipalib.constants import FQDN
from ipatests.test_integration import config


def main(argv):
    parser = argparse.ArgumentParser(
    description='Prints out IPA test configuration for use in shell scripts.'
        'IPA integration tests are configured via environment variables')

    parser.add_argument('host', nargs='?',
                        help='Print config for the given hostname')

    parser.add_argument('--global', action='store_true', dest='global_',
                        help='Print global config (not specific to a host '
                             'or domain)')

    parser.add_argument('--domain',
                        help='IPA domain name, or number (the X in _envX)')

    parser.add_argument('--master',
                        help='Print config for the master',
                        action='store_true')

    parser.add_argument('--replica', type=int,
                        help='Print config for the replica with this number')

    parser.add_argument('--client', type=int,
                        help='Print config for the client with this number')

    parser.add_argument('--no-simple', dest='simple', action='store_false',
                        help='Do not print Simple Vars '
                             '(normally included backwards-compatibility)')

    args = parser.parse_args(argv)

    hostsargs = [bool(args.host), bool(args.master), bool(args.replica),
             bool(args.client)]
    if hostsargs.count(True) > 1:
        parser.error('Must specify at most one of host selection options')
    if any(hostsargs) or args.domain:
        if args.global_:
            parser.error('--global may not be combined with host selection options')
    else:
        args.host = FQDN

    kwargs = {}
    if not args.simple:
        kwargs['simple'] = False

    conf = config.Config.from_env(os.environ)

    return config.env_to_script(get_object(conf, args).to_env(**kwargs))


def get_object(conf, args):
    if args.global_:
        return conf
    elif args.host:
        try:
            return conf.host_by_name(args.host)
        except LookupError:
            exit('Host %s not found in config. Try --global' % args.host)
    else:
        if args.domain:
            try:
                num = int(args.domain) - 1
            except ValueError:
                domains = [d for d in conf.domains if d.name == args.domain]
                if not domains:
                    exit('Domain %s not found' % args.domain)
                domain = domains[0]
            else:
                try:
                    domain = conf.domains[num]
                except LookupError:
                    exit('Domain %s not found.' % args.domain)
        else:
            try:
                domain = conf.domains[0]
            except IndexError:
                exit('No domains are configured.')
        if args.master:
            return domain.master
        elif args.replica:
            num = int(args.replica) - 1
            try:
                return domain.replicas[args.replica]
            except LookupError:
                exit('Domain %s not found in domain %s' % (args.replica, domain.name))
        elif args.client:
            num = int(args.client) - 1
            try:
                return domain.replicas[args.client]
            except LookupError:
                exit('Client %s not found in domain %s' % (args.client, domain.name))
        else:
            return domain


if __name__ == '__main__':
    print main(sys.argv[1:]),