mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-10-23 04:24:00 -07:00
psrp: Added new Windows connection plugin (#41729)
* psrp: Added new Windows connection plugin * Tweaks to connection options from review
This commit is contained in:
parent
07a011cd6f
commit
6982dfc756
7 changed files with 793 additions and 22 deletions
3
test/integration/targets/connection_psrp/aliases
Normal file
3
test/integration/targets/connection_psrp/aliases
Normal file
|
@ -0,0 +1,3 @@
|
|||
windows
|
||||
shippable/windows/group1
|
||||
shippable/windows/smoketest
|
15
test/integration/targets/connection_psrp/runme.sh
Executable file
15
test/integration/targets/connection_psrp/runme.sh
Executable file
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -eux
|
||||
|
||||
pip install pypsrp
|
||||
cd ../connection
|
||||
|
||||
INVENTORY=../../inventory.winrm ./test.sh \
|
||||
-e target_hosts=winrm \
|
||||
-e action_prefix=win_ \
|
||||
-e local_tmp=/tmp/ansible-local \
|
||||
-e remote_tmp=c:/windows/temp/ansible-remote \
|
||||
-e ansible_psrp_cert_validation=False \
|
||||
-c psrp \
|
||||
"$@"
|
|
@ -395,7 +395,7 @@ class PathMapper(object):
|
|||
|
||||
# entire integration test commands depend on these connection plugins
|
||||
|
||||
if name == 'winrm':
|
||||
if name in ['winrm', 'psrp']:
|
||||
return {
|
||||
'windows-integration': self.integration_all_target,
|
||||
'units': units_path,
|
||||
|
|
147
test/units/plugins/connection/test_psrp.py
Normal file
147
test/units/plugins/connection/test_psrp.py
Normal file
|
@ -0,0 +1,147 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# (c) 2018, Jordan Borean <jborean@redhat.com>
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
# Make coding more python3-ish
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from io import StringIO
|
||||
|
||||
from ansible.playbook.play_context import PlayContext
|
||||
from ansible.plugins.loader import connection_loader
|
||||
|
||||
pytest.importorskip("pypsrp")
|
||||
|
||||
|
||||
class TestConnectionWinRM(object):
|
||||
|
||||
OPTIONS_DATA = (
|
||||
# default options
|
||||
(
|
||||
{'_extras': {}},
|
||||
{
|
||||
'_psrp_auth': 'negotiate',
|
||||
'_psrp_cert_validation': True,
|
||||
'_psrp_configuration_name': 'Microsoft.PowerShell',
|
||||
'_psrp_connection_timeout': 30,
|
||||
'_psrp_message_encryption': 'auto',
|
||||
'_psrp_host': 'inventory_hostname',
|
||||
'_psrp_conn_kwargs': {
|
||||
'server': 'inventory_hostname',
|
||||
'port': 5986,
|
||||
'username': None,
|
||||
'password': '',
|
||||
'ssl': True,
|
||||
'path': 'wsman',
|
||||
'auth': 'negotiate',
|
||||
'cert_validation': True,
|
||||
'connection_timeout': 30,
|
||||
'encryption': 'auto',
|
||||
'proxy': None,
|
||||
'no_proxy': False,
|
||||
'max_envelope_size': 153600,
|
||||
'operation_timeout': 20,
|
||||
},
|
||||
'_psrp_max_envelope_size': 153600,
|
||||
'_psrp_ignore_proxy': False,
|
||||
'_psrp_operation_timeout': 20,
|
||||
'_psrp_pass': '',
|
||||
'_psrp_path': 'wsman',
|
||||
'_psrp_port': 5986,
|
||||
'_psrp_proxy': None,
|
||||
'_psrp_protocol': 'https',
|
||||
'_psrp_user': None
|
||||
},
|
||||
),
|
||||
# ssl=False when port defined to 5985
|
||||
(
|
||||
{'_extras': {}, 'ansible_port': '5985'},
|
||||
{
|
||||
'_psrp_port': 5985,
|
||||
'_psrp_protocol': 'http'
|
||||
},
|
||||
),
|
||||
# ssl=True when port defined to not 5985
|
||||
(
|
||||
{'_extras': {}, 'ansible_port': 1234},
|
||||
{
|
||||
'_psrp_port': 1234,
|
||||
'_psrp_protocol': 'https'
|
||||
},
|
||||
),
|
||||
# port 5986 when ssl=True
|
||||
(
|
||||
{'_extras': {}, 'ansible_psrp_protocol': 'https'},
|
||||
{
|
||||
'_psrp_port': 5986,
|
||||
'_psrp_protocol': 'https'
|
||||
},
|
||||
),
|
||||
# port 5985 when ssl=False
|
||||
(
|
||||
{'_extras': {}, 'ansible_psrp_protocol': 'http'},
|
||||
{
|
||||
'_psrp_port': 5985,
|
||||
'_psrp_protocol': 'http'
|
||||
},
|
||||
),
|
||||
# psrp extras
|
||||
(
|
||||
{'_extras': {'ansible_psrp_negotiate_delegate': True}},
|
||||
{
|
||||
'_psrp_conn_kwargs': {
|
||||
'server': 'inventory_hostname',
|
||||
'port': 5986,
|
||||
'username': None,
|
||||
'password': '',
|
||||
'ssl': True,
|
||||
'path': 'wsman',
|
||||
'auth': 'negotiate',
|
||||
'cert_validation': True,
|
||||
'connection_timeout': 30,
|
||||
'encryption': 'auto',
|
||||
'proxy': None,
|
||||
'no_proxy': False,
|
||||
'max_envelope_size': 153600,
|
||||
'operation_timeout': 20,
|
||||
'negotiate_delegate': True,
|
||||
|
||||
},
|
||||
},
|
||||
),
|
||||
# cert validation through string repr of bool
|
||||
(
|
||||
{'_extras': {}, 'ansible_psrp_cert_validation': 'ignore'},
|
||||
{
|
||||
'_psrp_cert_validation': False
|
||||
},
|
||||
),
|
||||
# cert validation path
|
||||
(
|
||||
{'_extras': {}, 'ansible_psrp_cert_trust_path': '/path/cert.pem'},
|
||||
{
|
||||
'_psrp_cert_validation': '/path/cert.pem'
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
# pylint bug: https://github.com/PyCQA/pylint/issues/511
|
||||
# pylint: disable=undefined-variable
|
||||
@pytest.mark.parametrize('options, expected',
|
||||
((o, e) for o, e in OPTIONS_DATA))
|
||||
def test_set_options(self, options, expected):
|
||||
pc = PlayContext()
|
||||
new_stdin = StringIO()
|
||||
|
||||
conn = connection_loader.get('psrp', pc, new_stdin)
|
||||
conn.set_options(var_options=options)
|
||||
conn._build_kwargs()
|
||||
|
||||
for attr, expected in expected.items():
|
||||
actual = getattr(conn, attr)
|
||||
assert actual == expected, \
|
||||
"psrp attr '%s', actual '%s' != expected '%s'"\
|
||||
% (attr, actual, expected)
|
Loading…
Add table
Add a link
Reference in a new issue