Improved property output to include override data.
Jira-Issue: OPENSTACK-715
This commit is contained in:
parent
f9db085a73
commit
57c1acfd3a
|
@ -211,7 +211,8 @@ class PropertyList(Lister):
|
|||
|
||||
property_list = ansible_properties.get_all_unique()
|
||||
|
||||
data = self._get_list_data(property_list)
|
||||
override_flags = ansible_properties.get_all_override_flags()
|
||||
data = self._get_list_data(property_list, override_flags)
|
||||
header = self._get_list_header()
|
||||
return (header, data)
|
||||
|
||||
|
@ -222,21 +223,25 @@ class PropertyList(Lister):
|
|||
header = None
|
||||
if self.is_long_flag:
|
||||
if self.is_global:
|
||||
header = (u._('Property Name'), u._('Property Value'),
|
||||
u._('Overrides'), u._('Original Value'))
|
||||
header = (u._('OVR'),
|
||||
u._('Property Name'), u._('Property Value'),
|
||||
u._('Original Value'))
|
||||
else:
|
||||
header = (u._('Property Name'), u._('Property Value'),
|
||||
u._('Overrides'), u._('Original Value'),
|
||||
header = (u._('OVR'),
|
||||
u._('Property Name'), u._('Property Value'),
|
||||
u._('Original Value'),
|
||||
self.list_type)
|
||||
else:
|
||||
if self.is_global:
|
||||
header = (u._('Property Name'), u._('Property Value'))
|
||||
header = (u._('OVR'),
|
||||
u._('Property Name'), u._('Property Value'))
|
||||
else:
|
||||
header = (u._('Property Name'), u._('Property Value'),
|
||||
header = (u._('OVR'),
|
||||
u._('Property Name'), u._('Property Value'),
|
||||
self.list_type)
|
||||
return header
|
||||
|
||||
def _get_list_data(self, property_list):
|
||||
def _get_list_data(self, property_list, override_flags):
|
||||
data = []
|
||||
if property_list:
|
||||
property_length = utils.get_property_list_length()
|
||||
|
@ -252,30 +257,42 @@ class PropertyList(Lister):
|
|||
if not include_prop:
|
||||
continue
|
||||
|
||||
ovr_global = '-'
|
||||
ovr_group = '-'
|
||||
ovr_host = '-'
|
||||
if prop.name in override_flags:
|
||||
override_flag_set = override_flags[prop.name]
|
||||
if override_flag_set.ovr_global:
|
||||
ovr_global = '*'
|
||||
if override_flag_set.ovr_group:
|
||||
ovr_group = 'G'
|
||||
if override_flag_set.ovr_host:
|
||||
ovr_host = 'H'
|
||||
|
||||
prop_ovr = ovr_global + ovr_group + ovr_host
|
||||
|
||||
if self.is_long_flag:
|
||||
if self.is_global:
|
||||
data.append((prop.name, prop.value,
|
||||
prop.overrides,
|
||||
data.append((prop_ovr, prop.name, prop.value,
|
||||
prop.orig_value))
|
||||
else:
|
||||
data.append((prop.name, prop.value,
|
||||
prop.overrides,
|
||||
data.append((prop_ovr, prop.name, prop.value,
|
||||
prop.orig_value, prop.target))
|
||||
else:
|
||||
if self.is_global:
|
||||
data.append((prop.name, prop.value))
|
||||
data.append((prop_ovr, prop.name, prop.value))
|
||||
else:
|
||||
data.append((prop.name, prop.value,
|
||||
data.append((prop_ovr, prop.name, prop.value,
|
||||
prop.target))
|
||||
else:
|
||||
if self.is_long_flag:
|
||||
if self.is_global:
|
||||
data.append(('', '', '', ''))
|
||||
data.append(('', '', '', '', ''))
|
||||
else:
|
||||
data.append(('', '', '', '', ''))
|
||||
else:
|
||||
if self.is_global:
|
||||
data.append(('', ''))
|
||||
data.append(('', '', ''))
|
||||
else:
|
||||
data.append(('', '', ''))
|
||||
|
||||
|
|
|
@ -50,17 +50,15 @@ class AnsibleProperties(object):
|
|||
self.globals_path = ''
|
||||
self.global_props = []
|
||||
self.unique_global_props = {}
|
||||
self.unique_override_flags = {}
|
||||
self.group_props = {}
|
||||
self.host_props = {}
|
||||
|
||||
if load_globals:
|
||||
self._load_properties_roles()
|
||||
self._load_properties_all()
|
||||
self._load_properties_global()
|
||||
if load_hosts:
|
||||
self._load_properties_hostvars()
|
||||
if load_groups:
|
||||
self._load_properties_groupvars()
|
||||
self._load_properties_roles()
|
||||
self._load_properties_all()
|
||||
self._load_properties_global()
|
||||
self._load_properties_hostvars()
|
||||
self._load_properties_groupvars()
|
||||
|
||||
def _load_properties_roles(self):
|
||||
start_dir = os.path.join(get_kolla_home(), ANSIBLE_ROLES_PATH)
|
||||
|
@ -100,15 +98,19 @@ class AnsibleProperties(object):
|
|||
globals_contents = yaml.safe_load(globals_data)
|
||||
for key, value in globals_contents.items():
|
||||
overrides = False
|
||||
override_flags = OverrideFlags()
|
||||
orig_value = None
|
||||
if key in self.unique_global_props:
|
||||
overrides = True
|
||||
override_flags.ovr_global = True
|
||||
orig_value = self.unique_global_props[key].value
|
||||
ansible_prop = AnsibleProperty(key, value,
|
||||
GLOBALS_FILENAME,
|
||||
overrides, orig_value)
|
||||
ansible_prop.override_flags = override_flags
|
||||
self.global_props.append(ansible_prop)
|
||||
self.unique_global_props[key] = ansible_prop
|
||||
self.unique_override_flags[key] = override_flags
|
||||
|
||||
def _load_properties_hostvars(self):
|
||||
host_dir = get_host_vars_dir()
|
||||
|
@ -121,9 +123,14 @@ class AnsibleProperties(object):
|
|||
props = []
|
||||
for key, value in host_contents.items():
|
||||
overrides = False
|
||||
override_flags = OverrideFlags()
|
||||
if key in self.unique_override_flags:
|
||||
override_flags = self.unique_override_flags[key]
|
||||
orig_value = None
|
||||
if key in self.unique_global_props:
|
||||
overrides = True
|
||||
override_flags.ovr_host = True
|
||||
self.unique_override_flags[key] = override_flags
|
||||
orig_value = self.unique_global_props[key].value
|
||||
ansible_prop = AnsibleProperty(key, value,
|
||||
hostfile,
|
||||
|
@ -138,6 +145,9 @@ class AnsibleProperties(object):
|
|||
if (groupfile == 'all.yml'):
|
||||
continue
|
||||
self.group_props[groupfile] = []
|
||||
# don't load __RESERVED__ as a group property list as it is globals
|
||||
if groupfile == '__RESERVED__':
|
||||
continue
|
||||
with open(os.path.join(group_dir, groupfile)) as group_data:
|
||||
group_contents = yaml.safe_load(group_data)
|
||||
if group_contents is None:
|
||||
|
@ -145,9 +155,14 @@ class AnsibleProperties(object):
|
|||
props = []
|
||||
for key, value in group_contents.items():
|
||||
overrides = False
|
||||
override_flags = OverrideFlags()
|
||||
if key in self.unique_override_flags:
|
||||
override_flags = self.unique_override_flags[key]
|
||||
orig_value = None
|
||||
if key in self.unique_global_props:
|
||||
overrides = True
|
||||
override_flags.ovr_group = True
|
||||
self.unique_override_flags[key] = override_flags
|
||||
orig_value = self.unique_global_props[key].value
|
||||
ansible_prop = AnsibleProperty(key, value,
|
||||
groupfile,
|
||||
|
@ -210,6 +225,9 @@ class AnsibleProperties(object):
|
|||
unique_list.append(value)
|
||||
return sorted(unique_list, key=lambda x: x.name)
|
||||
|
||||
def get_all_override_flags(self):
|
||||
return self.unique_override_flags
|
||||
|
||||
# TODO(bmace) -- if this isn't used for 2.1.x it should be removed
|
||||
# property listing is still being tweaked so leaving for
|
||||
# the time being in case we want to use it
|
||||
|
@ -339,3 +357,11 @@ class AnsibleProperty(object):
|
|||
self.overrides = overrides
|
||||
self.orig_value = orig_value
|
||||
self.target = target
|
||||
|
||||
|
||||
class OverrideFlags(object):
|
||||
|
||||
def __init__(self):
|
||||
self.ovr_global = False
|
||||
self.ovr_group = False
|
||||
self.ovr_host = False
|
||||
|
|
|
@ -62,6 +62,37 @@ class TestFunctional(KollaCliTest):
|
|||
# test all host vars
|
||||
self._properties_test(hosts=['all'])
|
||||
|
||||
# test property override output
|
||||
ovr_key = 'enable_haproxy'
|
||||
ovr_value = 'no'
|
||||
|
||||
# clear property values before test
|
||||
self.run_cli_cmd('property clear %s' % ovr_key)
|
||||
self.run_cli_cmd('property clear %s --host=all' % ovr_key)
|
||||
self.run_cli_cmd('property clear %s --group=all' % ovr_key)
|
||||
|
||||
# global property override test
|
||||
self.run_cli_cmd('property set %s %s' % (ovr_key, ovr_value))
|
||||
json_str = self.run_cli_cmd('property list -f json')
|
||||
msg = self._override_test(json_str, ovr_key, ovr_value, '*--')
|
||||
self.assertEqual(msg, '', 'override check failed: %s' % msg)
|
||||
|
||||
# host property override test
|
||||
self.run_cli_cmd('property set %s %s --host=%s' %
|
||||
(ovr_key, ovr_value, host))
|
||||
json_str = self.run_cli_cmd('property list -f json --host=%s' % host)
|
||||
msg = self._override_test(json_str, ovr_key,
|
||||
ovr_value, '*-H', host=host)
|
||||
self.assertEqual(msg, '', 'host override check failed: %s' % msg)
|
||||
|
||||
# group property override test
|
||||
self.run_cli_cmd('property set %s %s --group=%s' %
|
||||
(ovr_key, ovr_value, group))
|
||||
json_str = self.run_cli_cmd('property list -f json --group=%s' % group)
|
||||
msg = self._override_test(json_str, ovr_key,
|
||||
ovr_value, '*GH', group=group)
|
||||
self.assertEqual(msg, '', 'group override check failed: %s' % msg)
|
||||
|
||||
# check that group_var files are deleted
|
||||
# when groups are deleted
|
||||
for group in groups:
|
||||
|
@ -216,6 +247,33 @@ class TestFunctional(KollaCliTest):
|
|||
break
|
||||
return bad_path
|
||||
|
||||
def _override_test(self, json_str, key, value, ovr_string,
|
||||
host=None, group=None):
|
||||
error_msg = ''
|
||||
props = json.loads(json_str.strip())
|
||||
for prop in props:
|
||||
if group is not None:
|
||||
if prop['Group'] == group:
|
||||
error_msg = self._check_override_value(prop, key,
|
||||
value, ovr_string)
|
||||
elif host is not None:
|
||||
if prop['Host'] == host:
|
||||
error_msg = self._check_override_value(prop, key,
|
||||
value, ovr_string)
|
||||
else:
|
||||
error_msg = self._check_override_value(prop, key,
|
||||
value, ovr_string)
|
||||
return error_msg
|
||||
|
||||
def _check_override_value(self, prop, key, value, ovr_string):
|
||||
error_msg = ''
|
||||
if(prop['Property Name'] == key and
|
||||
prop['Property Value'] == value and
|
||||
prop['OVR'] != ovr_string):
|
||||
error_msg = ('override value mismatch for '
|
||||
'key:%s value:%s ovr:%s target:%s' %
|
||||
(key, value, prop['OVR'], ovr_string))
|
||||
return error_msg
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
Loading…
Reference in New Issue