mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
test_integration.config: Do not save the input environment
Using the input environment saved in self._session_env outside of the config loading meant that methods of configuration other than environment variables wouldn't be possible. Restructure the roles/extra_roles to not depend on _session_env. Part of the work for: https://fedorahosted.org/freeipa/ticket/3938 Reviewed-By: Tomas Babej <tbabej@redhat.com>
This commit is contained in:
parent
56f0430f52
commit
8e2bceffa3
@ -197,7 +197,8 @@ class Config(object):
|
|||||||
|
|
||||||
for i, host in enumerate(hosts, start=1):
|
for i, host in enumerate(hosts, start=1):
|
||||||
suffix = '%s%s' % (role.upper(), i)
|
suffix = '%s%s' % (role.upper(), i)
|
||||||
prefix = 'TESTHOST_' if role in domain.extra_roles else ''
|
prefix = ('' if role in domain.static_roles
|
||||||
|
else TESTHOST_PREFIX)
|
||||||
|
|
||||||
ext_hostname = host.external_hostname
|
ext_hostname = host.external_hostname
|
||||||
env['%s%s%s' % (prefix, suffix,
|
env['%s%s%s' % (prefix, suffix,
|
||||||
@ -270,7 +271,7 @@ def env_normalize(env):
|
|||||||
|
|
||||||
def extend(name, name2):
|
def extend(name, name2):
|
||||||
value = env.get(name2)
|
value = env.get(name2)
|
||||||
if value:
|
if value and value not in env[name].split(' '):
|
||||||
env[name] += ' ' + value
|
env[name] += ' ' + value
|
||||||
extend('CLIENT_env1', 'CLIENT2')
|
extend('CLIENT_env1', 'CLIENT2')
|
||||||
extend('CLIENT_env1', 'CLIENT2_env1')
|
extend('CLIENT_env1', 'CLIENT2_env1')
|
||||||
@ -292,48 +293,36 @@ class Domain(object):
|
|||||||
self.realm = self.name.upper()
|
self.realm = self.name.upper()
|
||||||
self.basedn = DN(*(('dc', p) for p in name.split('.')))
|
self.basedn = DN(*(('dc', p) for p in name.split('.')))
|
||||||
|
|
||||||
self._extra_roles = tuple() # Serves as a cache for the domain roles
|
|
||||||
self._session_env = None
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def roles(self):
|
def roles(self):
|
||||||
return self.static_roles + self.extra_roles
|
return sorted(set(host.role for host in self.hosts))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def static_roles(self):
|
def static_roles(self):
|
||||||
# Specific roles for each domain type are hardcoded
|
# Specific roles for each domain type are hardcoded
|
||||||
if self.type == 'IPA':
|
if self.type == 'IPA':
|
||||||
return ('master', 'client', 'replica', 'other')
|
return ('master', 'replica', 'client', 'other')
|
||||||
else:
|
else:
|
||||||
return ('ad',)
|
return ('ad',)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def extra_roles(self):
|
def extra_roles(self):
|
||||||
if self._extra_roles:
|
return [role for role in self.roles if role not in self.static_roles]
|
||||||
return self._extra_roles
|
|
||||||
|
|
||||||
roles = ()
|
def _roles_from_env(self, env):
|
||||||
|
for role in self.static_roles:
|
||||||
|
yield role
|
||||||
|
|
||||||
# Extra roles can be defined via env variables of form TESTHOST_key_envX
|
# Extra roles are defined via env variables of form TESTHOST_key_envX
|
||||||
for variable in self._session_env:
|
roles = set()
|
||||||
if variable.startswith('TESTHOST'):
|
for var in sorted(env):
|
||||||
|
if var.startswith(TESTHOST_PREFIX) and var.endswith(self._env):
|
||||||
variable_split = variable.split('_')
|
variable_split = var.split('_')
|
||||||
|
role_name = '_'.join(variable_split[1:-1])
|
||||||
defines_extra_role = (
|
if (role_name and not role_name[-1].isdigit()):
|
||||||
variable.endswith(self._env) and
|
roles.add(role_name.lower())
|
||||||
# at least 3 parts, as in TESTHOST_key_env1
|
for role in sorted(roles):
|
||||||
len(variable_split) > 2 and
|
yield role
|
||||||
# prohibit redefining roles
|
|
||||||
variable_split[-2].lower() not in roles
|
|
||||||
)
|
|
||||||
|
|
||||||
if defines_extra_role:
|
|
||||||
key = '_'.join(variable_split[1:-1])
|
|
||||||
roles += (key.lower(),)
|
|
||||||
|
|
||||||
self._extra_roles = roles
|
|
||||||
return roles
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_env(cls, env, config, index, domain_type):
|
def from_env(cls, env, config, index, domain_type):
|
||||||
@ -349,10 +338,9 @@ class Domain(object):
|
|||||||
master_env = '%s_env%s' % (master_role, index)
|
master_env = '%s_env%s' % (master_role, index)
|
||||||
hostname, dot, domain_name = env[master_env].partition('.')
|
hostname, dot, domain_name = env[master_env].partition('.')
|
||||||
self = cls(config, domain_name, index, domain_type)
|
self = cls(config, domain_name, index, domain_type)
|
||||||
self._session_env = env
|
|
||||||
|
|
||||||
for role in self.roles:
|
for role in self._roles_from_env(env):
|
||||||
prefix = 'TESTHOST_' if role in self.extra_roles else ''
|
prefix = '' if role in self.static_roles else TESTHOST_PREFIX
|
||||||
value = env.get('%s%s%s' % (prefix, role.upper(), self._env), '')
|
value = env.get('%s%s%s' % (prefix, role.upper(), self._env), '')
|
||||||
|
|
||||||
for index, hostname in enumerate(value.split(), start=1):
|
for index, hostname in enumerate(value.split(), start=1):
|
||||||
|
@ -128,7 +128,8 @@ class BaseHost(object):
|
|||||||
env['MYBEAKERHOSTNAME'] = self.external_hostname
|
env['MYBEAKERHOSTNAME'] = self.external_hostname
|
||||||
env['MYIP'] = self.ip
|
env['MYIP'] = self.ip
|
||||||
|
|
||||||
prefix = 'TESTHOST_' if self.role in self.domain.extra_roles else ''
|
prefix = ('' if self.role in self.domain.static_roles
|
||||||
|
else TESTHOST_PREFIX)
|
||||||
env['MYROLE'] = '%s%s%s' % (prefix, role, self.domain._env)
|
env['MYROLE'] = '%s%s%s' % (prefix, role, self.domain._env)
|
||||||
env['MYENV'] = str(self.domain.index)
|
env['MYENV'] = str(self.domain.index)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user