summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Doran <sdoran@redhat.com>2021-06-11 12:32:30 -0400
committerGitHub <noreply@github.com>2021-06-11 11:32:30 -0500
commit578fa17af58ae665cc652c530f1de6562659665c (patch)
tree9a09782df7951a966be558436585a122569437ef
parent46378f0086f7c84587c94df444f594153fbced50 (diff)
downloadansible-578fa17af58ae665cc652c530f1de6562659665c.tar.gz
[stable-2.11] version test - improve message when value is empty (#74754) (#74789)
When an empty value is provided, no `version` attribute will exist on the `LooseVersion` or `StrictVersion` object. We catch and handle this, but it's not immediatebly clear that an AttributeError means an empty value was provided. Specifically handle the case where value or version are empty and add more helpful error messages. Add integration tests. (cherry picked from commit 71e33d2578) Co-authored-by: Sam Doran <sdoran@redhat.com>
-rw-r--r--changelogs/fragments/version_compare-error-on-empty.yml2
-rw-r--r--lib/ansible/plugins/test/core.py6
-rw-r--r--test/integration/targets/test_core/tasks/main.yml26
3 files changed, 33 insertions, 1 deletions
diff --git a/changelogs/fragments/version_compare-error-on-empty.yml b/changelogs/fragments/version_compare-error-on-empty.yml
new file mode 100644
index 0000000000..2c26a8e8b2
--- /dev/null
+++ b/changelogs/fragments/version_compare-error-on-empty.yml
@@ -0,0 +1,2 @@
+bugfixes:
+ - version test - improve error message when an empty version is provided
diff --git a/lib/ansible/plugins/test/core.py b/lib/ansible/plugins/test/core.py
index 4b3995dd16..42aec36a06 100644
--- a/lib/ansible/plugins/test/core.py
+++ b/lib/ansible/plugins/test/core.py
@@ -168,6 +168,12 @@ def version_compare(value, version, operator='eq', strict=None, version_type=Non
if strict is not None and version_type is not None:
raise errors.AnsibleFilterError("Cannot specify both 'strict' and 'version_type'")
+ if not value:
+ raise errors.AnsibleFilterError("Input version value cannot be empty")
+
+ if not version:
+ raise errors.AnsibleFilterError("Version parameter to compare against cannot be empty")
+
Version = LooseVersion
if strict:
Version = StrictVersion
diff --git a/test/integration/targets/test_core/tasks/main.yml b/test/integration/targets/test_core/tasks/main.yml
index 0ae4da6735..9f753e3cb9 100644
--- a/test/integration/targets/test_core/tasks/main.yml
+++ b/test/integration/targets/test_core/tasks/main.yml
@@ -235,6 +235,24 @@
ignore_errors: yes
register: version_bad_semver
+- name: Try version with empty input value
+ debug:
+ msg: "{{ '' is version('1.0', '>') }}"
+ ignore_errors: yes
+ register: version_empty_input
+
+- name: Try version with empty comparison value
+ debug:
+ msg: "{{ '1.0' is version('', '>') }}"
+ ignore_errors: yes
+ register: version_empty_comparison
+
+- name: Try version with empty input and comparison values
+ debug:
+ msg: "{{ '' is version('', '>') }}"
+ ignore_errors: yes
+ register: version_empty_both
+
- name: Assert version tests work
assert:
that:
@@ -258,6 +276,12 @@
- version_strict_version_type is failed
- version_bad_version_type is failed
- version_bad_semver is failed
+ - version_empty_input is failed
+ - version_empty_input is search('version value cannot be empty')
+ - version_empty_comparison is failed
+ - version_empty_comparison is search('to compare against cannot be empty')
+ - version_empty_both is failed
+ - version_empty_both is search('version value cannot be empty')
- name: Assert any tests work
assert:
@@ -288,7 +312,7 @@
- '"off" is not truthy(convert_bool=True)'
- '"fred" is truthy(convert_bool=True)'
- '{} is not truthy'
- - '{"key": "value"} is truthy'
+ - '{"key": "value"} is truthy'
- name: Assert falsy tests work
assert: