mirror of https://github.com/ansible/ansible.git
Overhaul become integration tests. (#78312)
parent
f3f4ad9332
commit
de2163b160
@ -1,3 +1,4 @@
|
||||
destructive
|
||||
shippable/posix/group1
|
||||
context/target
|
||||
gather_facts/no
|
||||
|
||||
@ -0,0 +1,2 @@
|
||||
dependencies:
|
||||
- setup_test_user
|
||||
@ -0,0 +1,49 @@
|
||||
- name: test becoming user ({{ become_test }})
|
||||
raw: whoami
|
||||
register: whoami
|
||||
|
||||
- name: implicit tilde expansion reflects become user (broken={{ become_test_config.implicit_tilde_broken | default(False) }}) ({{ become_test }})
|
||||
stat:
|
||||
path: "~"
|
||||
register: stat_home_implicit
|
||||
|
||||
- name: explicit tilde expansion reflects become user ({{ become_test }})
|
||||
stat:
|
||||
path: "~{{ ansible_become_user }}"
|
||||
register: stat_home_explicit
|
||||
|
||||
- name: put a file ({{ become_test }})
|
||||
copy:
|
||||
src: copy.txt
|
||||
dest: "~{{ ansible_become_user }}/{{ ansible_become_method }}-{{ ansible_become_user }}-copy.txt"
|
||||
register: put_file
|
||||
|
||||
- name: fetch a file ({{ become_test }})
|
||||
fetch:
|
||||
src: "~{{ ansible_become_user }}/{{ ansible_become_method }}-{{ ansible_become_user }}-copy.txt"
|
||||
dest: "{{ output_dir }}"
|
||||
register: fetch_file
|
||||
|
||||
- name: explicit tilde expansion reflects become user ({{ become_test }})
|
||||
stat:
|
||||
path: "~{{ ansible_become_user }}/{{ ansible_become_method }}-{{ ansible_become_user }}-copy.txt"
|
||||
register: stat_file
|
||||
|
||||
- name: verify results from previous tasks ({{ become_test }})
|
||||
assert:
|
||||
that:
|
||||
- "whoami.stdout|trim == '{{ ansible_become_user }}'"
|
||||
|
||||
- "stat_home_implicit.stat.exists == True"
|
||||
- "stat_home_implicit.stat.path|basename == '{{ ansible_become_user }}' or (become_test_config.implicit_tilde_broken | default(False))"
|
||||
|
||||
- "stat_home_explicit.stat.exists == True"
|
||||
- "stat_home_explicit.stat.path|basename == '{{ ansible_become_user }}'"
|
||||
|
||||
- "put_file.uid == test_user.uid"
|
||||
- "put_file.gid == test_user.group"
|
||||
|
||||
- "fetch_file.remote_checksum == put_file.checksum"
|
||||
|
||||
- "stat_file.stat.exists == True"
|
||||
- "stat_file.stat.path|dirname|basename == '{{ ansible_become_user }}'"
|
||||
@ -1,82 +0,0 @@
|
||||
- name: Create test user (become_method=default)
|
||||
become: True
|
||||
become_user: root
|
||||
user:
|
||||
name: "{{ become_test_user }}"
|
||||
group: '{{ "staff" if ansible_facts.distribution == "MacOSX" else omit }}'
|
||||
|
||||
- name: test becoming user (become_method=default)
|
||||
shell: whoami
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "results.stdout == '{{ become_test_user }}'"
|
||||
|
||||
- name: tilde expansion honors become in file (become_method=default)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
file:
|
||||
path: "~/foo.txt"
|
||||
state: touch
|
||||
|
||||
- name: check that the path in the user's home dir was created (become_method=default)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
stat:
|
||||
path: "~{{ become_test_user }}/foo.txt"
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "results.stat.exists == True"
|
||||
- "results.stat.path|dirname|basename == '{{ become_test_user }}'"
|
||||
|
||||
- name: tilde expansion honors become in template (become_method=default)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
template:
|
||||
src: "bar.j2"
|
||||
dest: "~/bar.txt"
|
||||
|
||||
- name: check that the path in the user's home dir was created (become_method=default)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
stat:
|
||||
path: "~{{ become_test_user }}/bar.txt"
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "results.stat.exists == True"
|
||||
- "results.stat.path|dirname|basename == '{{ become_test_user }}'"
|
||||
|
||||
- name: tilde expansion honors become in copy (become_method=default)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
copy:
|
||||
src: baz.txt
|
||||
dest: "~/baz.txt"
|
||||
|
||||
- name: check that the path in the user's home dir was created (become_method=default)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
stat:
|
||||
path: "~{{ become_test_user }}/baz.txt"
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "results.stat.exists == True"
|
||||
- "results.stat.path|dirname|basename == '{{ become_test_user }}'"
|
||||
|
||||
- name: Remove test user and their home dir (become_method=default)
|
||||
become: True
|
||||
become_user: root
|
||||
user:
|
||||
name: "{{ become_test_user }}"
|
||||
state: "absent"
|
||||
remove: "yes"
|
||||
force: "yes"
|
||||
@ -1,5 +1,21 @@
|
||||
- include_vars: default.yml
|
||||
- name: determine connection user
|
||||
command: whoami
|
||||
register: connection_user
|
||||
vars:
|
||||
ansible_become: no
|
||||
|
||||
- import_tasks: default.yml
|
||||
- import_tasks: sudo.yml
|
||||
- import_tasks: su.yml
|
||||
- name: include become tests
|
||||
include_tasks: become.yml
|
||||
vars:
|
||||
ansible_become: yes
|
||||
ansible_become_user: "{{ become_test_config.user }}"
|
||||
ansible_become_flags: "{{ become_test_config.flags | default(None) }}"
|
||||
ansible_become_method: "{{ become_test_config.method }}"
|
||||
ansible_become_password: "{{ become_test_config.password | default(None) }}"
|
||||
loop: "{{
|
||||
(become_methods | selectattr('skip', 'undefined') | list)+
|
||||
(become_methods | selectattr('skip', 'defined') | rejectattr('skip') | list)
|
||||
}}"
|
||||
loop_control:
|
||||
loop_var: become_test_config
|
||||
label: "{{ become_test }}"
|
||||
|
||||
@ -1,91 +0,0 @@
|
||||
- name: Create test user (become_method=su)
|
||||
become: True
|
||||
become_user: root
|
||||
become_method: su
|
||||
user:
|
||||
name: "{{ become_test_user }}"
|
||||
group: '{{ "staff" if ansible_facts.distribution == "MacOSX" else omit }}'
|
||||
|
||||
- name: test becoming user (become_method=su)
|
||||
shell: whoami
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: su
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "results.stdout == '{{ become_test_user }}'"
|
||||
|
||||
- name: tilde expansion honors become in file (become_method=su)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: su
|
||||
file:
|
||||
path: "~/foo.txt"
|
||||
state: touch
|
||||
|
||||
- name: check that the path in the user's home dir was created (become_method=su)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: su
|
||||
stat:
|
||||
path: "~{{ become_test_user }}/foo.txt"
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "results.stat.exists == True"
|
||||
- "results.stat.path|dirname|basename == '{{ become_test_user }}'"
|
||||
|
||||
- name: tilde expansion honors become in template (become_method=su)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: su
|
||||
template:
|
||||
src: "bar.j2"
|
||||
dest: "~/bar.txt"
|
||||
|
||||
- name: check that the path in the user's home dir was created (become_method=su)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: su
|
||||
stat:
|
||||
path: "~{{ become_test_user }}/bar.txt"
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "results.stat.exists == True"
|
||||
- "results.stat.path|dirname|basename == '{{ become_test_user }}'"
|
||||
|
||||
- name: tilde expansion honors become in copy (become_method=su)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: su
|
||||
copy:
|
||||
src: baz.txt
|
||||
dest: "~/baz.txt"
|
||||
|
||||
- name: check that the path in the user's home dir was created (become_method=su)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: su
|
||||
stat:
|
||||
path: "~{{ become_test_user }}/baz.txt"
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "results.stat.exists == True"
|
||||
- "results.stat.path|dirname|basename == '{{ become_test_user }}'"
|
||||
|
||||
- name: Remove test user and their home dir (become_method=su)
|
||||
become: True
|
||||
become_user: root
|
||||
become_method: su
|
||||
user:
|
||||
name: "{{ become_test_user }}"
|
||||
state: "absent"
|
||||
remove: "yes"
|
||||
force: "yes"
|
||||
@ -1,91 +0,0 @@
|
||||
- name: Create test user (become_method=sudo)
|
||||
become: True
|
||||
become_user: root
|
||||
become_method: sudo
|
||||
user:
|
||||
name: "{{ become_test_user }}"
|
||||
group: '{{ "staff" if ansible_facts.distribution == "MacOSX" else omit }}'
|
||||
|
||||
- name: test becoming user (become_method=sudo)
|
||||
shell: whoami
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: sudo
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "results.stdout == '{{ become_test_user }}'"
|
||||
|
||||
- name: tilde expansion honors become in file (become_method=sudo)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: sudo
|
||||
file:
|
||||
path: "~/foo.txt"
|
||||
state: touch
|
||||
|
||||
- name: check that the path in the user's home dir was created (become_method=sudo)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: sudo
|
||||
stat:
|
||||
path: "~{{ become_test_user }}/foo.txt"
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "results.stat.exists == True"
|
||||
- "results.stat.path|dirname|basename == '{{ become_test_user }}'"
|
||||
|
||||
- name: tilde expansion honors become in template (become_method=sudo)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: sudo
|
||||
template:
|
||||
src: "bar.j2"
|
||||
dest: "~/bar.txt"
|
||||
|
||||
- name: check that the path in the user's home dir was created (become_method=sudo)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: sudo
|
||||
stat:
|
||||
path: "~{{ become_test_user }}/bar.txt"
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "results.stat.exists == True"
|
||||
- "results.stat.path|dirname|basename == '{{ become_test_user }}'"
|
||||
|
||||
- name: tilde expansion honors become in copy (become_method=sudo)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: sudo
|
||||
copy:
|
||||
src: baz.txt
|
||||
dest: "~/baz.txt"
|
||||
|
||||
- name: check that the path in the user's home dir was created (become_method=sudo)
|
||||
become: True
|
||||
become_user: "{{ become_test_user }}"
|
||||
become_method: sudo
|
||||
stat:
|
||||
path: "~{{ become_test_user }}/baz.txt"
|
||||
register: results
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- "results.stat.exists == True"
|
||||
- "results.stat.path|dirname|basename == '{{ become_test_user }}'"
|
||||
|
||||
- name: Remove test user and their home dir (become_method=sudo)
|
||||
become: True
|
||||
become_user: root
|
||||
become_method: sudo
|
||||
user:
|
||||
name: "{{ become_test_user }}"
|
||||
state: "absent"
|
||||
remove: "yes"
|
||||
force: "yes"
|
||||
@ -1 +0,0 @@
|
||||
{{ become_test_user }}
|
||||
@ -1 +0,0 @@
|
||||
become_test_user: ansibletest1
|
||||
@ -0,0 +1,18 @@
|
||||
become_test: >-
|
||||
{{ become_test_config.method }} from {{ connection_user.stdout }} to {{ become_test_config.user }}
|
||||
{{ 'with' if become_test_config.password else 'without' }} password
|
||||
{{ 'with flags: ' + become_test_config.flags if become_test_config.flags | default('') else 'without flags' }}
|
||||
|
||||
become_methods:
|
||||
- method: sudo
|
||||
user: "{{ test_user_name }}"
|
||||
password: "{{ test_user_plaintext_password if connection_user.stdout != 'root' else None }}"
|
||||
# Some systems are not configured to allow sudo for non-root users.
|
||||
# The tests could be updated in the future to temporarily enable sudo for the connection user.
|
||||
skip: "{{ connection_user.stdout != 'root' and ansible_distribution == 'FreeBSD' }}"
|
||||
# Implicit tilde support `~` is broken on systems which do not set HOME to that of the become user.
|
||||
# Explicit tilde support `~username` is unaffected.
|
||||
implicit_tilde_broken: "{{ ansible_distribution == 'MacOSX' }}"
|
||||
- method: su
|
||||
user: "{{ test_user_name }}"
|
||||
password: "{{ test_user_plaintext_password if connection_user.stdout != 'root' else None }}"
|
||||
Loading…
Reference in New Issue