mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2024-12-23 23:50:03 -06:00
c577420e40
Integration tests are configured via environment variables. Add a framework for parsing these variables and storing them in easy-to-use objects. Add an `ipa-test-config` executable that loads the configuration and prints out variables needed in shell scripts. Part of the work for https://fedorahosted.org/freeipa/ticket/3621
108 lines
3.5 KiB
Python
Executable File
108 lines
3.5 KiB
Python
Executable File
#! /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:]),
|