From 6bc2f8f78eb3320089716e478c8aec5c9a10d2de Mon Sep 17 00:00:00 2001 From: Rodrigo Gryzinski Date: Sat, 21 May 2022 19:37:42 +0100 Subject: [PATCH 01/11] Add image_label_mismatch to docker_container --- plugins/modules/docker_container.py | 52 +++++- .../targets/docker_container/tasks/main.yml | 6 + .../docker_container/tasks/tests/options.yml | 160 +++++++++++++++++- 3 files changed, 216 insertions(+), 2 deletions(-) diff --git a/plugins/modules/docker_container.py b/plugins/modules/docker_container.py index 78c1d061a..d812d0628 100644 --- a/plugins/modules/docker_container.py +++ b/plugins/modules/docker_container.py @@ -394,6 +394,20 @@ - Can also be an image ID. If this is the case, the image is assumed to be available locally. The I(pull) option is ignored for this case. type: str + image_label_mismatch: + description: + - How to handle labels inherited from the image that are not set explicitly. + - When C(ignore), labels that are present in the image but not specified in ansible will be + ignored. This is useful to avoid having to specify the image labels in ansible while keeping + labels I(comparisons) C(strict). + When C(fail), if there are labels present in the image which aren't set from ansible, the + module will fail. This prevents introducing unexpected labels from the base image. + - "B(Warning:) This option is ignored unless C(labels: strict) or C(*: strict) is specified in + the I(comparisons option." + type: str + choices: + - 'ignore' + - 'fail' init: description: - Run an init inside the container that forwards signals and reaps processes. @@ -2186,6 +2200,7 @@ def __init__(self, container, parameters): self.parameters_map['expected_env'] = 'env' self.parameters_map['expected_entrypoint'] = 'entrypoint' self.parameters_map['expected_binds'] = 'volumes' + self.parameters_map['expected_labels'] = 'labels' self.parameters_map['expected_cmd'] = 'command' self.parameters_map['expected_devices'] = 'devices' self.parameters_map['expected_healthcheck'] = 'healthcheck' @@ -2257,6 +2272,7 @@ def has_different_configuration(self, image): self.parameters.expected_exposed = self._get_expected_exposed(image) self.parameters.expected_volumes = self._get_expected_volumes(image) self.parameters.expected_binds = self._get_expected_binds(image) + self.parameters.expected_labels = self._get_expected_labels(image) self.parameters.expected_ulimits = self._get_expected_ulimits(self.parameters.ulimits) self.parameters.expected_sysctls = self._get_expected_sysctls(self.parameters.sysctls) self.parameters.expected_etc_hosts = self._convert_simple_dict_to_list('etc_hosts') @@ -2310,7 +2326,7 @@ def has_different_configuration(self, image): expected_exposed=expected_exposed, groups=host_config.get('GroupAdd'), ipc_mode=host_config.get("IpcMode"), - labels=config.get('Labels'), + expected_labels=config.get('Labels'), expected_links=host_config.get('Links'), mac_address=config.get('MacAddress', network.get('MacAddress')), memory_swappiness=host_config.get('MemorySwappiness'), @@ -2412,6 +2428,19 @@ def has_different_configuration(self, image): # expected_healthcheck comparison in this case. continue + if key == 'expected_labels' and self.parameters.image_label_mismatch == 'fail': + # If there are labels from the base image that should be removed and + # base_image_mismatch is fail we want raise an error. + image_labels = self._get_image_labels(image) + would_remove_labels = [] + for label in image_labels.keys(): + if label not in self.parameters.labels: + # Format label for error message + would_remove_labels.append(repr(label)) + if would_remove_labels: + msg = "Some labels should be removed but are present in the base image. You can set image_label_mismatch to 'ignore' to ignore this error. Labels: {0}" + self.fail(msg.format(', '.join(would_remove_labels))) + # no match. record the differences p = getattr(self.parameters, key) c = value @@ -2650,6 +2679,26 @@ def _get_expected_binds(self, image): self.log(result, pretty_print=True) return result + def _get_expected_labels(self, image): + if self.parameters.image_label_mismatch == 'ignore': + expected_labels = self._get_image_labels(image) + else: + expected_labels = {} + if self.parameters.labels: + expected_labels.update(self.parameters.labels) + return expected_labels + + def _get_image_labels(self, image): + if not image: + return {} + + # Can't use get('Labels', {}) because 'Labels' may be present and be None + labels = image[self.parameters.client.image_inspect_source].get('Labels') + if labels is None: + return {} + else: + return dict(labels) + def _get_expected_device_requests(self): if self.parameters.device_requests is None: return None @@ -3561,6 +3610,7 @@ def main(): hostname=dict(type='str'), ignore_image=dict(type='bool', default=False), image=dict(type='str'), + image_label_mismatch=dict(type='str', choices=['ignore', 'fail'], default='ignore'), init=dict(type='bool'), interactive=dict(type='bool'), ipc_mode=dict(type='str'), diff --git a/tests/integration/targets/docker_container/tasks/main.yml b/tests/integration/targets/docker_container/tasks/main.yml index 66e3d7bc7..17ab5f5b6 100644 --- a/tests/integration/targets/docker_container/tasks/main.yml +++ b/tests/integration/targets/docker_container/tasks/main.yml @@ -22,6 +22,7 @@ set_fact: cname_prefix: "{{ 'ansible-docker-test-%0x' % ((2**32) | random) }}" cnames: [] + inames: [] dnetworks: [] - debug: @@ -41,6 +42,11 @@ force_kill: yes with_items: "{{ cnames }}" diff: no + - name: "Make sure all images are removed" + docker_image: + name: "{{ item }}" + state: absent + with_items: "{{ inames }}" - name: "Make sure all networks are removed" docker_network: name: "{{ item }}" diff --git a/tests/integration/targets/docker_container/tasks/tests/options.yml b/tests/integration/targets/docker_container/tasks/tests/options.yml index 30b1f1181..92757829c 100644 --- a/tests/integration/targets/docker_container/tasks/tests/options.yml +++ b/tests/integration/targets/docker_container/tasks/tests/options.yml @@ -2195,9 +2195,167 @@ - image_change is changed #################################################################### -## ipc_mode ######################################################## +## image_label_mismatch ############################################ #################################################################### +- name: Registering image name + set_fact: + iname_labels: "{{ cname_prefix ~ '-labels' }}" +- name: Registering image name + set_fact: + inames: "{{ inames + [iname_labels] }}" +- name: build image with labels + command: + cmd: "docker build --label img_label=base --tag {{ iname_labels }} -" + stdin: "FROM {{ docker_test_image_alpine }}" + +- name: image_label_mismatch + docker_container: + image: "{{ iname_labels }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + state: started + register: image_label_mismatch_1 + +- name: image_label_mismatch (ignore,unmanaged labels) + docker_container: + image: "{{ iname_labels }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + image_label_mismatch: ignore + state: started + register: image_label_mismatch_2 + +- name: image_label_mismatch (ignore,missing img label) + docker_container: + image: "{{ iname_labels }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + image_label_mismatch: ignore + labels: {} + state: started + register: image_label_mismatch_3 + +- name: image_label_mismatch (ignore,match img label) + docker_container: + image: "{{ iname_labels }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + image_label_mismatch: ignore + labels: + img_label: base + state: started + register: image_label_mismatch_4 + +- name: image_label_mismatch (ignore,mismatched img label) + docker_container: + image: "{{ iname_labels }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + image_label_mismatch: ignore + labels: + img_label: override + state: started + register: image_label_mismatch_5 + +- name: image_label_mismatch (ignore,remove img label) + docker_container: + image: "{{ iname_labels }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + image_label_mismatch: ignore + labels: {} + state: started + register: image_label_mismatch_6 + +- name: image_label_mismatch (fail,unmanaged labels) + docker_container: + image: "{{ iname_labels }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + image_label_mismatch: fail + state: started + register: image_label_mismatch_7 + +- name: image_label_mismatch (fail,non-strict,missing img label) + docker_container: + image: "{{ iname_labels }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + image_label_mismatch: fail + labels: {} + state: started + register: image_label_mismatch_8 + +- name: image_label_mismatch (fail,strict,missing img label) + docker_container: + image: "{{ iname_labels }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + image_label_mismatch: fail + comparisons: + labels: strict + labels: {} + state: started + ignore_errors: yes + register: image_label_mismatch_9 + +- name: image_label_mismatch (fail,match img label) + docker_container: + image: "{{ iname_labels }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + image_label_mismatch: fail + labels: + img_label: base + state: started + register: image_label_mismatch_10 + +- name: image_label_mismatch (fail,mismatched img label) + docker_container: + image: "{{ iname_labels }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + image_label_mismatch: fail + labels: + img_label: override + state: started + register: image_label_mismatch_11 + +- name: cleanup container + docker_container: + name: "{{ cname }}" + state: absent + force_kill: yes + diff: no + +- name: cleanup image + docker_image: + name: "{{ iname_labels }}" + state: absent + diff: no + +- assert: + that: + - image_label_mismatch_1 is changed + - image_label_mismatch_1.container.Config.Labels.img_label == "base" + - image_label_mismatch_2 is not changed + - image_label_mismatch_3 is not changed + - image_label_mismatch_4 is not changed + - image_label_mismatch_5 is changed + - image_label_mismatch_5.container.Config.Labels.img_label == "override" + - image_label_mismatch_6 is changed + - image_label_mismatch_6.container.Config.Labels.img_label == "base" + - image_label_mismatch_7 is not changed + - image_label_mismatch_8 is not changed + - image_label_mismatch_9 is failed + - image_label_mismatch_10 is not changed + - image_label_mismatch_11 is changed + +################################################################### +# ipc_mode ######################################################## +################################################################### + - name: start helpers docker_container: image: "{{ docker_test_image_alpine }}" From 0d82b5a4a059ade556867a3d752b6ea01bd7e7d9 Mon Sep 17 00:00:00 2001 From: Rodrigo Candido Gryzinski Date: Sun, 22 May 2022 11:39:23 -0300 Subject: [PATCH 02/11] Apply suggestions from code review Co-authored-by: Felix Fontein --- plugins/modules/docker_container.py | 31 +++++++++---------- .../docker_container/tasks/tests/options.yml | 6 ++-- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/plugins/modules/docker_container.py b/plugins/modules/docker_container.py index a429858be..f1103dcba 100644 --- a/plugins/modules/docker_container.py +++ b/plugins/modules/docker_container.py @@ -397,17 +397,19 @@ image_label_mismatch: description: - How to handle labels inherited from the image that are not set explicitly. - - When C(ignore), labels that are present in the image but not specified in ansible will be - ignored. This is useful to avoid having to specify the image labels in ansible while keeping + - When C(ignore), labels that are present in the image but not specified in I(labels) will be + ignored. This is useful to avoid having to specify the image labels in I(labels) while keeping labels I(comparisons) C(strict). - When C(fail), if there are labels present in the image which aren't set from ansible, the + - When C(fail), if there are labels present in the image which are not set from I(labels), the module will fail. This prevents introducing unexpected labels from the base image. - "B(Warning:) This option is ignored unless C(labels: strict) or C(*: strict) is specified in - the I(comparisons option." + the I(comparisons) option." type: str choices: - 'ignore' - 'fail' + default: ignore + version_added: 2.6.0 init: description: - Run an init inside the container that forwards signals and reaps processes. @@ -2419,18 +2421,18 @@ def has_different_configuration(self, image): # expected_healthcheck comparison in this case. continue - if key == 'expected_labels' and self.parameters.image_label_mismatch == 'fail': + if key == 'expected_labels' and compare == 'strict' and self.parameters.image_label_mismatch == 'fail': # If there are labels from the base image that should be removed and # base_image_mismatch is fail we want raise an error. image_labels = self._get_image_labels(image) would_remove_labels = [] - for label in image_labels.keys(): + for label in image_labels: if label not in self.parameters.labels: # Format label for error message - would_remove_labels.append(repr(label)) + would_remove_labels.append(label) if would_remove_labels: msg = "Some labels should be removed but are present in the base image. You can set image_label_mismatch to 'ignore' to ignore this error. Labels: {0}" - self.fail(msg.format(', '.join(would_remove_labels))) + self.fail(msg.format(', '.join(['"%s"' % label for label in would_remove_labels]))) # no match. record the differences p = getattr(self.parameters, key) @@ -2671,12 +2673,13 @@ def _get_expected_binds(self, image): return result def _get_expected_labels(self, image): + if self.parameters.labels is None: + return None if self.parameters.image_label_mismatch == 'ignore': - expected_labels = self._get_image_labels(image) + expected_labels = dict(self._get_image_labels(image)) else: expected_labels = {} - if self.parameters.labels: - expected_labels.update(self.parameters.labels) + expected_labels.update(self.parameters.labels) return expected_labels def _get_image_labels(self, image): @@ -2684,11 +2687,7 @@ def _get_image_labels(self, image): return {} # Can't use get('Labels', {}) because 'Labels' may be present and be None - labels = image[self.parameters.client.image_inspect_source].get('Labels') - if labels is None: - return {} - else: - return dict(labels) + return image[self.parameters.client.image_inspect_source].get('Labels') or {} def _get_expected_device_requests(self): if self.parameters.device_requests is None: diff --git a/tests/integration/targets/docker_container/tasks/tests/options.yml b/tests/integration/targets/docker_container/tasks/tests/options.yml index d54a3eac1..7d14831e0 100644 --- a/tests/integration/targets/docker_container/tasks/tests/options.yml +++ b/tests/integration/targets/docker_container/tasks/tests/options.yml @@ -2352,9 +2352,9 @@ - image_label_mismatch_10 is not changed - image_label_mismatch_11 is changed -################################################################### -# ipc_mode ######################################################## -################################################################### +#################################################################### +## ipc_mode ######################################################## +#################################################################### - name: start helpers docker_container: From 5ac0e438cba99d2fe9106e86763d92f66687bc12 Mon Sep 17 00:00:00 2001 From: Rodrigo Gryzinski Date: Sun, 22 May 2022 15:43:44 +0100 Subject: [PATCH 03/11] Test image_label_mismatch error message --- .../integration/targets/docker_container/tasks/tests/options.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/integration/targets/docker_container/tasks/tests/options.yml b/tests/integration/targets/docker_container/tasks/tests/options.yml index 7d14831e0..cff0cbf41 100644 --- a/tests/integration/targets/docker_container/tasks/tests/options.yml +++ b/tests/integration/targets/docker_container/tasks/tests/options.yml @@ -2349,6 +2349,7 @@ - image_label_mismatch_7 is not changed - image_label_mismatch_8 is not changed - image_label_mismatch_9 is failed + - image_label_mismatch_9.msg == "Some labels should be removed but are present in the base image. You can set image_label_mismatch to 'ignore' to ignore this error. Labels: \"img_Label\"" - image_label_mismatch_10 is not changed - image_label_mismatch_11 is changed From f87e3f8231f06063f4bc056d40edbe8bc3290295 Mon Sep 17 00:00:00 2001 From: Rodrigo Gryzinski Date: Sun, 22 May 2022 15:48:23 +0100 Subject: [PATCH 04/11] Add change fragment for image_label_mismatch --- changelogs/fragments/370-add-image-label-mismatch.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 changelogs/fragments/370-add-image-label-mismatch.yml diff --git a/changelogs/fragments/370-add-image-label-mismatch.yml b/changelogs/fragments/370-add-image-label-mismatch.yml new file mode 100644 index 000000000..911277378 --- /dev/null +++ b/changelogs/fragments/370-add-image-label-mismatch.yml @@ -0,0 +1,2 @@ +minor_changes: +- "docker_container - added ``image_label_mismatch`` parameter" From c3d62f1cec879dd919f628e6d3d89814e582b788 Mon Sep 17 00:00:00 2001 From: Rodrigo Gryzinski Date: Sun, 22 May 2022 16:06:35 +0100 Subject: [PATCH 05/11] Break long line in docker_container.py for pep-8 compliance --- plugins/modules/docker_container.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/modules/docker_container.py b/plugins/modules/docker_container.py index f1103dcba..fea8e8370 100644 --- a/plugins/modules/docker_container.py +++ b/plugins/modules/docker_container.py @@ -2431,7 +2431,8 @@ def has_different_configuration(self, image): # Format label for error message would_remove_labels.append(label) if would_remove_labels: - msg = "Some labels should be removed but are present in the base image. You can set image_label_mismatch to 'ignore' to ignore this error. Labels: {0}" + msg = ("Some labels should be removed but are present in the base image. You can set image_label_mismatch to 'ignore' to ignore" + "this error. Labels: {0}") self.fail(msg.format(', '.join(['"%s"' % label for label in would_remove_labels]))) # no match. record the differences From d7fdb7fb7444b470ce5cdbce04007681e21bf814 Mon Sep 17 00:00:00 2001 From: Rodrigo Gryzinski Date: Sun, 22 May 2022 16:19:16 +0100 Subject: [PATCH 06/11] pep8 compliance --- plugins/modules/docker_container.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/modules/docker_container.py b/plugins/modules/docker_container.py index fea8e8370..d8be9ce50 100644 --- a/plugins/modules/docker_container.py +++ b/plugins/modules/docker_container.py @@ -2432,7 +2432,7 @@ def has_different_configuration(self, image): would_remove_labels.append(label) if would_remove_labels: msg = ("Some labels should be removed but are present in the base image. You can set image_label_mismatch to 'ignore' to ignore" - "this error. Labels: {0}") + "this error. Labels: {0}") self.fail(msg.format(', '.join(['"%s"' % label for label in would_remove_labels]))) # no match. record the differences From 177bb9c151316f7807334877c4dc7d7b8bef583a Mon Sep 17 00:00:00 2001 From: Rodrigo Candido Gryzinski Date: Sun, 22 May 2022 12:54:16 -0300 Subject: [PATCH 07/11] Update changelogs/fragments/370-add-image-label-mismatch.yml Co-authored-by: Felix Fontein --- changelogs/fragments/370-add-image-label-mismatch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelogs/fragments/370-add-image-label-mismatch.yml b/changelogs/fragments/370-add-image-label-mismatch.yml index 911277378..da13fbe99 100644 --- a/changelogs/fragments/370-add-image-label-mismatch.yml +++ b/changelogs/fragments/370-add-image-label-mismatch.yml @@ -1,2 +1,2 @@ minor_changes: -- "docker_container - added ``image_label_mismatch`` parameter" +- "docker_container - added ``image_label_mismatch`` parameter (https://github.com/ansible-collections/community.docker/issues/314, https://github.com/ansible-collections/community.docker/pull/370)." From aea013cfc343b04df48cc4b8c1643a2edea54f51 Mon Sep 17 00:00:00 2001 From: Rodrigo Gryzinski Date: Mon, 23 May 2022 23:05:08 +0100 Subject: [PATCH 08/11] fix: add expected_labels to parameters_map in docker_container --- plugins/modules/docker_container.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/modules/docker_container.py b/plugins/modules/docker_container.py index d8be9ce50..52c4d2ac7 100644 --- a/plugins/modules/docker_container.py +++ b/plugins/modules/docker_container.py @@ -2183,6 +2183,7 @@ def __init__(self, container, parameters): self.parameters.expected_env = None self.parameters.expected_device_requests = None self.parameters_map = dict() + self.parameters_map['expected_labels'] = 'labels' self.parameters_map['expected_links'] = 'links' self.parameters_map['expected_ports'] = 'expected_ports' self.parameters_map['expected_exposed'] = 'exposed_ports' From 1971f2433abb65b1c4a030aec2a3dad462f874fa Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Tue, 24 May 2022 07:35:32 +0200 Subject: [PATCH 09/11] Apply suggestions from code review --- plugins/modules/docker_container.py | 2 +- .../targets/docker_container/tasks/tests/options.yml | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/modules/docker_container.py b/plugins/modules/docker_container.py index 52c4d2ac7..13f3f3416 100644 --- a/plugins/modules/docker_container.py +++ b/plugins/modules/docker_container.py @@ -2422,7 +2422,7 @@ def has_different_configuration(self, image): # expected_healthcheck comparison in this case. continue - if key == 'expected_labels' and compare == 'strict' and self.parameters.image_label_mismatch == 'fail': + if key == 'expected_labels' and compare['comparison'] == 'strict' and self.parameters.image_label_mismatch == 'fail': # If there are labels from the base image that should be removed and # base_image_mismatch is fail we want raise an error. image_labels = self._get_image_labels(image) diff --git a/tests/integration/targets/docker_container/tasks/tests/options.yml b/tests/integration/targets/docker_container/tasks/tests/options.yml index cff0cbf41..8ea4611f5 100644 --- a/tests/integration/targets/docker_container/tasks/tests/options.yml +++ b/tests/integration/targets/docker_container/tasks/tests/options.yml @@ -2256,6 +2256,7 @@ labels: img_label: override state: started + force_kill: yes register: image_label_mismatch_5 - name: image_label_mismatch (ignore,remove img label) @@ -2266,6 +2267,7 @@ image_label_mismatch: ignore labels: {} state: started + force_kill: yes register: image_label_mismatch_6 - name: image_label_mismatch (fail,unmanaged labels) @@ -2320,6 +2322,7 @@ labels: img_label: override state: started + force_kill: yes register: image_label_mismatch_11 - name: cleanup container From acfe4b26f88262992f619fdcfd49eab0f93c913c Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Tue, 24 May 2022 07:55:21 +0200 Subject: [PATCH 10/11] Apply suggestions from code review --- plugins/modules/docker_container.py | 2 +- .../targets/docker_container/tasks/tests/options.yml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/modules/docker_container.py b/plugins/modules/docker_container.py index 13f3f3416..98a56c9f1 100644 --- a/plugins/modules/docker_container.py +++ b/plugins/modules/docker_container.py @@ -2433,7 +2433,7 @@ def has_different_configuration(self, image): would_remove_labels.append(label) if would_remove_labels: msg = ("Some labels should be removed but are present in the base image. You can set image_label_mismatch to 'ignore' to ignore" - "this error. Labels: {0}") + " this error. Labels: {0}") self.fail(msg.format(', '.join(['"%s"' % label for label in would_remove_labels]))) # no match. record the differences diff --git a/tests/integration/targets/docker_container/tasks/tests/options.yml b/tests/integration/targets/docker_container/tasks/tests/options.yml index 8ea4611f5..0d699d9d4 100644 --- a/tests/integration/targets/docker_container/tasks/tests/options.yml +++ b/tests/integration/targets/docker_container/tasks/tests/options.yml @@ -2352,7 +2352,8 @@ - image_label_mismatch_7 is not changed - image_label_mismatch_8 is not changed - image_label_mismatch_9 is failed - - image_label_mismatch_9.msg == "Some labels should be removed but are present in the base image. You can set image_label_mismatch to 'ignore' to ignore this error. Labels: \"img_Label\"" + - >- + image_label_mismatch_9.msg == "Some labels should be removed but are present in the base image. You can set image_label_mismatch to 'ignore' to ignore this error. Labels: \"img_Label\"" - image_label_mismatch_10 is not changed - image_label_mismatch_11 is changed From 00690737c9891c8214469e9585691b8e78365812 Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Tue, 24 May 2022 08:09:31 +0200 Subject: [PATCH 11/11] Update tests/integration/targets/docker_container/tasks/tests/options.yml --- .../targets/docker_container/tasks/tests/options.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/targets/docker_container/tasks/tests/options.yml b/tests/integration/targets/docker_container/tasks/tests/options.yml index 0d699d9d4..4b898b7e8 100644 --- a/tests/integration/targets/docker_container/tasks/tests/options.yml +++ b/tests/integration/targets/docker_container/tasks/tests/options.yml @@ -2353,7 +2353,7 @@ - image_label_mismatch_8 is not changed - image_label_mismatch_9 is failed - >- - image_label_mismatch_9.msg == "Some labels should be removed but are present in the base image. You can set image_label_mismatch to 'ignore' to ignore this error. Labels: \"img_Label\"" + image_label_mismatch_9.msg == ("Some labels should be removed but are present in the base image. You can set image_label_mismatch to 'ignore' to ignore this error. " ~ 'Labels: "img_label"') - image_label_mismatch_10 is not changed - image_label_mismatch_11 is changed