Ansible使用带有不同ansible_ssh_common_args的委托_to

问题描述

我正在尝试从我的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_backupansible_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_varsgroup_vars中。 紧随其后的是静态使用delegate_to

delegate_to: <hostname>

hostname应该是ansible使用的主机名。

但不要使用:

delegate_to: "username@hostname"

这为我解决了这个问题,希望对您也有帮助。