|
|
|
# issue #340: Ensure templated delegate_to field works.
|
|
|
|
#
|
|
|
|
# Here we delegate from "test-targets" group to a templated "{{physical_host}}"
|
|
|
|
# variable, which contains "cd-normal-alias", which has a
|
|
|
|
# "mitogen_via=cd-alias", which in turn has an "ansible_host="alias-host".
|
|
|
|
#
|
|
|
|
# So the full stack should be:
|
|
|
|
# - First hop: hostname "alias-host", username "alias-user"
|
|
|
|
# - Second hop: hostname "cd-normal-alias"
|
|
|
|
|
|
|
|
- name: integration/connection_delegation/delegate_to_template.yml
|
|
|
|
vars:
|
|
|
|
physical_host: "cd-normal-alias"
|
|
|
|
physical_hosts: ["cd-normal-alias", "cd-normal-normal"]
|
|
|
|
hosts: test-targets
|
|
|
|
gather_facts: no
|
|
|
|
any_errors_fatal: true
|
|
|
|
tasks:
|
|
|
|
- meta: end_play
|
|
|
|
when: not is_mitogen
|
|
|
|
|
|
|
|
- meta: end_play
|
|
|
|
when: ansible_version.full < '2.4'
|
|
|
|
|
|
|
|
- mitogen_get_stack:
|
|
|
|
delegate_to: "{{ physical_host }}"
|
|
|
|
register: out
|
|
|
|
|
|
|
|
- assert_equal:
|
|
|
|
left: out.result
|
|
|
|
right: [
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'check_host_keys': 'ignore',
|
|
|
|
'compression': True,
|
|
|
|
'connect_timeout': 10,
|
|
|
|
'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',
|
|
|
|
'UserKnownHostsFile=/dev/null',
|
|
|
|
'-o',
|
|
|
|
'ForwardAgent=yes',
|
|
|
|
'-o',
|
|
|
|
'ControlMaster=auto',
|
|
|
|
'-o',
|
|
|
|
'ControlPersist=60s',
|
|
|
|
],
|
|
|
|
'ssh_debug_level': null,
|
|
|
|
'ssh_path': 'ssh',
|
|
|
|
'username': 'alias-user',
|
|
|
|
},
|
|
|
|
'method': 'ssh',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'kwargs': {
|
|
|
|
'check_host_keys': 'ignore',
|
|
|
|
'compression': True,
|
|
|
|
'connect_timeout': 10,
|
|
|
|
'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',
|
|
|
|
'UserKnownHostsFile=/dev/null',
|
|
|
|
'-o',
|
|
|
|
'ForwardAgent=yes',
|
|
|
|
'-o',
|
|
|
|
'ControlMaster=auto',
|
|
|
|
'-o',
|
|
|
|
'ControlPersist=60s',
|
|
|
|
],
|
|
|
|
'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',
|
|
|
|
}
|
|
|
|
]
|