diff --git a/tests/tasks/install_and_check.yml b/tests/tasks/install_and_check.yml index 1c34a7ef34..970154352c 100644 --- a/tests/tasks/install_and_check.yml +++ b/tests/tasks/install_and_check.yml @@ -3,9 +3,9 @@ - name: Test default settings block: - name: Run postgresql role - include_role: - name: linux-system-roles.postgresql - public: true + include_tasks: tasks/run_role_with_clear_facts.yml + vars: + __sr_public: true when: __run_role | d(true) | bool - name: Run postgresql role to set vars only diff --git a/tests/tasks/run_role_with_clear_facts.yml b/tests/tasks/run_role_with_clear_facts.yml new file mode 100644 index 0000000000..fe8fee991f --- /dev/null +++ b/tests/tasks/run_role_with_clear_facts.yml @@ -0,0 +1,37 @@ +--- +# Task file: clear_facts, run linux-system-roles.postgresql. +# Include this with include_tasks or import_tasks +# Input: +# - __sr_tasks_from: tasks_from to run - same as tasks_from in include_role +# - __sr_public: export private vars from role - same as public in include_role +# - __sr_failed_when: set to false to ignore role errors - same as failed_when in include_role +- name: Clear facts + meta: clear_facts + +# note that you can use failed_when with import_role but not with include_role +# so this simulates the __sr_failed_when false case +# Q: Why do we need a separate task to run the role normally? Why not just +# run the role in the block and rethrow the error in the rescue block? +# A: Because you cannot rethrow the error in exactly the same way as the role does. +# It might be possible to exactly reconstruct ansible_failed_result but it's not worth the effort. +- name: Run the role with __sr_failed_when false + when: + - __sr_failed_when is defined + - not __sr_failed_when + block: + - name: Run the role + include_role: + name: linux-system-roles.postgresql + tasks_from: "{{ __sr_tasks_from | default('main') }}" + public: "{{ __sr_public | default(false) }}" + rescue: + - name: Ignore the failure when __sr_failed_when is false + debug: + msg: Ignoring failure when __sr_failed_when is false + +- name: Run the role normally + include_role: + name: linux-system-roles.postgresql + tasks_from: "{{ __sr_tasks_from | default('main') }}" + public: "{{ __sr_public | default(false) }}" + when: __sr_failed_when | d(true) diff --git a/tests/tests_bootc_e2e.yml b/tests/tests_bootc_e2e.yml index 3219ffd1d6..3e86418c11 100644 --- a/tests/tests_bootc_e2e.yml +++ b/tests/tests_bootc_e2e.yml @@ -4,14 +4,12 @@ hosts: all tags: - tests::bootc-e2e - gather_facts: false tasks: - name: Bootc image build preparation when: ansible_connection | d("") == "buildah" block: - name: Run postgresql role - include_role: - name: linux-system-roles.postgresql + include_tasks: tasks/run_role_with_clear_facts.yml - name: Create QEMU deployment delegate_to: localhost diff --git a/tests/tests_config_files.yml b/tests/tests_config_files.yml index 89ea06ab0b..19957317c1 100644 --- a/tests/tests_config_files.yml +++ b/tests/tests_config_files.yml @@ -5,10 +5,9 @@ - name: Run test and cleanup block: - name: Run role with given config - include_role: - name: linux-system-roles.postgresql - public: true + include_tasks: tasks/run_role_with_clear_facts.yml vars: + __sr_public: true postgresql_pg_hba_conf: - type: local database: all diff --git a/tests/tests_default.yml b/tests/tests_default.yml index 706a77e084..59329d7767 100644 --- a/tests/tests_default.yml +++ b/tests/tests_default.yml @@ -2,7 +2,6 @@ --- - name: Ensure that the role runs with default parameters hosts: all - gather_facts: false tasks: - name: Test default settings include_tasks: tasks/install_and_check.yml diff --git a/tests/tests_include_vars_from_parent.yml b/tests/tests_include_vars_from_parent.yml index 7f282de72c..83fa2fb7e0 100644 --- a/tests/tests_include_vars_from_parent.yml +++ b/tests/tests_include_vars_from_parent.yml @@ -1,7 +1,6 @@ --- - name: Test role include variable override hosts: all - gather_facts: true tasks: - name: Run test block: diff --git a/tests/tests_input_file.yml b/tests/tests_input_file.yml index afbf10e486..db09313865 100644 --- a/tests/tests_input_file.yml +++ b/tests/tests_input_file.yml @@ -1,15 +1,13 @@ --- - name: Ensure that the role runs with input file hosts: all - gather_facts: false tasks: - name: Run test and clean up block: - name: Run postgresql role with input file - include_role: - name: linux-system-roles.postgresql - public: true + include_tasks: tasks/run_role_with_clear_facts.yml vars: + __sr_public: true postgresql_input_file: simple.sql - name: Flush handlers diff --git a/tests/tests_versions.yml b/tests/tests_versions.yml index ea8ca5159b..b4726f7200 100644 --- a/tests/tests_versions.yml +++ b/tests/tests_versions.yml @@ -2,7 +2,6 @@ --- - name: Test installing and uninstalling all supported versions hosts: all - gather_facts: true tasks: - name: Skip test if distro does not support multiple versions meta: end_host