diff --git a/changelogs/fragments/6203-add-append-option-to-ipa-hostgroup.yml b/changelogs/fragments/6203-add-append-option-to-ipa-hostgroup.yml new file mode 100644 index 00000000000..1de6853efce --- /dev/null +++ b/changelogs/fragments/6203-add-append-option-to-ipa-hostgroup.yml @@ -0,0 +1,2 @@ +minor_changes: + - ipa_hostgroup - add ``append`` parameter for adding a new hosts to existing hostgroups without changing existing hostgroup members (https://github.com/ansible-collections/community.general/pull/6203). diff --git a/plugins/modules/ipa_hostgroup.py b/plugins/modules/ipa_hostgroup.py index dcada0380c5..12232de89cf 100644 --- a/plugins/modules/ipa_hostgroup.py +++ b/plugins/modules/ipa_hostgroup.py @@ -20,6 +20,13 @@ diff_mode: support: none options: + append: + description: + - If C(true), add the listed I(host) to the I(hostgroup). + - If C(false), only the listed I(host) will be in I(hostgroup), removing any other hosts. + default: false + type: bool + version_added: 6.6.0 cn: description: - Name of host-group. @@ -147,6 +154,7 @@ def ensure(module, client): state = module.params['state'] host = module.params['host'] hostgroup = module.params['hostgroup'] + append = module.params['append'] ipa_hostgroup = client.hostgroup_find(name=name) module_hostgroup = get_hostgroup_dict(description=module.params['description']) @@ -168,14 +176,18 @@ def ensure(module, client): client.hostgroup_mod(name=name, item=data) if host is not None: - changed = client.modify_if_diff(name, ipa_hostgroup.get('member_host', []), [item.lower() for item in host], - client.hostgroup_add_host, client.hostgroup_remove_host) or changed + changed = client.modify_if_diff(name, ipa_hostgroup.get('member_host', []), + [item.lower() for item in host], + client.hostgroup_add_host, + client.hostgroup_remove_host, + append=append) or changed if hostgroup is not None: changed = client.modify_if_diff(name, ipa_hostgroup.get('member_hostgroup', []), [item.lower() for item in hostgroup], client.hostgroup_add_hostgroup, - client.hostgroup_remove_hostgroup) or changed + client.hostgroup_remove_hostgroup, + append=append) or changed else: if ipa_hostgroup: @@ -192,7 +204,8 @@ def main(): description=dict(type='str'), host=dict(type='list', elements='str'), hostgroup=dict(type='list', elements='str'), - state=dict(type='str', default='present', choices=['present', 'absent', 'enabled', 'disabled'])) + state=dict(type='str', default='present', choices=['present', 'absent', 'enabled', 'disabled']), + append=dict(type='bool', default=False)) module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True)