Update ansible-test --windows inventory creation. (#60911)

Host specific settings are created as part of the generated inventory instead of using a host_vars directory.

Also update connection tests to work properly with the generated inventory changes.
This commit is contained in:
Matt Clay 2019-08-20 07:17:32 -07:00 committed by GitHub
parent e58919bccd
commit 92380d7050
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 67 additions and 34 deletions

View file

@ -1,4 +0,0 @@
# force 2008 to use PSRP for the connection plugin
ansible_connection: psrp
ansible_psrp_auth: basic
ansible_psrp_cert_validation: ignore

View file

@ -1,4 +0,0 @@
# force 2016 to use NTLM + HTTP message encryption
ansible_winrm_transport: ntlm
ansible_winrm_scheme: http
ansible_port: 5985

View file

@ -1,3 +0,0 @@
[windows:vars]
ansible_connection=psrp
ansible_psrp_cert_validation=ignore

View file

@ -2,12 +2,17 @@
set -eux
# make sure hosts are using psrp connections
ansible -i ../../inventory.winrm localhost \
-m template \
-a "src=test_connection.inventory.j2 dest=${OUTPUT_DIR}/test_connection.inventory" \
"$@"
python.py -m pip install pypsrp
cd ../connection
INVENTORY=../../inventory.winrm ./test.sh \
-i ../connection_psrp/inventory.ini \
-e target_hosts=winrm \
INVENTORY="${OUTPUT_DIR}/test_connection.inventory" ./test.sh \
-e target_hosts=windows \
-e action_prefix=win_ \
-e local_tmp=/tmp/ansible-local \
-e remote_tmp=c:/windows/temp/ansible-remote \
@ -15,5 +20,5 @@ INVENTORY=../../inventory.winrm ./test.sh \
cd ../connection_psrp
ansible-playbook -i ../../inventory.winrm -i inventory.ini tests.yml \
ansible-playbook -i "${OUTPUT_DIR}/test_connection.inventory" tests.yml \
"$@"

View file

@ -0,0 +1,9 @@
[windows]
{% for host in vars.groups.windows %}
{{ host }} ansible_host={{ hostvars[host]['ansible_host'] }} ansible_port={{ hostvars[host]['ansible_port'] }} ansible_user={{ hostvars[host]['ansible_user'] }} ansible_password={{ hostvars[host]['ansible_password'] }}
{% endfor %}
[windows:vars]
ansible_connection=psrp
ansible_psrp_auth=negotiate
ansible_psrp_cert_validation=ignore

View file

@ -1,7 +1,7 @@
---
# these are extra tests for psrp that aren't covered under test/integration/targets/connection/*
- name: test out psrp specific tests
hosts: winrm
hosts: windows
serial: 1
gather_facts: no

View file

@ -18,7 +18,7 @@ ansible -i ../../inventory.winrm windows \
"$@"
# Need to flush the connection to ensure we get a new shell for the next tests
ansible -i "${OUTPUT_DIR}/test_connection.inventory" windows-ssh \
ansible -i "${OUTPUT_DIR}/test_connection.inventory" windows \
-m meta -a "reset_connection" \
"$@"
@ -44,7 +44,7 @@ ansible -i ../../inventory.winrm windows \
-a "path=HKLM:\\\\SOFTWARE\\\\OpenSSH name=DefaultShell data=C:\\\\Windows\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe" \
"$@"
ansible -i "${OUTPUT_DIR}/test_connection.inventory" windows-ssh \
ansible -i "${OUTPUT_DIR}/test_connection.inventory" windows \
-m meta -a "reset_connection" \
"$@"

View file

@ -1,9 +1,9 @@
[windows-ssh]
{% for host in vars.groups.winrm %}
[windows]
{% for host in vars.groups.windows %}
{{ host }} ansible_host={{ hostvars[host]['ansible_host'] }} ansible_user={{ hostvars[host]['ansible_user'] }}{{ ' ansible_ssh_private_key_file=' ~ hostvars[host]['ansible_ssh_private_key_file'] if (hostvars[host]['ansible_ssh_private_key_file']|default()) else '' }}
{% endfor %}
[windows-ssh:vars]
[windows:vars]
ansible_shell_type={{ test_shell_type }}
ansible_connection=ssh
ansible_port=22

View file

@ -1,6 +1,6 @@
---
- name: test out Windows SSH specific tests
hosts: windows-ssh
hosts: windows
serial: 1
gather_facts: no

View file

@ -3,7 +3,7 @@
# documented, it isn't actually used hence the separate invocation
---
- name: further fetch tests with metachar characters in filename
hosts: windows-ssh
hosts: windows
force_handlers: yes
serial: 1
gather_facts: no

View file

@ -11,7 +11,7 @@ cd ../connection
# https://unix.stackexchange.com/questions/499958/why-does-scps-strict-filename-checking-reject-quoted-last-component-but-not-oth
# https://github.com/openssh/openssh-portable/commit/391ffc4b9d31fa1f4ad566499fef9176ff8a07dc
INVENTORY="${OUTPUT_DIR}/test_connection.inventory" ./test.sh \
-e target_hosts=windows-ssh \
-e target_hosts=windows \
-e action_prefix=win_ \
-e local_tmp=/tmp/ansible-local \
-e remote_tmp=c:/windows/temp/ansible-remote \

View file

@ -2,10 +2,16 @@
set -eux
# make sure hosts are using winrm connections
ansible -i ../../inventory.winrm localhost \
-m template \
-a "src=test_connection.inventory.j2 dest=${OUTPUT_DIR}/test_connection.inventory" \
"$@"
cd ../connection
INVENTORY=../../inventory.winrm ./test.sh \
-e target_hosts=winrm \
INVENTORY="${OUTPUT_DIR}/test_connection.inventory" ./test.sh \
-e target_hosts=windows \
-e action_prefix=win_ \
-e local_tmp=/tmp/ansible-local \
-e remote_tmp=c:/windows/temp/ansible-remote \

View file

@ -0,0 +1,10 @@
[windows]
{% for host in vars.groups.windows %}
{{ host }} ansible_host={{ hostvars[host]['ansible_host'] }} ansible_port={{ hostvars[host]['ansible_port'] }} ansible_user={{ hostvars[host]['ansible_user'] }} ansible_password={{ hostvars[host]['ansible_password'] }}
{% endfor %}
[windows:vars]
ansible_connection=winrm
# we don't know if we're using an encrypted connection or not, so we'll use message encryption
ansible_winrm_transport=ntlm
ansible_winrm_server_cert_validation=ignore

View file

@ -747,6 +747,28 @@ def windows_inventory(remotes):
if remote.ssh_key:
options["ansible_ssh_private_key_file"] = os.path.abspath(remote.ssh_key.key)
if remote.name == 'windows-2008':
options.update(
# force 2008 to use PSRP for the connection plugin
ansible_connection='psrp',
ansible_psrp_auth='basic',
ansible_psrp_cert_validation='ignore',
)
elif remote.name == 'windows-2016':
options.update(
# force 2016 to use NTLM + HTTP message encryption
ansible_connection='winrm',
ansible_winrm_server_cert_validation='ignore',
ansible_winrm_transport='ntlm',
ansible_winrm_scheme='http',
ansible_port='5985',
)
else:
options.update(
ansible_connection='winrm',
ansible_winrm_server_cert_validation='ignore',
)
hosts.append(
'%s %s' % (
remote.name.replace('/', '_'),
@ -758,14 +780,6 @@ def windows_inventory(remotes):
[windows]
%s
[windows:vars]
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
# support winrm connection tests (temporary solution, does not support testing enable/disable of pipelining)
[winrm:children]
windows
# support winrm binary module tests (temporary solution)
[testhost:children]
windows