summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/meta_tasks
diff options
context:
space:
mode:
Diffstat (limited to 'test/integration/targets/meta_tasks')
-rw-r--r--test/integration/targets/meta_tasks/aliases2
-rw-r--r--test/integration/targets/meta_tasks/inventory.yml9
-rw-r--r--test/integration/targets/meta_tasks/inventory_new.yml8
-rw-r--r--test/integration/targets/meta_tasks/inventory_old.yml8
-rw-r--r--test/integration/targets/meta_tasks/inventory_refresh.yml8
-rw-r--r--test/integration/targets/meta_tasks/refresh.yml38
-rw-r--r--test/integration/targets/meta_tasks/refresh_preserve_dynamic.yml69
-rwxr-xr-xtest/integration/targets/meta_tasks/runme.sh78
-rw-r--r--test/integration/targets/meta_tasks/test_end_batch.yml13
-rw-r--r--test/integration/targets/meta_tasks/test_end_host.yml14
-rw-r--r--test/integration/targets/meta_tasks/test_end_host_all.yml13
-rw-r--r--test/integration/targets/meta_tasks/test_end_host_all_fqcn.yml13
-rw-r--r--test/integration/targets/meta_tasks/test_end_host_fqcn.yml14
-rw-r--r--test/integration/targets/meta_tasks/test_end_play.yml12
-rw-r--r--test/integration/targets/meta_tasks/test_end_play_fqcn.yml12
-rw-r--r--test/integration/targets/meta_tasks/test_end_play_multiple_plays.yml18
-rw-r--r--test/integration/targets/meta_tasks/test_end_play_serial_one.yml13
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'