diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 16:04:21 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 16:04:21 +0000 |
commit | 8a754e0858d922e955e71b253c139e071ecec432 (patch) | |
tree | 527d16e74bfd1840c85efd675fdecad056c54107 /test/integration/targets/include_import | |
parent | Initial commit. (diff) | |
download | ansible-core-c3bc180c49b5e6182a7c66bb8b645fe013614adc.tar.xz ansible-core-c3bc180c49b5e6182a7c66bb8b645fe013614adc.zip |
Adding upstream version 2.14.3.upstream/2.14.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
175 files changed, 1699 insertions, 0 deletions
diff --git a/test/integration/targets/include_import/aliases b/test/integration/targets/include_import/aliases new file mode 100644 index 0000000..498fedd --- /dev/null +++ b/test/integration/targets/include_import/aliases @@ -0,0 +1,2 @@ +shippable/posix/group4 +context/controller diff --git a/test/integration/targets/include_import/apply/import_apply.yml b/test/integration/targets/include_import/apply/import_apply.yml new file mode 100644 index 0000000..27a4086 --- /dev/null +++ b/test/integration/targets/include_import/apply/import_apply.yml @@ -0,0 +1,31 @@ +--- +- hosts: testhost + gather_facts: false + tasks: + - import_tasks: + file: import_tasks.yml + apply: + tags: + - foo + tags: + - always + + - assert: + that: + - include_tasks_result is defined + tags: + - always + + - import_role: + name: import_role + apply: + tags: + - foo + tags: + - always + + - assert: + that: + - include_role_result is defined + tags: + - always diff --git a/test/integration/targets/include_import/apply/include_apply.yml b/test/integration/targets/include_import/apply/include_apply.yml new file mode 100644 index 0000000..32c6e5e --- /dev/null +++ b/test/integration/targets/include_import/apply/include_apply.yml @@ -0,0 +1,50 @@ +--- +- hosts: testhost + gather_facts: false + tasks: + - include_tasks: + file: include_tasks.yml + apply: + tags: + - foo + tags: + - always + + - assert: + that: + - include_tasks_result is defined + tags: + - always + + - include_role: + name: include_role + apply: + tags: + - foo + tags: + - always + + - assert: + that: + - include_role_result is defined + tags: + - always + + - include_role: + name: include_role2 + apply: + tags: + - foo + tags: + - not_specified_on_purpose + + - assert: + that: + - include_role2_result is undefined + tags: + - always + + - include_role: + name: include_role + apply: + delegate_to: testhost2 diff --git a/test/integration/targets/include_import/apply/include_apply_65710.yml b/test/integration/targets/include_import/apply/include_apply_65710.yml new file mode 100644 index 0000000..457aab8 --- /dev/null +++ b/test/integration/targets/include_import/apply/include_apply_65710.yml @@ -0,0 +1,11 @@ +- hosts: localhost + gather_facts: false + tasks: + - include_tasks: + file: include_tasks.yml + apply: + tags: always + + - assert: + that: + - include_tasks_result is defined diff --git a/test/integration/targets/include_import/apply/include_tasks.yml b/test/integration/targets/include_import/apply/include_tasks.yml new file mode 100644 index 0000000..be511d1 --- /dev/null +++ b/test/integration/targets/include_import/apply/include_tasks.yml @@ -0,0 +1,2 @@ +- set_fact: + include_tasks_result: true diff --git a/test/integration/targets/include_import/apply/roles/include_role/tasks/main.yml b/test/integration/targets/include_import/apply/roles/include_role/tasks/main.yml new file mode 100644 index 0000000..7f86b26 --- /dev/null +++ b/test/integration/targets/include_import/apply/roles/include_role/tasks/main.yml @@ -0,0 +1,2 @@ +- set_fact: + include_role_result: true diff --git a/test/integration/targets/include_import/apply/roles/include_role2/tasks/main.yml b/test/integration/targets/include_import/apply/roles/include_role2/tasks/main.yml new file mode 100644 index 0000000..028c30d --- /dev/null +++ b/test/integration/targets/include_import/apply/roles/include_role2/tasks/main.yml @@ -0,0 +1,2 @@ +- set_fact: + include_role2_result: true diff --git a/test/integration/targets/include_import/empty_group_warning/playbook.yml b/test/integration/targets/include_import/empty_group_warning/playbook.yml new file mode 100644 index 0000000..6da5b7c --- /dev/null +++ b/test/integration/targets/include_import/empty_group_warning/playbook.yml @@ -0,0 +1,13 @@ +--- +- hosts: localhost + gather_facts: false + tasks: + - name: Group + group_by: + key: test_{{ inventory_hostname }} + +- hosts: test_localhost + gather_facts: false + tasks: + - name: Print + import_tasks: tasks.yml diff --git a/test/integration/targets/include_import/empty_group_warning/tasks.yml b/test/integration/targets/include_import/empty_group_warning/tasks.yml new file mode 100644 index 0000000..2fbad77 --- /dev/null +++ b/test/integration/targets/include_import/empty_group_warning/tasks.yml @@ -0,0 +1,3 @@ +- name: test + debug: + msg: hello diff --git a/test/integration/targets/include_import/grandchild/block_include_tasks.yml b/test/integration/targets/include_import/grandchild/block_include_tasks.yml new file mode 100644 index 0000000..f8addcf --- /dev/null +++ b/test/integration/targets/include_import/grandchild/block_include_tasks.yml @@ -0,0 +1,2 @@ +- command: "true" + register: block_include_result diff --git a/test/integration/targets/include_import/grandchild/import.yml b/test/integration/targets/include_import/grandchild/import.yml new file mode 100644 index 0000000..ef6990e --- /dev/null +++ b/test/integration/targets/include_import/grandchild/import.yml @@ -0,0 +1 @@ +- include_tasks: include_level_1.yml diff --git a/test/integration/targets/include_import/grandchild/import_include_include_tasks.yml b/test/integration/targets/include_import/grandchild/import_include_include_tasks.yml new file mode 100644 index 0000000..dae3a24 --- /dev/null +++ b/test/integration/targets/include_import/grandchild/import_include_include_tasks.yml @@ -0,0 +1,2 @@ +- command: "true" + register: import_include_include_result diff --git a/test/integration/targets/include_import/grandchild/include_level_1.yml b/test/integration/targets/include_import/grandchild/include_level_1.yml new file mode 100644 index 0000000..e323511 --- /dev/null +++ b/test/integration/targets/include_import/grandchild/include_level_1.yml @@ -0,0 +1 @@ +- include_tasks: import_include_include_tasks.yml diff --git a/test/integration/targets/include_import/handler_addressing/playbook.yml b/test/integration/targets/include_import/handler_addressing/playbook.yml new file mode 100644 index 0000000..7515dc9 --- /dev/null +++ b/test/integration/targets/include_import/handler_addressing/playbook.yml @@ -0,0 +1,11 @@ +- hosts: localhost + gather_facts: false + tasks: + - import_role: + name: include_handler_test + +- hosts: localhost + gather_facts: false + tasks: + - import_role: + name: import_handler_test diff --git a/test/integration/targets/include_import/handler_addressing/roles/import_handler_test/handlers/main.yml b/test/integration/targets/include_import/handler_addressing/roles/import_handler_test/handlers/main.yml new file mode 100644 index 0000000..95524ed --- /dev/null +++ b/test/integration/targets/include_import/handler_addressing/roles/import_handler_test/handlers/main.yml @@ -0,0 +1,2 @@ +- name: do_import + import_tasks: tasks/handlers.yml diff --git a/test/integration/targets/include_import/handler_addressing/roles/import_handler_test/tasks/handlers.yml b/test/integration/targets/include_import/handler_addressing/roles/import_handler_test/tasks/handlers.yml new file mode 100644 index 0000000..eeb49ff --- /dev/null +++ b/test/integration/targets/include_import/handler_addressing/roles/import_handler_test/tasks/handlers.yml @@ -0,0 +1,2 @@ +- debug: + msg: import handler task diff --git a/test/integration/targets/include_import/handler_addressing/roles/import_handler_test/tasks/main.yml b/test/integration/targets/include_import/handler_addressing/roles/import_handler_test/tasks/main.yml new file mode 100644 index 0000000..b0312cc --- /dev/null +++ b/test/integration/targets/include_import/handler_addressing/roles/import_handler_test/tasks/main.yml @@ -0,0 +1,3 @@ +- command: "true" + notify: + - do_import diff --git a/test/integration/targets/include_import/handler_addressing/roles/include_handler_test/handlers/main.yml b/test/integration/targets/include_import/handler_addressing/roles/include_handler_test/handlers/main.yml new file mode 100644 index 0000000..7f24b9d --- /dev/null +++ b/test/integration/targets/include_import/handler_addressing/roles/include_handler_test/handlers/main.yml @@ -0,0 +1,2 @@ +- name: do_include + include_tasks: tasks/handlers.yml diff --git a/test/integration/targets/include_import/handler_addressing/roles/include_handler_test/tasks/handlers.yml b/test/integration/targets/include_import/handler_addressing/roles/include_handler_test/tasks/handlers.yml new file mode 100644 index 0000000..2bf07f2 --- /dev/null +++ b/test/integration/targets/include_import/handler_addressing/roles/include_handler_test/tasks/handlers.yml @@ -0,0 +1,2 @@ +- debug: + msg: include handler task diff --git a/test/integration/targets/include_import/handler_addressing/roles/include_handler_test/tasks/main.yml b/test/integration/targets/include_import/handler_addressing/roles/include_handler_test/tasks/main.yml new file mode 100644 index 0000000..c29a787 --- /dev/null +++ b/test/integration/targets/include_import/handler_addressing/roles/include_handler_test/tasks/main.yml @@ -0,0 +1,3 @@ +- command: "true" + notify: + - do_include diff --git a/test/integration/targets/include_import/include_role_omit/playbook.yml b/test/integration/targets/include_import/include_role_omit/playbook.yml new file mode 100644 index 0000000..a036906 --- /dev/null +++ b/test/integration/targets/include_import/include_role_omit/playbook.yml @@ -0,0 +1,12 @@ +- hosts: localhost + gather_facts: false + vars: + include_role_omit: false + tasks: + - include_role: + name: foo + tasks_from: '{{ omit }}' + + - assert: + that: + - include_role_omit is sameas(true) diff --git a/test/integration/targets/include_import/include_role_omit/roles/foo/tasks/main.yml b/test/integration/targets/include_import/include_role_omit/roles/foo/tasks/main.yml new file mode 100644 index 0000000..e27ca5b --- /dev/null +++ b/test/integration/targets/include_import/include_role_omit/roles/foo/tasks/main.yml @@ -0,0 +1,2 @@ +- set_fact: + include_role_omit: true diff --git a/test/integration/targets/include_import/inventory b/test/integration/targets/include_import/inventory new file mode 100644 index 0000000..3ae8d9c --- /dev/null +++ b/test/integration/targets/include_import/inventory @@ -0,0 +1,6 @@ +[local] +testhost ansible_connection=local host_var_role_name=role3 +testhost2 ansible_connection=local host_var_role_name=role2 + +[local:vars] +ansible_python_interpreter="{{ ansible_playbook_python }}" diff --git a/test/integration/targets/include_import/issue73657.yml b/test/integration/targets/include_import/issue73657.yml new file mode 100644 index 0000000..b692ccb --- /dev/null +++ b/test/integration/targets/include_import/issue73657.yml @@ -0,0 +1,8 @@ +- hosts: localhost + gather_facts: no + tasks: + - block: + - include_tasks: issue73657_tasks.yml + rescue: + - debug: + msg: SHOULD_NOT_EXECUTE diff --git a/test/integration/targets/include_import/issue73657_tasks.yml b/test/integration/targets/include_import/issue73657_tasks.yml new file mode 100644 index 0000000..7247d76 --- /dev/null +++ b/test/integration/targets/include_import/issue73657_tasks.yml @@ -0,0 +1,2 @@ +- wrong.wrong.wrong: + parser: error diff --git a/test/integration/targets/include_import/nestedtasks/nested/nested.yml b/test/integration/targets/include_import/nestedtasks/nested/nested.yml new file mode 100644 index 0000000..95fe266 --- /dev/null +++ b/test/integration/targets/include_import/nestedtasks/nested/nested.yml @@ -0,0 +1,2 @@ +--- +- include_role: {name: nested_include_task} diff --git a/test/integration/targets/include_import/parent_templating/playbook.yml b/test/integration/targets/include_import/parent_templating/playbook.yml new file mode 100644 index 0000000..b733020 --- /dev/null +++ b/test/integration/targets/include_import/parent_templating/playbook.yml @@ -0,0 +1,11 @@ +# https://github.com/ansible/ansible/issues/49969 +- hosts: localhost + gather_facts: false + tasks: + - include_role: + name: test + public: true + + - assert: + that: + - included_other is defined diff --git a/test/integration/targets/include_import/parent_templating/roles/test/tasks/localhost.yml b/test/integration/targets/include_import/parent_templating/roles/test/tasks/localhost.yml new file mode 100644 index 0000000..e5b281e --- /dev/null +++ b/test/integration/targets/include_import/parent_templating/roles/test/tasks/localhost.yml @@ -0,0 +1 @@ +- include_tasks: other.yml diff --git a/test/integration/targets/include_import/parent_templating/roles/test/tasks/main.yml b/test/integration/targets/include_import/parent_templating/roles/test/tasks/main.yml new file mode 100644 index 0000000..16fba69 --- /dev/null +++ b/test/integration/targets/include_import/parent_templating/roles/test/tasks/main.yml @@ -0,0 +1 @@ +- include_tasks: "{{ lookup('first_found', inventory_hostname ~ '.yml') }}" diff --git a/test/integration/targets/include_import/parent_templating/roles/test/tasks/other.yml b/test/integration/targets/include_import/parent_templating/roles/test/tasks/other.yml new file mode 100644 index 0000000..c3bae1a --- /dev/null +++ b/test/integration/targets/include_import/parent_templating/roles/test/tasks/other.yml @@ -0,0 +1,2 @@ +- set_fact: + included_other: true diff --git a/test/integration/targets/include_import/playbook/group_vars/all.yml b/test/integration/targets/include_import/playbook/group_vars/all.yml new file mode 100644 index 0000000..9acd8c6 --- /dev/null +++ b/test/integration/targets/include_import/playbook/group_vars/all.yml @@ -0,0 +1 @@ +group_var1: set in group_vars/all.yml diff --git a/test/integration/targets/include_import/playbook/playbook1.yml b/test/integration/targets/include_import/playbook/playbook1.yml new file mode 100644 index 0000000..55c66d8 --- /dev/null +++ b/test/integration/targets/include_import/playbook/playbook1.yml @@ -0,0 +1,9 @@ +- name: Playbook 1 + hosts: testhost2 + + tasks: + - name: Set fact in playbook 1 + set_fact: + canary_var1: playbook1 imported + tags: + - canary1 diff --git a/test/integration/targets/include_import/playbook/playbook2.yml b/test/integration/targets/include_import/playbook/playbook2.yml new file mode 100644 index 0000000..c986165 --- /dev/null +++ b/test/integration/targets/include_import/playbook/playbook2.yml @@ -0,0 +1,9 @@ +- name: Playbook 2 + hosts: testhost2 + + tasks: + - name: Set fact in playbook 2 + set_fact: + canary_var2: playbook2 imported + tags: + - canary2 diff --git a/test/integration/targets/include_import/playbook/playbook3.yml b/test/integration/targets/include_import/playbook/playbook3.yml new file mode 100644 index 0000000..b62b96c --- /dev/null +++ b/test/integration/targets/include_import/playbook/playbook3.yml @@ -0,0 +1,10 @@ +- name: Playbook 3 + hosts: testhost2 + + tasks: + - name: Set fact in playbook 3 + set_fact: + canary_var3: playbook3 imported + include_next_playbook: yes + tags: + - canary3 diff --git a/test/integration/targets/include_import/playbook/playbook4.yml b/test/integration/targets/include_import/playbook/playbook4.yml new file mode 100644 index 0000000..330612a --- /dev/null +++ b/test/integration/targets/include_import/playbook/playbook4.yml @@ -0,0 +1,9 @@ +- name: Playbook 4 + hosts: testhost2 + + tasks: + - name: Set fact in playbook 4 + set_fact: + canary_var4: playbook4 imported + tags: + - canary4 diff --git a/test/integration/targets/include_import/playbook/playbook_needing_vars.yml b/test/integration/targets/include_import/playbook/playbook_needing_vars.yml new file mode 100644 index 0000000..6454502 --- /dev/null +++ b/test/integration/targets/include_import/playbook/playbook_needing_vars.yml @@ -0,0 +1,6 @@ +--- +- hosts: testhost + gather_facts: no + tasks: + - import_role: + name: "{{ import_playbook_role_name }}" diff --git a/test/integration/targets/include_import/playbook/roles/import_playbook_role/tasks/main.yml b/test/integration/targets/include_import/playbook/roles/import_playbook_role/tasks/main.yml new file mode 100644 index 0000000..7755439 --- /dev/null +++ b/test/integration/targets/include_import/playbook/roles/import_playbook_role/tasks/main.yml @@ -0,0 +1,2 @@ +- debug: + msg: in import_playbook_role diff --git a/test/integration/targets/include_import/playbook/sub_playbook/library/helloworld.py b/test/integration/targets/include_import/playbook/sub_playbook/library/helloworld.py new file mode 100644 index 0000000..0ebe690 --- /dev/null +++ b/test/integration/targets/include_import/playbook/sub_playbook/library/helloworld.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see <http://www.gnu.org/licenses/>. + +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +from ansible.module_utils.basic import AnsibleModule + + +def main(): + module = AnsibleModule(argument_spec={}) + + module.exit_json(msg='Hello, World!') + + +if __name__ == '__main__': + main() diff --git a/test/integration/targets/include_import/playbook/sub_playbook/sub_playbook.yml b/test/integration/targets/include_import/playbook/sub_playbook/sub_playbook.yml new file mode 100644 index 0000000..4399d93 --- /dev/null +++ b/test/integration/targets/include_import/playbook/sub_playbook/sub_playbook.yml @@ -0,0 +1,4 @@ +- hosts: localhost + gather_facts: false + tasks: + - helloworld: diff --git a/test/integration/targets/include_import/playbook/test_import_playbook.yml b/test/integration/targets/include_import/playbook/test_import_playbook.yml new file mode 100644 index 0000000..4fcdb10 --- /dev/null +++ b/test/integration/targets/include_import/playbook/test_import_playbook.yml @@ -0,0 +1,22 @@ +# Test and validate playbook import +- import_playbook: playbook1.yml +- import_playbook: validate1.yml + +# Test and validate conditional import +- import_playbook: playbook2.yml + when: no + +- import_playbook: validate2.yml + +- import_playbook: playbook3.yml +- import_playbook: playbook4.yml + when: include_next_playbook + +- import_playbook: validate34.yml + +- import_playbook: playbook_needing_vars.yml + vars: + import_playbook_role_name: import_playbook_role + +# https://github.com/ansible/ansible/issues/59548 +- import_playbook: sub_playbook/sub_playbook.yml diff --git a/test/integration/targets/include_import/playbook/test_import_playbook_tags.yml b/test/integration/targets/include_import/playbook/test_import_playbook_tags.yml new file mode 100644 index 0000000..46136f6 --- /dev/null +++ b/test/integration/targets/include_import/playbook/test_import_playbook_tags.yml @@ -0,0 +1,10 @@ +- import_playbook: playbook1.yml # Test tag in tasks in included play +- import_playbook: playbook2.yml # Test tag added to import_playbook + tags: + - canary22 + +- import_playbook: playbook3.yml # Test skipping tags added to import_playbook + tags: + - skipme + +- import_playbook: validate_tags.yml # Validate diff --git a/test/integration/targets/include_import/playbook/test_templated_filenames.yml b/test/integration/targets/include_import/playbook/test_templated_filenames.yml new file mode 100644 index 0000000..2f78ab0 --- /dev/null +++ b/test/integration/targets/include_import/playbook/test_templated_filenames.yml @@ -0,0 +1,47 @@ +- name: test templating import_playbook with extra vars + import_playbook: "{{ pb }}" + +- name: test templating import_playbook with vars + import_playbook: "{{ test_var }}" + vars: + test_var: validate_templated_playbook.yml + +- name: test templating import_tasks + hosts: localhost + gather_facts: no + vars: + play_var: validate_templated_tasks.yml + tasks: + - name: test templating import_tasks with play vars + import_tasks: "{{ play_var }}" + + - name: test templating import_tasks with task vars + import_tasks: "{{ task_var }}" + vars: + task_var: validate_templated_tasks.yml + + - name: test templating import_tasks with extra vars + import_tasks: "{{ tasks }}" + +- name: test templating import_role from_files + hosts: localhost + gather_facts: no + vars: + play_var: templated.yml + tasks: + - name: test templating import_role tasks_from with play vars + import_role: + name: role1 + tasks_from: "{{ play_var }}" + + - name: test templating import_role tasks_from with task vars + import_role: + name: role1 + tasks_from: "{{ task_var }}" + vars: + task_var: templated.yml + + - name: test templating import_role tasks_from with extra vars + import_role: + name: role1 + tasks_from: "{{ tasks_from }}" diff --git a/test/integration/targets/include_import/playbook/validate1.yml b/test/integration/targets/include_import/playbook/validate1.yml new file mode 100644 index 0000000..0018344 --- /dev/null +++ b/test/integration/targets/include_import/playbook/validate1.yml @@ -0,0 +1,10 @@ +- hosts: testhost2 + + tasks: + - name: Assert that variable was set in playbook1.yml + assert: + that: + - canary_var1 == 'playbook1 imported' + tags: + - validate + - validate1 diff --git a/test/integration/targets/include_import/playbook/validate2.yml b/test/integration/targets/include_import/playbook/validate2.yml new file mode 100644 index 0000000..f22bcb6 --- /dev/null +++ b/test/integration/targets/include_import/playbook/validate2.yml @@ -0,0 +1,10 @@ +- hosts: testhost2 + + tasks: + - name: Assert that playbook2.yml was skipeed + assert: + that: + - canary_var2 is not defined + tags: + - validate + - validate2 diff --git a/test/integration/targets/include_import/playbook/validate34.yml b/test/integration/targets/include_import/playbook/validate34.yml new file mode 100644 index 0000000..fd53a30 --- /dev/null +++ b/test/integration/targets/include_import/playbook/validate34.yml @@ -0,0 +1,11 @@ +- hosts: testhost2 + + tasks: + - name: Assert that playbook3.yml and playbook4.yml were imported + assert: + that: + - canary_var3 == 'playbook3 imported' + - canary_var4 == 'playbook4 imported' + tags: + - validate + - validate34 diff --git a/test/integration/targets/include_import/playbook/validate_tags.yml b/test/integration/targets/include_import/playbook/validate_tags.yml new file mode 100644 index 0000000..acdcb1f --- /dev/null +++ b/test/integration/targets/include_import/playbook/validate_tags.yml @@ -0,0 +1,11 @@ +- hosts: testhost2 + + tasks: + - name: Assert that only tasks with tags were run + assert: + that: + - canary_var1 == 'playbook1 imported' + - canary_var2 == 'playbook2 imported' + - canary_var3 is not defined + tags: + - validate diff --git a/test/integration/targets/include_import/playbook/validate_templated_playbook.yml b/test/integration/targets/include_import/playbook/validate_templated_playbook.yml new file mode 100644 index 0000000..631ee9b --- /dev/null +++ b/test/integration/targets/include_import/playbook/validate_templated_playbook.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + gather_facts: no + tasks: + - debug: msg="In imported playbook" diff --git a/test/integration/targets/include_import/playbook/validate_templated_tasks.yml b/test/integration/targets/include_import/playbook/validate_templated_tasks.yml new file mode 100644 index 0000000..16d682d --- /dev/null +++ b/test/integration/targets/include_import/playbook/validate_templated_tasks.yml @@ -0,0 +1 @@ +- debug: msg="In imported tasks" diff --git a/test/integration/targets/include_import/public_exposure/no_bleeding.yml b/test/integration/targets/include_import/public_exposure/no_bleeding.yml new file mode 100644 index 0000000..b9db713 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/no_bleeding.yml @@ -0,0 +1,25 @@ +--- +- hosts: testhost + gather_facts: false + tasks: + - name: Static imports should expose vars at parse time, not at execution time + assert: + that: + - static_defaults_var == 'static_defaults' + - static_vars_var == 'static_vars' + - import_role: + name: static + - assert: + that: + - static_tasks_var == 'static_tasks' + - static_defaults_var == 'static_defaults' + - static_vars_var == 'static_vars' + +- hosts: testhost + gather_facts: false + tasks: + - name: Ensure vars from import_roles do not bleed between plays + assert: + that: + - static_defaults_var is undefined + - static_vars_var is undefined diff --git a/test/integration/targets/include_import/public_exposure/no_overwrite_roles.yml b/test/integration/targets/include_import/public_exposure/no_overwrite_roles.yml new file mode 100644 index 0000000..6a1d9bf --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/no_overwrite_roles.yml @@ -0,0 +1,4 @@ +- hosts: localhost + gather_facts: false + roles: + - call_import diff --git a/test/integration/targets/include_import/public_exposure/playbook.yml b/test/integration/targets/include_import/public_exposure/playbook.yml new file mode 100644 index 0000000..11735e7 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/playbook.yml @@ -0,0 +1,56 @@ +--- +- hosts: testhost + gather_facts: false + roles: + - regular + tasks: + - debug: + msg: start tasks + + - name: Static imports should expose vars at parse time, not at execution time + assert: + that: + - static_defaults_var == 'static_defaults' + - static_vars_var == 'static_vars' + - import_role: + name: static + - assert: + that: + - static_tasks_var == 'static_tasks' + - static_defaults_var == 'static_defaults' + - static_vars_var == 'static_vars' + + - include_role: + name: dynamic_private + - assert: + that: + - private_tasks_var == 'private_tasks' + - private_defaults_var is undefined + - private_vars_var is undefined + + - name: Dynamic include should not expose vars until execution time + assert: + that: + - dynamic_tasks_var is undefined + - dynamic_defaults_var is undefined + - dynamic_vars_var is undefined + - include_role: + name: dynamic + public: true + - assert: + that: + - dynamic_tasks_var == 'dynamic_tasks' + - dynamic_defaults_var == 'dynamic_defaults' + - dynamic_vars_var == 'dynamic_vars' + + - include_role: + name: from + public: true + tasks_from: from.yml + vars_from: from.yml + defaults_from: from.yml + - assert: + that: + - from_tasks_var == 'from_tasks' + - from_defaults_var == 'from_defaults' + - from_vars_var == 'from_vars' diff --git a/test/integration/targets/include_import/public_exposure/roles/call_import/tasks/main.yml b/test/integration/targets/include_import/public_exposure/roles/call_import/tasks/main.yml new file mode 100644 index 0000000..d6b28f0 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/call_import/tasks/main.yml @@ -0,0 +1,6 @@ +- import_role: + name: regular + +- assert: + that: + - regular_defaults_var is defined diff --git a/test/integration/targets/include_import/public_exposure/roles/dynamic/defaults/main.yml b/test/integration/targets/include_import/public_exposure/roles/dynamic/defaults/main.yml new file mode 100644 index 0000000..099ac29 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/dynamic/defaults/main.yml @@ -0,0 +1 @@ +dynamic_defaults_var: dynamic_defaults diff --git a/test/integration/targets/include_import/public_exposure/roles/dynamic/tasks/main.yml b/test/integration/targets/include_import/public_exposure/roles/dynamic/tasks/main.yml new file mode 100644 index 0000000..e9b9ad3 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/dynamic/tasks/main.yml @@ -0,0 +1,5 @@ +- debug: + msg: dynamic + +- set_fact: + dynamic_tasks_var: dynamic_tasks diff --git a/test/integration/targets/include_import/public_exposure/roles/dynamic/vars/main.yml b/test/integration/targets/include_import/public_exposure/roles/dynamic/vars/main.yml new file mode 100644 index 0000000..b33c12d --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/dynamic/vars/main.yml @@ -0,0 +1 @@ +dynamic_vars_var: dynamic_vars diff --git a/test/integration/targets/include_import/public_exposure/roles/dynamic_private/defaults/main.yml b/test/integration/targets/include_import/public_exposure/roles/dynamic_private/defaults/main.yml new file mode 100644 index 0000000..b19ef72 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/dynamic_private/defaults/main.yml @@ -0,0 +1 @@ +private_defaults_var: private_defaults diff --git a/test/integration/targets/include_import/public_exposure/roles/dynamic_private/tasks/main.yml b/test/integration/targets/include_import/public_exposure/roles/dynamic_private/tasks/main.yml new file mode 100644 index 0000000..1c7f653 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/dynamic_private/tasks/main.yml @@ -0,0 +1,5 @@ +- debug: + msg: private + +- set_fact: + private_tasks_var: private_tasks diff --git a/test/integration/targets/include_import/public_exposure/roles/dynamic_private/vars/main.yml b/test/integration/targets/include_import/public_exposure/roles/dynamic_private/vars/main.yml new file mode 100644 index 0000000..60f7ca8 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/dynamic_private/vars/main.yml @@ -0,0 +1 @@ +private_vars_var: private_vars diff --git a/test/integration/targets/include_import/public_exposure/roles/from/defaults/from.yml b/test/integration/targets/include_import/public_exposure/roles/from/defaults/from.yml new file mode 100644 index 0000000..6729c4b --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/from/defaults/from.yml @@ -0,0 +1 @@ +from_defaults_var: from_defaults diff --git a/test/integration/targets/include_import/public_exposure/roles/from/tasks/from.yml b/test/integration/targets/include_import/public_exposure/roles/from/tasks/from.yml new file mode 100644 index 0000000..932efc9 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/from/tasks/from.yml @@ -0,0 +1,5 @@ +- debug: + msg: from + +- set_fact: + from_tasks_var: from_tasks diff --git a/test/integration/targets/include_import/public_exposure/roles/from/vars/from.yml b/test/integration/targets/include_import/public_exposure/roles/from/vars/from.yml new file mode 100644 index 0000000..98b2ad4 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/from/vars/from.yml @@ -0,0 +1 @@ +from_vars_var: from_vars diff --git a/test/integration/targets/include_import/public_exposure/roles/regular/defaults/main.yml b/test/integration/targets/include_import/public_exposure/roles/regular/defaults/main.yml new file mode 100644 index 0000000..21a6967 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/regular/defaults/main.yml @@ -0,0 +1 @@ +regular_defaults_var: regular_defaults diff --git a/test/integration/targets/include_import/public_exposure/roles/regular/tasks/main.yml b/test/integration/targets/include_import/public_exposure/roles/regular/tasks/main.yml new file mode 100644 index 0000000..eafa141 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/regular/tasks/main.yml @@ -0,0 +1,5 @@ +- debug: + msg: regular + +- set_fact: + regular_tasks_var: regular_tasks diff --git a/test/integration/targets/include_import/public_exposure/roles/regular/vars/main.yml b/test/integration/targets/include_import/public_exposure/roles/regular/vars/main.yml new file mode 100644 index 0000000..3d06546 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/regular/vars/main.yml @@ -0,0 +1 @@ +regular_vars_var: regular_vars diff --git a/test/integration/targets/include_import/public_exposure/roles/static/defaults/main.yml b/test/integration/targets/include_import/public_exposure/roles/static/defaults/main.yml new file mode 100644 index 0000000..d88f555 --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/static/defaults/main.yml @@ -0,0 +1 @@ +static_defaults_var: static_defaults diff --git a/test/integration/targets/include_import/public_exposure/roles/static/tasks/main.yml b/test/integration/targets/include_import/public_exposure/roles/static/tasks/main.yml new file mode 100644 index 0000000..5a6488c --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/static/tasks/main.yml @@ -0,0 +1,5 @@ +- debug: + msg: static + +- set_fact: + static_tasks_var: static_tasks diff --git a/test/integration/targets/include_import/public_exposure/roles/static/vars/main.yml b/test/integration/targets/include_import/public_exposure/roles/static/vars/main.yml new file mode 100644 index 0000000..982e34d --- /dev/null +++ b/test/integration/targets/include_import/public_exposure/roles/static/vars/main.yml @@ -0,0 +1 @@ +static_vars_var: static_vars diff --git a/test/integration/targets/include_import/role/test_import_role.yml b/test/integration/targets/include_import/role/test_import_role.yml new file mode 100644 index 0000000..d45ff79 --- /dev/null +++ b/test/integration/targets/include_import/role/test_import_role.yml @@ -0,0 +1,139 @@ +- name: Test import_role + hosts: testhost + + vars: + run_role: yes + do_not_run_role: no + role_name: role1 + test_var: templating test in playbook + role_vars: + where_am_i_defined: in the playbook + entire_task: + include_role: + name: role1 + + tasks: + - name: Test basic role import + import_role: + name: role1 + + - name: Assert that basic include works + assert: + that: + - _role1_result.msg == 'In role1' + + - name: Test conditional role include + import_role: + name: role1 + tasks_from: canary1.yml + when: run_role + + - name: Assert that role ran + assert: + that: + - role1_canary1 == 'r1c1' + + - name: Test conditional role import that should be skipped + import_role: + name: role1 + tasks_from: canary2.yml + when: do_not_run_role + + - name: Assert that role did not run + assert: + that: + - role1_canary2 is not defined + + # FIXME We expect this to fail, but I'm not sure how best to test for + # syntax level failures. + # + # - name: Test role import with a loop + # import_role: + # name: "{{ item }}" + # register: loop_test + # with_items: + # - role1 + # - role3 + # - role2 + + - name: Test importing a task file from a role + import_role: + name: role1 + tasks_from: tasks.yml + + - name: Test importing vars file and tasks file from a role + import_role: + name: role3 + tasks_from: vartest.yml + vars_from: role3vars.yml + + - name: Assert that variables defined in previous task are available to play + assert: + that: + - role3_default == 'defined in role3/defaults/main.yml' + - role3_main == 'defined in role3/vars/main.yml' + - role3_var == 'defined in role3/vars/role3vars.yml' + ignore_errors: yes + + - name: Test using a play variable for role name + import_role: + name: "{{ role_name }}" + + # FIXME Trying to use a host_var here causes play execution to fail because + # the variable is undefined. + # + # - name: Test using a host variable for role name + # import_role: + # name: "{{ host_var_role_name }}" + + - name: Pass variable to role + import_role: + name: role1 + tasks_from: vartest.yml + vars: + where_am_i_defined: in the task + + ## FIXME Currently failing + ## ERROR! Vars in a IncludeRole must be specified as a dictionary, or a list of dictionaries + # - name: Pass all variables in a variable to role + # import_role: + # name: role1 + # tasks_from: vartest.yml + # vars: "{{ role_vars }}" + + - name: Pass templated variable to a role + import_role: + name: role1 + tasks_from: vartest.yml + vars: + where_am_i_defined: "{{ test_var }}" + + # FIXME This fails with the following error: + # The module {u'import_role': {u'name': u'role1'}} was not found in configured module paths. + # + - name: Include an entire task + action: + module: "{{ entire_task }}" + tags: + - never + + - block: + - name: Include a role that will fail + import_role: + name: role1 + tasks_from: fail.yml + + rescue: + - name: Include a role inside rescue + import_role: + name: role2 + + always: + - name: Include role inside always + import_role: + name: role3 + + - name: Test delegate_to handler is delegated + import_role: + name: delegated_handler + delegate_to: localhost diff --git a/test/integration/targets/include_import/role/test_include_role.yml b/test/integration/targets/include_import/role/test_include_role.yml new file mode 100644 index 0000000..e120bd8 --- /dev/null +++ b/test/integration/targets/include_import/role/test_include_role.yml @@ -0,0 +1,166 @@ +- name: Test include_role + hosts: testhost + + vars: + run_role: yes + do_not_run_role: no + role_name: role1 + test_var: templating test in playbook + role_vars: + where_am_i_defined: in the playbook + entire_task: + include_role: + name: role1 + + tasks: + - name: Test basic role include + include_role: + name: role1 + + - name: Assert that basic include works + assert: + that: + - _role1_result.msg == 'In role1' + + - name: Test conditional role include + include_role: + name: role1 + tasks_from: canary1.yml + when: run_role + + - name: Assert that role ran + assert: + that: + - role1_canary1 == 'r1c1' + + - name: Test conditional role include that should be skipped + include_role: + name: role1 + tasks_from: canary2.yml + when: do_not_run_role + + - name: Assert that role did not run + assert: + that: + - role1_canary2 is not defined + + - name: Test role include with a loop + include_role: + name: "{{ item }}" + with_items: + - role1 + - role3 + - role2 + + - name: Assert that roles run with_items + assert: + that: + - _role1_result.msg == 'In role1' + - _role2_result.msg == 'In role2' + - _role3_result.msg == 'In role3' + + - name: Test including a task file from a role + include_role: + name: role1 + tasks_from: tasks.yml + + - name: Test including vars file and tasks file from a role + include_role: + name: role3 + tasks_from: vartest.yml + vars_from: role3vars.yml + + - name: Assert that variables defined in previous task are available to play + assert: + that: + - role3_default == 'defined in role3/defaults/main.yml' + - role3_main == 'defined in role3/vars/main.yml' + - role3_var == 'defined in role3/vars/role3vars.yml' + ignore_errors: yes + + - name: Test using a play variable for role name + include_role: + name: "{{ role_name }}" + + - name: Test using a host variable for role name + include_role: + name: "{{ host_var_role_name }}" + + - name: Pass variable to role + include_role: + name: role1 + tasks_from: vartest.yml + vars: + where_am_i_defined: in the task + + ## FIXME Currently failing with + ## ERROR! Vars in a IncludeRole must be specified as a dictionary, or a list of dictionaries + # - name: Pass all variables in a variable to role + # include_role: + # name: role1 + # tasks_from: vartest.yml + # vars: "{{ role_vars }}" + + - name: Pass templated variable to a role + include_role: + name: role1 + tasks_from: vartest.yml + vars: + where_am_i_defined: "{{ test_var }}" + + - name: Use a variable in tasks_from field + include_role: + name: role1 + tasks_from: "{{ tasks_file_name }}.yml" + vars: + tasks_file_name: canary3 + + - name: Assert that tasks file was included + assert: + that: + - role1_canary3 == 'r1c3' + + ## FIXME This fails with the following error: + ## The module {u'include_role': {u'name': u'role1'}} was not found in configured module paths. + # - name: Include an entire task + # action: + # module: "{{ entire_task }}" + + - block: + - name: Include a role that will fail + include_role: + name: role1 + tasks_from: fail.yml + + rescue: + - name: Include a role inside rescue + include_role: + name: role2 + + always: + - name: Include role inside always + include_role: + name: role3 + +- hosts: testhost,testhost2 + tasks: + - name: wipe role results + set_fact: + _role2_result: ~ + _role3_result: ~ + + - name: Test using a host variable for role name + include_role: + name: "{{ host_var_role_name }}" + + - name: assert that host variable for role name calls 2 diff roles + assert: + that: + - _role2_result is not none + when: inventory_hostname == 'testhost2' + + - name: assert that host variable for role name calls 2 diff roles + assert: + that: + - _role3_result is not none + when: inventory_hostname == 'testhost' diff --git a/test/integration/targets/include_import/role/test_include_role_vars_from.yml b/test/integration/targets/include_import/role/test_include_role_vars_from.yml new file mode 100644 index 0000000..f7bb4d7 --- /dev/null +++ b/test/integration/targets/include_import/role/test_include_role_vars_from.yml @@ -0,0 +1,10 @@ +- name: Test include_role vars_from + hosts: testhost + vars: + role_name: role1 + tasks: + - name: Test vars_from + include_role: + name: role1 + vars_from: + - vars_1.yml diff --git a/test/integration/targets/include_import/roles/delegated_handler/handlers/main.yml b/test/integration/targets/include_import/roles/delegated_handler/handlers/main.yml new file mode 100644 index 0000000..550ddc2 --- /dev/null +++ b/test/integration/targets/include_import/roles/delegated_handler/handlers/main.yml @@ -0,0 +1,4 @@ +- name: delegated assert handler + assert: + that: + - ansible_delegated_vars is defined diff --git a/test/integration/targets/include_import/roles/delegated_handler/tasks/main.yml b/test/integration/targets/include_import/roles/delegated_handler/tasks/main.yml new file mode 100644 index 0000000..9d2ef61 --- /dev/null +++ b/test/integration/targets/include_import/roles/delegated_handler/tasks/main.yml @@ -0,0 +1,3 @@ +- command: "true" + notify: + - delegated assert handler diff --git a/test/integration/targets/include_import/roles/dup_allowed_role/meta/main.yml b/test/integration/targets/include_import/roles/dup_allowed_role/meta/main.yml new file mode 100644 index 0000000..61d3ffe --- /dev/null +++ b/test/integration/targets/include_import/roles/dup_allowed_role/meta/main.yml @@ -0,0 +1,2 @@ +--- +allow_duplicates: true diff --git a/test/integration/targets/include_import/roles/dup_allowed_role/tasks/main.yml b/test/integration/targets/include_import/roles/dup_allowed_role/tasks/main.yml new file mode 100644 index 0000000..cad935e --- /dev/null +++ b/test/integration/targets/include_import/roles/dup_allowed_role/tasks/main.yml @@ -0,0 +1,3 @@ +--- +- debug: + msg: "Tasks file inside role" diff --git a/test/integration/targets/include_import/roles/loop_name_assert/tasks/main.yml b/test/integration/targets/include_import/roles/loop_name_assert/tasks/main.yml new file mode 100644 index 0000000..9bb3db5 --- /dev/null +++ b/test/integration/targets/include_import/roles/loop_name_assert/tasks/main.yml @@ -0,0 +1,4 @@ +- assert: + that: + - name == 'name_from_loop_var' + - name != 'loop_name_assert' diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/defaults/main.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/defaults/main.yml new file mode 100644 index 0000000..aba24bb --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/defaults/main.yml @@ -0,0 +1,3 @@ +--- +testnesteddep2_defvar1: foobar +testnesteddep2_varvar1: foobar diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/meta/main.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/meta/main.yml new file mode 100644 index 0000000..31afcaa --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: +- role: nested/nested/nested_dep_role2a diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/tasks/main.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/tasks/main.yml new file mode 100644 index 0000000..1f2ee7f --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/tasks/main.yml @@ -0,0 +1,2 @@ +--- +- include_tasks: ./rund.yml diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/tasks/rund.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/tasks/rund.yml new file mode 100644 index 0000000..523e579 --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/tasks/rund.yml @@ -0,0 +1,2 @@ +--- +- shell: echo from deprole2a diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/vars/main.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/vars/main.yml new file mode 100644 index 0000000..c89b697 --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2/vars/main.yml @@ -0,0 +1,2 @@ +--- +testnesteddep2_varvar1: muche diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/defaults/main.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/defaults/main.yml new file mode 100644 index 0000000..aba24bb --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/defaults/main.yml @@ -0,0 +1,3 @@ +--- +testnesteddep2_defvar1: foobar +testnesteddep2_varvar1: foobar diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/meta/main.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/meta/main.yml new file mode 100644 index 0000000..6fc8ab0 --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: +- role: nested/nested/nested_dep_role2b diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/tasks/main.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/tasks/main.yml new file mode 100644 index 0000000..729582c --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/tasks/main.yml @@ -0,0 +1,2 @@ +--- +- include_tasks: ./rune.yml diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/tasks/rune.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/tasks/rune.yml new file mode 100644 index 0000000..e77882b --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/tasks/rune.yml @@ -0,0 +1,2 @@ +--- +- shell: echo from deprole2 diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/vars/main.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/vars/main.yml new file mode 100644 index 0000000..c89b697 --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2a/vars/main.yml @@ -0,0 +1,2 @@ +--- +testnesteddep2_varvar1: muche diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/defaults/main.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/defaults/main.yml new file mode 100644 index 0000000..aba24bb --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/defaults/main.yml @@ -0,0 +1,3 @@ +--- +testnesteddep2_defvar1: foobar +testnesteddep2_varvar1: foobar diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/meta/main.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/meta/main.yml new file mode 100644 index 0000000..32cf5dd --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/meta/main.yml @@ -0,0 +1 @@ +dependencies: [] diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/tasks/main.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/tasks/main.yml new file mode 100644 index 0000000..5fbb04f --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/tasks/main.yml @@ -0,0 +1,2 @@ +--- +- include_tasks: ./runf.yml diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/tasks/runf.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/tasks/runf.yml new file mode 100644 index 0000000..694005f --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/tasks/runf.yml @@ -0,0 +1,2 @@ +--- +- shell: echo from deprole2b diff --git a/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/vars/main.yml b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/vars/main.yml new file mode 100644 index 0000000..c89b697 --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested/nested_dep_role2b/vars/main.yml @@ -0,0 +1,2 @@ +--- +testnesteddep2_varvar1: muche diff --git a/test/integration/targets/include_import/roles/nested/nested_dep_role/defaults/main.yml b/test/integration/targets/include_import/roles/nested/nested_dep_role/defaults/main.yml new file mode 100644 index 0000000..536745e --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested_dep_role/defaults/main.yml @@ -0,0 +1,3 @@ +--- +testnesteddep_defvar1: foobar +testnesteddep_varvar1: foobar diff --git a/test/integration/targets/include_import/roles/nested/nested_dep_role/meta/main.yml b/test/integration/targets/include_import/roles/nested/nested_dep_role/meta/main.yml new file mode 100644 index 0000000..23d65c7 --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested_dep_role/meta/main.yml @@ -0,0 +1,2 @@ +--- +dependencies: [] diff --git a/test/integration/targets/include_import/roles/nested/nested_dep_role/tasks/main.yml b/test/integration/targets/include_import/roles/nested/nested_dep_role/tasks/main.yml new file mode 100644 index 0000000..d86604b --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested_dep_role/tasks/main.yml @@ -0,0 +1,2 @@ +--- +- include_tasks: ./runc.yml diff --git a/test/integration/targets/include_import/roles/nested/nested_dep_role/tasks/runc.yml b/test/integration/targets/include_import/roles/nested/nested_dep_role/tasks/runc.yml new file mode 100644 index 0000000..76682f5 --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested_dep_role/tasks/runc.yml @@ -0,0 +1,4 @@ +--- +- debug: + msg: from test_nested_dep_role +- include_role: {name: nested/nested/nested_dep_role2} diff --git a/test/integration/targets/include_import/roles/nested/nested_dep_role/vars/main.yml b/test/integration/targets/include_import/roles/nested/nested_dep_role/vars/main.yml new file mode 100644 index 0000000..b80b5de --- /dev/null +++ b/test/integration/targets/include_import/roles/nested/nested_dep_role/vars/main.yml @@ -0,0 +1,2 @@ +--- +testnesteddep_varvar1: muche diff --git a/test/integration/targets/include_import/roles/nested_include_task/meta/main.yml b/test/integration/targets/include_import/roles/nested_include_task/meta/main.yml new file mode 100644 index 0000000..9410b7d --- /dev/null +++ b/test/integration/targets/include_import/roles/nested_include_task/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: +- role: nested/nested_dep_role diff --git a/test/integration/targets/include_import/roles/nested_include_task/tasks/main.yml b/test/integration/targets/include_import/roles/nested_include_task/tasks/main.yml new file mode 100644 index 0000000..15a8e9f --- /dev/null +++ b/test/integration/targets/include_import/roles/nested_include_task/tasks/main.yml @@ -0,0 +1,2 @@ +--- +- include_tasks: ./runa.yml diff --git a/test/integration/targets/include_import/roles/nested_include_task/tasks/runa.yml b/test/integration/targets/include_import/roles/nested_include_task/tasks/runa.yml new file mode 100644 index 0000000..643fdd2 --- /dev/null +++ b/test/integration/targets/include_import/roles/nested_include_task/tasks/runa.yml @@ -0,0 +1,3 @@ +--- +- debug: + msg: from nested_include_task diff --git a/test/integration/targets/include_import/roles/role1/tasks/canary1.yml b/test/integration/targets/include_import/roles/role1/tasks/canary1.yml new file mode 100644 index 0000000..9f202ba --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/canary1.yml @@ -0,0 +1,2 @@ +- set_fact: + role1_canary1: r1c1 diff --git a/test/integration/targets/include_import/roles/role1/tasks/canary2.yml b/test/integration/targets/include_import/roles/role1/tasks/canary2.yml new file mode 100644 index 0000000..80e18b8 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/canary2.yml @@ -0,0 +1,2 @@ +- set_fact: + role1_canary2: r1c2 diff --git a/test/integration/targets/include_import/roles/role1/tasks/canary3.yml b/test/integration/targets/include_import/roles/role1/tasks/canary3.yml new file mode 100644 index 0000000..40014e3 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/canary3.yml @@ -0,0 +1,2 @@ +- set_fact: + role1_canary3: r1c3 diff --git a/test/integration/targets/include_import/roles/role1/tasks/fail.yml b/test/integration/targets/include_import/roles/role1/tasks/fail.yml new file mode 100644 index 0000000..b1b5f15 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/fail.yml @@ -0,0 +1,3 @@ +- name: EXPECTED FAILURE + fail: + msg: This command should always fail diff --git a/test/integration/targets/include_import/roles/role1/tasks/main.yml b/test/integration/targets/include_import/roles/role1/tasks/main.yml new file mode 100644 index 0000000..a8b641e --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/main.yml @@ -0,0 +1,3 @@ +- debug: + msg: In role1 + register: _role1_result diff --git a/test/integration/targets/include_import/roles/role1/tasks/r1t01.yml b/test/integration/targets/include_import/roles/role1/tasks/r1t01.yml new file mode 100644 index 0000000..e4a1e63 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/r1t01.yml @@ -0,0 +1 @@ +- import_tasks: r1t02.yml diff --git a/test/integration/targets/include_import/roles/role1/tasks/r1t02.yml b/test/integration/targets/include_import/roles/role1/tasks/r1t02.yml new file mode 100644 index 0000000..d3d3750 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/r1t02.yml @@ -0,0 +1 @@ +- import_tasks: r1t03.yml diff --git a/test/integration/targets/include_import/roles/role1/tasks/r1t03.yml b/test/integration/targets/include_import/roles/role1/tasks/r1t03.yml new file mode 100644 index 0000000..1d3330a --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/r1t03.yml @@ -0,0 +1 @@ +- import_tasks: r1t04.yml diff --git a/test/integration/targets/include_import/roles/role1/tasks/r1t04.yml b/test/integration/targets/include_import/roles/role1/tasks/r1t04.yml new file mode 100644 index 0000000..f3eece2 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/r1t04.yml @@ -0,0 +1 @@ +- import_tasks: r1t05.yml diff --git a/test/integration/targets/include_import/roles/role1/tasks/r1t05.yml b/test/integration/targets/include_import/roles/role1/tasks/r1t05.yml new file mode 100644 index 0000000..4c7371e --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/r1t05.yml @@ -0,0 +1 @@ +- import_tasks: r1t06.yml diff --git a/test/integration/targets/include_import/roles/role1/tasks/r1t06.yml b/test/integration/targets/include_import/roles/role1/tasks/r1t06.yml new file mode 100644 index 0000000..96d5660 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/r1t06.yml @@ -0,0 +1 @@ +- import_tasks: r1t07.yml diff --git a/test/integration/targets/include_import/roles/role1/tasks/r1t07.yml b/test/integration/targets/include_import/roles/role1/tasks/r1t07.yml new file mode 100644 index 0000000..ee8d325 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/r1t07.yml @@ -0,0 +1 @@ +- import_tasks: r1t08.yml diff --git a/test/integration/targets/include_import/roles/role1/tasks/r1t08.yml b/test/integration/targets/include_import/roles/role1/tasks/r1t08.yml new file mode 100644 index 0000000..33b8109 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/r1t08.yml @@ -0,0 +1 @@ +- import_tasks: r1t09.yml diff --git a/test/integration/targets/include_import/roles/role1/tasks/r1t09.yml b/test/integration/targets/include_import/roles/role1/tasks/r1t09.yml new file mode 100644 index 0000000..8973c29 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/r1t09.yml @@ -0,0 +1 @@ +- import_tasks: r1t10.yml diff --git a/test/integration/targets/include_import/roles/role1/tasks/r1t10.yml b/test/integration/targets/include_import/roles/role1/tasks/r1t10.yml new file mode 100644 index 0000000..eafdca2 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/r1t10.yml @@ -0,0 +1 @@ +- import_tasks: r1t11.yml diff --git a/test/integration/targets/include_import/roles/role1/tasks/r1t11.yml b/test/integration/targets/include_import/roles/role1/tasks/r1t11.yml new file mode 100644 index 0000000..9ab828f --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/r1t11.yml @@ -0,0 +1 @@ +- import_tasks: r1t12.yml diff --git a/test/integration/targets/include_import/roles/role1/tasks/r1t12.yml b/test/integration/targets/include_import/roles/role1/tasks/r1t12.yml new file mode 100644 index 0000000..8828486 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/r1t12.yml @@ -0,0 +1,2 @@ +- debug: + msg: r1t12 diff --git a/test/integration/targets/include_import/roles/role1/tasks/tasks.yml b/test/integration/targets/include_import/roles/role1/tasks/tasks.yml new file mode 100644 index 0000000..45430bc --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/tasks.yml @@ -0,0 +1,2 @@ +- debug: + msg: Tasks file inside role1 diff --git a/test/integration/targets/include_import/roles/role1/tasks/templated.yml b/test/integration/targets/include_import/roles/role1/tasks/templated.yml new file mode 100644 index 0000000..eb9a997 --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/templated.yml @@ -0,0 +1 @@ +- debug: msg="In imported role" diff --git a/test/integration/targets/include_import/roles/role1/tasks/vartest.yml b/test/integration/targets/include_import/roles/role1/tasks/vartest.yml new file mode 100644 index 0000000..5a49d8d --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/tasks/vartest.yml @@ -0,0 +1,2 @@ +- debug: + var: where_am_i_defined diff --git a/test/integration/targets/include_import/roles/role1/vars/main.yml b/test/integration/targets/include_import/roles/role1/vars/main.yml new file mode 100644 index 0000000..57d31cf --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/vars/main.yml @@ -0,0 +1 @@ +where_am_i_defined: role1 vars/main.yml diff --git a/test/integration/targets/include_import/roles/role1/vars/role1vars.yml b/test/integration/targets/include_import/roles/role1/vars/role1vars.yml new file mode 100644 index 0000000..57d31cf --- /dev/null +++ b/test/integration/targets/include_import/roles/role1/vars/role1vars.yml @@ -0,0 +1 @@ +where_am_i_defined: role1 vars/main.yml diff --git a/test/integration/targets/include_import/roles/role2/tasks/main.yml b/test/integration/targets/include_import/roles/role2/tasks/main.yml new file mode 100644 index 0000000..82934f6 --- /dev/null +++ b/test/integration/targets/include_import/roles/role2/tasks/main.yml @@ -0,0 +1,3 @@ +- debug: + msg: In role2 + register: _role2_result diff --git a/test/integration/targets/include_import/roles/role3/defaults/main.yml b/test/integration/targets/include_import/roles/role3/defaults/main.yml new file mode 100644 index 0000000..c3464c4 --- /dev/null +++ b/test/integration/targets/include_import/roles/role3/defaults/main.yml @@ -0,0 +1,2 @@ +where_am_i_defined: defaults in role3 +role3_default: defined in role3/defaults/main.yml diff --git a/test/integration/targets/include_import/roles/role3/handlers/main.yml b/test/integration/targets/include_import/roles/role3/handlers/main.yml new file mode 100644 index 0000000..c8baa27 --- /dev/null +++ b/test/integration/targets/include_import/roles/role3/handlers/main.yml @@ -0,0 +1,3 @@ +- name: runme + debug: + msg: role3 handler diff --git a/test/integration/targets/include_import/roles/role3/tasks/main.yml b/test/integration/targets/include_import/roles/role3/tasks/main.yml new file mode 100644 index 0000000..bb70dad --- /dev/null +++ b/test/integration/targets/include_import/roles/role3/tasks/main.yml @@ -0,0 +1,3 @@ +- debug: + msg: In role3 + register: _role3_result diff --git a/test/integration/targets/include_import/roles/role3/tasks/tasks.yml b/test/integration/targets/include_import/roles/role3/tasks/tasks.yml new file mode 100644 index 0000000..0e82269 --- /dev/null +++ b/test/integration/targets/include_import/roles/role3/tasks/tasks.yml @@ -0,0 +1,2 @@ +- debug: + msg: Tasks file inside role3 diff --git a/test/integration/targets/include_import/roles/role3/tasks/vartest.yml b/test/integration/targets/include_import/roles/role3/tasks/vartest.yml new file mode 100644 index 0000000..cb21c53 --- /dev/null +++ b/test/integration/targets/include_import/roles/role3/tasks/vartest.yml @@ -0,0 +1,2 @@ +- debug: + var: role3_var diff --git a/test/integration/targets/include_import/roles/role3/vars/main.yml b/test/integration/targets/include_import/roles/role3/vars/main.yml new file mode 100644 index 0000000..9adac6b --- /dev/null +++ b/test/integration/targets/include_import/roles/role3/vars/main.yml @@ -0,0 +1 @@ +role3_main: defined in role3/vars/main.yml diff --git a/test/integration/targets/include_import/roles/role3/vars/role3vars.yml b/test/integration/targets/include_import/roles/role3/vars/role3vars.yml new file mode 100644 index 0000000..f324d56 --- /dev/null +++ b/test/integration/targets/include_import/roles/role3/vars/role3vars.yml @@ -0,0 +1,2 @@ +where_am_i_defined: role3vars.yml +role3_var: defined in role3/vars/role3vars.yml diff --git a/test/integration/targets/include_import/roles/role_with_deps/meta/main.yml b/test/integration/targets/include_import/roles/role_with_deps/meta/main.yml new file mode 100644 index 0000000..a2446bb --- /dev/null +++ b/test/integration/targets/include_import/roles/role_with_deps/meta/main.yml @@ -0,0 +1,3 @@ +dependencies: + - role1 + - role2 diff --git a/test/integration/targets/include_import/roles/role_with_deps/tasks/main.yml b/test/integration/targets/include_import/roles/role_with_deps/tasks/main.yml new file mode 100644 index 0000000..060fe42 --- /dev/null +++ b/test/integration/targets/include_import/roles/role_with_deps/tasks/main.yml @@ -0,0 +1,2 @@ +- debug: + msg: In role_with_deps diff --git a/test/integration/targets/include_import/run_once/include_me.yml b/test/integration/targets/include_import/run_once/include_me.yml new file mode 100644 index 0000000..e92128a --- /dev/null +++ b/test/integration/targets/include_import/run_once/include_me.yml @@ -0,0 +1,2 @@ +- set_fact: + lola: wiseman diff --git a/test/integration/targets/include_import/run_once/playbook.yml b/test/integration/targets/include_import/run_once/playbook.yml new file mode 100644 index 0000000..cc1e265 --- /dev/null +++ b/test/integration/targets/include_import/run_once/playbook.yml @@ -0,0 +1,61 @@ +# This playbook exists to document the behavior of how run_once when +# applied to a dynamic include works +# +# As with other uses of keywords on dynamic includes, it only affects the include. +# In this case it causes the include to only be processed for ansible_play_hosts[0] +# which has the side effect of only running the tasks on ansible_play_hosts[0] +# and would only delegate facts of the include itself, not the tasks contained within + +- hosts: localhost + gather_facts: false + tasks: + - add_host: + name: "{{ item }}" + ansible_connection: local + groups: + - all + loop: + - localhost0 + - localhost1 + + - add_host: + name: "{{ item }}" + groups: + - testing + ansible_connection: local + loop: + - localhost2 + - localhost3 + +- hosts: all:!testing + gather_facts: false + vars: + lola: untouched + tasks: + - include_tasks: + file: include_me.yml + apply: + run_once: true + run_once: true + + - assert: + that: + - lola == 'wiseman' + +- hosts: testing + gather_facts: false + vars: + lola: untouched + tasks: + - include_tasks: include_me.yml + run_once: true + + - assert: + that: + - lola == 'wiseman' + when: inventory_hostname == ansible_play_hosts[0] + + - assert: + that: + - lola == 'untouched' + when: inventory_hostname != ansible_play_hosts[0] diff --git a/test/integration/targets/include_import/runme.sh b/test/integration/targets/include_import/runme.sh new file mode 100755 index 0000000..d384a12 --- /dev/null +++ b/test/integration/targets/include_import/runme.sh @@ -0,0 +1,141 @@ +#!/usr/bin/env bash + +set -eux + +export ANSIBLE_ROLES_PATH=./roles + +function gen_task_files() { + for i in $(printf "%03d " {1..39}); do + echo -e "- name: Hello Message\n debug:\n msg: Task file ${i}" > "tasks/hello/tasks-file-${i}.yml" + done +} + +## Adhoc + +ansible -m include_role -a name=role1 localhost + +## Import (static) + +# Playbook +ansible-playbook playbook/test_import_playbook.yml -i inventory "$@" + +ANSIBLE_STRATEGY='linear' ansible-playbook playbook/test_import_playbook_tags.yml -i inventory "$@" --tags canary1,canary22,validate --skip-tags skipme + +# Tasks +ANSIBLE_STRATEGY='linear' ansible-playbook tasks/test_import_tasks.yml -i inventory "$@" +ANSIBLE_STRATEGY='free' ansible-playbook tasks/test_import_tasks.yml -i inventory "$@" +ANSIBLE_STRATEGY='free' ansible-playbook tasks/test_import_tasks_tags.yml -i inventory "$@" --tags tasks1,canary1,validate + +# Role +ANSIBLE_STRATEGY='linear' ansible-playbook role/test_import_role.yml -i inventory "$@" +ANSIBLE_STRATEGY='free' ansible-playbook role/test_import_role.yml -i inventory "$@" + + +## Include (dynamic) + +# Tasks +ANSIBLE_STRATEGY='linear' ansible-playbook tasks/test_include_tasks.yml -i inventory "$@" +ANSIBLE_STRATEGY='free' ansible-playbook tasks/test_include_tasks.yml -i inventory "$@" +ANSIBLE_STRATEGY='free' ansible-playbook tasks/test_include_tasks_tags.yml -i inventory "$@" --tags tasks1,canary1,validate + +# Role +ANSIBLE_STRATEGY='linear' ansible-playbook role/test_include_role.yml -i inventory "$@" +ANSIBLE_STRATEGY='free' ansible-playbook role/test_include_role.yml -i inventory "$@" + +# https://github.com/ansible/ansible/issues/68515 +ansible-playbook -v role/test_include_role_vars_from.yml 2>&1 | tee test_include_role_vars_from.out +test "$(grep -E -c 'Expected a string for vars_from but got' test_include_role_vars_from.out)" = 1 + +## Max Recursion Depth +# https://github.com/ansible/ansible/issues/23609 +ANSIBLE_STRATEGY='linear' ansible-playbook test_role_recursion.yml -i inventory "$@" +ANSIBLE_STRATEGY='linear' ansible-playbook test_role_recursion_fqcn.yml -i inventory "$@" + +## Nested tasks +# https://github.com/ansible/ansible/issues/34782 +ANSIBLE_STRATEGY='linear' ansible-playbook test_nested_tasks.yml -i inventory "$@" +ANSIBLE_STRATEGY='linear' ansible-playbook test_nested_tasks_fqcn.yml -i inventory "$@" +ANSIBLE_STRATEGY='free' ansible-playbook test_nested_tasks.yml -i inventory "$@" +ANSIBLE_STRATEGY='free' ansible-playbook test_nested_tasks_fqcn.yml -i inventory "$@" + +## Tons of top level include_tasks +# https://github.com/ansible/ansible/issues/36053 +# Fixed by https://github.com/ansible/ansible/pull/36075 +gen_task_files +ANSIBLE_STRATEGY='linear' ansible-playbook test_copious_include_tasks.yml -i inventory "$@" +ANSIBLE_STRATEGY='linear' ansible-playbook test_copious_include_tasks_fqcn.yml -i inventory "$@" +ANSIBLE_STRATEGY='free' ansible-playbook test_copious_include_tasks.yml -i inventory "$@" +ANSIBLE_STRATEGY='free' ansible-playbook test_copious_include_tasks_fqcn.yml -i inventory "$@" +rm -f tasks/hello/*.yml + +# Inlcuded tasks should inherit attrs from non-dynamic blocks in parent chain +# https://github.com/ansible/ansible/pull/38827 +ANSIBLE_STRATEGY='linear' ansible-playbook test_grandparent_inheritance.yml -i inventory "$@" +ANSIBLE_STRATEGY='linear' ansible-playbook test_grandparent_inheritance_fqcn.yml -i inventory "$@" + +# undefined_var +ANSIBLE_STRATEGY='linear' ansible-playbook undefined_var/playbook.yml -i inventory "$@" +ANSIBLE_STRATEGY='free' ansible-playbook undefined_var/playbook.yml -i inventory "$@" + +# include_ + apply (explicit inheritance) +ANSIBLE_STRATEGY='linear' ansible-playbook apply/include_apply.yml -i inventory "$@" --tags foo +set +e +OUT=$(ANSIBLE_STRATEGY='linear' ansible-playbook apply/import_apply.yml -i inventory "$@" --tags foo 2>&1 | grep 'ERROR! Invalid options for import_tasks: apply') +set -e +if [[ -z "$OUT" ]]; then + echo "apply on import_tasks did not cause error" + exit 1 +fi + +ANSIBLE_STRATEGY='linear' ANSIBLE_PLAYBOOK_VARS_ROOT=all ansible-playbook apply/include_apply_65710.yml -i inventory "$@" +ANSIBLE_STRATEGY='free' ANSIBLE_PLAYBOOK_VARS_ROOT=all ansible-playbook apply/include_apply_65710.yml -i inventory "$@" + +# Test that duplicate items in loop are not deduped +ANSIBLE_STRATEGY='linear' ansible-playbook tasks/test_include_dupe_loop.yml -i inventory "$@" | tee test_include_dupe_loop.out +test "$(grep -c '"item=foo"' test_include_dupe_loop.out)" = 3 +ANSIBLE_STRATEGY='free' ansible-playbook tasks/test_include_dupe_loop.yml -i inventory "$@" | tee test_include_dupe_loop.out +test "$(grep -c '"item=foo"' test_include_dupe_loop.out)" = 3 + +ansible-playbook public_exposure/playbook.yml -i inventory "$@" +ansible-playbook public_exposure/no_bleeding.yml -i inventory "$@" +ansible-playbook public_exposure/no_overwrite_roles.yml -i inventory "$@" + +# https://github.com/ansible/ansible/pull/48068 +ANSIBLE_HOST_PATTERN_MISMATCH=warning ansible-playbook run_once/playbook.yml "$@" + +# https://github.com/ansible/ansible/issues/48936 +ansible-playbook -v handler_addressing/playbook.yml 2>&1 | tee test_handler_addressing.out +test "$(grep -E -c 'include handler task|ERROR! The requested handler '"'"'do_import'"'"' was not found' test_handler_addressing.out)" = 2 + +# https://github.com/ansible/ansible/issues/49969 +ansible-playbook -v parent_templating/playbook.yml 2>&1 | tee test_parent_templating.out +test "$(grep -E -c 'Templating the path of the parent include_tasks failed.' test_parent_templating.out)" = 0 + +# https://github.com/ansible/ansible/issues/54618 +ansible-playbook test_loop_var_bleed.yaml "$@" + +# https://github.com/ansible/ansible/issues/56580 +ansible-playbook valid_include_keywords/playbook.yml "$@" + +# https://github.com/ansible/ansible/issues/64902 +ansible-playbook tasks/test_allow_single_role_dup.yml 2>&1 | tee test_allow_single_role_dup.out +test "$(grep -c 'ok=3' test_allow_single_role_dup.out)" = 1 + +# https://github.com/ansible/ansible/issues/66764 +ANSIBLE_HOST_PATTERN_MISMATCH=error ansible-playbook empty_group_warning/playbook.yml + +ansible-playbook test_include_loop.yml "$@" +ansible-playbook test_include_loop_fqcn.yml "$@" + +ansible-playbook include_role_omit/playbook.yml "$@" + +# Test templating import_playbook, import_tasks, and import_role files +ansible-playbook playbook/test_templated_filenames.yml -e "pb=validate_templated_playbook.yml tasks=validate_templated_tasks.yml tasks_from=templated.yml" "$@" | tee out.txt +cat out.txt +test "$(grep out.txt -ce 'In imported playbook')" = 2 +test "$(grep out.txt -ce 'In imported tasks')" = 3 +test "$(grep out.txt -ce 'In imported role')" = 3 + +# https://github.com/ansible/ansible/issues/73657 +ansible-playbook issue73657.yml 2>&1 | tee issue73657.out +test "$(grep -c 'SHOULD_NOT_EXECUTE' issue73657.out)" = 0 diff --git a/test/integration/targets/include_import/tasks/debug_item.yml b/test/integration/targets/include_import/tasks/debug_item.yml new file mode 100644 index 0000000..025e132 --- /dev/null +++ b/test/integration/targets/include_import/tasks/debug_item.yml @@ -0,0 +1,2 @@ +- debug: + msg: "item={{ item }}" diff --git a/test/integration/targets/include_import/tasks/hello/.gitignore b/test/integration/targets/include_import/tasks/hello/.gitignore new file mode 100644 index 0000000..b4602e7 --- /dev/null +++ b/test/integration/targets/include_import/tasks/hello/.gitignore @@ -0,0 +1 @@ +tasks-file-* diff --git a/test/integration/targets/include_import/tasks/hello/keep b/test/integration/targets/include_import/tasks/hello/keep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/integration/targets/include_import/tasks/hello/keep diff --git a/test/integration/targets/include_import/tasks/nested/nested.yml b/test/integration/targets/include_import/tasks/nested/nested.yml new file mode 100644 index 0000000..0bfcdee --- /dev/null +++ b/test/integration/targets/include_import/tasks/nested/nested.yml @@ -0,0 +1,2 @@ +--- +- include_tasks: ../../nestedtasks/nested/nested.yml diff --git a/test/integration/targets/include_import/tasks/tasks1.yml b/test/integration/targets/include_import/tasks/tasks1.yml new file mode 100644 index 0000000..e1d83d9 --- /dev/null +++ b/test/integration/targets/include_import/tasks/tasks1.yml @@ -0,0 +1,5 @@ +- name: Set variable inside tasks1.yml + set_fact: + set_in_tasks1: yes + tags: + - tasks1 diff --git a/test/integration/targets/include_import/tasks/tasks2.yml b/test/integration/targets/include_import/tasks/tasks2.yml new file mode 100644 index 0000000..1b4c86f --- /dev/null +++ b/test/integration/targets/include_import/tasks/tasks2.yml @@ -0,0 +1,5 @@ +- name: Set variable inside tasks2.yml + set_fact: + set_in_tasks2: yes + tags: + - tasks2 diff --git a/test/integration/targets/include_import/tasks/tasks3.yml b/test/integration/targets/include_import/tasks/tasks3.yml new file mode 100644 index 0000000..6da3719 --- /dev/null +++ b/test/integration/targets/include_import/tasks/tasks3.yml @@ -0,0 +1,5 @@ +- name: Set variable inside tasks3.yml + set_fact: + set_in_tasks3: yes + tags: + - tasks3 diff --git a/test/integration/targets/include_import/tasks/tasks4.yml b/test/integration/targets/include_import/tasks/tasks4.yml new file mode 100644 index 0000000..fc2eb6c --- /dev/null +++ b/test/integration/targets/include_import/tasks/tasks4.yml @@ -0,0 +1,5 @@ +- name: Set variable inside tasks4.yml + set_fact: + set_in_tasks4: yes + tags: + - tasks4 diff --git a/test/integration/targets/include_import/tasks/tasks5.yml b/test/integration/targets/include_import/tasks/tasks5.yml new file mode 100644 index 0000000..f2ee6b9 --- /dev/null +++ b/test/integration/targets/include_import/tasks/tasks5.yml @@ -0,0 +1,6 @@ +- name: Set variable inside tasks5.yml + set_fact: + set_in_tasks5: yes + tags: + - tasks5 + - canary1 diff --git a/test/integration/targets/include_import/tasks/tasks6.yml b/test/integration/targets/include_import/tasks/tasks6.yml new file mode 100644 index 0000000..fa03079 --- /dev/null +++ b/test/integration/targets/include_import/tasks/tasks6.yml @@ -0,0 +1,5 @@ +- name: Set variable inside tasks6.yml + set_fact: + set_in_tasks6: yes + tags: + - tasks6 diff --git a/test/integration/targets/include_import/tasks/test_allow_single_role_dup.yml b/test/integration/targets/include_import/tasks/test_allow_single_role_dup.yml new file mode 100644 index 0000000..3a6992f --- /dev/null +++ b/test/integration/targets/include_import/tasks/test_allow_single_role_dup.yml @@ -0,0 +1,8 @@ +--- +- name: test for allow_duplicates with single role + hosts: localhost + gather_facts: false + roles: + - dup_allowed_role + - dup_allowed_role + - dup_allowed_role diff --git a/test/integration/targets/include_import/tasks/test_import_tasks.yml b/test/integration/targets/include_import/tasks/test_import_tasks.yml new file mode 100644 index 0000000..8f07bb9 --- /dev/null +++ b/test/integration/targets/include_import/tasks/test_import_tasks.yml @@ -0,0 +1,41 @@ +- name: Test import_tasks + hosts: testhost + + tasks: + - name: Test basic task import + import_tasks: tasks1.yml + + - name: Assert that fact was set in import + assert: + that: + - set_in_tasks1 + + - name: Test conditional task import + import_tasks: tasks2.yml + when: no + + - name: Assert that tasks were skipped + assert: + that: + - set_in_tasks2 is not defined + + - block: + - name: Import tasks inside a block + import_tasks: tasks3.yml + + - name: Assert that task3 was included + assert: + that: + - set_in_tasks3 + + always: + - name: Import task inside always + import_tasks: tasks4.yml + + - name: Validate that variables set in previously improted tasks are passed down. + import_tasks: validate3.yml + + - name: Assert that tasks4 was included + assert: + that: + - set_in_tasks4 diff --git a/test/integration/targets/include_import/tasks/test_import_tasks_tags.yml b/test/integration/targets/include_import/tasks/test_import_tasks_tags.yml new file mode 100644 index 0000000..3b1d68f --- /dev/null +++ b/test/integration/targets/include_import/tasks/test_import_tasks_tags.yml @@ -0,0 +1,23 @@ +- name: Test import_tasks using tags + hosts: testhost + + tasks: + - name: Import tasks1.yml + import_tasks: tasks1.yml + + - name: Import tasks4.yml using tag on import task + import_tasks: tasks4.yml + tags: + - canary1 + + - name: Import tasks2.yml + import_tasks: tasks2.yml + + - name: Assert that appropriate tasks were run + assert: + that: + - set_in_tasks1 + - set_in_tasks4 + - set_in_tasks2 is not defined + tags: + - validate diff --git a/test/integration/targets/include_import/tasks/test_include_dupe_loop.yml b/test/integration/targets/include_import/tasks/test_include_dupe_loop.yml new file mode 100644 index 0000000..b7b9301 --- /dev/null +++ b/test/integration/targets/include_import/tasks/test_include_dupe_loop.yml @@ -0,0 +1,8 @@ +- name: Test Include Duplicate Loop Items + hosts: testhost + tasks: + - include_tasks: debug_item.yml + loop: + - foo + - foo + - foo diff --git a/test/integration/targets/include_import/tasks/test_include_tasks.yml b/test/integration/targets/include_import/tasks/test_include_tasks.yml new file mode 100644 index 0000000..ebe2273 --- /dev/null +++ b/test/integration/targets/include_import/tasks/test_include_tasks.yml @@ -0,0 +1,44 @@ +- name: Test include_tasks + hosts: testhost + + tasks: + - name: Test basic task include + include_tasks: tasks1.yml + + - name: Assert that fact was set in include + assert: + that: + - set_in_tasks1 + + - name: Test conditional task include + include_tasks: tasks2.yml + when: no + + - name: Assert that tasks were skipped + assert: + that: + - set_in_tasks2 is not defined + + - block: + - name: Include tasks inside a block + include_tasks: tasks3.yml + + - name: Assert that task3 was included + assert: + that: + - set_in_tasks3 + + always: + - name: Include task inside always + include_tasks: tasks4.yml + + - name: Validate that variables set in previously improted tasks are passed down + include_tasks: validate3.yml + + - name: Assert that tasks4 was included + assert: + that: + - set_in_tasks4 + + - name: include_tasks + action + action: include_tasks tasks1.yml diff --git a/test/integration/targets/include_import/tasks/test_include_tasks_tags.yml b/test/integration/targets/include_import/tasks/test_include_tasks_tags.yml new file mode 100644 index 0000000..3fe4380 --- /dev/null +++ b/test/integration/targets/include_import/tasks/test_include_tasks_tags.yml @@ -0,0 +1,25 @@ +- name: Test include_tasks using tags + hosts: testhost + + tasks: + # This should not be included + - name: Include tasks1.yml + include_tasks: tasks1.yml + + # This should be included but tasks inside should not run because they do not have + # the canary1 tag and tasks2 is not in the list of tags for the ansible-playbook command + - name: Include tasks2.yml + include_tasks: tasks2.yml + tags: + - canary1 + + # This should be included and tasks inside should be run + - name: Include tasks5.yml using tag on include task + include_tasks: tasks5.yml + tags: + - canary1 + + - name: Include validate_tags.yml + include_tasks: validate_tags.yml + tags: + - validate diff --git a/test/integration/targets/include_import/tasks/test_recursion.yml b/test/integration/targets/include_import/tasks/test_recursion.yml new file mode 100644 index 0000000..96754ec --- /dev/null +++ b/test/integration/targets/include_import/tasks/test_recursion.yml @@ -0,0 +1,6 @@ +- hosts: testhost + + tasks: + - include_role: + name: role + tasks_from: r1t1.yml diff --git a/test/integration/targets/include_import/tasks/validate3.yml b/test/integration/targets/include_import/tasks/validate3.yml new file mode 100644 index 0000000..e3166aa --- /dev/null +++ b/test/integration/targets/include_import/tasks/validate3.yml @@ -0,0 +1,4 @@ +- name: Assert than variable set in previously included task is defined + assert: + that: + - set_in_tasks3 diff --git a/test/integration/targets/include_import/tasks/validate_tags.yml b/test/integration/targets/include_import/tasks/validate_tags.yml new file mode 100644 index 0000000..e2f3377 --- /dev/null +++ b/test/integration/targets/include_import/tasks/validate_tags.yml @@ -0,0 +1,8 @@ +- name: Assert that appropriate tasks were run + assert: + that: + - set_in_tasks1 is undefined + - set_in_tasks2 is undefined + - set_in_tasks5 + tags: + - validate diff --git a/test/integration/targets/include_import/test_copious_include_tasks.yml b/test/integration/targets/include_import/test_copious_include_tasks.yml new file mode 100644 index 0000000..4564c76 --- /dev/null +++ b/test/integration/targets/include_import/test_copious_include_tasks.yml @@ -0,0 +1,44 @@ +- name: Test many include_tasks + hosts: testhost + gather_facts: no + + tasks: + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-001.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-002.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-003.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-004.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-005.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-006.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-007.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-008.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-009.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-010.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-011.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-012.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-013.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-014.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-015.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-016.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-017.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-018.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-019.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-020.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-021.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-022.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-023.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-024.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-025.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-026.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-027.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-028.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-029.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-030.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-031.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-032.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-033.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-034.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-035.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-036.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-037.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-038.yml" + - include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-039.yml" diff --git a/test/integration/targets/include_import/test_copious_include_tasks_fqcn.yml b/test/integration/targets/include_import/test_copious_include_tasks_fqcn.yml new file mode 100644 index 0000000..32fa9ab --- /dev/null +++ b/test/integration/targets/include_import/test_copious_include_tasks_fqcn.yml @@ -0,0 +1,44 @@ +- name: Test many ansible.builtin.include_tasks + hosts: testhost + gather_facts: no + + tasks: + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-001.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-002.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-003.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-004.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-005.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-006.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-007.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-008.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-009.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-010.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-011.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-012.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-013.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-014.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-015.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-016.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-017.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-018.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-019.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-020.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-021.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-022.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-023.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-024.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-025.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-026.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-027.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-028.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-029.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-030.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-031.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-032.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-033.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-034.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-035.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-036.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-037.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-038.yml" + - ansible.builtin.include_tasks: "{{ playbook_dir }}/tasks/hello/tasks-file-039.yml" diff --git a/test/integration/targets/include_import/test_grandparent_inheritance.yml b/test/integration/targets/include_import/test_grandparent_inheritance.yml new file mode 100644 index 0000000..45a3d83 --- /dev/null +++ b/test/integration/targets/include_import/test_grandparent_inheritance.yml @@ -0,0 +1,29 @@ +--- +- hosts: testhost + gather_facts: false + tasks: + - debug: + var: inventory_hostname + + - name: Test included tasks inherit from block + check_mode: true + block: + - include_tasks: grandchild/block_include_tasks.yml + + - debug: + var: block_include_result + + - assert: + that: + - block_include_result is skipped + + - name: Test included tasks inherit deeply from import + import_tasks: grandchild/import.yml + check_mode: true + + - debug: + var: import_include_include_result + + - assert: + that: + - import_include_include_result is skipped diff --git a/test/integration/targets/include_import/test_grandparent_inheritance_fqcn.yml b/test/integration/targets/include_import/test_grandparent_inheritance_fqcn.yml new file mode 100644 index 0000000..37a0ad0 --- /dev/null +++ b/test/integration/targets/include_import/test_grandparent_inheritance_fqcn.yml @@ -0,0 +1,29 @@ +--- +- hosts: testhost + gather_facts: false + tasks: + - debug: + var: inventory_hostname + + - name: Test included tasks inherit from block + check_mode: true + block: + - ansible.builtin.include_tasks: grandchild/block_include_tasks.yml + + - debug: + var: block_include_result + + - assert: + that: + - block_include_result is skipped + + - name: Test included tasks inherit deeply from import + ansible.builtin.import_tasks: grandchild/import.yml + check_mode: true + + - debug: + var: import_include_include_result + + - assert: + that: + - import_include_include_result is skipped diff --git a/test/integration/targets/include_import/test_include_loop.yml b/test/integration/targets/include_import/test_include_loop.yml new file mode 100644 index 0000000..33775d1 --- /dev/null +++ b/test/integration/targets/include_import/test_include_loop.yml @@ -0,0 +1,17 @@ +- hosts: localhost + gather_facts: false + tasks: + - name: skipped include undefined loop + include_tasks: doesnt_matter.yml + loop: '{{ lkjsdflkjsdlfkjsdlfkjsdf }}' + when: false + register: skipped_include + + - debug: + var: skipped_include + + - assert: + that: + - skipped_include.results is undefined + - skipped_include.skip_reason is defined + - skipped_include is skipped diff --git a/test/integration/targets/include_import/test_include_loop_fqcn.yml b/test/integration/targets/include_import/test_include_loop_fqcn.yml new file mode 100644 index 0000000..62d91f2 --- /dev/null +++ b/test/integration/targets/include_import/test_include_loop_fqcn.yml @@ -0,0 +1,17 @@ +- hosts: localhost + gather_facts: false + tasks: + - name: skipped include undefined loop + ansible.builtin.include_tasks: doesnt_matter.yml + loop: '{{ lkjsdflkjsdlfkjsdlfkjsdf }}' + when: false + register: skipped_include + + - debug: + var: skipped_include + + - assert: + that: + - skipped_include.results is undefined + - skipped_include.skip_reason is defined + - skipped_include is skipped diff --git a/test/integration/targets/include_import/test_loop_var_bleed.yaml b/test/integration/targets/include_import/test_loop_var_bleed.yaml new file mode 100644 index 0000000..a5146f3 --- /dev/null +++ b/test/integration/targets/include_import/test_loop_var_bleed.yaml @@ -0,0 +1,9 @@ +- hosts: localhost + gather_facts: false + tasks: + - include_role: + name: loop_name_assert + loop: + - name_from_loop_var + loop_control: + loop_var: name diff --git a/test/integration/targets/include_import/test_nested_tasks.yml b/test/integration/targets/include_import/test_nested_tasks.yml new file mode 100644 index 0000000..7451ec4 --- /dev/null +++ b/test/integration/targets/include_import/test_nested_tasks.yml @@ -0,0 +1,6 @@ +- name: >- + verify that multiple level of nested statements and + include+meta doesnt mess included files mecanisms + hosts: testhost + tasks: + - include_tasks: ./tasks/nested/nested.yml diff --git a/test/integration/targets/include_import/test_nested_tasks_fqcn.yml b/test/integration/targets/include_import/test_nested_tasks_fqcn.yml new file mode 100644 index 0000000..14e72ee --- /dev/null +++ b/test/integration/targets/include_import/test_nested_tasks_fqcn.yml @@ -0,0 +1,6 @@ +- name: >- + verify that multiple level of nested statements and + include+meta doesnt mess included files mecanisms + hosts: testhost + tasks: + - ansible.builtin.include_tasks: ./tasks/nested/nested.yml diff --git a/test/integration/targets/include_import/test_role_recursion.yml b/test/integration/targets/include_import/test_role_recursion.yml new file mode 100644 index 0000000..ad2489a --- /dev/null +++ b/test/integration/targets/include_import/test_role_recursion.yml @@ -0,0 +1,7 @@ +- name: Test max recursion depth + hosts: testhost + + tasks: + - import_role: + name: role1 + tasks_from: r1t01.yml diff --git a/test/integration/targets/include_import/test_role_recursion_fqcn.yml b/test/integration/targets/include_import/test_role_recursion_fqcn.yml new file mode 100644 index 0000000..13d8d2c --- /dev/null +++ b/test/integration/targets/include_import/test_role_recursion_fqcn.yml @@ -0,0 +1,7 @@ +- name: Test max recursion depth + hosts: testhost + + tasks: + - ansible.builtin.import_role: + name: role1 + tasks_from: r1t01.yml diff --git a/test/integration/targets/include_import/undefined_var/include_tasks.yml b/test/integration/targets/include_import/undefined_var/include_tasks.yml new file mode 100644 index 0000000..56f06c9 --- /dev/null +++ b/test/integration/targets/include_import/undefined_var/include_tasks.yml @@ -0,0 +1,5 @@ +--- + +- debug: + msg: "This message comes from an 'include_tasks'-task! :-)" + register: "_include_tasks_task_result" diff --git a/test/integration/targets/include_import/undefined_var/include_that_defines_var.yml b/test/integration/targets/include_import/undefined_var/include_that_defines_var.yml new file mode 100644 index 0000000..7f24a43 --- /dev/null +++ b/test/integration/targets/include_import/undefined_var/include_that_defines_var.yml @@ -0,0 +1,5 @@ +- vars: + _undefined: 'yes' + block: + - set_fact: + _include_defined_result: 'good' diff --git a/test/integration/targets/include_import/undefined_var/playbook.yml b/test/integration/targets/include_import/undefined_var/playbook.yml new file mode 100644 index 0000000..6576d50 --- /dev/null +++ b/test/integration/targets/include_import/undefined_var/playbook.yml @@ -0,0 +1,35 @@ +--- +- hosts: testhost + gather_facts: false + tasks: + - include_tasks: "include_tasks.yml" + ignore_errors: True + register: "_include_tasks_result" + when: + - "_undefined == 'yes'" + + - assert: + that: + - "_include_tasks_result is failed" + - "_include_tasks_task_result is not defined" + msg: "'include_tasks' did not evaluate it's attached condition and failed" + + - include_role: + name: "no_log" + ignore_errors: True + register: "_include_role_result" + when: + - "_undefined == 'yes'" + + - assert: + that: + - "_include_role_result is failed" + msg: "'include_role' did not evaluate it's attached condition and failed" + + - import_tasks: include_that_defines_var.yml + when: + - "_undefined == 'yes'" + + - assert: + that: + - _include_defined_result == 'good' diff --git a/test/integration/targets/include_import/valid_include_keywords/include_me.yml b/test/integration/targets/include_import/valid_include_keywords/include_me.yml new file mode 100644 index 0000000..ab5c6a9 --- /dev/null +++ b/test/integration/targets/include_import/valid_include_keywords/include_me.yml @@ -0,0 +1,6 @@ +- debug: + msg: include_me +- assert: + that: + - loopy == 1 + - baz == 'qux' diff --git a/test/integration/targets/include_import/valid_include_keywords/include_me_listen.yml b/test/integration/targets/include_import/valid_include_keywords/include_me_listen.yml new file mode 100644 index 0000000..47b424a --- /dev/null +++ b/test/integration/targets/include_import/valid_include_keywords/include_me_listen.yml @@ -0,0 +1,2 @@ +- debug: + msg: listen diff --git a/test/integration/targets/include_import/valid_include_keywords/include_me_notify.yml b/test/integration/targets/include_import/valid_include_keywords/include_me_notify.yml new file mode 100644 index 0000000..4501e38 --- /dev/null +++ b/test/integration/targets/include_import/valid_include_keywords/include_me_notify.yml @@ -0,0 +1,2 @@ +- debug: + msg: notify diff --git a/test/integration/targets/include_import/valid_include_keywords/playbook.yml b/test/integration/targets/include_import/valid_include_keywords/playbook.yml new file mode 100644 index 0000000..c70ec81 --- /dev/null +++ b/test/integration/targets/include_import/valid_include_keywords/playbook.yml @@ -0,0 +1,40 @@ +- hosts: localhost + gather_facts: false + handlers: + - include_tasks: + file: include_me_listen.yml + listen: + - include_me_listen + + - name: Include Me Notify + include_tasks: include_me_notify.yml + + tasks: + - name: Include me + include_tasks: include_me.yml + args: + apply: + tags: + - bar + debugger: ~ + ignore_errors: false + loop: + - 1 + loop_control: + loop_var: loopy + no_log: false + register: this_isnt_useful + run_once: true + tags: + - foo + vars: + baz: qux + when: true + + - command: "true" + notify: + - include_me_listen + + - command: "true" + notify: + - Include Me Notify diff --git a/test/integration/targets/include_import_tasks_nested/aliases b/test/integration/targets/include_import_tasks_nested/aliases new file mode 100644 index 0000000..1d28bdb --- /dev/null +++ b/test/integration/targets/include_import_tasks_nested/aliases @@ -0,0 +1,2 @@ +shippable/posix/group5 +context/controller diff --git a/test/integration/targets/include_import_tasks_nested/tasks/main.yml b/test/integration/targets/include_import_tasks_nested/tasks/main.yml new file mode 100644 index 0000000..5d67267 --- /dev/null +++ b/test/integration/targets/include_import_tasks_nested/tasks/main.yml @@ -0,0 +1,11 @@ +- include_tasks: nested/nested_include.yml + +- assert: + that: + - nested_adjacent_count|int == 1 + +- import_tasks: nested/nested_import.yml + +- assert: + that: + - nested_adjacent_count|int == 2 diff --git a/test/integration/targets/include_import_tasks_nested/tasks/nested/nested_adjacent.yml b/test/integration/targets/include_import_tasks_nested/tasks/nested/nested_adjacent.yml new file mode 100644 index 0000000..89c5c93 --- /dev/null +++ b/test/integration/targets/include_import_tasks_nested/tasks/nested/nested_adjacent.yml @@ -0,0 +1,2 @@ +- set_fact: + nested_adjacent_count: '{{ nested_adjacent_count|default(0)|int + 1 }}' diff --git a/test/integration/targets/include_import_tasks_nested/tasks/nested/nested_import.yml b/test/integration/targets/include_import_tasks_nested/tasks/nested/nested_import.yml new file mode 100644 index 0000000..a3b0930 --- /dev/null +++ b/test/integration/targets/include_import_tasks_nested/tasks/nested/nested_import.yml @@ -0,0 +1 @@ +- import_tasks: nested_adjacent.yml diff --git a/test/integration/targets/include_import_tasks_nested/tasks/nested/nested_include.yml b/test/integration/targets/include_import_tasks_nested/tasks/nested/nested_include.yml new file mode 100644 index 0000000..8d4bfb0 --- /dev/null +++ b/test/integration/targets/include_import_tasks_nested/tasks/nested/nested_include.yml @@ -0,0 +1 @@ +- include_tasks: nested_adjacent.yml |