mirror of https://github.com/ansible/ansible.git
windows: add #AnsibleRequires for Windows modules (#31683)
* windows: add #AnsibleRequires to set whether a module requires module or a specific version * fix up pep8 issues * changed psversion to use the actual ps Requires -Version syntax * missed the check on #Requires -Version * fix #Requires module extensionspull/32104/head
parent
0c34cdd0f7
commit
b004a6373a
@ -0,0 +1 @@
|
|||||||
|
windows/ci/group3
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
#!powershell
|
||||||
|
|
||||||
|
#Requires -Module Ansible.ModuleUtils.Legacy
|
||||||
|
#Requires -Module Ansible.ModuleUtils.SID
|
||||||
|
#Requires -Version 3.0
|
||||||
|
#AnsibleRequires -OSVersion 6
|
||||||
|
#AnsibleRequires -Become
|
||||||
|
|
||||||
|
$output = &whoami.exe
|
||||||
|
$sid = Convert-ToSID -account_name $output.Trim()
|
||||||
|
|
||||||
|
Exit-Json -obj @{ output = $sid; changed = $false }
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
#!powershell
|
||||||
|
|
||||||
|
#Requires -Module Ansible.ModuleUtils.Legacy
|
||||||
|
# Requires -Version 20
|
||||||
|
# AnsibleRequires -OSVersion 20
|
||||||
|
|
||||||
|
# requires statement must be straight after the original # with now space, this module won't fail
|
||||||
|
|
||||||
|
Exit-Json -obj @{ output = "output"; changed = $false }
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
#!powershell
|
||||||
|
|
||||||
|
#Requires -Module Ansible.ModuleUtils.Legacy
|
||||||
|
#AnsibleRequires -OSVersion 20.0
|
||||||
|
|
||||||
|
# this shouldn't run as no Windows OS will meet the version of 20.0
|
||||||
|
|
||||||
|
Exit-Json -obj @{ output = "output"; changed = $false }
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
#!powershell
|
||||||
|
|
||||||
|
#Requires -Module Ansible.ModuleUtils.Legacy
|
||||||
|
#Requires -Version 20.0.0.0
|
||||||
|
|
||||||
|
# this shouldn't run as no PS Version will be at 20 in the near future
|
||||||
|
|
||||||
|
Exit-Json -obj @{ output = "output"; changed = $false }
|
||||||
@ -0,0 +1,103 @@
|
|||||||
|
---
|
||||||
|
- name: test out invalid options
|
||||||
|
test_invalid_requires:
|
||||||
|
register: invalid_options
|
||||||
|
|
||||||
|
- name: assert test out invalid options
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- invalid_options|success
|
||||||
|
- invalid_options.output == "output"
|
||||||
|
|
||||||
|
- name: test out invalid os version
|
||||||
|
test_min_os_version:
|
||||||
|
register: invalid_os_version
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: assert test out invalid os version
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- invalid_os_version|failed
|
||||||
|
- '"This module cannot run on this OS as it requires a minimum version of 20.0, actual was " in invalid_os_version.msg'
|
||||||
|
|
||||||
|
- name: test out invalid powershell version
|
||||||
|
test_min_ps_version:
|
||||||
|
register: invalid_ps_version
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: assert test out invalid powershell version
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- invalid_ps_version|failed
|
||||||
|
- '"This module cannot run as it requires a minimum PowerShell version of 20.0.0.0, actual was " in invalid_ps_version.msg'
|
||||||
|
|
||||||
|
- name: test out become requires without become_user set
|
||||||
|
test_all_options:
|
||||||
|
register: become_system
|
||||||
|
|
||||||
|
- name: assert become requires without become_user set
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- become_system|success
|
||||||
|
- become_system.output == "S-1-5-18"
|
||||||
|
|
||||||
|
- set_fact:
|
||||||
|
become_test_username: ansible_become_test
|
||||||
|
gen_pw: password123! + {{ lookup('password', '/dev/null chars=ascii_letters,digits length=8') }}
|
||||||
|
|
||||||
|
- name: create unprivileged user
|
||||||
|
win_user:
|
||||||
|
name: "{{ become_test_username }}"
|
||||||
|
password: "{{ gen_pw }}"
|
||||||
|
update_password: always
|
||||||
|
groups: Users
|
||||||
|
register: become_test_user_result
|
||||||
|
|
||||||
|
- name: execute tests and ensure that test user is deleted regardless of success/failure
|
||||||
|
block:
|
||||||
|
- name: ensure current user is not the become user
|
||||||
|
win_shell: whoami
|
||||||
|
register: whoami_out
|
||||||
|
|
||||||
|
- name: verify output
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- not whoami_out.stdout_lines[0].endswith(become_test_username)
|
||||||
|
|
||||||
|
- name: get become user profile dir so we can clean it up later
|
||||||
|
vars: &become_vars
|
||||||
|
ansible_become_user: "{{ become_test_username }}"
|
||||||
|
ansible_become_password: "{{ gen_pw }}"
|
||||||
|
ansible_become_method: runas
|
||||||
|
ansible_become: yes
|
||||||
|
win_shell: $env:USERPROFILE
|
||||||
|
register: profile_dir_out
|
||||||
|
|
||||||
|
- name: ensure profile dir contains test username (eg, if become fails silently, prevent deletion of real user profile)
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- become_test_username in profile_dir_out.stdout_lines[0]
|
||||||
|
|
||||||
|
- name: test out become requires when become_user set
|
||||||
|
test_all_options:
|
||||||
|
vars: *become_vars
|
||||||
|
register: become_system
|
||||||
|
|
||||||
|
- name: assert become requires when become_user set
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- become_system|success
|
||||||
|
- become_system.output == become_test_user_result.sid
|
||||||
|
|
||||||
|
always:
|
||||||
|
- name: ensure test user is deleted
|
||||||
|
win_user:
|
||||||
|
name: "{{ become_test_username }}"
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: ensure test user profile is deleted
|
||||||
|
# NB: have to work around powershell limitation of long filenames until win_file fixes it
|
||||||
|
win_shell: rmdir /S /Q {{ profile_dir_out.stdout_lines[0] }}
|
||||||
|
args:
|
||||||
|
executable: cmd.exe
|
||||||
|
when: become_test_username in profile_dir_out.stdout_lines[0]
|
||||||
Loading…
Reference in New Issue