From 65f03e03f501339ebf45136c7b0cd91d27c8d2e5 Mon Sep 17 00:00:00 2001 From: David Wilson Date: Mon, 10 Sep 2018 02:17:01 +0100 Subject: [PATCH] tests: remote_tmp test fixes. --- docs/changelog.rst | 3 +- .../integration/action/make_tmp_path.yml | 125 +++++++++++++----- .../lib/modules/custom_python_run_script.py | 39 ++++++ 3 files changed, 133 insertions(+), 34 deletions(-) create mode 100644 tests/ansible/lib/modules/custom_python_run_script.py diff --git a/docs/changelog.rst b/docs/changelog.rst index c88d2436..9d99d414 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -194,7 +194,8 @@ the bug reports in this release contributed by `Pierre-Henry Muller `_, `Pierre-Louis Bonicoli `_, `Prateek Jain `_, -`Rick Box `_, and +`Rick Box `_, +`Tawana Musewe `_, and `Timo Beckers `_. diff --git a/tests/ansible/integration/action/make_tmp_path.yml b/tests/ansible/integration/action/make_tmp_path.yml index eb39068b..668bd83f 100644 --- a/tests/ansible/integration/action/make_tmp_path.yml +++ b/tests/ansible/integration/action/make_tmp_path.yml @@ -23,27 +23,88 @@ method: _make_tmp_path register: tmp_path - - name: "Write some junk in regular temp path" - shell: hostname > {{tmp_path.result}}/hostname - - - name: "Verify junk did not persist across tasks" - stat: path={{tmp_path.result}}/hostname - register: junk_stat - - - name: "Verify junk did not persist across tasks" - assert: - that: - - not junk_stat.stat.exists - - - name: "Verify temp path hasn't changed since start" + - name: "Find regular temp path (new task)" action_passthrough: method: _make_tmp_path register: tmp_path2 - - name: "Verify temp path hasn't changed since start" + - name: "Find parent temp path" + set_fact: + parent_temp_path: "{{tmp_path.result|dirname}}" + + - name: "Find parent temp path (new task)" + set_fact: + parent_temp_path2: "{{tmp_path2.result|dirname}}" + + - name: "Verify common base path for both tasks" assert: that: - - tmp_path2.result == tmp_path.result + - parent_temp_path == parent_temp_path2 + + - name: "Verify different subdir for both tasks" + assert: + that: + - tmp_path.result != tmp_path2.result + + # + # Verify subdirectory removal. + # + + - name: Stat temp path + stat: + path: "{{tmp_path.result}}" + register: stat1 + + - name: Stat temp path (new task) + stat: + path: "{{tmp_path2.result}}" + register: stat2 + + - name: "Verify neither subdir exists any more" + assert: + that: + - not stat1.stat.exists + - not stat2.stat.exists + + # + # Verify parent directory persistence. + # + + - name: Stat parent temp path (new task) + stat: + path: "{{parent_temp_path}}" + register: stat + + - name: "Verify parent temp path is persistent" + assert: + that: + - stat.stat.exists + + # + # Write some junk into the temp path. + # + + - name: "Write junk to temp path and verify it disappears" + custom_python_run_script: + script: | + from ansible.module_utils.basic import get_module_path + path = get_module_path() + '/foo.txt' + result['path'] = path + open(path, 'w').write("bar") + register: out + + - name: "Verify junk disappeared." + stat: + path: "{{out.path}}" + register: out + + - assert: + that: + - not out.stat.exists + + # + # + # - name: "Verify temp path changes across connection reset" mitogen_shutdown_all: @@ -53,13 +114,17 @@ method: _make_tmp_path register: tmp_path2 + - name: "Verify temp path changes across connection reset" + set_fact: + parent_temp_path2: "{{tmp_path2.result|dirname}}" + - name: "Verify temp path changes across connection reset" assert: that: - - tmp_path2.result != tmp_path.result + - parent_temp_path != parent_temp_path2 - name: "Verify old path disappears across connection reset" - stat: path={{tmp_path.result}} + stat: path={{parent_temp_path}} register: junk_stat - name: "Verify old path disappears across connection reset" @@ -89,24 +154,18 @@ - name: "Try writing to temp directory for the readonly_homedir user" become: true become_user: mitogen__readonly_homedir - action_passthrough: - method: _make_tmp_path + custom_python_run_script: + script: | + from ansible.module_utils.basic import get_module_path + path = get_module_path() + '/foo.txt' + result['path'] = path + open(path, 'w').write("bar") register: tmp_path - - name: "Try writing to temp directory for the readonly_homedir user" - become: true - become_user: mitogen__readonly_homedir - shell: hostname > {{tmp_path.result}}/hostname - # - # modules get the same temp dir + # modules get the same base dir # - - name: "Verify modules get the same tmpdir as the action plugin" - action_passthrough: - method: _make_tmp_path - register: tmp_path - - name: "Verify modules get the same tmpdir as the action plugin" custom_python_detect_environment: register: out @@ -116,12 +175,12 @@ when: ansible_version.full < '2.5' assert: that: - - out.module_path == tmp_path.result + - out.module_path.startswith( == tmp_path.result - out.module_tmpdir == None - name: "Verify modules get the same tmpdir as the action plugin (>2.5)" when: ansible_version.full > '2.5' assert: that: - - out.module_path == tmp_path.result - - out.module_tmpdir == tmp_path.result + - out.module_path.startswith(parent_temp_path2) + - out.module_tmpdir.startswith(parent_temp_path2) diff --git a/tests/ansible/lib/modules/custom_python_run_script.py b/tests/ansible/lib/modules/custom_python_run_script.py new file mode 100644 index 00000000..2313291b --- /dev/null +++ b/tests/ansible/lib/modules/custom_python_run_script.py @@ -0,0 +1,39 @@ +#!/usr/bin/python +# I am an Ansible new-style Python module. I run the script provided in the +# parameter. + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.basic import get_module_path +from ansible.module_utils import six + +import os +import pwd +import socket +import sys + + +def execute(s, gbls, lcls): + if sys.version_info > (3,): + exec(s, gbls, lcls) + else: + exec('exec s in gbls, lcls') + + +def main(): + module = AnsibleModule(argument_spec={ + 'script': { + 'type': str + } + }) + + lcls = { + 'module': module, + 'result': {} + } + execute(module.params['script'], globals(), lcls) + del lcls['module'] + module.exit_json(**lcls['result']) + + +if __name__ == '__main__': + main()