summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/conditionals/play.yml
diff options
context:
space:
mode:
Diffstat (limited to 'test/integration/targets/conditionals/play.yml')
-rw-r--r--test/integration/targets/conditionals/play.yml551
1 files changed, 551 insertions, 0 deletions
diff --git a/test/integration/targets/conditionals/play.yml b/test/integration/targets/conditionals/play.yml
new file mode 100644
index 00000000..c6bb3815
--- /dev/null
+++ b/test/integration/targets/conditionals/play.yml
@@ -0,0 +1,551 @@
+# (c) 2014, James Cammarata <jcammarata@ansible.com>
+# (c) 2019, Ansible Project
+
+- hosts: testhost
+ gather_facts: false
+ 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
+ register: result
+
+ - name: assert conditional '==' ran
+ assert:
+ that:
+ - result is changed
+ - "result.stdout == 'testing'"
+ - "result.rc == 0"
+
+ - name: test bad conditional '=='
+ shell: echo 'testing'
+ when: 0 == 1
+ register: result
+
+ - name: assert bad conditional '==' did NOT run
+ assert:
+ that:
+ - result is skipped
+
+ - name: test conditional '!='
+ shell: echo 'testing'
+ when: 0 != 1
+ register: result
+
+ - name: assert conditional '!=' ran
+ assert:
+ that:
+ - result is changed
+ - "result.stdout == 'testing'"
+ - "result.rc == 0"
+
+ - name: test bad conditional '!='
+ shell: echo 'testing'
+ when: 1 != 1
+ register: result
+
+ - name: assert bad conditional '!=' did NOT run
+ assert:
+ that:
+ - result is skipped
+
+ - name: test conditional 'in'
+ shell: echo 'testing'
+ when: 1 in [1,2,3]
+ register: result
+
+ - name: assert conditional 'in' ran
+ assert:
+ that:
+ - result is changed
+ - "result.stdout == 'testing'"
+ - "result.rc == 0"
+
+ - name: test bad conditional 'in'
+ shell: echo 'testing'
+ when: 1 in [7,8,9]
+ register: result
+
+ - name: assert bad conditional 'in' did NOT run
+ assert:
+ that:
+ - result is skipped
+
+ - name: test conditional 'not in'
+ shell: echo 'testing'
+ when: 0 not in [1,2,3]
+ register: result
+
+ - name: assert conditional 'not in' ran
+ assert:
+ that:
+ - result is changed
+ - "result.stdout == 'testing'"
+ - "result.rc == 0"
+
+ - name: test bad conditional 'not in'
+ shell: echo 'testing'
+ when: 1 not in [1,2,3]
+ register: result
+
+ - name: assert bad conditional 'not in' did NOT run
+ assert:
+ that:
+ - result is skipped
+
+ - name: test conditional 'is defined'
+ shell: echo 'testing'
+ when: test_bare is defined
+ register: result
+
+ - name: assert conditional 'is defined' ran
+ assert:
+ that:
+ - result is changed
+ - "result.stdout == 'testing'"
+ - "result.rc == 0"
+
+ - name: test bad conditional 'is defined'
+ shell: echo 'testing'
+ when: foo_asdf_xyz is defined
+ register: result
+
+ - name: assert bad conditional 'is defined' did NOT run
+ assert:
+ that:
+ - result is skipped
+
+ - name: test conditional 'is not defined'
+ shell: echo 'testing'
+ when: foo_asdf_xyz is not defined
+ register: result
+
+ - name: assert conditional 'is not defined' ran
+ assert:
+ that:
+ - result is changed
+ - "result.stdout == 'testing'"
+ - "result.rc == 0"
+
+ - name: test bad conditional 'is not defined'
+ shell: echo 'testing'
+ when: test_bare is not defined
+ register: result
+
+ - name: assert bad conditional 'is not defined' did NOT run
+ assert:
+ that:
+ - result is skipped
+
+ - name: test bad conditional 'is undefined'
+ shell: echo 'testing'
+ when: test_bare is undefined
+ register: result
+
+ - name: assert bad conditional 'is undefined' did NOT run
+ assert:
+ that:
+ - result is skipped
+
+ - name: test bare conditional
+ shell: echo 'testing'
+ when: test_bare
+ register: result
+
+ - name: assert bare conditional ran
+ assert:
+ that:
+ - result is changed
+ - "result.stdout == 'testing'"
+ - "result.rc == 0"
+
+ - name: test conditional using a variable
+ shell: echo 'testing'
+ when: test_bare_var == 123
+ register: result
+
+ - name: assert conditional using a variable ran
+ assert:
+ that:
+ - result is changed
+ - "result.stdout == 'testing'"
+ - "result.rc == 0"
+
+ - name: test good conditional based on nested variables
+ shell: echo 'testing'
+ when: test_bare_nested_good
+ register: result
+
+ - name: assert good conditional based on nested var ran
+ assert:
+ that:
+ - result is changed
+ - "result.stdout == 'testing'"
+ - "result.rc == 0"
+
+ - name: test bad conditional based on nested variables
+ shell: echo 'testing'
+ when: test_bare_nested_bad
+ register: result
+
+ - 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'
+ 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
+
+ - name: test bad conditional based on nested variables with bool filter
+ shell: echo 'testing'
+ when: test_bare_nested_bad|bool
+ register: result
+
+ - name: assert that the bad nested conditional did NOT run as bool forces evaluation
+ assert:
+ that:
+ - result is skipped
+
+ #-----------------------------------------------------------------------
+ # proper booleanification tests (issue #8629)
+
+ - name: set fact to string 'false'
+ set_fact: bool_test1=false
+
+ - name: set fact to string 'False'
+ set_fact: bool_test2=False
+
+ - name: set fact to a proper boolean using complex args
+ set_fact:
+ bool_test3: false
+
+ - name: "test boolean value 'false' string using 'when: var'"
+ command: echo 'hi'
+ when: bool_test1
+ register: result
+
+ - name: assert that the task did not run for 'false'
+ assert:
+ that:
+ - result is skipped
+
+ - name: "test boolean value 'false' string using 'when: not var'"
+ command: echo 'hi'
+ when: not bool_test1
+ register: result
+
+ - name: assert that the task DID run for not 'false'
+ assert:
+ that:
+ - result is changed
+
+ - name: "test boolean value of 'False' string using 'when: var'"
+ command: echo 'hi'
+ when: bool_test2
+ register: result
+
+ - name: assert that the task did not run for 'False'
+ assert:
+ that:
+ - result is skipped
+
+ - name: "test boolean value 'False' string using 'when: not var'"
+ command: echo 'hi'
+ when: not bool_test2
+ register: result
+
+ - name: assert that the task DID run for not 'False'
+ assert:
+ that:
+ - result is changed
+
+ - name: "test proper boolean value of complex arg using 'when: var'"
+ command: echo 'hi'
+ when: bool_test3
+ register: result
+
+ - name: assert that the task did not run for proper boolean false
+ assert:
+ that:
+ - result is skipped
+
+ - name: "test proper boolean value of complex arg using 'when: not var'"
+ command: echo 'hi'
+ when: not bool_test3
+ register: result
+
+ - name: assert that the task DID run for not false
+ assert:
+ that:
+ - result is changed
+
+ - set_fact: skipped_bad_attribute=True
+ - block:
+ - name: test a with_items loop using a variable with a missing attribute
+ debug: var=item
+ with_items: "{{cond_bad_attribute.results | default('')}}"
+ register: result
+ - set_fact: skipped_bad_attribute=False
+ - name: assert the task was skipped
+ assert:
+ that:
+ - skipped_bad_attribute
+ when: cond_bad_attribute is defined and 'results' in cond_bad_attribute
+
+ - name: test a with_items loop skipping a single item
+ debug: var=item
+ with_items: "{{cond_list_of_items.results}}"
+ when: item != 'b'
+ register: result
+
+ - debug: var=result
+
+ - name: assert only a single item was skipped
+ assert:
+ that:
+ - result.results|length == 3
+ - result.results[1].skipped
+
+ - name: test complex templated condition
+ debug: msg="it works"
+ when: vars_file_var in things1|union([vars_file_var])
+
+ - name: test dict with invalid key is undefined
+ vars:
+ mydict:
+ a: foo
+ b: bar
+ debug: var=mydict['c']
+ register: result
+ when: mydict['c'] is undefined
+
+ - name: assert the task did not fail
+ assert:
+ that:
+ - result is success
+
+ - name: test dict with invalid key does not run with conditional is defined
+ vars:
+ mydict:
+ a: foo
+ b: bar
+ debug: var=mydict['c']
+ when: mydict['c'] is defined
+ register: result
+
+ - name: assert the task was skipped
+ assert:
+ that:
+ - result is skipped
+
+ - name: test list with invalid element does not run with conditional is defined
+ vars:
+ mylist: []
+ debug: var=mylist[0]
+ when: mylist[0] is defined
+ register: result
+
+ - name: assert the task was skipped
+ assert:
+ that:
+ - result is skipped
+
+ - name: test list with invalid element is undefined
+ vars:
+ mylist: []
+ debug: var=mylist[0]
+ when: mylist[0] is undefined
+ register: result
+
+ - name: assert the task did not fail
+ assert:
+ that:
+ - result is success
+
+
+ - name: Deal with multivar equality
+ tags: ['leveldiff']
+ when: not bare|bool
+ vars:
+ toplevel_hash:
+ hash_var_one: justastring
+ hash_var_two: something.with.dots
+ hash_var_three: something:with:colons
+ hash_var_four: something/with/slashes
+ hash_var_five: something with spaces
+ hash_var_six: yes
+ hash_var_seven: no
+ toplevel_var_one: justastring
+ toplevel_var_two: something.with.dots
+ toplevel_var_three: something:with:colons
+ toplevel_var_four: something/with/slashes
+ toplevel_var_five: something with spaces
+ toplevel_var_six: yes
+ toplevel_var_seven: no
+ block:
+
+ - name: var subkey simple string
+ debug:
+ var: toplevel_hash.hash_var_one
+ register: sub
+ when: toplevel_hash.hash_var_one
+
+ - name: toplevel simple string
+ debug:
+ var: toplevel_var_one
+ when: toplevel_var_one
+ register: top
+ ignore_errors: yes
+
+ - name: ensure top and multi work same
+ assert:
+ that:
+ - top is not skipped
+ - sub is not skipped
+ - top is not failed
+ - sub is not failed
+
+ - name: var subkey string with dots
+ debug:
+ var: toplevel_hash.hash_var_two
+ register: sub
+ when: toplevel_hash.hash_var_two
+
+ - debug:
+ var: toplevel_var_two
+ when: toplevel_var_two
+ register: top
+ ignore_errors: yes
+
+ - name: ensure top and multi work same
+ assert:
+ that:
+ - top is not skipped
+ - sub is not skipped
+ - top is not failed
+ - sub is not failed
+
+ - name: var subkey string with dots
+ debug:
+ var: toplevel_hash.hash_var_three
+ register: sub
+ when: toplevel_hash.hash_var_three
+
+ - debug:
+ var: toplevel_var_three
+ when: toplevel_var_three
+ register: top
+ ignore_errors: yes
+
+ - name: ensure top and multi work same
+ assert:
+ that:
+ - top is not skipped
+ - sub is not skipped
+ - top is not failed
+ - sub is not failed
+
+ - name: var subkey string with colon
+ debug:
+ var: toplevel_hash.hash_var_four
+ register: sub
+ when: toplevel_hash.hash_var_four
+
+ - debug:
+ var: toplevel_var_four
+ when: toplevel_var_four
+ register: top
+ ignore_errors: yes
+
+ - name: ensure top and multi work same
+ assert:
+ that:
+ - top is not skipped
+ - sub is not skipped
+ - top is not failed
+ - sub is not failed
+
+ - name: var subkey string with spaces
+ debug:
+ var: toplevel_hash.hash_var_five
+ register: sub
+ when: toplevel_hash.hash_var_five
+
+ - debug:
+ var: toplevel_var_five
+ when: toplevel_var_five
+ register: top
+ ignore_errors: yes
+
+ - name: ensure top and multi work same
+ assert:
+ that:
+ - top is not skipped
+ - sub is not skipped
+ - top is not failed
+ - sub is not failed
+
+ - name: var subkey with 'yes' value
+ debug:
+ var: toplevel_hash.hash_var_six
+ register: sub
+ when: toplevel_hash.hash_var_six
+
+ - debug:
+ var: toplevel_var_six
+ register: top
+ when: toplevel_var_six
+
+ - name: ensure top and multi work same
+ assert:
+ that:
+ - top is not skipped
+ - sub is not skipped
+
+ - name: var subkey with 'no' value
+ debug:
+ var: toplevel_hash.hash_var_seven
+ register: sub
+ when: toplevel_hash.hash_var_seven
+
+ - debug:
+ var: toplevel_var_seven
+ register: top
+ when: toplevel_var_seven
+
+ - name: ensure top and multi work same
+ assert:
+ that:
+ - top is skipped
+ - sub is skipped
+
+ - name: test that 'comparison expression' item works with_items
+ assert:
+ that:
+ - item
+ with_items:
+ - 1 == 1
+
+ - name: test that 'comparison expression' item works in loop
+ assert:
+ that:
+ - item
+ loop:
+ - 1 == 1