首页 > 解决方案 > Ansible 使用具有不同 ansible_ssh_common_args 的 delegate_to

问题描述

我正在尝试从我的 ansible master 运行到主机(我们称之为 hostclient),这需要在另一台主机上执行某些操作(我们称之为 susemanagerhost :))。

hostclient 需要ansible_ssh_common_args完整的 proxycommand,而 susemanager host 不需要,ansible_ssh_common_args因为它是直接连接。

所以我想我可以使用delegate_to,但是名为 hostclient 的主机和名为 susemanagerhost 的主机具有不同的变量值ansible_ssh_common_args

我想我可以用of to更改ansible_ssh_common_args运行内部的值(因为我想恢复其他标准任务的原始值)然后到(从 ansible master 到 susemanager 主机的连接是直接连接,不需要 proxycommand ) 但它不起作用。 似乎它仍在使用.set_factansible_ssh_common_argsansible_ssh_common_args_backupansible_ssh_common_argsnull
ansible_ssh_common_args

标签: ansiblesusesles

解决方案


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"

这解决了我的问题,希望它也适合你。


推荐阅读