|
|
|
# https://github.com/dw/mitogen/issues/251
|
|
|
|
|
|
|
|
# ansible_mitogen.connection internally reinterprets Ansible state into a
|
|
|
|
# 'connection stack' -- this is just a list of dictionaries specifying a
|
|
|
|
# sequence of proxied Router connection methods and their kwargs used to
|
|
|
|
# establish the connection. That list is passed to ContextService, which loops
|
|
|
|
# over the stack specifying via=(null or previous entry) for each connection
|
|
|
|
# method.
|
|
|
|
|
|
|
|
# mitogen_get_stack is a magic action that returns the stack, so we can test
|
|
|
|
# all kinds of scenarios without actually needing a real environmnt.
|
|
|
|
|
|
|
|
# Updating this file? Install 'pprintpp' and hack lib/callbacks/nice_stdout.py
|
|
|
|
# to use it instead of the built-in function, then simply s/'/'/ to get the
|
|
|
|
# cutpasteable formatted dicts below. WARNING: remove the trailing comma from
|
|
|
|
# the result list element, it seems to cause assert to silently succeed!
|
|
|
|
|
|
|
|
|
|
|
|
- name: integration/connection_delegation/stack_construction.yml
|
|
|
|
hosts: cd-normal
|
|
|
|
tasks:
|
|
|
|
- include_tasks: ../_mitogen_only.yml
|
|
|
|
# used later for local_action test.
|
|
|
|
- local_action: custom_python_detect_environment
|
|
|
|
register: local_env
|
|
|
|
tags:
|
|
|
|
- stack_construction
|
|
|
|
|
|
|
|
|
|
|
|
- hosts: cd-normal
|
|
|
|
tasks:
|
|
|
|
- include_tasks: ../_mitogen_only.yml
|
|
|
|
- mitogen_get_stack:
|
|
|
|
register: out
|
|
|
|
- assert_equal:
|
|
|
|
left: out.result
|
|
|
|
right: [
|
|
|
|
{
|
|
|
|
"kwargs": {
|
|
|
|
"connect_timeout": 30,
|
|
|
|
"doas_path": null,
|
|
|
|
"password": null,
|
|
|
|
"python_path": ["/usr/bin/python"],
|
|
|
|
'remote_name': null,
|
|
|
|
"username": "normal-user",
|
|
|
|
},
|
|
|
|
"method": "doas",
|
|
|
|
}
|
|
|
|
]
|
|
|
|
tags:
|
|
|
|
- mitogen_only
|
|
|
|
- stack_construction
|
|
|
|
|
|
|
|
|
|
|
|
- hosts: cd-normal
|
|
|
|
tasks:
|
|
|
|
- include_tasks: ../_mitogen_only.yml
|
|
|
|
- mitogen_get_stack:
|
|
|
|
delegate_to: cd-alias
|
|
|
|
register: out
|
|
|
|
- assert_equal:
|
|
|
|
left: out.result
|
|
|
|
right: [
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'check_host_keys': 'ignore',
|
|
|
|
'compression': True,
|
|
|
|
'connect_timeout': 30,
|
|
|
|
'hostname': 'alias-host',
|
|
|
|
'identities_only': False,
|
|
|
|
'identity_file': null,
|
|
|
|
'keepalive_interval': 30,
|
|
|
|
'keepalive_count': 10,
|
|
|
|
'password': null,
|
|
|
|
'port': null,
|
|
|
|
"python_path": ["/usr/bin/python"],
|
|
|
|
'remote_name': null,
|
|
|
|
'ssh_args': [
|
|
|
|
-o, ControlMaster=auto,
|
|
|
|
-o, ControlPersist=60s,
|
|
|
|
-o, ForwardAgent=yes,
|
|
|
|
-o, HostKeyAlgorithms=+ssh-rsa,
|
|
|
|
-o, PubkeyAcceptedKeyTypes=+ssh-rsa,
|
|
|
|
-o, UserKnownHostsFile=/dev/null,
|
|
|
|
],
|
|
|
|
'ssh_debug_level': null,
|
|
|
|
'ssh_path': 'ssh',
|
|
|
|
'username': 'alias-user',
|
|
|
|
},
|
|
|
|
'method': 'ssh',
|
|
|
|
},
|
|
|
|
]
|
|
|
|
tags:
|
|
|
|
- mitogen_only
|
|
|
|
- stack_construction
|
|
|
|
|
|
|
|
|
|
|
|
- hosts: cd-alias
|
|
|
|
tasks:
|
|
|
|
- include_tasks: ../_mitogen_only.yml
|
|
|
|
- mitogen_get_stack:
|
|
|
|
register: out
|
|
|
|
- assert_equal:
|
|
|
|
left: out.result
|
|
|
|
right: [
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'check_host_keys': 'ignore',
|
|
|
|
'compression': True,
|
|
|
|
'connect_timeout': 30,
|
|
|
|
'hostname': 'alias-host',
|
|
|
|
'identities_only': False,
|
|
|
|
'identity_file': null,
|
|
|
|
'keepalive_interval': 30,
|
|
|
|
'keepalive_count': 10,
|
|
|
|
'password': null,
|
|
|
|
'port': null,
|
|
|
|
"python_path": ["/usr/bin/python"],
|
|
|
|
'remote_name': null,
|
|
|
|
'ssh_args': [
|
|
|
|
-o, ControlMaster=auto,
|
|
|
|
-o, ControlPersist=60s,
|
|
|
|
-o, ForwardAgent=yes,
|
|
|
|
-o, HostKeyAlgorithms=+ssh-rsa,
|
|
|
|
-o, PubkeyAcceptedKeyTypes=+ssh-rsa,
|
|
|
|
-o, UserKnownHostsFile=/dev/null,
|
|
|
|
],
|
|
|
|
'ssh_debug_level': null,
|
|
|
|
'ssh_path': 'ssh',
|
|
|
|
'username': 'alias-user',
|
|
|
|
},
|
|
|
|
'method': 'ssh',
|
|
|
|
},
|
|
|
|
]
|
|
|
|
tags:
|
|
|
|
- mitogen_only
|
|
|
|
- stack_construction
|
|
|
|
|
|
|
|
|
|
|
|
- hosts: cd-normal-normal
|
|
|
|
tasks:
|
|
|
|
- include_tasks: ../_mitogen_only.yml
|
|
|
|
- mitogen_get_stack:
|
|
|
|
register: out
|
|
|
|
- assert_equal:
|
|
|
|
left: out.result
|
|
|
|
right: [
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'connect_timeout': 30,
|
|
|
|
'doas_path': null,
|
|
|
|
'password': null,
|
|
|
|
"python_path": ["/usr/bin/python"],
|
|
|
|
'remote_name': null,
|
|
|
|
'username': 'normal-user',
|
|
|
|
},
|
|
|
|
'method': 'doas',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'check_host_keys': 'ignore',
|
|
|
|
'compression': True,
|
|
|
|
'connect_timeout': 30,
|
|
|
|
'hostname': 'cd-normal-normal',
|
|
|
|
'identities_only': False,
|
|
|
|
'identity_file': null,
|
|
|
|
'keepalive_interval': 30,
|
|
|
|
'keepalive_count': 10,
|
|
|
|
'password': null,
|
|
|
|
'port': null,
|
|
|
|
"python_path": ["/usr/bin/python"],
|
|
|
|
'remote_name': null,
|
|
|
|
'ssh_args': [
|
|
|
|
-o, ControlMaster=auto,
|
|
|
|
-o, ControlPersist=60s,
|
|
|
|
-o, ForwardAgent=yes,
|
|
|
|
-o, HostKeyAlgorithms=+ssh-rsa,
|
|
|
|
-o, PubkeyAcceptedKeyTypes=+ssh-rsa,
|
|
|
|
-o, UserKnownHostsFile=/dev/null,
|
|
|
|
],
|
|
|
|
'ssh_debug_level': null,
|
|
|
|
'ssh_path': 'ssh',
|
issue #251, #412, #434: fix connection configuration brainwrong
This refactors connection.py to pull the two huge dict-building
functions out into new transport_transport_config.PlayContextSpec and
MitogenViaSpec classes, leaving a lot more room to breath in both files
to figure out exactly how connection configuration should work.
The changes made in 1f21a30 / 3d58832 are updated or completely removed,
the original change was misguided, in a bid to fix connection delegation
taking variables from the wrong place when delegate_to was active.
The Python path no longer defaults to '/usr/bin/python', this does not
appear to be Ansible's normal behaviour. This has changed several times,
so it may have to change again, and it may cause breakage after release.
Connection delegation respects the c.DEFAULT_REMOTE_USER whereas the
previous version simply tried to fetch whatever was in the
'ansible_user' hostvar. Many more connection delegation variables closer
match vanilla's handling, but this still requires more work. Some of the
variables need access to the command line, and upstream are in the
process of changing all that stuff around.
6 years ago
|
|
|
'username': 'ansible-cfg-remote-user',
|
|
|
|
},
|
|
|
|
'method': 'ssh',
|
|
|
|
},
|
|
|
|
]
|
|
|
|
tags:
|
|
|
|
- mitogen_only
|
|
|
|
- stack_construction
|
|
|
|
|
|
|
|
|
|
|
|
- hosts: cd-normal-alias
|
|
|
|
tasks:
|
|
|
|
- include_tasks: ../_mitogen_only.yml
|
|
|
|
- mitogen_get_stack:
|
|
|
|
register: out
|
|
|
|
- assert_equal:
|
|
|
|
left: out.result
|
|
|
|
right: [
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'check_host_keys': 'ignore',
|
|
|
|
'compression': True,
|
|
|
|
'connect_timeout': 30,
|
|
|
|
'hostname': 'alias-host',
|
|
|
|
'identities_only': False,
|
|
|
|
'identity_file': null,
|
|
|
|
'keepalive_interval': 30,
|
|
|
|
'keepalive_count': 10,
|
|
|
|
'password': null,
|
|
|
|
'port': null,
|
|
|
|
"python_path": ["/usr/bin/python"],
|
|
|
|
'remote_name': null,
|
|
|
|
'ssh_args': [
|
|
|
|
-o, ControlMaster=auto,
|
|
|
|
-o, ControlPersist=60s,
|
|
|
|
-o, ForwardAgent=yes,
|
|
|
|
-o, HostKeyAlgorithms=+ssh-rsa,
|
|
|
|
-o, PubkeyAcceptedKeyTypes=+ssh-rsa,
|
|
|
|
-o, UserKnownHostsFile=/dev/null,
|
|
|
|
],
|
|
|
|
'ssh_debug_level': null,
|
|
|
|
'ssh_path': 'ssh',
|
|
|
|
'username': 'alias-user',
|
|
|
|
},
|
|
|
|
'method': 'ssh',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'check_host_keys': 'ignore',
|
|
|
|
'compression': True,
|
|
|
|
'connect_timeout': 30,
|
|
|
|
'hostname': 'cd-normal-alias',
|
|
|
|
'identities_only': False,
|
|
|
|
'identity_file': null,
|
|
|
|
'keepalive_interval': 30,
|
|
|
|
'keepalive_count': 10,
|
|
|
|
'password': null,
|
|
|
|
'port': null,
|
|
|
|
"python_path": ["/usr/bin/python"],
|
|
|
|
'remote_name': null,
|
|
|
|
'ssh_args': [
|
|
|
|
-o, ControlMaster=auto,
|
|
|
|
-o, ControlPersist=60s,
|
|
|
|
-o, ForwardAgent=yes,
|
|
|
|
-o, HostKeyAlgorithms=+ssh-rsa,
|
|
|
|
-o, PubkeyAcceptedKeyTypes=+ssh-rsa,
|
|
|
|
-o, UserKnownHostsFile=/dev/null,
|
|
|
|
],
|
|
|
|
'ssh_debug_level': null,
|
|
|
|
'ssh_path': 'ssh',
|
issue #251, #412, #434: fix connection configuration brainwrong
This refactors connection.py to pull the two huge dict-building
functions out into new transport_transport_config.PlayContextSpec and
MitogenViaSpec classes, leaving a lot more room to breath in both files
to figure out exactly how connection configuration should work.
The changes made in 1f21a30 / 3d58832 are updated or completely removed,
the original change was misguided, in a bid to fix connection delegation
taking variables from the wrong place when delegate_to was active.
The Python path no longer defaults to '/usr/bin/python', this does not
appear to be Ansible's normal behaviour. This has changed several times,
so it may have to change again, and it may cause breakage after release.
Connection delegation respects the c.DEFAULT_REMOTE_USER whereas the
previous version simply tried to fetch whatever was in the
'ansible_user' hostvar. Many more connection delegation variables closer
match vanilla's handling, but this still requires more work. Some of the
variables need access to the command line, and upstream are in the
process of changing all that stuff around.
6 years ago
|
|
|
'username': 'ansible-cfg-remote-user',
|
|
|
|
},
|
|
|
|
'method': 'ssh',
|
|
|
|
},
|
|
|
|
]
|
|
|
|
tags:
|
|
|
|
- stack_construction
|
|
|
|
|
|
|
|
|
|
|
|
- hosts: cd-newuser-normal-normal
|
|
|
|
tasks:
|
|
|
|
- include_tasks: ../_mitogen_only.yml
|
|
|
|
- mitogen_get_stack:
|
|
|
|
register: out
|
|
|
|
- assert_equal:
|
|
|
|
left: out.result
|
|
|
|
right: [
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'connect_timeout': 30,
|
|
|
|
'doas_path': null,
|
|
|
|
'password': null,
|
|
|
|
"python_path": ["/usr/bin/python"],
|
|
|
|
'remote_name': null,
|
|
|
|
'username': 'normal-user',
|
|
|
|
},
|
|
|
|
'method': 'doas',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'check_host_keys': 'ignore',
|
|
|
|
'compression': True,
|
|
|
|
'connect_timeout': 30,
|
|
|
|
'hostname': 'cd-newuser-normal-normal',
|
|
|
|
'identities_only': False,
|
|
|
|
'identity_file': null,
|
|
|
|
'keepalive_interval': 30,
|
|
|
|
'keepalive_count': 10,
|
|
|
|
'password': null,
|
|
|
|
'port': null,
|
|
|
|
"python_path": ["/usr/bin/python"],
|
|
|
|
'remote_name': null,
|
|
|
|
'ssh_args': [
|
|
|
|
-o, ControlMaster=auto,
|
|
|
|
-o, ControlPersist=60s,
|
|
|
|
-o, ForwardAgent=yes,
|
|
|
|
-o, HostKeyAlgorithms=+ssh-rsa,
|
|
|
|
-o, PubkeyAcceptedKeyTypes=+ssh-rsa,
|
|
|
|
-o, UserKnownHostsFile=/dev/null,
|
|
|
|
],
|
|
|
|
'ssh_debug_level': null,
|
|
|
|
'ssh_path': 'ssh',
|
|
|
|
'username': 'newuser-normal-normal-user',
|
|
|
|
},
|
|
|
|
'method': 'ssh',
|
|
|
|
},
|
|
|
|
]
|
|
|
|
tags:
|
|
|
|
- mitogen_only
|
|
|
|
- stack_construction
|
|
|
|
|
|
|
|
|
|
|
|
- hosts: cd-newuser-normal-normal
|
|
|
|
tasks:
|
|
|
|
- include_tasks: ../_mitogen_only.yml
|
|
|
|
- mitogen_get_stack:
|
|
|
|
delegate_to: cd-alias
|
|
|
|
register: out
|
|
|
|
- assert_equal:
|
|
|
|
left: out.result
|
|
|
|
right: [
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'check_host_keys': 'ignore',
|
|
|
|
'compression': True,
|
|
|
|
'connect_timeout': 30,
|
|
|
|
'hostname': 'alias-host',
|
|
|
|
'identities_only': False,
|
|
|
|
'identity_file': null,
|
|
|
|
'keepalive_interval': 30,
|
|
|
|
'keepalive_count': 10,
|
|
|
|
'password': null,
|
|
|
|
'port': null,
|
|
|
|
"python_path": ["/usr/bin/python"],
|
|
|
|
'remote_name': null,
|
|
|
|
'ssh_args': [
|
|
|
|
-o, ControlMaster=auto,
|
|
|
|
-o, ControlPersist=60s,
|
|
|
|
-o, ForwardAgent=yes,
|
|
|
|
-o, HostKeyAlgorithms=+ssh-rsa,
|
|
|
|
-o, PubkeyAcceptedKeyTypes=+ssh-rsa,
|
|
|
|
-o, UserKnownHostsFile=/dev/null,
|
|
|
|
],
|
|
|
|
'ssh_debug_level': null,
|
|
|
|
'ssh_path': 'ssh',
|
|
|
|
'username': 'alias-user',
|
|
|
|
},
|
|
|
|
'method': 'ssh',
|
|
|
|
},
|
|
|
|
]
|
|
|
|
tags:
|
|
|
|
- mitogen_only
|
|
|
|
- stack_construction
|
|
|
|
|
|
|
|
|
|
|
|
- hosts: cd-newuser-normal-normal
|
|
|
|
tasks:
|
|
|
|
- include_tasks: ../_mitogen_only.yml
|
|
|
|
- local_action: mitogen_get_stack
|
|
|
|
register: out
|
|
|
|
- assert_equal:
|
|
|
|
left: out.result
|
|
|
|
right: [
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
"python_path": ["{{ansible_playbook_python}}"],
|
|
|
|
},
|
|
|
|
'method': 'local',
|
|
|
|
},
|
|
|
|
]
|
|
|
|
tags:
|
|
|
|
- mitogen_only
|
|
|
|
- stack_construction
|
|
|
|
|
|
|
|
|
|
|
|
- hosts: cd-newuser-doas-normal
|
|
|
|
tasks:
|
|
|
|
- include_tasks: ../_mitogen_only.yml
|
|
|
|
- mitogen_get_stack:
|
|
|
|
register: out
|
|
|
|
- assert_equal:
|
|
|
|
left: out.result
|
|
|
|
right: [
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'connect_timeout': 30,
|
|
|
|
'doas_path': null,
|
|
|
|
'password': null,
|
|
|
|
'python_path': ["/usr/bin/python"],
|
|
|
|
'remote_name': null,
|
|
|
|
'username': 'normal-user',
|
|
|
|
},
|
|
|
|
'method': 'doas',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'connect_timeout': 30,
|
|
|
|
'doas_path': null,
|
|
|
|
'password': null,
|
|
|
|
'python_path': ["/usr/bin/python"],
|
|
|
|
'remote_name': null,
|
|
|
|
'username': 'newuser-doas-normal-user',
|
|
|
|
},
|
|
|
|
'method': 'doas',
|
|
|
|
},
|
|
|
|
]
|
|
|
|
tags:
|
|
|
|
- mitogen_only
|
|
|
|
- stack_construction
|