问题描述
我正在尝试从我的ansible主机运行到主机(将其称为hostclient),这需要对另一台主机执行某些操作(将其称为susemanagerhost :))。
hostclient需要ansible_ssh_common_args
,并且已满满使用proxy命令,而susemanager主机不需要ansible_ssh_common_args
,因为它是直接连接。
所以我认为我可以使用delegate_to
,但是名为hostclient的主机和名为susemanagerhost的主机对于变量ansible_ssh_common_args
具有不同的值。
我认为我可以在运行中将ansible_ssh_common_args
的{{1}}的值set_fact
更改为ansible_ssh_common_args
(因为我想恢复其他标准的原始值任务),然后从ansible_ssh_common_args_backup
到ansible_ssh_common_args
(从ansible主服务器到susemanager主机的连接是直接连接,不需要proxy命令),但是它不起作用。
似乎它仍在使用null
的原始值。
解决方法
ansible_ssh_common_args
通常用于“通过”代理服务器执行命令:
<ansible system> => <proxy system> => <intended host>
您提出问题的方式无需使用ansible_ssh_common_args
,而可以坚持使用delegate_to
:
- name: execute on host client
shell: ls -la
- name: execute on susemanagerhost
shell: ls -la
delegate_to: "root@susemanagerhost"
通过以下方式调用此剧本:
ansible-playbook <play> --limit=hostclient
这应该做到。
编辑: 在github上提交错误后,有效的解决方案是:
ansible_ssh_common_args: '-o StrictHostKeyChecking=no -o ProxyCommand="ssh -W %h:%p -i ~/.ssh/id_rsa ansible@{{ jumphost_server }}"'
在host_vars
或group_vars
中。
紧随其后的是静态使用delegate_to
:
delegate_to: <hostname>
hostname
应该是ansible使用的主机名。
但不要使用:
delegate_to: "username@hostname"
这为我解决了这个问题,希望对您也有帮助。