ansible-config: Dump galaxy server config in proper JSON format (#84912)

Fixes: #84840

Signed-off-by: Abhijeet Kasurde <Akasurde@redhat.com>
pull/84920/head^2
Abhijeet Kasurde 8 months ago committed by GitHub
parent 7d0886457a
commit 2a4b1c8248
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,3 @@
---
bugfixes:
- ansible-config - format galaxy server configs while dumping in JSON format (https://github.com/ansible/ansible/issues/84840).

@ -21,7 +21,7 @@ import ansible.plugins.loader as plugin_loader
from ansible import constants as C from ansible import constants as C
from ansible.cli.arguments import option_helpers as opt_help from ansible.cli.arguments import option_helpers as opt_help
from ansible.config.manager import ConfigManager, Setting from ansible.config.manager import ConfigManager
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleRequiredOptionError from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleRequiredOptionError
from ansible.module_utils.common.text.converters import to_native, to_text, to_bytes from ansible.module_utils.common.text.converters import to_native, to_text, to_bytes
from ansible.module_utils.common.json import json_dump from ansible.module_utils.common.json import json_dump
@ -458,21 +458,21 @@ class ConfigCLI(CLI):
entries = [] entries = []
for setting in sorted(config): for setting in sorted(config):
changed = (config[setting].origin not in ('default', 'REQUIRED') and setting not in _IGNORE_CHANGED) changed = (config[setting]['origin'] not in ('default', 'REQUIRED') and setting not in _IGNORE_CHANGED)
if context.CLIARGS['format'] == 'display': if context.CLIARGS['format'] == 'display':
if isinstance(config[setting], Setting): if isinstance(config[setting], dict):
# proceed normally # proceed normally
value = config[setting].value value = config[setting]['value']
if config[setting].origin == 'default' or setting in _IGNORE_CHANGED: if config[setting]['origin'] == 'default' or setting in _IGNORE_CHANGED:
color = 'green' color = 'green'
value = self.config.template_default(value, get_constants()) value = self.config.template_default(value, get_constants())
elif config[setting].origin == 'REQUIRED': elif config[setting]['origin'] == 'REQUIRED':
# should include '_terms', '_input', etc # should include '_terms', '_input', etc
color = 'red' color = 'red'
else: else:
color = 'yellow' color = 'yellow'
msg = "%s(%s) = %s" % (setting, config[setting].origin, value) msg = "%s(%s) = %s" % (setting, config[setting]['origin'], value)
else: else:
color = 'green' color = 'green'
msg = "%s(%s) = %s" % (setting, 'default', config[setting].get('default')) msg = "%s(%s) = %s" % (setting, 'default', config[setting].get('default'))
@ -480,10 +480,10 @@ class ConfigCLI(CLI):
entry = stringc(msg, color) entry = stringc(msg, color)
else: else:
entry = {} entry = {}
for key in config[setting]._fields: for key in config[setting].keys():
if key == 'type': if key == 'type':
continue continue
entry[key] = getattr(config[setting], key) entry[key] = config[setting][key]
if not context.CLIARGS['only_changed'] or changed: if not context.CLIARGS['only_changed'] or changed:
entries.append(entry) entries.append(entry)
@ -497,7 +497,12 @@ class ConfigCLI(CLI):
# convert to settings # convert to settings
for setting in config.keys(): for setting in config.keys():
v, o = C.config.get_config_value_and_origin(setting, cfile=self.config_file, variables=get_constants()) v, o = C.config.get_config_value_and_origin(setting, cfile=self.config_file, variables=get_constants())
config[setting] = Setting(setting, v, o, None) config[setting] = {
'name': setting,
'value': v,
'origin': o,
'type': None
}
return self._render_settings(config) return self._render_settings(config)
@ -554,7 +559,12 @@ class ConfigCLI(CLI):
# not all cases will be error # not all cases will be error
o = 'REQUIRED' o = 'REQUIRED'
config_entries[finalname][setting] = Setting(setting, v, o, None) config_entries[finalname][setting] = {
'name': setting,
'value': v,
'origin': o,
'type': None
}
# pretty please! # pretty please!
results = self._render_settings(config_entries[finalname]) results = self._render_settings(config_entries[finalname])
@ -587,7 +597,12 @@ class ConfigCLI(CLI):
if v is None and o is None: if v is None and o is None:
# not all cases will be error # not all cases will be error
o = 'REQUIRED' o = 'REQUIRED'
server_config[setting] = Setting(setting, v, o, None) server_config[setting] = {
'name': setting,
'value': v,
'origin': o,
'type': None
}
if context.CLIARGS['format'] == 'display': if context.CLIARGS['format'] == 'display':
if not context.CLIARGS['only_changed'] or server_config: if not context.CLIARGS['only_changed'] or server_config:
equals = '=' * len(server) equals = '=' * len(server)
@ -617,7 +632,7 @@ class ConfigCLI(CLI):
for server_config in server_config_list: for server_config in server_config_list:
server = list(server_config.keys())[0] server = list(server_config.keys())[0]
server_reduced_config = server_config.pop(server) server_reduced_config = server_config.pop(server)
configs[server] = server_reduced_config configs[server] = list(server_reduced_config.values())
output.append({'GALAXY_SERVERS': configs}) output.append({'GALAXY_SERVERS': configs})
if context.CLIARGS['type'] == 'all': if context.CLIARGS['type'] == 'all':

@ -12,7 +12,6 @@ import sys
import stat import stat
import tempfile import tempfile
from collections import namedtuple
from collections.abc import Mapping, Sequence from collections.abc import Mapping, Sequence
from jinja2.nativetypes import NativeEnvironment from jinja2.nativetypes import NativeEnvironment
@ -27,8 +26,6 @@ from ansible.parsing.yaml.objects import AnsibleVaultEncryptedUnicode
from ansible.utils.path import cleanup_tmp_file, makedirs_safe, unfrackpath from ansible.utils.path import cleanup_tmp_file, makedirs_safe, unfrackpath
Setting = namedtuple('Setting', 'name value origin type')
INTERNAL_DEFS = {'lookup': ('_terms',)} INTERNAL_DEFS = {'lookup': ('_terms',)}
GALAXY_SERVER_DEF = [ GALAXY_SERVER_DEF = [

@ -86,9 +86,6 @@
- all - all
register: galaxy_server_dump register: galaxy_server_dump
#- debug: msg='{{ (galaxy_server_dump.results[0].stdout | from_json) }}'
#- debug: msg='{{ (galaxy_server_dump.results[1].stdout | from_json) }}'
- name: extract galaxy servers from config dump - name: extract galaxy servers from config dump
set_fact: set_fact:
galaxy_server_dump_base: '{{ (galaxy_server_dump.results[0].stdout | from_json | select("contains", "GALAXY_SERVERS"))[0].get("GALAXY_SERVERS") }}' galaxy_server_dump_base: '{{ (galaxy_server_dump.results[0].stdout | from_json | select("contains", "GALAXY_SERVERS"))[0].get("GALAXY_SERVERS") }}'
@ -139,8 +136,8 @@
- name: Check individual settings - name: Check individual settings
assert: assert:
that: that:
- gs[item[0]][item[1]] == galaxy_server_dump_base[item[0]][item[1]][1] - gs[item[0]][item[1]] == (galaxy_server_dump_base[item[0]] | selectattr('name', '==', item[1]))[0]['value']
- gs[item[0]][item[1]] == galaxy_server_dump_all[item[0]][item[1]][1] - gs[item[0]][item[1]] == (galaxy_server_dump_all[item[0]] | selectattr('name', '==', item[1]))[0]['value']
when: when:
- item[1] in gs[item[0]] - item[1] in gs[item[0]]
loop: '{{gs_keys | product(gs_all) }}' loop: '{{gs_keys | product(gs_all) }}'

Loading…
Cancel
Save