From d2a7cc0b9f835d972941168d5c49e398c65d88a9 Mon Sep 17 00:00:00 2001 From: Matt Clay Date: Thu, 24 Jan 2019 19:25:06 -0800 Subject: [PATCH] Fix integration tests to support remote hosts. --- test/integration/targets/blocks/main.yml | 2 +- test/integration/targets/config/runme.sh | 4 +- test/integration/targets/fetch/meta/main.yml | 1 + test/integration/targets/fetch/tasks/main.yml | 51 ++--- .../integration/targets/get_url/meta/main.yml | 1 + .../targets/get_url/tasks/main.yml | 99 +++++---- test/integration/targets/git/tasks/depth.yml | 7 +- .../targets/git/tasks/localmods.yml | 14 +- .../targets/includes/test_includes3.yml | 2 +- .../lookup_hashi_vault/tasks/main.yml | 2 - .../playbooks/install_dependencies.yml | 2 +- .../playbooks/test_lookup_hashi_vault.yml | 2 +- .../targets/lookup_hashi_vault/runme.sh | 4 +- .../targets/mysql_user/meta/main.yml | 1 + .../targets/mysql_user/tasks/issue-29511.yaml | 12 +- .../targets/prepare_http_tests/meta/main.yml | 2 + .../targets/prepare_http_tests/tasks/main.yml | 2 +- .../targets/setup_deb_repo/meta/main.yml | 2 + .../targets/setup_deb_repo/tasks/main.yml | 9 +- .../targets/setup_docker/meta/main.yml | 2 + .../targets/setup_docker/tasks/main.yml | 2 +- .../aliases | 0 .../setup_remote_constraints/meta/main.yml | 2 + .../setup_remote_constraints/tasks/main.yml | 8 + .../setup_remote_tmp_dir/handlers/main.yml | 9 + .../setup_remote_tmp_dir/tasks/default.yml | 11 + .../setup_remote_tmp_dir/tasks/main.yml | 10 + .../setup_remote_tmp_dir/tasks/windows.yml | 11 + .../targets/unarchive/meta/main.yml | 1 + .../targets/unarchive/tasks/main.yml | 197 +++++++++--------- test/integration/targets/uri/aliases | 1 - test/integration/targets/uri/meta/main.yml | 2 + test/integration/targets/uri/tasks/main.yml | 28 +-- test/integration/targets/user/tasks/main.yml | 19 +- .../xml/tasks/test-pretty-print-only.yml | 6 +- .../test-set-namespaced-children-elements.yml | 3 + .../targets/xml/tasks/test-xmlstring.yml | 15 +- 37 files changed, 321 insertions(+), 225 deletions(-) create mode 100644 test/integration/targets/prepare_http_tests/meta/main.yml create mode 100644 test/integration/targets/setup_deb_repo/meta/main.yml create mode 100644 test/integration/targets/setup_docker/meta/main.yml rename test/integration/targets/{setup_docker => setup_remote_constraints}/aliases (100%) create mode 100644 test/integration/targets/setup_remote_constraints/meta/main.yml create mode 100644 test/integration/targets/setup_remote_constraints/tasks/main.yml create mode 100644 test/integration/targets/setup_remote_tmp_dir/handlers/main.yml create mode 100644 test/integration/targets/setup_remote_tmp_dir/tasks/default.yml create mode 100644 test/integration/targets/setup_remote_tmp_dir/tasks/main.yml create mode 100644 test/integration/targets/setup_remote_tmp_dir/tasks/windows.yml diff --git a/test/integration/targets/blocks/main.yml b/test/integration/targets/blocks/main.yml index a4d8b8bbe8b..ea61d058694 100644 --- a/test/integration/targets/blocks/main.yml +++ b/test/integration/targets/blocks/main.yml @@ -1,5 +1,5 @@ - name: simple block test - hosts: localhost + hosts: testhost gather_facts: yes strategy: "{{test_strategy|default('linear')}}" vars: diff --git a/test/integration/targets/config/runme.sh b/test/integration/targets/config/runme.sh index 4d6703e3b72..068eed0c9a9 100755 --- a/test/integration/targets/config/runme.sh +++ b/test/integration/targets/config/runme.sh @@ -4,7 +4,7 @@ set -eux # ignore empty env var and use default # shellcheck disable=SC1007 -ANSIBLE_TIMEOUT= ansible -m ping localhost "$@" +ANSIBLE_TIMEOUT= ansible -m ping testhost -i ../../inventory "$@" # env var is wrong type, this should be a fatal error pointing at the setting -ANSIBLE_TIMEOUT='lola' ansible -m ping localhost "$@" 2>&1|grep 'Invalid type for configuration option setting: DEFAULT_TIMEOUT' +ANSIBLE_TIMEOUT='lola' ansible -m ping testhost -i ../../inventory "$@" 2>&1|grep 'Invalid type for configuration option setting: DEFAULT_TIMEOUT' diff --git a/test/integration/targets/fetch/meta/main.yml b/test/integration/targets/fetch/meta/main.yml index 07faa217762..cb6005d042c 100644 --- a/test/integration/targets/fetch/meta/main.yml +++ b/test/integration/targets/fetch/meta/main.yml @@ -1,2 +1,3 @@ dependencies: - prepare_tests + - setup_remote_tmp_dir diff --git a/test/integration/targets/fetch/tasks/main.yml b/test/integration/targets/fetch/tasks/main.yml index d7ea3ea947f..af213698af9 100644 --- a/test/integration/targets/fetch/tasks/main.yml +++ b/test/integration/targets/fetch/tasks/main.yml @@ -17,10 +17,10 @@ # along with Ansible. If not, see . - name: create a file that we can use to fetch - copy: content="test" dest={{ output_dir }}/orig + copy: content="test" dest={{ remote_tmp_dir }}/orig - name: fetch the motd - fetch: src={{ output_dir }}/orig dest={{ output_dir }}/fetched + fetch: src={{ remote_tmp_dir }}/orig dest={{ output_dir }}/fetched register: fetched - debug: var=fetched @@ -31,22 +31,14 @@ - 'fetched["changed"] == True' - 'fetched["checksum"] == "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"' - 'fetched["remote_checksum"] == "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"' + - 'lookup("file", output_dir + "/fetched/" + inventory_hostname + remote_tmp_dir + "/orig") == "test"' # TODO: check the become and non-become forms of fetch because in one form we'll do # the get method of the connection plugin and in the become case we'll use the # fetch module. -- name: diff what we fetched with the original file - shell: diff {{ output_dir }}/orig {{ output_dir }}/fetched/{{inventory_hostname}}{{ output_dir | expanduser }}/orig - register: diff - -- name: check the diff to make sure they are the same - assert: - that: - 'diff.stdout == ""' - - name: fetch a second time to show idempotence - fetch: src={{ output_dir }}/orig dest={{ output_dir }}/fetched + fetch: src={{ remote_tmp_dir }}/orig dest={{ output_dir }}/fetched register: fetched - name: Assert that the file was not fetched the second time @@ -56,7 +48,7 @@ - 'fetched["checksum"] == "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"' - name: attempt to fetch a non-existent file - do not fail on missing - fetch: src={{ output_dir }}/doesnotexist dest={{ output_dir }}/fetched fail_on_missing=False + fetch: src={{ remote_tmp_dir }}/doesnotexist dest={{ output_dir }}/fetched fail_on_missing=False register: fetch_missing_nofail - name: check fetch missing no fail result @@ -66,7 +58,7 @@ - "fetch_missing_nofail is not changed" - name: attempt to fetch a non-existent file - fail on missing - fetch: src={{ output_dir }}/doesnotexist dest={{ output_dir }}/fetched fail_on_missing=yes + fetch: src={{ remote_tmp_dir }}/doesnotexist dest={{ output_dir }}/fetched fail_on_missing=yes register: fetch_missing ignore_errors: true @@ -78,7 +70,7 @@ - "fetch_missing is not changed" - name: attempt to fetch a non-existent file - fail on missing implicit - fetch: src={{ output_dir }}/doesnotexist dest={{ output_dir }}/fetched + fetch: src={{ remote_tmp_dir }}/doesnotexist dest={{ output_dir }}/fetched register: fetch_missing_implicit ignore_errors: true @@ -90,7 +82,7 @@ - "fetch_missing_implicit is not changed" - name: attempt to fetch a directory - should not fail but return a message - fetch: src={{ output_dir }} dest={{ output_dir }}/somedir fail_on_missing=False + fetch: src={{ remote_tmp_dir }} dest={{ output_dir }}/somedir fail_on_missing=False register: fetch_dir - name: check fetch directory result @@ -100,7 +92,7 @@ - "fetch_dir.msg" - name: attempt to fetch a directory - should fail - fetch: src={{ output_dir }} dest={{ output_dir }}/somedir fail_on_missing=True + fetch: src={{ remote_tmp_dir }} dest={{ output_dir }}/somedir fail_on_missing=True register: failed_fetch_dir ignore_errors: true @@ -112,32 +104,31 @@ - name: create symlink to a file that we can fetch file: - path: "{{ output_dir }}/link" - src: "{{ output_dir }}/orig" + path: "{{ remote_tmp_dir }}/link" + src: "{{ remote_tmp_dir }}/orig" state: "link" - name: fetch the file via a symlink - fetch: src={{ output_dir }}/link dest={{ output_dir }}/fetched-link + fetch: src={{ remote_tmp_dir }}/link dest={{ output_dir }}/fetched-link register: fetched - debug: var=fetched +- name: Assert that we fetched correctly + assert: + that: + - 'fetched["changed"] == True' + - 'fetched["checksum"] == "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"' + - 'fetched["remote_checksum"] == "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"' + - 'lookup("file", output_dir + "/fetched-link/" + inventory_hostname + remote_tmp_dir + "/link") == "test"' + # TODO: check the become and non-become forms of fetch because in one form we'll do # the get method of the connection plugin and in the become case we'll use the # fetch module. -- name: diff what we fetched with the original file - shell: diff {{ output_dir }}/orig {{ output_dir }}/fetched-link/{{inventory_hostname}}{{ output_dir | expanduser }}/link - register: diff - -- name: check the diff to make sure they are the same - assert: - that: - 'diff.stdout == ""' - - name: dest is an existing directory name without trailing slash and flat=yes, should fail fetch: - src: "{{ output_dir }}/orig" + src: "{{ remote_tmp_dir }}/orig" dest: "{{ output_dir }}" flat: yes register: failed_fetch_dest_dir diff --git a/test/integration/targets/get_url/meta/main.yml b/test/integration/targets/get_url/meta/main.yml index a5f3f707365..2c2155aba02 100644 --- a/test/integration/targets/get_url/meta/main.yml +++ b/test/integration/targets/get_url/meta/main.yml @@ -1,3 +1,4 @@ dependencies: - prepare_tests - prepare_http_tests + - setup_remote_tmp_dir diff --git a/test/integration/targets/get_url/tasks/main.yml b/test/integration/targets/get_url/tasks/main.yml index 170b080713f..e6d6d9c6147 100644 --- a/test/integration/targets/get_url/tasks/main.yml +++ b/test/integration/targets/get_url/tasks/main.yml @@ -33,8 +33,8 @@ - name: Define test files for file schema set_fact: - geturl_srcfile: "{{ output_dir }}/aurlfile.txt" - geturl_dstfile: "{{ output_dir }}/aurlfile_copy.txt" + geturl_srcfile: "{{ remote_tmp_dir }}/aurlfile.txt" + geturl_dstfile: "{{ remote_tmp_dir }}/aurlfile_copy.txt" - name: Create source file copy: @@ -69,7 +69,7 @@ - name: test HTTP HEAD request for file in check mode get_url: url: "https://{{ httpbin_host }}/get" - dest: "{{ output_dir }}/get_url_check.txt" + dest: "{{ remote_tmp_dir }}/get_url_check.txt" force: yes check_mode: True register: result @@ -83,7 +83,7 @@ - name: test HTTP HEAD for nonexistent URL in check mode get_url: url: "https://{{ httpbin_host }}/DOESNOTEXIST" - dest: "{{ output_dir }}/shouldnotexist.html" + dest: "{{ remote_tmp_dir }}/shouldnotexist.html" force: yes check_mode: True register: result @@ -95,7 +95,7 @@ - result is failed - name: test https fetch - get_url: url="https://{{ httpbin_host }}/get" dest={{output_dir}}/get_url.txt force=yes + get_url: url="https://{{ httpbin_host }}/get" dest={{remote_tmp_dir}}/get_url.txt force=yes register: result - name: assert the get_url call was successful @@ -107,12 +107,12 @@ - name: test https fetch to a site with mismatched hostname and certificate get_url: url: "https://{{ badssl_host }}/" - dest: "{{ output_dir }}/shouldnotexist.html" + dest: "{{ remote_tmp_dir }}/shouldnotexist.html" ignore_errors: True register: result - stat: - path: "{{ output_dir }}/shouldnotexist.html" + path: "{{ remote_tmp_dir }}/shouldnotexist.html" register: stat_result - name: Assert that the file was not downloaded @@ -125,12 +125,12 @@ - name: test https fetch to a site with mismatched hostname and certificate and validate_certs=no get_url: url: "https://{{ badssl_host }}/" - dest: "{{ output_dir }}/get_url_no_validate.html" + dest: "{{ remote_tmp_dir }}/get_url_no_validate.html" validate_certs: no register: result - stat: - path: "{{ output_dir }}/get_url_no_validate.html" + path: "{{ remote_tmp_dir }}/get_url_no_validate.html" register: stat_result - name: Assert that the file was downloaded @@ -144,11 +144,11 @@ - name: Test that SNI works get_url: url: 'https://{{ sni_host }}/' - dest: "{{ output_dir }}/sni.html" + dest: "{{ remote_tmp_dir }}/sni.html" register: get_url_result ignore_errors: True -- command: "grep '{{ sni_host }}' {{ output_dir}}/sni.html" +- command: "grep '{{ sni_host }}' {{ remote_tmp_dir}}/sni.html" register: data_result when: python_has_ssl_context @@ -173,11 +173,11 @@ - name: Test that SNI works get_url: url: 'https://{{ sni_host }}/' - dest: "{{ output_dir }}/sni.html" + dest: "{{ remote_tmp_dir }}/sni.html" register: get_url_result ignore_errors: True -- command: "grep '{{ sni_host }}' {{ output_dir}}/sni.html" +- command: "grep '{{ sni_host }}' {{ remote_tmp_dir}}/sni.html" register: data_result when: python_has_ssl_context @@ -202,17 +202,17 @@ - name: Test get_url with redirect get_url: url: 'https://{{ httpbin_host }}/redirect/6' - dest: "{{ output_dir }}/redirect.json" + dest: "{{ remote_tmp_dir }}/redirect.json" - name: Test that setting file modes work get_url: url: 'https://{{ httpbin_host }}/' - dest: '{{ output_dir }}/test' + dest: '{{ remote_tmp_dir }}/test' mode: '0707' register: result - stat: - path: "{{ output_dir }}/test" + path: "{{ remote_tmp_dir }}/test" register: stat_result - name: Assert that the file has the right permissions @@ -224,12 +224,12 @@ - name: Test that setting file modes on an already downlaoded file work get_url: url: 'https://{{ httpbin_host }}/' - dest: '{{ output_dir }}/test' + dest: '{{ remote_tmp_dir }}/test' mode: '0070' register: result - stat: - path: "{{ output_dir }}/test" + path: "{{ remote_tmp_dir }}/test" register: stat_result - name: Assert that the file has the right permissions @@ -242,13 +242,13 @@ - name: Change mode on an already downloaded file and specify checksum get_url: url: 'https://{{ httpbin_host }}/get' - dest: '{{ output_dir }}/test' + dest: '{{ remote_tmp_dir }}/test' checksum: 'sha256:7036ede810fad2b5d2e7547ec703cae8da61edbba43c23f9d7203a0239b765c4.' mode: '0775' register: result - stat: - path: "{{ output_dir }}/test" + path: "{{ remote_tmp_dir }}/test" register: stat_result - name: Assert that file permissions on already downloaded file were changed @@ -260,7 +260,7 @@ - name: Get a file that already exists get_url: url: 'https://{{ httpbin_host }}/get' - dest: '{{ output_dir }}/test' + dest: '{{ remote_tmp_dir }}/test' register: result - name: Assert that we didn't re-download unnecessarily @@ -273,7 +273,7 @@ - name: set role facts set_fact: http_port: 27617 - files_dir: '{{ output_dir }}/files' + files_dir: '{{ remote_tmp_dir }}/files' - name: create files_dir file: @@ -326,44 +326,44 @@ - copy: src: "testserver.py" - dest: "{{ output_dir }}/testserver.py" + dest: "{{ remote_tmp_dir }}/testserver.py" - name: start SimpleHTTPServer for issues 27617 - shell: cd {{ files_dir }} && {{ ansible_python.executable }} {{ output_dir}}/testserver.py {{ http_port }} + shell: cd {{ files_dir }} && {{ ansible_python.executable }} {{ remote_tmp_dir}}/testserver.py {{ http_port }} async: 90 poll: 0 - name: download src with sha1 checksum url get_url: url: 'http://localhost:{{ http_port }}/27617.txt' - dest: '{{ output_dir }}' + dest: '{{ remote_tmp_dir }}' checksum: 'sha1:http://localhost:{{ http_port }}/sha1sum.txt' register: result_sha1 - stat: - path: "{{ output_dir }}/27617.txt" + path: "{{ remote_tmp_dir }}/27617.txt" register: stat_result_sha1 - name: download src with sha256 checksum url get_url: url: 'http://localhost:{{ http_port }}/27617.txt' - dest: '{{ output_dir }}/27617sha256.txt' + dest: '{{ remote_tmp_dir }}/27617sha256.txt' checksum: 'sha256:http://localhost:{{ http_port }}/sha256sum.txt' register: result_sha256 - stat: - path: "{{ output_dir }}/27617.txt" + path: "{{ remote_tmp_dir }}/27617.txt" register: stat_result_sha256 - name: download src with sha256 checksum url with dot leading paths get_url: url: 'http://localhost:{{ http_port }}/27617.txt' - dest: '{{ output_dir }}/27617sha256_with_dot.txt' + dest: '{{ remote_tmp_dir }}/27617sha256_with_dot.txt' checksum: 'sha256:http://localhost:{{ http_port }}/sha256sum_with_dot.txt' register: result_sha256_with_dot - stat: - path: "{{ output_dir }}/27617sha256_with_dot.txt" + path: "{{ remote_tmp_dir }}/27617sha256_with_dot.txt" register: stat_result_sha256_with_dot - name: Assert that the file was downloaded @@ -380,25 +380,30 @@ - name: Test url split with no filename get_url: url: https://{{ httpbin_host }} - dest: "{{ output_dir }}" + dest: "{{ remote_tmp_dir }}" - name: Test headers string get_url: url: https://{{ httpbin_host }}/headers headers: Foo:bar,Baz:qux - dest: "{{ output_dir }}/headers_string.json" + dest: "{{ remote_tmp_dir }}/headers_string.json" + +- name: Get downloaded file + slurp: + src: "{{ remote_tmp_dir }}/headers_string.json" + register: result - name: Test headers string assert: that: - - (lookup('file', output_dir ~ '/headers_string.json')|from_json).headers.get('Foo') == 'bar' - - (lookup('file', output_dir ~ '/headers_string.json')|from_json).headers.get('Baz') == 'qux' + - (result["content"] | b64decode | from_json).headers.get('Foo') == 'bar' + - (result["content"] | b64decode | from_json).headers.get('Baz') == 'qux' - name: Test headers string invalid format get_url: url: https://{{ httpbin_host }}/headers headers: Foo - dest: "{{ output_dir }}/headers_string_invalid.json" + dest: "{{ remote_tmp_dir }}/headers_string_invalid.json" register: invalid_string_headers failed_when: - invalid_string_headers is successful @@ -410,24 +415,34 @@ headers: Foo: bar Baz: qux - dest: "{{ output_dir }}/headers_dict.json" + dest: "{{ remote_tmp_dir }}/headers_dict.json" + +- name: Get downloaded file + slurp: + src: "{{ remote_tmp_dir }}/headers_dict.json" + register: result - name: Test headers dict assert: that: - - (lookup('file', output_dir ~ '/headers_dict.json')|from_json).headers.get('Foo') == 'bar' - - (lookup('file', output_dir ~ '/headers_dict.json')|from_json).headers.get('Baz') == 'qux' + - (result["content"] | b64decode | from_json).headers.get('Foo') == 'bar' + - (result["content"] | b64decode | from_json).headers.get('Baz') == 'qux' - name: Test client cert auth, with certs get_url: url: "https://ansible.http.tests/ssl_client_verify" - client_cert: "{{ output_dir }}/client.pem" - client_key: "{{ output_dir }}/client.key" - dest: "{{ output_dir }}/ssl_client_verify" + client_cert: "{{ remote_tmp_dir }}/client.pem" + client_key: "{{ remote_tmp_dir }}/client.key" + dest: "{{ remote_tmp_dir }}/ssl_client_verify" when: has_httptester +- name: Get downloaded file + slurp: + src: "{{ remote_tmp_dir }}/ssl_client_verify" + register: result + - name: Assert that the ssl_client_verify file contains the correct content assert: that: - - 'lookup("file", "{{ output_dir }}/ssl_client_verify") == "ansible.http.tests:SUCCESS"' + - '(result["content"] | b64decode) == "ansible.http.tests:SUCCESS"' when: has_httptester diff --git a/test/integration/targets/git/tasks/depth.yml b/test/integration/targets/git/tasks/depth.yml index 769a73c9445..37b6ecdfefc 100644 --- a/test/integration/targets/git/tasks/depth.yml +++ b/test/integration/targets/git/tasks/depth.yml @@ -161,10 +161,15 @@ register: git_fetch ignore_errors: yes +- name: DEPTH | get "a" file + slurp: + src: '{{ checkout_dir }}/a' + register: a_file + - name: DEPTH | check update arrived assert: that: - - "{{ lookup('file', checkout_dir+'/a' )}} == 3" + - "{{ a_file['content'] | b64decode | trim }} == 3" - git_fetch is changed - name: DEPTH | clear checkout_dir diff --git a/test/integration/targets/git/tasks/localmods.yml b/test/integration/targets/git/tasks/localmods.yml index fc2427c741f..083ec3f2afc 100644 --- a/test/integration/targets/git/tasks/localmods.yml +++ b/test/integration/targets/git/tasks/localmods.yml @@ -39,10 +39,15 @@ register: git_fetch_force ignore_errors: yes +- name: LOCALMODS | get "a" file + slurp: + src: '{{ checkout_dir }}/a' + register: a_file + - name: LOCALMODS | check update arrived assert: that: - - "{{ lookup('file', checkout_dir+'/a' )}} == 2" + - "{{ a_file['content'] | b64decode | trim }} == 2" - git_fetch_force is changed - name: LOCALMODS | clear checkout_dir @@ -92,10 +97,15 @@ register: git_fetch_force ignore_errors: yes +- name: LOCALMODS | get "a" file + slurp: + src: '{{ checkout_dir }}/a' + register: a_file + - name: LOCALMODS | check update arrived assert: that: - - "{{ lookup('file', checkout_dir+'/a' )}} == 2" + - "{{ a_file['content'] | b64decode | trim }} == 2" - git_fetch_force is changed - name: LOCALMODS | clear checkout_dir diff --git a/test/integration/targets/includes/test_includes3.yml b/test/integration/targets/includes/test_includes3.yml index bd3b0d30dab..0b4c6312109 100644 --- a/test/integration/targets/includes/test_includes3.yml +++ b/test/integration/targets/includes/test_includes3.yml @@ -1,4 +1,4 @@ -- hosts: localhost +- hosts: testhost tasks: - include: test_includes4.yml with_items: ["a"] diff --git a/test/integration/targets/lookup_hashi_vault/lookup_hashi_vault/tasks/main.yml b/test/integration/targets/lookup_hashi_vault/lookup_hashi_vault/tasks/main.yml index ff93f83f79e..9bde696c5af 100644 --- a/test/integration/targets/lookup_hashi_vault/lookup_hashi_vault/tasks/main.yml +++ b/test/integration/targets/lookup_hashi_vault/lookup_hashi_vault/tasks/main.yml @@ -6,8 +6,6 @@ vault_uri: 'https://ansible-ci-files.s3.amazonaws.com/test/integration/targets/lookup_hashi_vault/vault_{{ vault_version }}_{{ ansible_system | lower }}_{{ vault_arch }}.zip' vault_cmd: '{{ local_temp_dir }}/vault' - connection: local # already defined in inventory for testhost, usefull when used with another inventory - block: - name: Create a local temporary directory tempfile: diff --git a/test/integration/targets/lookup_hashi_vault/playbooks/install_dependencies.yml b/test/integration/targets/lookup_hashi_vault/playbooks/install_dependencies.yml index ad3d8afb878..30e2d02df01 100644 --- a/test/integration/targets/lookup_hashi_vault/playbooks/install_dependencies.yml +++ b/test/integration/targets/lookup_hashi_vault/playbooks/install_dependencies.yml @@ -1,4 +1,4 @@ -- hosts: testhost +- hosts: localhost tasks: - name: Install openssl import_role: diff --git a/test/integration/targets/lookup_hashi_vault/playbooks/test_lookup_hashi_vault.yml b/test/integration/targets/lookup_hashi_vault/playbooks/test_lookup_hashi_vault.yml index bb3a136ae5e..8d3f3201034 100644 --- a/test/integration/targets/lookup_hashi_vault/playbooks/test_lookup_hashi_vault.yml +++ b/test/integration/targets/lookup_hashi_vault/playbooks/test_lookup_hashi_vault.yml @@ -1,4 +1,4 @@ -- hosts: testhost +- hosts: localhost tasks: - name: register pyOpenSSL version command: "{{ ansible_python.executable }} -c 'import OpenSSL; print(OpenSSL.__version__)'" diff --git a/test/integration/targets/lookup_hashi_vault/runme.sh b/test/integration/targets/lookup_hashi_vault/runme.sh index e726ca19150..a757e8940a7 100755 --- a/test/integration/targets/lookup_hashi_vault/runme.sh +++ b/test/integration/targets/lookup_hashi_vault/runme.sh @@ -18,8 +18,8 @@ set -eux ANSIBLE_ROLES_PATH=../ \ ANSIBLE_CONFIG=../../integration.cfg \ - ansible-playbook -i ../../inventory -e@../../integration_config.yml playbooks/install_dependencies.yml -v "$@" + ansible-playbook -e@../../integration_config.yml playbooks/install_dependencies.yml -v "$@" ANSIBLE_ROLES_PATH=../ \ ANSIBLE_CONFIG=../../integration.cfg \ - ansible-playbook -i ../../inventory -e@../../integration_config.yml playbooks/test_lookup_hashi_vault.yml -v "$@" + ansible-playbook -e@../../integration_config.yml playbooks/test_lookup_hashi_vault.yml -v "$@" diff --git a/test/integration/targets/mysql_user/meta/main.yml b/test/integration/targets/mysql_user/meta/main.yml index 4aa170dc067..1892924b21e 100644 --- a/test/integration/targets/mysql_user/meta/main.yml +++ b/test/integration/targets/mysql_user/meta/main.yml @@ -1,2 +1,3 @@ dependencies: - setup_mysql_db + - setup_remote_tmp_dir diff --git a/test/integration/targets/mysql_user/tasks/issue-29511.yaml b/test/integration/targets/mysql_user/tasks/issue-29511.yaml index b799be6462b..fa5d8eddc45 100644 --- a/test/integration/targets/mysql_user/tasks/issue-29511.yaml +++ b/test/integration/targets/mysql_user/tasks/issue-29511.yaml @@ -18,11 +18,19 @@ - foo - bar +- name: Copy SQL scripts to remote + copy: + src: "{{ item }}" + dest: "{{ remote_tmp_dir }}/{{ item | basename }}" + with_items: + - create-function.sql + - create-procedure.sql + - name: Create function for test - shell: "mysql < {{ role_path }}/files/create-function.sql" + shell: "mysql < {{ remote_tmp_dir }}/create-function.sql" - name: Create procedure for test - shell: "mysql < {{ role_path }}/files/create-procedure.sql" + shell: "mysql < {{ remote_tmp_dir }}/create-procedure.sql" - name: Create user with FUNCTION and PROCEDURE privileges mysql_user: diff --git a/test/integration/targets/prepare_http_tests/meta/main.yml b/test/integration/targets/prepare_http_tests/meta/main.yml new file mode 100644 index 00000000000..1810d4bec98 --- /dev/null +++ b/test/integration/targets/prepare_http_tests/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - setup_remote_tmp_dir diff --git a/test/integration/targets/prepare_http_tests/tasks/main.yml b/test/integration/targets/prepare_http_tests/tasks/main.yml index bb69662215e..398c7b29f2c 100644 --- a/test/integration/targets/prepare_http_tests/tasks/main.yml +++ b/test/integration/targets/prepare_http_tests/tasks/main.yml @@ -37,7 +37,7 @@ - name: Get client cert/key get_url: url: "http://ansible.http.tests/{{ item }}" - dest: "{{ output_dir }}/{{ item }}" + dest: "{{ remote_tmp_dir }}/{{ item }}" when: ansible_os_family != 'Windows' with_items: - client.pem diff --git a/test/integration/targets/setup_deb_repo/meta/main.yml b/test/integration/targets/setup_deb_repo/meta/main.yml new file mode 100644 index 00000000000..1810d4bec98 --- /dev/null +++ b/test/integration/targets/setup_deb_repo/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - setup_remote_tmp_dir diff --git a/test/integration/targets/setup_deb_repo/tasks/main.yml b/test/integration/targets/setup_deb_repo/tasks/main.yml index 9660416cba3..49f68a2cdfb 100644 --- a/test/integration/targets/setup_deb_repo/tasks/main.yml +++ b/test/integration/targets/setup_deb_repo/tasks/main.yml @@ -16,8 +16,15 @@ state: directory mode: 0755 + - name: Copy package specs to remote + copy: + src: "{{ item }}" + dest: "{{ remote_tmp_dir }}/{{ item | basename }}" + with_fileglob: + - "files/package_specs/*" + - name: Create deb files - shell: "equivs-build {{ item }}" + shell: "equivs-build {{ remote_tmp_dir }}/{{ item | basename }}" args: chdir: "{{ repodir }}" with_fileglob: diff --git a/test/integration/targets/setup_docker/meta/main.yml b/test/integration/targets/setup_docker/meta/main.yml new file mode 100644 index 00000000000..91a63627f6a --- /dev/null +++ b/test/integration/targets/setup_docker/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - setup_remote_constraints diff --git a/test/integration/targets/setup_docker/tasks/main.yml b/test/integration/targets/setup_docker/tasks/main.yml index 20096115576..068d776e7c0 100644 --- a/test/integration/targets/setup_docker/tasks/main.yml +++ b/test/integration/targets/setup_docker/tasks/main.yml @@ -16,7 +16,7 @@ pip: state: present name: 'docker{{ extra_packages }}' - extra_args: "-c {{ role_path }}/../../../runner/requirements/constraints.txt" + extra_args: "-c {{ remote_constraints }}" # Detect docker CLI, API and docker-py versions - name: Check Docker CLI version diff --git a/test/integration/targets/setup_docker/aliases b/test/integration/targets/setup_remote_constraints/aliases similarity index 100% rename from test/integration/targets/setup_docker/aliases rename to test/integration/targets/setup_remote_constraints/aliases diff --git a/test/integration/targets/setup_remote_constraints/meta/main.yml b/test/integration/targets/setup_remote_constraints/meta/main.yml new file mode 100644 index 00000000000..1810d4bec98 --- /dev/null +++ b/test/integration/targets/setup_remote_constraints/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - setup_remote_tmp_dir diff --git a/test/integration/targets/setup_remote_constraints/tasks/main.yml b/test/integration/targets/setup_remote_constraints/tasks/main.yml new file mode 100644 index 00000000000..9827267dfc5 --- /dev/null +++ b/test/integration/targets/setup_remote_constraints/tasks/main.yml @@ -0,0 +1,8 @@ +- name: record constraints.txt path on remote host + set_fact: + remote_constraints: "{{ remote_tmp_dir }}/constraints.txt" + +- name: copy constraints.txt to remote host + copy: + src: "{{ role_path }}/../../../runner/requirements/constraints.txt" + dest: "{{ remote_constraints }}" diff --git a/test/integration/targets/setup_remote_tmp_dir/handlers/main.yml b/test/integration/targets/setup_remote_tmp_dir/handlers/main.yml new file mode 100644 index 00000000000..0e84a785e4f --- /dev/null +++ b/test/integration/targets/setup_remote_tmp_dir/handlers/main.yml @@ -0,0 +1,9 @@ +- name: delete temporary directory + file: + path: "{{ remote_tmp_dir }}" + state: absent + +- name: delete temporary directory (windows) + win_file: + path: "{{ remote_tmp_dir }}" + state: absent diff --git a/test/integration/targets/setup_remote_tmp_dir/tasks/default.yml b/test/integration/targets/setup_remote_tmp_dir/tasks/default.yml new file mode 100644 index 00000000000..1e0f51b8904 --- /dev/null +++ b/test/integration/targets/setup_remote_tmp_dir/tasks/default.yml @@ -0,0 +1,11 @@ +- name: create temporary directory + tempfile: + state: directory + suffix: .test + register: remote_tmp_dir + notify: + - delete temporary directory + +- name: record temporary directory + set_fact: + remote_tmp_dir: "{{ remote_tmp_dir.path }}" diff --git a/test/integration/targets/setup_remote_tmp_dir/tasks/main.yml b/test/integration/targets/setup_remote_tmp_dir/tasks/main.yml new file mode 100644 index 00000000000..f8df391b5f1 --- /dev/null +++ b/test/integration/targets/setup_remote_tmp_dir/tasks/main.yml @@ -0,0 +1,10 @@ +- name: make sure we have the ansible_os_family and ansible_distribution_version facts + setup: + gather_subset: distribution + when: ansible_facts == {} + +- include_tasks: "{{ lookup('first_found', files)}}" + vars: + files: + - "{{ ansible_os_family | lower }}.yml" + - "default.yml" diff --git a/test/integration/targets/setup_remote_tmp_dir/tasks/windows.yml b/test/integration/targets/setup_remote_tmp_dir/tasks/windows.yml new file mode 100644 index 00000000000..afedc4ebf00 --- /dev/null +++ b/test/integration/targets/setup_remote_tmp_dir/tasks/windows.yml @@ -0,0 +1,11 @@ +- name: create temporary directory + win_tempfile: + state: directory + suffix: .test + register: remote_tmp_dir + notify: + - delete temporary directory (windows) + +- name: record temporary directory + set_fact: + remote_tmp_dir: "{{ remote_tmp_dir.path }}" diff --git a/test/integration/targets/unarchive/meta/main.yml b/test/integration/targets/unarchive/meta/main.yml index 07faa217762..cb6005d042c 100644 --- a/test/integration/targets/unarchive/meta/main.yml +++ b/test/integration/targets/unarchive/meta/main.yml @@ -1,2 +1,3 @@ dependencies: - prepare_tests + - setup_remote_tmp_dir diff --git a/test/integration/targets/unarchive/tasks/main.yml b/test/integration/targets/unarchive/tasks/main.yml index 8d816faedc3..a4ac8349775 100644 --- a/test/integration/targets/unarchive/tasks/main.yml +++ b/test/integration/targets/unarchive/tasks/main.yml @@ -35,34 +35,34 @@ when: ansible_pkg_mgr == 'pkgng' - name: prep our file - copy: src=foo.txt dest={{output_dir}}/foo-unarchive.txt + copy: src=foo.txt dest={{remote_tmp_dir}}/foo-unarchive.txt - name: prep a tar file - shell: tar cvf test-unarchive.tar foo-unarchive.txt chdir={{output_dir}} + shell: tar cvf test-unarchive.tar foo-unarchive.txt chdir={{remote_tmp_dir}} - name: prep a tar.gz file - shell: tar czvf test-unarchive.tar.gz foo-unarchive.txt chdir={{output_dir}} + shell: tar czvf test-unarchive.tar.gz foo-unarchive.txt chdir={{remote_tmp_dir}} - name: prep a chmodded file for zip - copy: src=foo.txt dest={{output_dir}}/foo-unarchive-777.txt mode=0777 + copy: src=foo.txt dest={{remote_tmp_dir}}/foo-unarchive-777.txt mode=0777 - name: prep a windows permission file for our zip - copy: src=foo.txt dest={{output_dir}}/FOO-UNAR.TXT + copy: src=foo.txt dest={{remote_tmp_dir}}/FOO-UNAR.TXT # This gets around an unzip timestamp bug in some distributions # Recent unzip on Ubuntu and BSD will randomly round some timestamps up. # But that doesn't seem to happen when the timestamp has an even second. - name: Bug work around - command: touch -t "201705111530.00" {{output_dir}}/foo-unarchive.txt {{output_dir}}/foo-unarchive-777.txt {{output_dir}}/FOO-UNAR.TXT + command: touch -t "201705111530.00" {{remote_tmp_dir}}/foo-unarchive.txt {{remote_tmp_dir}}/foo-unarchive-777.txt {{remote_tmp_dir}}/FOO-UNAR.TXT # See Ubuntu bug 1691636: https://bugs.launchpad.net/ubuntu/+source/unzip/+bug/1691636 # When these are fixed, this code should be removed. - name: prep a zip file - shell: zip test-unarchive.zip foo-unarchive.txt foo-unarchive-777.txt chdir={{output_dir}} + shell: zip test-unarchive.zip foo-unarchive.txt foo-unarchive-777.txt chdir={{remote_tmp_dir}} - name: Prepare - Create test dirs file: - path: "{{output_dir}}/{{item}}" + path: "{{remote_tmp_dir}}/{{item}}" state: directory with_items: - created/include @@ -71,7 +71,7 @@ - name: Prepare - Create test files file: - path: "{{output_dir}}/created/{{item}}" + path: "{{remote_tmp_dir}}/created/{{item}}" state: touch with_items: - include/include-1.txt @@ -88,28 +88,28 @@ - other/other-2.ext - name: Prepare - zip file - shell: zip -r {{output_dir}}/unarchive-00.zip * chdir={{output_dir}}/created/ + shell: zip -r {{remote_tmp_dir}}/unarchive-00.zip * chdir={{remote_tmp_dir}}/created/ - name: Prepare - tar file - shell: tar czvf {{output_dir}}/unarchive-00.tar * chdir={{output_dir}}/created/ + shell: tar czvf {{remote_tmp_dir}}/unarchive-00.tar * chdir={{remote_tmp_dir}}/created/ - name: add a file with Windows permissions to zip file - shell: zip -k test-unarchive.zip FOO-UNAR.TXT chdir={{output_dir}} + shell: zip -k test-unarchive.zip FOO-UNAR.TXT chdir={{remote_tmp_dir}} - name: prep a subdirectory - file: path={{output_dir}}/unarchive-dir state=directory + file: path={{remote_tmp_dir}}/unarchive-dir state=directory - name: prep our file - copy: src=foo.txt dest={{output_dir}}/unarchive-dir/foo-unarchive.txt + copy: src=foo.txt dest={{remote_tmp_dir}}/unarchive-dir/foo-unarchive.txt - name: prep a tar.gz file with directory - shell: tar czvf test-unarchive-dir.tar.gz unarchive-dir chdir={{output_dir}} + shell: tar czvf test-unarchive-dir.tar.gz unarchive-dir chdir={{remote_tmp_dir}} - name: create our tar unarchive destination - file: path={{output_dir}}/test-unarchive-tar state=directory + file: path={{remote_tmp_dir}}/test-unarchive-tar state=directory - name: unarchive a tar file - unarchive: src={{output_dir}}/test-unarchive.tar dest="{{output_dir | expanduser}}/test-unarchive-tar" remote_src=yes + unarchive: src={{remote_tmp_dir}}/test-unarchive.tar dest="{{remote_tmp_dir}}/test-unarchive-tar" remote_src=yes register: unarchive01 - name: verify that the file was marked as changed @@ -118,16 +118,16 @@ - "unarchive01.changed == true" - name: verify that the file was unarchived - file: path={{output_dir}}/test-unarchive-tar/foo-unarchive.txt state=file + file: path={{remote_tmp_dir}}/test-unarchive-tar/foo-unarchive.txt state=file - name: remove our tar unarchive destination - file: path={{output_dir}}/test-unarchive-tar state=absent + file: path={{remote_tmp_dir}}/test-unarchive-tar state=absent - name: create our tar.gz unarchive destination - file: path={{output_dir}}/test-unarchive-tar-gz state=directory + file: path={{remote_tmp_dir}}/test-unarchive-tar-gz state=directory - name: unarchive a tar.gz file - unarchive: src={{output_dir}}/test-unarchive.tar.gz dest={{output_dir | expanduser}}/test-unarchive-tar-gz remote_src=yes + unarchive: src={{remote_tmp_dir}}/test-unarchive.tar.gz dest={{remote_tmp_dir}}/test-unarchive-tar-gz remote_src=yes register: unarchive02 - name: verify that the file was marked as changed @@ -138,16 +138,16 @@ - "'files' not in unarchive02" - name: verify that the file was unarchived - file: path={{output_dir}}/test-unarchive-tar-gz/foo-unarchive.txt state=file + file: path={{remote_tmp_dir}}/test-unarchive-tar-gz/foo-unarchive.txt state=file - name: remove our tar.gz unarchive destination - file: path={{output_dir}}/test-unarchive-tar-gz state=absent + file: path={{remote_tmp_dir}}/test-unarchive-tar-gz state=absent - name: create our tar.gz unarchive destination for creates - file: path={{output_dir}}/test-unarchive-tar-gz state=directory + file: path={{remote_tmp_dir}}/test-unarchive-tar-gz state=directory - name: unarchive a tar.gz file with creates set - unarchive: src={{output_dir}}/test-unarchive.tar.gz dest={{output_dir | expanduser}}/test-unarchive-tar-gz remote_src=yes creates={{output_dir}}/test-unarchive-tar-gz/foo-unarchive.txt + unarchive: src={{remote_tmp_dir}}/test-unarchive.tar.gz dest={{remote_tmp_dir}}/test-unarchive-tar-gz remote_src=yes creates={{remote_tmp_dir}}/test-unarchive-tar-gz/foo-unarchive.txt register: unarchive02b - name: verify that the file was marked as changed @@ -156,10 +156,10 @@ - "unarchive02b.changed == true" - name: verify that the file was unarchived - file: path={{output_dir}}/test-unarchive-tar-gz/foo-unarchive.txt state=file + file: path={{remote_tmp_dir}}/test-unarchive-tar-gz/foo-unarchive.txt state=file - name: unarchive a tar.gz file with creates over an existing file - unarchive: src={{output_dir}}/test-unarchive.tar.gz dest={{output_dir | expanduser}}/test-unarchive-tar-gz remote_src=yes creates={{output_dir}}/test-unarchive-tar-gz/foo-unarchive.txt + unarchive: src={{remote_tmp_dir}}/test-unarchive.tar.gz dest={{remote_tmp_dir}}/test-unarchive-tar-gz remote_src=yes creates={{remote_tmp_dir}}/test-unarchive-tar-gz/foo-unarchive.txt register: unarchive02c - name: verify that the file was not marked as changed @@ -169,10 +169,10 @@ - name: unarchive a tar.gz file with creates over an existing file using complex_args unarchive: - src: "{{output_dir}}/test-unarchive.tar.gz" - dest: "{{output_dir | expanduser}}/test-unarchive-tar-gz" + src: "{{remote_tmp_dir}}/test-unarchive.tar.gz" + dest: "{{remote_tmp_dir}}/test-unarchive-tar-gz" remote_src: yes - creates: "{{output_dir}}/test-unarchive-tar-gz/foo-unarchive.txt" + creates: "{{remote_tmp_dir}}/test-unarchive-tar-gz/foo-unarchive.txt" register: unarchive02d - name: verify that the file was not marked as changed @@ -181,13 +181,13 @@ - "unarchive02d.changed == false" - name: remove our tar.gz unarchive destination - file: path={{output_dir}}/test-unarchive-tar-gz state=absent + file: path={{remote_tmp_dir}}/test-unarchive-tar-gz state=absent - name: create our zip unarchive destination - file: path={{output_dir}}/test-unarchive-zip state=directory + file: path={{remote_tmp_dir}}/test-unarchive-zip state=directory - name: unarchive a zip file - unarchive: src={{output_dir}}/test-unarchive.zip dest={{output_dir | expanduser}}/test-unarchive-zip remote_src=yes list_files=True + unarchive: src={{remote_tmp_dir}}/test-unarchive.zip dest={{remote_tmp_dir}}/test-unarchive-zip remote_src=yes list_files=True register: unarchive03 - name: verify that the file was marked as changed @@ -202,14 +202,14 @@ - "'FOO-UNAR.TXT' in unarchive03['files']" - name: verify that the file was unarchived - file: path={{output_dir}}/test-unarchive-zip/{{item}} state=file + file: path={{remote_tmp_dir}}/test-unarchive-zip/{{item}} state=file with_items: - foo-unarchive.txt - foo-unarchive-777.txt - FOO-UNAR.TXT - name: repeat the last request to verify no changes - unarchive: src={{output_dir}}/test-unarchive.zip dest={{output_dir | expanduser}}/test-unarchive-zip remote_src=yes list_files=True + unarchive: src={{remote_tmp_dir}}/test-unarchive.zip dest={{remote_tmp_dir}}/test-unarchive-zip remote_src=yes list_files=True register: unarchive03b - name: verify that the task was not marked as changed @@ -217,18 +217,19 @@ that: - "unarchive03b.changed == false" -- name: "Create {{ output_dir }}/exclude directory" +- name: "Create {{ remote_tmp_dir }}/exclude directory" file: state: directory - path: "{{ output_dir }}/exclude-{{item}}" + path: "{{ remote_tmp_dir }}/exclude-{{item}}" with_items: - zip - tar - name: Unpack archive file excluding regular and glob files. unarchive: - src: "{{ output_dir }}/unarchive-00.{{item}}" - dest: "{{ output_dir }}/exclude-{{item}}" + src: "{{ remote_tmp_dir }}/unarchive-00.{{item}}" + dest: "{{ remote_tmp_dir }}/exclude-{{item}}" + remote_src: yes exclude: - "exclude/exclude-*.txt" - "other/exclude-1.ext" @@ -237,7 +238,7 @@ - tar - name: verify that the file was unarchived - shell: find {{ output_dir }}/exclude-{{item}} chdir={{ output_dir }} + shell: find {{ remote_tmp_dir }}/exclude-{{item}} chdir={{ remote_tmp_dir }} register: unarchive00 with_items: - zip @@ -252,10 +253,10 @@ - "{{ unarchive00.results }}" - name: remove our zip unarchive destination - file: path={{output_dir}}/test-unarchive-zip state=absent + file: path={{remote_tmp_dir}}/test-unarchive-zip state=absent - name: remove our test files for the archive - file: path={{output_dir}}/{{item}} state=absent + file: path={{remote_tmp_dir}}/{{item}} state=absent with_items: - foo-unarchive.txt - foo-unarchive-777.txt @@ -271,7 +272,7 @@ when: unarchive04.stat.exists - name: try unarchiving to /tmp - unarchive: src={{output_dir}}/test-unarchive.tar.gz dest=/tmp remote_src=yes + unarchive: src={{remote_tmp_dir}}/test-unarchive.tar.gz dest=/tmp remote_src=yes register: unarchive05 - name: verify that the file was marked as changed @@ -286,12 +287,12 @@ file: path=/tmp/foo-unarchive.txt state=absent - name: create our unarchive destination - file: path={{output_dir}}/test-unarchive-tar-gz state=directory + file: path={{remote_tmp_dir}}/test-unarchive-tar-gz state=directory - name: unarchive and set mode to 0600, directories 0700 unarchive: - src: "{{ output_dir }}/test-unarchive.tar.gz" - dest: "{{ output_dir | expanduser }}/test-unarchive-tar-gz" + src: "{{ remote_tmp_dir }}/test-unarchive.tar.gz" + dest: "{{ remote_tmp_dir }}/test-unarchive-tar-gz" remote_src: yes mode: "u+rwX,g-rwx,o-rwx" list_files: True @@ -299,7 +300,7 @@ - name: Test that the file modes were changed stat: - path: "{{ output_dir | expanduser }}/test-unarchive-tar-gz/foo-unarchive.txt" + path: "{{ remote_tmp_dir }}/test-unarchive-tar-gz/foo-unarchive.txt" register: unarchive06_stat - name: Test that the file modes were changed @@ -313,22 +314,22 @@ - "'foo-unarchive.txt' in unarchive06['files']" - name: remove our tar.gz unarchive destination - file: path={{ output_dir }}/test-unarchive-tar-gz state=absent + file: path={{ remote_tmp_dir }}/test-unarchive-tar-gz state=absent - name: create our unarchive destination - file: path={{output_dir}}/test-unarchive-tar-gz state=directory + file: path={{remote_tmp_dir}}/test-unarchive-tar-gz state=directory - name: unarchive over existing extraction and set mode to 0644 unarchive: - src: "{{ output_dir }}/test-unarchive.tar.gz" - dest: "{{ output_dir | expanduser }}/test-unarchive-tar-gz" + src: "{{ remote_tmp_dir }}/test-unarchive.tar.gz" + dest: "{{ remote_tmp_dir }}/test-unarchive-tar-gz" remote_src: yes mode: "u+rwX,g-wx,o-wx,g+r,o+r" register: unarchive06_2 - name: Test that the file modes were changed stat: - path: "{{ output_dir | expanduser }}/test-unarchive-tar-gz/foo-unarchive.txt" + path: "{{ remote_tmp_dir }}/test-unarchive-tar-gz/foo-unarchive.txt" register: unarchive06_2_stat - debug: var=unarchive06_2_stat.stat.mode @@ -340,8 +341,8 @@ - name: Repeat the last request to verify no changes unarchive: - src: "{{ output_dir }}/test-unarchive.tar.gz" - dest: "{{ output_dir | expanduser }}/test-unarchive-tar-gz" + src: "{{ remote_tmp_dir }}/test-unarchive.tar.gz" + dest: "{{ remote_tmp_dir }}/test-unarchive-tar-gz" remote_src: yes mode: "u+rwX-x,g-wx,o-wx,g+r,o+r" list_files: True @@ -357,15 +358,15 @@ - "'foo-unarchive.txt' in unarchive07['files']" - name: remove our tar.gz unarchive destination - file: path={{ output_dir }}/test-unarchive-tar-gz state=absent + file: path={{ remote_tmp_dir }}/test-unarchive-tar-gz state=absent - name: create our unarchive destination - file: path={{output_dir}}/test-unarchive-zip state=directory + file: path={{remote_tmp_dir}}/test-unarchive-zip state=directory - name: unarchive and set mode to 0601, directories 0700 unarchive: - src: "{{ output_dir }}/test-unarchive.zip" - dest: "{{ output_dir | expanduser }}/test-unarchive-zip" + src: "{{ remote_tmp_dir }}/test-unarchive.zip" + dest: "{{ remote_tmp_dir }}/test-unarchive-zip" remote_src: yes mode: "u+rwX-x,g-rwx,o=x" list_files: True @@ -373,7 +374,7 @@ - name: Test that the file modes were changed stat: - path: "{{ output_dir | expanduser }}/test-unarchive-zip/foo-unarchive.txt" + path: "{{ remote_tmp_dir }}/test-unarchive-zip/foo-unarchive.txt" register: unarchive08_stat - name: Test that the file modes were changed @@ -390,8 +391,8 @@ - name: unarchive zipfile a second time and set mode to 0601, directories 0700 unarchive: - src: "{{ output_dir }}/test-unarchive.zip" - dest: "{{ output_dir | expanduser }}/test-unarchive-zip" + src: "{{ remote_tmp_dir }}/test-unarchive.zip" + dest: "{{ remote_tmp_dir }}/test-unarchive-zip" remote_src: yes mode: "u+rwX-x,g-rwx,o=x" list_files: True @@ -399,7 +400,7 @@ - name: Test that the file modes were not changed stat: - path: "{{ output_dir | expanduser }}/test-unarchive-zip/foo-unarchive.txt" + path: "{{ remote_tmp_dir }}/test-unarchive-zip/foo-unarchive.txt" register: unarchive08_stat - debug: @@ -421,18 +422,18 @@ - "'FOO-UNAR.TXT' in unarchive08['files']" - name: remove our zip unarchive destination - file: path={{ output_dir }}/test-unarchive-zip state=absent + file: path={{ remote_tmp_dir }}/test-unarchive-zip state=absent - name: create our unarchive destination - file: path={{output_dir}}/test-unarchive-tar-gz state=directory + file: path={{remote_tmp_dir}}/test-unarchive-tar-gz state=directory - name: create a directory with quotable chars - file: path="{{ output_dir }}/test-quotes~root" state=directory + file: path="{{ remote_tmp_dir }}/test-quotes~root" state=directory - name: unarchive into directory with quotable chars unarchive: - src: "{{ output_dir }}/test-unarchive.tar.gz" - dest: "{{ output_dir | expanduser }}/test-quotes~root" + src: "{{ remote_tmp_dir }}/test-unarchive.tar.gz" + dest: "{{ remote_tmp_dir }}/test-quotes~root" remote_src: yes register: unarchive08 @@ -443,8 +444,8 @@ - name: unarchive into directory with quotable chars a second time unarchive: - src: "{{ output_dir }}/test-unarchive.tar.gz" - dest: "{{ output_dir | expanduser }}/test-quotes~root" + src: "{{ remote_tmp_dir }}/test-unarchive.tar.gz" + dest: "{{ remote_tmp_dir }}/test-quotes~root" remote_src: yes register: unarchive09 @@ -454,11 +455,11 @@ - "unarchive09.changed == false" - name: remove quotable chars test - file: path="{{ output_dir }}/test-quotes~root" state=absent + file: path="{{ remote_tmp_dir }}/test-quotes~root" state=absent - name: create our unarchive destination file: - path: "{{ output_dir }}/test-unarchive-nonascii-くらとみ-tar-gz" + path: "{{ remote_tmp_dir }}/test-unarchive-nonascii-くらとみ-tar-gz" state: directory - name: test that unarchive works with an archive that contains non-ascii filenames @@ -466,14 +467,14 @@ # Both the filename of the tarball and the filename inside the tarball have # nonascii chars src: "test-unarchive-nonascii-くらとみ.tar.gz" - dest: "{{ output_dir }}/test-unarchive-nonascii-くらとみ-tar-gz" + dest: "{{ remote_tmp_dir }}/test-unarchive-nonascii-くらとみ-tar-gz" mode: "u+rwX,go+rX" remote_src: no register: nonascii_result0 - name: Check that file is really there stat: - path: "{{ output_dir | expanduser }}/test-unarchive-nonascii-くらとみ-tar-gz/storage/àâæçéèïîôœ(copy)!@#$%^&-().jpg" + path: "{{ remote_tmp_dir }}/test-unarchive-nonascii-くらとみ-tar-gz/storage/àâæçéèïîôœ(copy)!@#$%^&-().jpg" register: nonascii_stat0 - name: Assert that nonascii tests succeeded @@ -483,17 +484,17 @@ - "nonascii_stat0.stat.exists == true" - name: remove nonascii test - file: path="{{ output_dir }}/test-unarchive-nonascii-くらとみ-tar-gz" state=absent + file: path="{{ remote_tmp_dir }}/test-unarchive-nonascii-くらとみ-tar-gz" state=absent # Test that unarchiving is performed if files are missing # https://github.com/ansible/ansible-modules-core/issues/1064 - name: create our unarchive destination - file: path={{output_dir}}/test-unarchive-tar-gz state=directory + file: path={{remote_tmp_dir}}/test-unarchive-tar-gz state=directory - name: unarchive a tar that has directories unarchive: - src: "{{ output_dir }}/test-unarchive-dir.tar.gz" - dest: "{{ output_dir }}/test-unarchive-tar-gz" + src: "{{ remote_tmp_dir }}/test-unarchive-dir.tar.gz" + dest: "{{ remote_tmp_dir }}/test-unarchive-tar-gz" mode: "0700" remote_src: yes register: unarchive10 @@ -505,18 +506,18 @@ - name: Change the mode of the toplevel dir file: - path: "{{ output_dir }}/test-unarchive-tar-gz/unarchive-dir" + path: "{{ remote_tmp_dir }}/test-unarchive-tar-gz/unarchive-dir" mode: 0701 - name: Remove a file from the extraction point file: - path: "{{ output_dir }}/test-unarchive-tar-gz/unarchive-dir/foo-unarchive.txt" + path: "{{ remote_tmp_dir }}/test-unarchive-tar-gz/unarchive-dir/foo-unarchive.txt" state: absent - name: unarchive a tar that has directories unarchive: - src: "{{ output_dir }}/test-unarchive-dir.tar.gz" - dest: "{{ output_dir }}/test-unarchive-tar-gz" + src: "{{ remote_tmp_dir }}/test-unarchive-dir.tar.gz" + dest: "{{ remote_tmp_dir }}/test-unarchive-tar-gz" mode: "0700" remote_src: yes register: unarchive10_1 @@ -527,7 +528,7 @@ - "unarchive10_1.changed == true" - name: remove our tar.gz unarchive destination - file: path={{ output_dir }}/test-unarchive-tar-gz state=absent + file: path={{ remote_tmp_dir }}/test-unarchive-tar-gz state=absent # # Symlink tests @@ -535,26 +536,26 @@ - name: Create a destination dir file: - path: "{{ output_dir }}/test-unarchive-tar-gz" + path: "{{ remote_tmp_dir }}/test-unarchive-tar-gz" state: directory - name: Create a symlink to the detination dir file: - path: "{{ output_dir }}/link-to-unarchive-dir" - src: "{{ output_dir }}/test-unarchive-tar-gz" + path: "{{ remote_tmp_dir }}/link-to-unarchive-dir" + src: "{{ remote_tmp_dir }}/test-unarchive-tar-gz" state: "link" - name: test that unarchive works when dest is a symlink to a dir unarchive: - src: "{{ output_dir }}/test-unarchive.tar.gz" - dest: "{{ output_dir | expanduser }}/link-to-unarchive-dir" + src: "{{ remote_tmp_dir }}/test-unarchive.tar.gz" + dest: "{{ remote_tmp_dir }}/link-to-unarchive-dir" mode: "u+rwX,go+rX" remote_src: yes register: unarchive_11 - name: Check that file is really there stat: - path: "{{ output_dir | expanduser }}/test-unarchive-tar-gz/foo-unarchive.txt" + path: "{{ remote_tmp_dir }}/test-unarchive-tar-gz/foo-unarchive.txt" register: unarchive11_stat0 - name: Assert that unarchive when dest is a symlink to a dir worked @@ -564,23 +565,23 @@ - "unarchive11_stat0.stat.exists == true" - name: remove our tar.gz unarchive destination - file: path={{ output_dir }}/test-unarchive-tar-gz state=absent + file: path={{ remote_tmp_dir }}/test-unarchive-tar-gz state=absent - name: Create a file file: - path: "{{ output_dir }}/test-unarchive-tar-gz" + path: "{{ remote_tmp_dir }}/test-unarchive-tar-gz" state: touch - name: Create a symlink to the file file: - path: "{{ output_dir }}/link-to-unarchive-file" - src: "{{ output_dir }}/test-unarchive-tar-gz" + path: "{{ remote_tmp_dir }}/link-to-unarchive-file" + src: "{{ remote_tmp_dir }}/test-unarchive-tar-gz" state: "link" - name: test that unarchive fails when dest is a link to a file unarchive: - src: "{{ output_dir }}/test-unarchive.tar.gz" - dest: "{{ output_dir | expanduser }}/link-to-unarchive-file" + src: "{{ remote_tmp_dir }}/test-unarchive.tar.gz" + dest: "{{ remote_tmp_dir }}/link-to-unarchive-file" mode: "u+rwX,go+rX" remote_src: yes ignore_errors: True @@ -592,16 +593,16 @@ - "unarchive_12.failed == true" - name: remove our tar.gz unarchive destination - file: path={{ output_dir }}/test-unarchive-tar-gz state=absent + file: path={{ remote_tmp_dir }}/test-unarchive-tar-gz state=absent # Test downloading a file before unarchiving it - name: create our unarchive destination - file: path={{output_dir}}/test-unarchive-tar-gz state=directory + file: path={{remote_tmp_dir}}/test-unarchive-tar-gz state=directory - name: unarchive a tar from an URL unarchive: src: "https://releases.ansible.com/ansible/ansible-latest.tar.gz" - dest: "{{ output_dir }}/test-unarchive-tar-gz" + dest: "{{ remote_tmp_dir }}/test-unarchive-tar-gz" mode: "0700" remote_src: yes register: unarchive13 @@ -612,4 +613,4 @@ - "unarchive13.changed == true" - name: remove our tar.gz unarchive destination - file: path={{ output_dir }}/test-unarchive-tar-gz state=absent + file: path={{ remote_tmp_dir }}/test-unarchive-tar-gz state=absent diff --git a/test/integration/targets/uri/aliases b/test/integration/targets/uri/aliases index 50a839705db..90ef161f598 100644 --- a/test/integration/targets/uri/aliases +++ b/test/integration/targets/uri/aliases @@ -1,4 +1,3 @@ destructive shippable/posix/group1 needs/httptester -needs/file/test/runner/requirements/constraints.txt diff --git a/test/integration/targets/uri/meta/main.yml b/test/integration/targets/uri/meta/main.yml index a5f3f707365..39b94950afc 100644 --- a/test/integration/targets/uri/meta/main.yml +++ b/test/integration/targets/uri/meta/main.yml @@ -1,3 +1,5 @@ dependencies: - prepare_tests - prepare_http_tests + - setup_remote_tmp_dir + - setup_remote_constraints diff --git a/test/integration/targets/uri/tasks/main.yml b/test/integration/targets/uri/tasks/main.yml index 8d5d355014f..7571ab8abf2 100644 --- a/test/integration/targets/uri/tasks/main.yml +++ b/test/integration/targets/uri/tasks/main.yml @@ -285,7 +285,7 @@ pip: name: "{{ item }}" state: latest - extra_args: "-c {{ role_path }}/../../../runner/requirements/constraints.txt" + extra_args: "-c {{ remote_constraints }}" with_items: - urllib3 - PyOpenSSL @@ -402,8 +402,8 @@ - name: Test client cert auth, with certs uri: url: "https://ansible.http.tests/ssl_client_verify" - client_cert: "{{ output_dir }}/client.pem" - client_key: "{{ output_dir }}/client.key" + client_cert: "{{ remote_tmp_dir }}/client.pem" + client_key: "{{ remote_tmp_dir }}/client.key" return_content: true register: result failed_when: result.content != "ansible.http.tests:SUCCESS" @@ -412,8 +412,8 @@ - name: Test client cert auth, with no validation uri: url: "https://fail.ansible.http.tests/ssl_client_verify" - client_cert: "{{ output_dir }}/client.pem" - client_key: "{{ output_dir }}/client.key" + client_cert: "{{ remote_tmp_dir }}/client.pem" + client_key: "{{ remote_tmp_dir }}/client.key" return_content: true validate_certs: no register: result @@ -423,8 +423,8 @@ - name: Test client cert auth, with validation and ssl mismatch uri: url: "https://fail.ansible.http.tests/ssl_client_verify" - client_cert: "{{ output_dir }}/client.pem" - client_key: "{{ output_dir }}/client.key" + client_cert: "{{ remote_tmp_dir }}/client.pem" + client_key: "{{ remote_tmp_dir }}/client.key" return_content: true validate_certs: yes register: result @@ -445,16 +445,13 @@ - name: Write out netrc template template: src: netrc.j2 - dest: "{{ output_dir }}/netrc" - -- debug: - msg: "{{ lookup('file', output_dir ~ '/netrc') }}" + dest: "{{ remote_tmp_dir }}/netrc" - name: Test netrc with port uri: url: "https://{{ httpbin_host }}:443/basic-auth/user/passwd" environment: - NETRC: "{{ output_dir|expanduser }}/netrc" + NETRC: "{{ remote_tmp_dir }}/netrc" - name: Test JSON POST with src uri: @@ -470,10 +467,15 @@ that: - result.json.json[0] == 'JSON Test Pattern pass1' +- name: Copy file pass0.json to remote + copy: + src: "{{ role_path }}/files/pass0.json" + dest: "{{ remote_tmp_dir }}/pass0.json" + - name: Test JSON POST with src and remote_src=True uri: url: "https://{{ httpbin_host}}/post" - src: "{{ role_path }}/files/pass0.json" + src: "{{ remote_tmp_dir }}/pass0.json" remote_src: true method: POST return_content: true diff --git a/test/integration/targets/user/tasks/main.yml b/test/integration/targets/user/tasks/main.yml index bdaad16bf5d..e36cb609511 100644 --- a/test/integration/targets/user/tasks/main.yml +++ b/test/integration/targets/user/tasks/main.yml @@ -16,15 +16,6 @@ # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # -- name: get the jinja2 version - shell: python -c 'import jinja2; print(jinja2.__version__)' - register: jinja2_version - delegate_to: localhost - changed_when: no - -- debug: - msg: "Jinja version: {{ jinja2_version.stdout }}, Python version: {{ ansible_facts.python_version }}" - ## user add @@ -183,14 +174,7 @@ - user_test1.results is defined - user_test1.results | length == 5 -- name: validate changed results for testcase 1 (jinja >= 2.6) - assert: - that: - - user_test1.results | map(attribute='changed') | unique | list == [False] - - user_test1.results | map(attribute='state') | unique | list == ['present'] - when: jinja2_version.stdout is version('2.6', '>=') - -- name: validate changed results for testcase 1 (jinja < 2.6) +- name: validate changed results for testcase 1 assert: that: - "user_test1.results[0] is not changed" @@ -203,7 +187,6 @@ - "user_test1.results[2]['state'] == 'present'" - "user_test1.results[3]['state'] == 'present'" - "user_test1.results[4]['state'] == 'present'" - when: jinja2_version.stdout is version('2.6', '<') ## user remove diff --git a/test/integration/targets/xml/tasks/test-pretty-print-only.yml b/test/integration/targets/xml/tasks/test-pretty-print-only.yml index 54511f2b0c9..7c0f7d5fd6f 100644 --- a/test/integration/targets/xml/tasks/test-pretty-print-only.yml +++ b/test/integration/targets/xml/tasks/test-pretty-print-only.yml @@ -1,7 +1,11 @@ --- - name: Setup test fixture - shell: cat {{ role_path }}/fixtures/ansible-xml-beers.xml | sed 's/^[ ]*//g' > /tmp/ansible-xml-beers.xml + copy: + src: fixtures/ansible-xml-beers.xml + dest: /tmp/ansible-xml-beers.xml.orig + - name: Remove spaces from test fixture + shell: sed 's/^[ ]*//g' < /tmp/ansible-xml-beers.xml.orig > /tmp/ansible-xml-beers.xml - name: Pretty print without modification xml: diff --git a/test/integration/targets/xml/tasks/test-set-namespaced-children-elements.yml b/test/integration/targets/xml/tasks/test-set-namespaced-children-elements.yml index e55bb2836c5..8e66e70eebb 100644 --- a/test/integration/targets/xml/tasks/test-set-namespaced-children-elements.yml +++ b/test/integration/targets/xml/tasks/test-set-namespaced-children-elements.yml @@ -19,6 +19,7 @@ copy: src: /tmp/ansible-xml-namespaced-beers.xml dest: /tmp/ansible-xml-namespaced-beers-1.xml + remote_src: yes - name: Set child elements again xml: @@ -36,11 +37,13 @@ copy: src: /tmp/ansible-xml-namespaced-beers.xml dest: /tmp/ansible-xml-namespaced-beers-2.xml + remote_src: yes - name: Compare to expected result copy: src: /tmp/ansible-xml-namespaced-beers-1.xml dest: /tmp/ansible-xml-namespaced-beers-2.xml + remote_src: yes check_mode: yes diff: yes register: comparison diff --git a/test/integration/targets/xml/tasks/test-xmlstring.yml b/test/integration/targets/xml/tasks/test-xmlstring.yml index 4e80c45fa4e..4620d984fa0 100644 --- a/test/integration/targets/xml/tasks/test-xmlstring.yml +++ b/test/integration/targets/xml/tasks/test-xmlstring.yml @@ -1,4 +1,12 @@ --- + - name: Copy expected results to remote + copy: + src: "results/{{ item }}" + dest: "/tmp/{{ item }}" + with_items: + - test-pretty-print.xml + - test-pretty-print-only.xml + # NOTE: Jinja2 templating eats trailing newlines - name: Read from xmlstring (not using pretty_print) xml: @@ -6,11 +14,10 @@ xpath: . register: xmlresponse - - name: Compare to expected result copy: content: "{{ xmlresponse.xmlstring }}\n" - dest: '{{ role_path }}/results/test-pretty-print-only.xml' + dest: '/tmp/test-pretty-print-only.xml' check_mode: yes diff: yes register: comparison @@ -33,7 +40,7 @@ - name: Compare to expected result copy: content: '{{ xmlresponse.xmlstring }}' - dest: '{{ role_path }}/results/test-pretty-print-only.xml' + dest: '/tmp/test-pretty-print-only.xml' check_mode: yes diff: yes register: comparison @@ -60,7 +67,7 @@ - name: Compare to expected result copy: content: '{{ xmlresponse_modification.xmlstring }}' - dest: '{{ role_path }}/results/test-pretty-print.xml' + dest: '/tmp/test-pretty-print.xml' check_mode: yes diff: yes register: comparison