Overhaul become integration tests. (#78312)

pull/78313/head
Matt Clay 4 years ago committed by GitHub
parent f3f4ad9332
commit de2163b160
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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: 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…
Cancel
Save