From 9cc70f5202ba61c1919212dd9a227c4b3adcd6dc Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Wed, 22 Jan 2025 21:45:08 +0100 Subject: [PATCH] Fix label sanitization error handling. (#1029) --- changelogs/fragments/1029-sanitize-labels-fail.yml | 2 ++ plugins/module_utils/util.py | 2 +- .../targets/docker_volume/tasks/tests/basic.yml | 10 ++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/1029-sanitize-labels-fail.yml diff --git a/changelogs/fragments/1029-sanitize-labels-fail.yml b/changelogs/fragments/1029-sanitize-labels-fail.yml new file mode 100644 index 00000000..31791b2c --- /dev/null +++ b/changelogs/fragments/1029-sanitize-labels-fail.yml @@ -0,0 +1,2 @@ +bugfixes: + - "Fix label sanitization code to avoid crashes in case of errors (https://github.com/ansible-collections/community.docker/issues/1028, https://github.com/ansible-collections/community.docker/pull/1029)." diff --git a/plugins/module_utils/util.py b/plugins/module_utils/util.py index 90b3748e..f768ff6c 100644 --- a/plugins/module_utils/util.py +++ b/plugins/module_utils/util.py @@ -282,7 +282,7 @@ class DifferenceTracker(object): def sanitize_labels(labels, labels_field, client=None, module=None): def fail(msg): if client is not None: - client.module.fail(msg) + client.fail(msg) if module is not None: module.fail_json(msg=msg) raise ValueError(msg) diff --git a/tests/integration/targets/docker_volume/tasks/tests/basic.yml b/tests/integration/targets/docker_volume/tasks/tests/basic.yml index b65bbd9d..e032eddc 100644 --- a/tests/integration/targets/docker_volume/tasks/tests/basic.yml +++ b/tests/integration/targets/docker_volume/tasks/tests/basic.yml @@ -118,6 +118,14 @@ ## labels ########################################################## #################################################################### +- name: Create a volume with an invalid label + docker_volume: + name: "{{ vname }}" + labels: + foo: 1.0 + register: driver_labels_invalid + ignore_errors: true + - name: Create a volume with labels docker_volume: name: "{{ vname }}" @@ -173,6 +181,8 @@ - assert: that: + - driver_labels_invalid is failed + - driver_labels_invalid.msg == "The value 1.0 for 'foo' of labels is not a string or something than can be safely converted to a string!" - driver_labels_1 is changed - driver_labels_2 is not changed - driver_labels_3 is not changed