[stable-2.6] [stable-2.7] Fix logic to not re-download existing files when force=no (#45495) (#45509)
* [stable-2.7] Fix logic to not re-download existing files when force=no (#45495) * Fix logic to not re-download existing files when force=no. Fixes #45491 * Reduce logic complexity. (cherry picked from commit5785de582f
) Co-authored-by: Matt Martz <matt@sivel.net> * Backport of get_url fix cannot use result result was only added in 2.8+. (cherry picked from commit99171a9c6f
) Co-authored-by: Matt Martz <matt@sivel.net>
This commit is contained in:
parent
395b30c617
commit
e7740b80fd
3 changed files with 27 additions and 12 deletions
2
changelogs/fragments/get-url-fix-idempotency.yaml
Normal file
2
changelogs/fragments/get-url-fix-idempotency.yaml
Normal file
|
@ -0,0 +1,2 @@
|
|||
bugfixes:
|
||||
- get_url - Don't re-download files unnecessarily when force=no (https://github.com/ansible/ansible/issues/45491)
|
|
@ -450,18 +450,20 @@ def main():
|
|||
if not force and checksum != '':
|
||||
destination_checksum = module.digest_from_file(dest, algorithm)
|
||||
|
||||
if checksum == destination_checksum:
|
||||
# Not forcing redownload, unless checksum does not match
|
||||
# allow file attribute changes
|
||||
module.params['path'] = dest
|
||||
file_args = module.load_file_common_arguments(module.params)
|
||||
file_args['path'] = dest
|
||||
changed = module.set_fs_attributes_if_different(file_args, False)
|
||||
if changed:
|
||||
module.exit_json(msg="file already exists but file attributes changed", dest=dest, url=url, changed=changed)
|
||||
module.exit_json(msg="file already exists", dest=dest, url=url, changed=changed)
|
||||
if checksum != destination_checksum:
|
||||
checksum_mismatch = True
|
||||
|
||||
checksum_mismatch = True
|
||||
# Not forcing redownload, unless checksum does not match
|
||||
if not force and not checksum_mismatch:
|
||||
# Not forcing redownload, unless checksum does not match
|
||||
# allow file attribute changes
|
||||
module.params['path'] = dest
|
||||
file_args = module.load_file_common_arguments(module.params)
|
||||
file_args['path'] = dest
|
||||
changed = module.set_fs_attributes_if_different(file_args, False)
|
||||
if changed:
|
||||
module.exit_json(msg="file already exists but file attributes changed", dest=dest, url=url, changed=changed)
|
||||
module.exit_json(msg="file already exists", dest=dest, url=url, changed=changed)
|
||||
|
||||
# If the file already exists, prepare the last modified time for the
|
||||
# request.
|
||||
|
|
|
@ -241,7 +241,7 @@
|
|||
# https://github.com/ansible/ansible/issues/29614
|
||||
- name: Change mode on an already downloaded file and specify checksum
|
||||
get_url:
|
||||
url: 'https://{{ httpbin_host }}/'
|
||||
url: 'https://{{ httpbin_host }}/get'
|
||||
dest: '{{ output_dir }}/test'
|
||||
checksum: 'sha256:7036ede810fad2b5d2e7547ec703cae8da61edbba43c23f9d7203a0239b765c4.'
|
||||
mode: '0775'
|
||||
|
@ -257,6 +257,17 @@
|
|||
- result is changed
|
||||
- "stat_result.stat.mode == '0775'"
|
||||
|
||||
- name: Get a file that already exists
|
||||
get_url:
|
||||
url: 'https://{{ httpbin_host }}/get'
|
||||
dest: '{{ output_dir }}/test'
|
||||
register: result
|
||||
|
||||
- name: Assert that we didn't re-download unnecessarily
|
||||
assert:
|
||||
that:
|
||||
- result is not changed
|
||||
|
||||
#https://github.com/ansible/ansible/issues/16191
|
||||
- name: Test url split with no filename
|
||||
get_url:
|
||||
|
|
Loading…
Reference in a new issue