diff options
Diffstat (limited to 'test/integration/targets/meta_tasks')
17 files changed, 342 insertions, 0 deletions
diff --git a/test/integration/targets/meta_tasks/aliases b/test/integration/targets/meta_tasks/aliases new file mode 100644 index 0000000..1d28bdb --- /dev/null +++ b/test/integration/targets/meta_tasks/aliases @@ -0,0 +1,2 @@ +shippable/posix/group5 +context/controller diff --git a/test/integration/targets/meta_tasks/inventory.yml b/test/integration/targets/meta_tasks/inventory.yml new file mode 100644 index 0000000..5fb39e5 --- /dev/null +++ b/test/integration/targets/meta_tasks/inventory.yml @@ -0,0 +1,9 @@ +local: + hosts: + testhost: + host_var_role_name: role3 + testhost2: + host_var_role_name: role2 + vars: + ansible_connection: local + ansible_python_interpreter: "{{ ansible_playbook_python }}" diff --git a/test/integration/targets/meta_tasks/inventory_new.yml b/test/integration/targets/meta_tasks/inventory_new.yml new file mode 100644 index 0000000..6d6dec7 --- /dev/null +++ b/test/integration/targets/meta_tasks/inventory_new.yml @@ -0,0 +1,8 @@ +all: + hosts: + two: + parity: even + three: + parity: odd + four: + parity: even diff --git a/test/integration/targets/meta_tasks/inventory_old.yml b/test/integration/targets/meta_tasks/inventory_old.yml new file mode 100644 index 0000000..42d9bdd --- /dev/null +++ b/test/integration/targets/meta_tasks/inventory_old.yml @@ -0,0 +1,8 @@ +all: + hosts: + one: + parity: odd + two: + parity: even + three: + parity: odd diff --git a/test/integration/targets/meta_tasks/inventory_refresh.yml b/test/integration/targets/meta_tasks/inventory_refresh.yml new file mode 100644 index 0000000..42d9bdd --- /dev/null +++ b/test/integration/targets/meta_tasks/inventory_refresh.yml @@ -0,0 +1,8 @@ +all: + hosts: + one: + parity: odd + two: + parity: even + three: + parity: odd diff --git a/test/integration/targets/meta_tasks/refresh.yml b/test/integration/targets/meta_tasks/refresh.yml new file mode 100644 index 0000000..ac24b7d --- /dev/null +++ b/test/integration/targets/meta_tasks/refresh.yml @@ -0,0 +1,38 @@ +- hosts: all + gather_facts: false + tasks: + - block: + - name: check initial state + assert: + that: + - "'one' in ansible_play_hosts" + - "'two' in ansible_play_hosts" + - "'three' in ansible_play_hosts" + - "'four' not in ansible_play_hosts" + run_once: true + + - name: change symlink + file: src=./inventory_new.yml dest=./inventory_refresh.yml state=link force=yes follow=false + delegate_to: localhost + run_once: true + + - name: refresh the inventory to new source + meta: refresh_inventory + + always: + - name: revert symlink, invenotry was already reread or failed + file: src=./inventory_old.yml dest=./inventory_refresh.yml state=link force=yes follow=false + delegate_to: localhost + run_once: true + +- hosts: all + gather_facts: false + tasks: + - name: check refreshed state + assert: + that: + - "'one' not in ansible_play_hosts" + - "'two' in ansible_play_hosts" + - "'three' in ansible_play_hosts" + - "'four' in ansible_play_hosts" + run_once: true diff --git a/test/integration/targets/meta_tasks/refresh_preserve_dynamic.yml b/test/integration/targets/meta_tasks/refresh_preserve_dynamic.yml new file mode 100644 index 0000000..7766a38 --- /dev/null +++ b/test/integration/targets/meta_tasks/refresh_preserve_dynamic.yml @@ -0,0 +1,69 @@ +- hosts: all + gather_facts: false + tasks: + - name: check initial state + assert: + that: + - "'one' in ansible_play_hosts" + - "'two' in ansible_play_hosts" + - "'three' in ansible_play_hosts" + - "'four' not in ansible_play_hosts" + run_once: true + + - name: add a host + add_host: + name: yolo + parity: null + + - name: group em + group_by: + key: '{{parity}}' + +- hosts: all + gather_facts: false + tasks: + - name: test and ensure we restore symlink + run_once: true + block: + - name: check added host state + assert: + that: + - "'yolo' in ansible_play_hosts" + - "'even' in groups" + - "'odd' in groups" + - "'two' in groups['even']" + - "'three' in groups['odd']" + + - name: change symlink + file: src=./inventory_new.yml dest=./inventory_refresh.yml state=link force=yes follow=false + delegate_to: localhost + + - name: refresh the inventory to new source + meta: refresh_inventory + + always: + - name: revert symlink, invenotry was already reread or failed + file: src=./inventory_old.yml dest=./inventory_refresh.yml state=link force=yes follow=false + delegate_to: localhost + +- hosts: all + gather_facts: false + tasks: + - name: check refreshed state + assert: + that: + - "'one' not in ansible_play_hosts" + - "'two' in ansible_play_hosts" + - "'three' in ansible_play_hosts" + - "'four' in ansible_play_hosts" + run_once: true + + - name: check added host state + assert: + that: + - "'yolo' in ansible_play_hosts" + - "'even' in groups" + - "'odd' in groups" + - "'two' in groups['even']" + - "'three' in groups['odd']" + run_once: true diff --git a/test/integration/targets/meta_tasks/runme.sh b/test/integration/targets/meta_tasks/runme.sh new file mode 100755 index 0000000..f7d8d89 --- /dev/null +++ b/test/integration/targets/meta_tasks/runme.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +set -eux + +# test end_host meta task, with when conditional +for test_strategy in linear free; do + out="$(ansible-playbook test_end_host.yml -i inventory.yml -e test_strategy=$test_strategy -vv "$@")" + + grep -q "META: end_host conditional evaluated to False, continuing execution for testhost" <<< "$out" + grep -q "META: ending play for testhost2" <<< "$out" + grep -q '"skip_reason": "end_host conditional evaluated to False, continuing execution for testhost"' <<< "$out" + grep -q "play not ended for testhost" <<< "$out" + grep -qv "play not ended for testhost2" <<< "$out" + + out="$(ansible-playbook test_end_host_fqcn.yml -i inventory.yml -e test_strategy=$test_strategy -vv "$@")" + + grep -q "META: end_host conditional evaluated to False, continuing execution for testhost" <<< "$out" + grep -q "META: ending play for testhost2" <<< "$out" + grep -q '"skip_reason": "end_host conditional evaluated to False, continuing execution for testhost"' <<< "$out" + grep -q "play not ended for testhost" <<< "$out" + grep -qv "play not ended for testhost2" <<< "$out" +done + +# test end_host meta task, on all hosts +for test_strategy in linear free; do + out="$(ansible-playbook test_end_host_all.yml -i inventory.yml -e test_strategy=$test_strategy -vv "$@")" + + grep -q "META: ending play for testhost" <<< "$out" + grep -q "META: ending play for testhost2" <<< "$out" + grep -qv "play not ended for testhost" <<< "$out" + grep -qv "play not ended for testhost2" <<< "$out" + + out="$(ansible-playbook test_end_host_all_fqcn.yml -i inventory.yml -e test_strategy=$test_strategy -vv "$@")" + + grep -q "META: ending play for testhost" <<< "$out" + grep -q "META: ending play for testhost2" <<< "$out" + grep -qv "play not ended for testhost" <<< "$out" + grep -qv "play not ended for testhost2" <<< "$out" +done + +# test end_play meta task +for test_strategy in linear free; do + out="$(ansible-playbook test_end_play.yml -i inventory.yml -e test_strategy=$test_strategy -vv "$@")" + + grep -q "META: ending play" <<< "$out" + grep -qv 'Failed to end using end_play' <<< "$out" + + out="$(ansible-playbook test_end_play_fqcn.yml -i inventory.yml -e test_strategy=$test_strategy -vv "$@")" + + grep -q "META: ending play" <<< "$out" + grep -qv 'Failed to end using end_play' <<< "$out" + + out="$(ansible-playbook test_end_play_serial_one.yml -i inventory.yml -e test_strategy=$test_strategy -vv "$@")" + + [ "$(grep -c "Testing end_play on host" <<< "$out" )" -eq 1 ] + grep -q "META: ending play" <<< "$out" + grep -qv 'Failed to end using end_play' <<< "$out" + + out="$(ansible-playbook test_end_play_multiple_plays.yml -i inventory.yml -e test_strategy=$test_strategy -vv "$@")" + + grep -q "META: ending play" <<< "$out" + grep -q "Play 1" <<< "$out" + grep -q "Play 2" <<< "$out" + grep -qv 'Failed to end using end_play' <<< "$out" +done + +# test end_batch meta task +for test_strategy in linear free; do + out="$(ansible-playbook test_end_batch.yml -i inventory.yml -e test_strategy=$test_strategy -vv "$@")" + + [ "$(grep -c "Using end_batch" <<< "$out" )" -eq 2 ] + [ "$(grep -c "META: ending batch" <<< "$out" )" -eq 2 ] + grep -qv 'Failed to end_batch' <<< "$out" +done + +# test refresh +ansible-playbook -i inventory_refresh.yml refresh.yml "$@" +ansible-playbook -i inventory_refresh.yml refresh_preserve_dynamic.yml "$@" diff --git a/test/integration/targets/meta_tasks/test_end_batch.yml b/test/integration/targets/meta_tasks/test_end_batch.yml new file mode 100644 index 0000000..4af020a --- /dev/null +++ b/test/integration/targets/meta_tasks/test_end_batch.yml @@ -0,0 +1,13 @@ +- name: Testing end_batch with strategy {{ test_strategy | default('linear') }} + hosts: testhost:testhost2 + gather_facts: no + serial: 1 + strategy: "{{ test_strategy | default('linear') }}" + tasks: + - debug: + msg: "Using end_batch, current host: {{ inventory_hostname }}, current batch: {{ ansible_play_batch }}" + + - meta: end_batch + + - fail: + msg: "Failed to end_batch, current host: {{ inventory_hostname }}, current batch: {{ ansible_play_batch }}" diff --git a/test/integration/targets/meta_tasks/test_end_host.yml b/test/integration/targets/meta_tasks/test_end_host.yml new file mode 100644 index 0000000..a8bb056 --- /dev/null +++ b/test/integration/targets/meta_tasks/test_end_host.yml @@ -0,0 +1,14 @@ +- name: "Testing end_host with strategy={{ test_strategy | default('linear') }}" + hosts: + - testhost + - testhost2 + gather_facts: no + strategy: "{{ test_strategy | default('linear') }}" + tasks: + - debug: + + - meta: end_host + when: "host_var_role_name == 'role2'" # end play for testhost2, see inventory + + - debug: + msg: "play not ended for {{ inventory_hostname }}" diff --git a/test/integration/targets/meta_tasks/test_end_host_all.yml b/test/integration/targets/meta_tasks/test_end_host_all.yml new file mode 100644 index 0000000..dab5e88 --- /dev/null +++ b/test/integration/targets/meta_tasks/test_end_host_all.yml @@ -0,0 +1,13 @@ +- name: "Testing end_host all hosts with strategy={{ test_strategy | default('linear') }}" + hosts: + - testhost + - testhost2 + gather_facts: no + strategy: "{{ test_strategy | default('linear') }}" + tasks: + - debug: + + - meta: end_host + + - debug: + msg: "play not ended {{ inventory_hostname }}" diff --git a/test/integration/targets/meta_tasks/test_end_host_all_fqcn.yml b/test/integration/targets/meta_tasks/test_end_host_all_fqcn.yml new file mode 100644 index 0000000..78b5a2e --- /dev/null +++ b/test/integration/targets/meta_tasks/test_end_host_all_fqcn.yml @@ -0,0 +1,13 @@ +- name: "Testing end_host all hosts with strategy={{ test_strategy | default('linear') }}" + hosts: + - testhost + - testhost2 + gather_facts: no + strategy: "{{ test_strategy | default('linear') }}" + tasks: + - debug: + + - ansible.builtin.meta: end_host + + - debug: + msg: "play not ended {{ inventory_hostname }}" diff --git a/test/integration/targets/meta_tasks/test_end_host_fqcn.yml b/test/integration/targets/meta_tasks/test_end_host_fqcn.yml new file mode 100644 index 0000000..bdb38b5 --- /dev/null +++ b/test/integration/targets/meta_tasks/test_end_host_fqcn.yml @@ -0,0 +1,14 @@ +- name: "Testing end_host with strategy={{ test_strategy | default('linear') }}" + hosts: + - testhost + - testhost2 + gather_facts: no + strategy: "{{ test_strategy | default('linear') }}" + tasks: + - debug: + + - ansible.builtin.meta: end_host + when: "host_var_role_name == 'role2'" # end play for testhost2, see inventory + + - debug: + msg: "play not ended for {{ inventory_hostname }}" diff --git a/test/integration/targets/meta_tasks/test_end_play.yml b/test/integration/targets/meta_tasks/test_end_play.yml new file mode 100644 index 0000000..29489dc --- /dev/null +++ b/test/integration/targets/meta_tasks/test_end_play.yml @@ -0,0 +1,12 @@ +- name: Testing end_play with strategy {{ test_strategy | default('linear') }} + hosts: testhost:testhost2 + gather_facts: no + strategy: "{{ test_strategy | default('linear') }}" + tasks: + - debug: + msg: "Testing end_play on host {{ inventory_hostname }}" + + - meta: end_play + + - fail: + msg: 'Failed to end using end_play' diff --git a/test/integration/targets/meta_tasks/test_end_play_fqcn.yml b/test/integration/targets/meta_tasks/test_end_play_fqcn.yml new file mode 100644 index 0000000..2ae67fb --- /dev/null +++ b/test/integration/targets/meta_tasks/test_end_play_fqcn.yml @@ -0,0 +1,12 @@ +- name: Testing end_play with strategy {{ test_strategy | default('linear') }} + hosts: testhost:testhost2 + gather_facts: no + strategy: "{{ test_strategy | default('linear') }}" + tasks: + - debug: + msg: "Testing end_play on host {{ inventory_hostname }}" + + - ansible.builtin.meta: end_play + + - fail: + msg: 'Failed to end using end_play' diff --git a/test/integration/targets/meta_tasks/test_end_play_multiple_plays.yml b/test/integration/targets/meta_tasks/test_end_play_multiple_plays.yml new file mode 100644 index 0000000..2cc8d1e --- /dev/null +++ b/test/integration/targets/meta_tasks/test_end_play_multiple_plays.yml @@ -0,0 +1,18 @@ +- name: Testing end_play with multiple plays with strategy {{ test_strategy | default('linear') }} + hosts: testhost + gather_facts: no + strategy: "{{ test_strategy | default('linear') }}" + tasks: + - debug: + msg: "Play 1" + - meta: end_play + - fail: + msg: 'Failed to end using end_play' + +- name: Testing end_play with multiple plays with strategy {{ test_strategy | default('linear') }} + hosts: testhost + gather_facts: no + strategy: "{{ test_strategy | default('linear') }}" + tasks: + - debug: + msg: "Play 2" diff --git a/test/integration/targets/meta_tasks/test_end_play_serial_one.yml b/test/integration/targets/meta_tasks/test_end_play_serial_one.yml new file mode 100644 index 0000000..f838d4a --- /dev/null +++ b/test/integration/targets/meta_tasks/test_end_play_serial_one.yml @@ -0,0 +1,13 @@ +- name: Testing end_play with serial 1 and strategy {{ test_strategy | default('linear') }} + hosts: testhost:testhost2 + gather_facts: no + serial: 1 + strategy: "{{ test_strategy | default('linear') }}" + tasks: + - debug: + msg: "Testing end_play on host {{ inventory_hostname }}" + + - meta: end_play + + - fail: + msg: 'Failed to end using end_play' |