summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSviatoslav Sydorenko <webknjaz@redhat.com>2021-11-30 16:11:27 +0100
committerGitHub <noreply@github.com>2021-11-30 10:11:27 -0500
commit392b16c21c9ffd8630a4f025eae94bac59412912 (patch)
tree62fbd7e951a040b618885a924030ace5a26e0562
parent862a2a3599ae30cc5b5ff53cd219acb1afa362b1 (diff)
downloadansible-392b16c21c9ffd8630a4f025eae94bac59412912.tar.gz
Test integration of loop and until options (#44927)
Ref #44741 Ref ansible/proposals#140 * Replace select filter with a more portable thing * Add context This is needed for split controller/remote Co-authored-by: Sam Doran <sdoran@redhat.com>
-rw-r--r--test/integration/targets/loop-until/aliases2
-rw-r--r--test/integration/targets/loop-until/tasks/main.yml160
2 files changed, 162 insertions, 0 deletions
diff --git a/test/integration/targets/loop-until/aliases b/test/integration/targets/loop-until/aliases
new file mode 100644
index 0000000000..90ea9e1281
--- /dev/null
+++ b/test/integration/targets/loop-until/aliases
@@ -0,0 +1,2 @@
+shippable/posix/group2
+context/controller
diff --git a/test/integration/targets/loop-until/tasks/main.yml b/test/integration/targets/loop-until/tasks/main.yml
new file mode 100644
index 0000000000..bb3799a30f
--- /dev/null
+++ b/test/integration/targets/loop-until/tasks/main.yml
@@ -0,0 +1,160 @@
+# Test code for integration of until and loop options
+# Copyright: (c) 2018, Ansible Project
+
+# 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 <https://www.gnu.org/licenses/>.
+- shell: '{{ ansible_python.executable }} -c "import tempfile; print(tempfile.mkstemp()[1])"'
+ register: tempfilepaths
+ # 0 to 3:
+ loop: "{{ range(0, 3 + 1) | list }}"
+
+- set_fact:
+ "until_tempfile_path_{{ idx }}": "{{ tmp_file.stdout }}"
+ until_tempfile_path_var_names: >
+ {{ [ 'until_tempfile_path_' + idx | string ] + until_tempfile_path_var_names | default([]) }}
+ loop: "{{ tempfilepaths.results }}"
+ loop_control:
+ index_var: idx
+ loop_var: tmp_file
+
+# `select` filter is only available since Jinja 2.7,
+# thus tests are failing under CentOS in CI
+#- set_fact:
+# until_tempfile_path_var_names: >
+# {{ vars | select('match', '^until_tempfile_path_') | list }}
+
+- name: loop and until with 6 retries
+ shell: echo "run" >> {{ lookup('vars', tmp_file_var) }} && wc -w < {{ lookup('vars', tmp_file_var) }} | tr -d ' '
+ register: runcount
+ until: runcount.stdout | int == idx + 3
+ retries: "{{ idx + 2 }}"
+ delay: 0.01
+ loop: "{{ until_tempfile_path_var_names }}"
+ loop_control:
+ index_var: idx
+ loop_var: tmp_file_var
+
+- debug: var=runcount
+
+- assert:
+ that: item.stdout | int == idx + 3
+ loop: "{{ runcount.results }}"
+ loop_control:
+ index_var: idx
+
+- &cleanup-tmp-files
+ name: Empty tmp files
+ copy:
+ content: ""
+ dest: "{{ lookup('vars', tmp_file_var) }}"
+ loop: "{{ until_tempfile_path_var_names }}"
+ loop_control:
+ index_var: idx
+ loop_var: tmp_file_var
+
+- name: loop with specified max retries
+ shell: echo "run" >> {{ lookup('vars', tmp_file_var) }}
+ until: 1==0
+ retries: 5
+ delay: 0.01
+ ignore_errors: true
+ loop: "{{ until_tempfile_path_var_names }}"
+ loop_control:
+ index_var: idx
+ loop_var: tmp_file_var
+
+- name: validate output
+ shell: wc -l < {{ lookup('vars', tmp_file_var) }}
+ register: runcount
+ loop: "{{ until_tempfile_path_var_names }}"
+ loop_control:
+ index_var: idx
+ loop_var: tmp_file_var
+
+- assert:
+ that: item.stdout | int == 6 # initial + 5 retries
+ loop: "{{ runcount.results }}"
+
+- *cleanup-tmp-files
+
+- name: Test failed_when impacting until
+ shell: echo "run" >> {{ lookup('vars', tmp_file_var) }}
+ register: failed_when_until
+ failed_when: True
+ until: failed_when_until is successful
+ retries: 3
+ delay: 0.5
+ ignore_errors: True
+ loop: "{{ until_tempfile_path_var_names }}"
+ loop_control:
+ index_var: idx
+ loop_var: tmp_file_var
+
+- name: Get attempts number
+ shell: wc -l < {{ lookup('vars', tmp_file_var) }}
+ register: runcount
+ loop: "{{ until_tempfile_path_var_names }}"
+ loop_control:
+ index_var: idx
+ loop_var: tmp_file_var
+
+- assert:
+ that: item.stdout | int == 3 + 1
+ loop: "{{ runcount.results }}"
+
+- *cleanup-tmp-files
+
+- name: Test changed_when impacting until
+ shell: echo "run" >> {{ lookup('vars', tmp_file_var) }}
+ register: changed_when_until
+ changed_when: False
+ until: changed_when_until is changed
+ retries: 3
+ delay: 0.5
+ ignore_errors: True
+ loop: "{{ until_tempfile_path_var_names }}"
+ loop_control:
+ index_var: idx
+ loop_var: tmp_file_var
+
+- name: Get attempts number
+ shell: wc -l < {{ lookup('vars', tmp_file_var) }}
+ register: runcount
+ loop: "{{ until_tempfile_path_var_names }}"
+ loop_control:
+ index_var: idx
+ loop_var: tmp_file_var
+
+- assert:
+ that: item.stdout | int == 3 + 1
+ loop: "{{ runcount.results }}"
+
+- *cleanup-tmp-files
+
+- name: Test access to attempts in changed_when/failed_when
+ shell: 'true'
+ register: changed_when_attempts
+ until: 1 == 0
+ retries: 5
+ delay: 0.5
+ failed_when: changed_when_attempts.attempts > 6
+ loop: "{{ runcount.results }}"
+
+- &wipe-out-tmp-files
+ file: path="{{ lookup('vars', tmp_file_var) }}" state=absent
+ loop: "{{ until_tempfile_path_var_names }}"
+ loop_control:
+ index_var: idx
+ loop_var: tmp_file_var