diff --git a/changelogs/fragments/11172-zfs-changed-extra-props.yml b/changelogs/fragments/11172-zfs-changed-extra-props.yml new file mode 100644 index 00000000000..8fbdeadf583 --- /dev/null +++ b/changelogs/fragments/11172-zfs-changed-extra-props.yml @@ -0,0 +1,3 @@ +--- +bugfixes: + - zfs - mark change correctly when updating properties whose current value differs, even if they already have a non-default value (https://github.com/ansible-collections/community.general/issues/11019, https://github.com/ansible-collections/community.general/pull/11172). \ No newline at end of file diff --git a/plugins/modules/zfs.py b/plugins/modules/zfs.py index 492fa62d27c..5682fa52bc0 100644 --- a/plugins/modules/zfs.py +++ b/plugins/modules/zfs.py @@ -185,9 +185,11 @@ def set_property(self, prop, value): def set_properties_if_changed(self): diff = {"before": {"extra_zfs_properties": {}}, "after": {"extra_zfs_properties": {}}} current_properties = self.list_properties() + previous_values = {} for prop, value in self.extra_zfs_properties.items(): current_value = self.get_property(prop, current_properties) if current_value != value: + previous_values[prop] = current_value self.set_property(prop, value) diff["before"]["extra_zfs_properties"][prop] = current_value diff["after"]["extra_zfs_properties"][prop] = value @@ -198,7 +200,7 @@ def set_properties_if_changed(self): value = self.get_property(prop, updated_properties) if value is None: self.module.fail_json(msg=f"zfsprop was not present after being successfully set: {prop}") - if self.get_property(prop, current_properties) != value: + if prop in previous_values and previous_values[prop] != value: self.changed = True if prop in diff["after"]["extra_zfs_properties"]: diff["after"]["extra_zfs_properties"][prop] = value