mirror of https://github.com/ansible/ansible.git
* [stable-2.9] allow env to override unspecified unsafe_writes (#73282) * allow env var for fallback value for unspecified unsafe_writes. (cherry picked from commitpull/75416/headc7d4acc12f) Co-authored-by: Brian Coca <bcoca@users.noreply.github.com> * ensure unsafe writes fallback (#70722) * Ensure we actually fallback to unsafe_writes when set to true add integration test add fix for get_url not passing the parameter from args (cherry picked from commit932ba36160) * Added clog missing for issue 70722 (#73175) (cherry picked from commitd6670da1d7) Co-authored-by: Brian Coca <bcoca@users.noreply.github.com>
parent
ae758749df
commit
cab637a733
@ -0,0 +1,2 @@
|
||||
minor_changes:
|
||||
- Allow unsafe_writes to be set on target via env var, for those targets that need a blanket setting.
|
||||
@ -0,0 +1,4 @@
|
||||
bugfixes:
|
||||
- Restored unsafe_writes functionality which was being skipped.
|
||||
- Added unsafe_writes test.
|
||||
- Enabled unsafe_writes for get_url which was ignoring the paramter.
|
||||
@ -0,0 +1,6 @@
|
||||
needs/root
|
||||
skip/freebsd
|
||||
skip/osx
|
||||
skip/macos
|
||||
skip/aix
|
||||
shippable/posix/group3
|
||||
@ -0,0 +1,68 @@
|
||||
- hosts: testhost
|
||||
gather_facts: false
|
||||
vars:
|
||||
testudir: '{{output_dir}}/unsafe_writes_test'
|
||||
testufile: '{{testudir}}/unreplacablefile.txt'
|
||||
tasks:
|
||||
- name: test unsafe_writes on immutable dir (file cannot be atomically replaced)
|
||||
block:
|
||||
- name: create target dir
|
||||
file: path={{testudir}} state=directory
|
||||
- name: setup test file
|
||||
copy: content=ORIGINAL dest={{testufile}}
|
||||
- name: make target dir immutable (cannot write to file w/o unsafe_writes)
|
||||
file: path={{testudir}} state=directory attributes="+i"
|
||||
become: yes
|
||||
ignore_errors: true
|
||||
register: madeimmutable
|
||||
|
||||
- name: only run if immutable dir command worked, some of our test systems don't allow for it
|
||||
when: madeimmutable is success
|
||||
block:
|
||||
- name: test this is actually immmutable working as we expect
|
||||
file: path={{testufile}} state=absent
|
||||
register: breakimmutable
|
||||
ignore_errors: True
|
||||
|
||||
- name: only run if reallyh immutable dir
|
||||
when: breakimmutable is failed
|
||||
block:
|
||||
- name: test overwriting file w/o unsafe
|
||||
copy: content=NEW dest={{testufile}} unsafe_writes=False
|
||||
ignore_errors: true
|
||||
register: copy_without
|
||||
|
||||
- name: ensure we properly failed
|
||||
assert:
|
||||
that:
|
||||
- copy_without is failed
|
||||
|
||||
- name: test overwriting file with unsafe
|
||||
copy: content=NEWNOREALLY dest={{testufile}} unsafe_writes=True
|
||||
register: copy_with
|
||||
|
||||
- name: ensure we properly changed
|
||||
assert:
|
||||
that:
|
||||
- copy_with is changed
|
||||
|
||||
- name: test fallback env var
|
||||
when: lookup('env', 'ANSIBLE_UNSAFE_WRITES') not in ('', None)
|
||||
vars:
|
||||
env_enabled: "{{lookup('env', 'ANSIBLE_UNSAFE_WRITES')|bool}}"
|
||||
block:
|
||||
- name: test overwriting file with unsafe depending on fallback environment setting
|
||||
copy: content=NEWBUTNOTDIFFERENT dest={{testufile}}
|
||||
register: copy_with_env
|
||||
ignore_errors: True
|
||||
|
||||
- name: ensure we properly follow env var
|
||||
assert:
|
||||
msg: "Failed with envvar: {{env_enabled}}, due AUW: to {{q('env', 'ANSIBLE_UNSAFE_WRITES')}}"
|
||||
that:
|
||||
- env_enabled and copy_with_env is changed or not env_enabled and copy_with_env is failed
|
||||
always:
|
||||
- name: remove immutable flag from dir to prevent issues with cleanup
|
||||
file: path={{testudir}} state=directory attributes="-i"
|
||||
ignore_errors: true
|
||||
become: yes
|
||||
@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -eux
|
||||
|
||||
# test w/o fallback env var
|
||||
ansible-playbook basic.yml -i ../../inventory -e "output_dir=${OUTPUT_DIR}" "$@"
|
||||
|
||||
# test enabled fallback env var
|
||||
ANSIBLE_UNSAFE_WRITES=1 ansible-playbook basic.yml -i ../../inventory -e "output_dir=${OUTPUT_DIR}" "$@"
|
||||
|
||||
# test disnabled fallback env var
|
||||
ANSIBLE_UNSAFE_WRITES=0 ansible-playbook basic.yml -i ../../inventory -e "output_dir=${OUTPUT_DIR}" "$@"
|
||||
Loading…
Reference in New Issue