Skip to content

Commit

Permalink
support hidden values when creating params
Browse files Browse the repository at this point in the history
  • Loading branch information
evgeni committed Oct 8, 2024
1 parent ff0d153 commit 8472cf7
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
5 changes: 5 additions & 0 deletions plugins/doc_fragments/foreman.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,11 @@ class ModuleDocFragment(object):
- 'yaml'
- 'json'
type: str
hidden_value:
description:
- Should the value be hidden
required: false
type: bool
'''

OS_FAMILY = '''
Expand Down
14 changes: 14 additions & 0 deletions plugins/module_utils/foreman_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
name=dict(required=True),
value=dict(type='raw', required=True),
parameter_type=dict(default='string', choices=['string', 'boolean', 'integer', 'real', 'array', 'hash', 'yaml', 'json']),
hidden_value=dict(type='bool'),
)

parameter_ansible_spec = {k: v for (k, v) in parameter_foreman_spec.items() if k != 'id'}
Expand Down Expand Up @@ -265,6 +266,8 @@ def ensure_scoped_parameters(self, scope):
desired_parameter['value'] = parameter_value_to_str(desired_parameter['value'], desired_parameter['parameter_type'])
current_parameter = current_parameters.pop(name, None)
if current_parameter:
if 'hidden_value?' in current_parameter:
current_parameter['hidden_value'] = current_parameter.pop('hidden_value?')
if 'parameter_type' not in current_parameter:
current_parameter['parameter_type'] = 'string'
current_parameter['value'] = parameter_value_to_str(current_parameter['value'], current_parameter['parameter_type'])
Expand Down Expand Up @@ -1094,6 +1097,15 @@ def _update_entity(self, resource, desired_entity, current_entity, params, forem
sort_key = 'name'
else:
sort_key = list(value[0].keys())[0]
# special handling for parameters created by ParametersMixin
# they are defined as a list of dict, but the dicts should be really handled like
# entities, which means we only want to update the user-provided details
if key.endswith('_parameters_attributes'):
for new_param in new_value:
old_param = next((x for x in old_value if x['name'] == new_param['name']), None)
if old_param is not None:
for pop_key in set(old_param.keys()) - set(new_param.keys()):
old_param.pop(pop_key)
new_value = sorted(new_value, key=operator.itemgetter(sort_key))
old_value = sorted(old_value, key=operator.itemgetter(sort_key))
if new_value != old_value:
Expand Down Expand Up @@ -1806,6 +1818,8 @@ def parameter_value_to_str(value, parameter_type):
def parameters_list_to_str_list(parameters):
filtered_params = []
for param in parameters:
if 'hidden_value?' in param:
param['hidden_value'] = param.pop('hidden_value?')
new_param = {k: v for (k, v) in param.items() if k in parameter_ansible_spec.keys()}
new_param['value'] = parameter_value_to_str(new_param['value'], new_param.get('parameter_type', 'string'))
filtered_params.append(new_param)
Expand Down

0 comments on commit 8472cf7

Please sign in to comment.