mirror of https://github.com/ansible/ansible.git
* Ensure -k is set to delegated hosts without a pass (#71136)
* Ensure -k is set to delegated hosts without a pass
* Fix up some broken tests
* Update task_executor.py
one possible fix, the other is updating winrm to normalize on 'password' like the other connection plugins
* Add alias for winrm and fix incorrect assumption
* Make sure aliases are used for keyword options
* Conditionally run test if sshpass is present, fix sanity
Co-authored-by: Brian Coca <bcoca@users.noreply.github.com>
(cherry picked from commit 3f22f79e73
)
* Backport subset of https://github.com/ansible/ansible/pull/69670
pull/71206/head
parent
02be2a13db
commit
a57e6172f7
@ -0,0 +1,2 @@
|
||||
bugfixes:
|
||||
- Ensure password passed in by -k is used on delegated hosts that do not have ansible_password set
|
@ -0,0 +1,12 @@
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
from ansible.plugins.action import ActionBase
|
||||
|
||||
|
||||
class ActionModule(ActionBase):
|
||||
|
||||
def run(self, tmp=None, task_vars=None):
|
||||
return {
|
||||
'remote_password': self._connection.get_option('remote_password'),
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
shippable/posix/group1
|
||||
skip/freebsd # No sshpass
|
||||
skip/osx # No sshpass
|
||||
skip/rhel # No sshpass
|
@ -0,0 +1,45 @@
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
DOCUMENTATION = """
|
||||
author: Ansible Core Team
|
||||
connection: delegation_connection
|
||||
short_description: Test connection for delegated host check
|
||||
description:
|
||||
- Some further description that you don't care about.
|
||||
options:
|
||||
remote_password:
|
||||
description: The remote password
|
||||
type: str
|
||||
vars:
|
||||
- name: ansible_password
|
||||
# Tests that an aliased key gets the -k option which hardcodes the value to password
|
||||
aliases:
|
||||
- password
|
||||
"""
|
||||
|
||||
from ansible.plugins.connection import ConnectionBase
|
||||
|
||||
|
||||
class Connection(ConnectionBase):
|
||||
|
||||
transport = 'delegation_connection'
|
||||
has_pipelining = True
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(Connection, self).__init__(*args, **kwargs)
|
||||
|
||||
def _connect(self):
|
||||
super(Connection, self)._connect()
|
||||
|
||||
def exec_command(self, cmd, in_data=None, sudoable=True):
|
||||
super(Connection, self).exec_command(cmd, in_data, sudoable)
|
||||
|
||||
def put_file(self, in_path, out_path):
|
||||
super(Connection, self).put_file(in_path, out_path)
|
||||
|
||||
def fetch_file(self, in_path, out_path):
|
||||
super(Connection, self).fetch_file(in_path, out_path)
|
||||
|
||||
def close(self):
|
||||
super(Connection, self).close()
|
@ -0,0 +1 @@
|
||||
my_host ansible_host=127.0.0.1 ansible_connection=delegation_connection
|
@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -ux
|
||||
|
||||
echo "Checking if sshpass is present"
|
||||
which sshpass 2>&1 || exit 0
|
||||
echo "sshpass is present, continuing with test"
|
||||
|
||||
sshpass -p my_password ansible-playbook -i inventory.ini test.yml -k "$@"
|
@ -0,0 +1,23 @@
|
||||
---
|
||||
- hosts: localhost
|
||||
gather_facts: no
|
||||
tasks:
|
||||
- name: test connection receives -k from play_context when delegating
|
||||
delegation_action:
|
||||
delegate_to: my_host
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.remote_password == 'my_password'
|
||||
|
||||
- name: ensure vars set for that host take precedence over -k
|
||||
delegation_action:
|
||||
delegate_to: my_host
|
||||
vars:
|
||||
ansible_password: other_password
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.remote_password == 'other_password'
|
Loading…
Reference in New Issue