summaryrefslogtreecommitdiff
path: root/test/integration/targets/conditionals
diff options
context:
space:
mode:
authorRick Elrod <rick@elrod.me>2021-04-13 10:12:10 -0500
committerGitHub <noreply@github.com>2021-04-13 11:12:10 -0400
commit19aeb4706d7f7a984daf2a70f16d69a7dccde484 (patch)
tree3ebbfb26e8f9d112fc7c613797e7662c07169514 /test/integration/targets/conditionals
parentce96591313b06563ede8adfd68a5cd7453eb9e02 (diff)
downloadansible-19aeb4706d7f7a984daf2a70f16d69a7dccde484.tar.gz
[conditional] Remove support for bare variables (#74208)
Change: - Variables used in ``when`` conditionals are no longer parsed and attempted to be converted to booleans. All non-empty strings are considered true (empty strings, false). Test Plan: - Updated existing tests - Added a bunch of new tests with various kinds of truthy/falsy values. Tickets: - Fixes #74134 Signed-off-by: Rick Elrod <rick@elrod.me>
Diffstat (limited to 'test/integration/targets/conditionals')
-rw-r--r--test/integration/targets/conditionals/play.yml150
-rwxr-xr-xtest/integration/targets/conditionals/runme.sh12
-rw-r--r--test/integration/targets/conditionals/test_no_warnings.yml18
-rw-r--r--test/integration/targets/conditionals/test_warnings.yml14
-rw-r--r--test/integration/targets/conditionals/vars/main.yml7
5 files changed, 141 insertions, 60 deletions
diff --git a/test/integration/targets/conditionals/play.yml b/test/integration/targets/conditionals/play.yml
index c6bb381527..455818c97c 100644
--- a/test/integration/targets/conditionals/play.yml
+++ b/test/integration/targets/conditionals/play.yml
@@ -6,10 +6,6 @@
vars_files:
- vars/main.yml
tasks:
- - name: set conditional bare vars status
- set_fact:
- bare: "{{lookup('config', 'CONDITIONAL_BARE_VARS')|bool}}"
-
- name: test conditional '=='
shell: echo 'testing'
when: 1 == 1
@@ -164,6 +160,136 @@
- "result.stdout == 'testing'"
- "result.rc == 0"
+ - name: not test bare conditional
+ shell: echo 'testing'
+ when: not test_bare
+ register: result
+
+ - name: assert did not run
+ assert:
+ that:
+ - result is skipped
+
+ - name: empty string is false
+ shell: echo 'testing'
+ when: string_lit_empty
+ register: result
+
+ - name: assert did not run
+ assert:
+ that:
+ - result is skipped
+
+ - name: not empty string is true
+ shell: echo 'testing'
+ when: not string_lit_empty
+ register: result
+
+ - name: assert ran
+ assert:
+ that:
+ - result is not skipped
+
+ - name: literal 0 is false
+ shell: echo 'testing'
+ when: int_lit_0
+ register: result
+
+ - name: assert did not run
+ assert:
+ that:
+ - result is skipped
+
+ - name: not literal 0 is true
+ shell: echo 'testing'
+ when: not int_lit_0
+ register: result
+
+ - name: assert ran
+ assert:
+ that:
+ - result is not skipped
+
+ - name: literal 1 is true
+ shell: echo 'testing'
+ when: int_lit_1
+ register: result
+
+ - name: assert ran
+ assert:
+ that:
+ - result is not skipped
+
+ - name: not literal 1 is false
+ shell: echo 'testing'
+ when: not int_lit_1
+ register: result
+
+ - name: assert did not run
+ assert:
+ that:
+ - result is skipped
+
+ - name: null is false
+ shell: echo 'testing'
+ when: lit_null
+ register: result
+
+ - name: assert did not run
+ assert:
+ that:
+ - result is skipped
+
+ - name: literal string "true" is true
+ shell: echo 'testing'
+ when: string_lit_true
+ register: result
+
+ - name: assert ran
+ assert:
+ that:
+ - result is not skipped
+
+ - name: not literal string "true" is false
+ shell: echo 'testing'
+ when: not string_lit_true
+ register: result
+
+ - name: assert did not run
+ assert:
+ that:
+ - result is skipped
+
+ - name: literal string "false" is true (nonempty string)
+ shell: echo 'testing'
+ when: string_lit_false
+ register: result
+
+ - name: assert ran
+ assert:
+ that:
+ - result is not skipped
+
+ - name: not literal string "false" is false
+ shell: echo 'testing'
+ when: not string_lit_false
+ register: result
+
+ - name: assert did not run
+ assert:
+ that:
+ - result is skipped
+
+ - name: not literal string "true" is false
+ shell: echo 'testing'
+ when: not string_lit_true
+ register: result
+
+ - name: assert did not run
+ assert:
+ that:
+ - result is skipped
+
- name: test conditional using a variable
shell: echo 'testing'
when: test_bare_var == 123
@@ -195,23 +321,13 @@
- debug: var={{item}}
loop:
- - bare
- result
- test_bare_nested_bad
- - name: assert that the bad nested conditional is skipped since 'bare' since 'string' template is resolved to 'false'
+ - name: assert that the bad nested conditional ran (it is a non-empty string, so truthy)
assert:
that:
- - result is skipped
-
- when: bare|bool
-
- - name: assert that the bad nested conditional did run since non bare 'string' is untemplated but 'trueish'
- assert:
- that:
- - result is skipped
- when: not bare|bool
- - result is changed
+ - result is not skipped
- name: test bad conditional based on nested variables with bool filter
shell: echo 'testing'
@@ -223,6 +339,7 @@
that:
- result is skipped
+
#-----------------------------------------------------------------------
# proper booleanification tests (issue #8629)
@@ -382,7 +499,6 @@
- name: Deal with multivar equality
tags: ['leveldiff']
- when: not bare|bool
vars:
toplevel_hash:
hash_var_one: justastring
diff --git a/test/integration/targets/conditionals/runme.sh b/test/integration/targets/conditionals/runme.sh
index 934443a523..4858fbf2a6 100755
--- a/test/integration/targets/conditionals/runme.sh
+++ b/test/integration/targets/conditionals/runme.sh
@@ -2,14 +2,4 @@
set -eux
-ANSIBLE_CONDITIONAL_BARE_VARS=1 ansible-playbook -i ../../inventory play.yml "$@"
-ANSIBLE_CONDITIONAL_BARE_VARS=0 ansible-playbook -i ../../inventory play.yml "$@"
-
-export ANSIBLE_CONDITIONAL_BARE_VARS=1
-export ANSIBLE_DEPRECATION_WARNINGS=True
-
-# No warnings for conditionals that are already type bool
-test "$(ansible-playbook -i ../../inventory test_no_warnings.yml "$@" 2>&1 | grep -c '\[DEPRECATION WARNING\]')" = 0
-
-# Warn for bare vars of other types since they may be interpreted differently when CONDITIONAL_BARE_VARS defaults to False
-test "$(ansible-playbook -i ../../inventory test_warnings.yml "$@" 2>&1 | grep -c '\[DEPRECATION WARNING\]')" = 2
+ansible-playbook -i ../../inventory play.yml "$@"
diff --git a/test/integration/targets/conditionals/test_no_warnings.yml b/test/integration/targets/conditionals/test_no_warnings.yml
deleted file mode 100644
index 932804476b..0000000000
--- a/test/integration/targets/conditionals/test_no_warnings.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-- hosts: testhost
- gather_facts: false
- vars:
- boolean_var: false
- nested:
- bool_var: false
- tasks:
- - name: Run tasks with previous warnings requesting the bool filter on type boolean vars
- block:
- - debug:
- when: boolean_var
- - debug:
- when: nested.bool_var
- - debug:
- when: double_interpolated
- vars:
- double_interpolated: "{{ other }}"
- other: false
diff --git a/test/integration/targets/conditionals/test_warnings.yml b/test/integration/targets/conditionals/test_warnings.yml
deleted file mode 100644
index 4186cd0112..0000000000
--- a/test/integration/targets/conditionals/test_warnings.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-- hosts: testhost
- gather_facts: false
- vars:
- str_boolean_var: 'false'
- tasks:
- - name: Run tasks with warnings for conditionals that will change in behavior depending on CONDITIONAL_BARE_VARS
- block:
- - debug:
- when: str_boolean_var
- - debug:
- when: double_interpolated
- vars:
- double_interpolated: other
- other: false
diff --git a/test/integration/targets/conditionals/vars/main.yml b/test/integration/targets/conditionals/vars/main.yml
index d62214781e..2af6cee2db 100644
--- a/test/integration/targets/conditionals/vars/main.yml
+++ b/test/integration/targets/conditionals/vars/main.yml
@@ -20,3 +20,10 @@ test_bare: true
test_bare_var: 123
test_bare_nested_good: "test_bare_var == 123"
test_bare_nested_bad: "{{test_bare_var}} == 321"
+
+string_lit_true: "true"
+string_lit_false: "false"
+string_lit_empty: ""
+lit_null: null
+int_lit_0: 0
+int_lit_1: 1