想要 运行 远程主机上的 ansible 任务

Want to run ansible tasks on remote host

在我的场景中,我有三台机器 localhost、host2 和 host3 的清单。我想在 host3 上 运行 一些 tasks/commands 而我的 ansible 剧本仍在 host2 上播放而不从 host2 切换到 host3 - 这可能吗?我可以使用 local_action 模块,但是 运行 是本地主机上的任务,但我希望命令在主机 2 上时在主机 3 上执行。如果有人能指点一下就太好了。下面可能会解释我想要实现的目标:

 - name: Playing host2
   hosts: host2
   become: yes
   tasks:
    - name: run following commands on host3
      local_action: command <command1 for host3>
      local_action: command <command2 for host3>
    - name: continue to run host2
      command: <command for host2>

有没有 local_action 的替代品,这样我就可以 运行 host3 而不是 127.0.0.1 上的命令?

非常感谢, 迪帕克

在这种情况下,您可以使用 delegate_to。如果您 运行 在一台主机上玩游戏(“主机:”中提到了一台主机),您可以简单地使用 delegate_to 将特定命令委托给其他机器:

-  name: Playing host2
   hosts: host2
   become: yes
   tasks:
    - name: run following commands on localhost.
      shell: hostname
      delegate_to: 127.0.0.1

    - name: continue to run host2
      shell: hostname

此外,当您的目标列表包含一组节点(在“主机:”中指定的组)时,在这种情况下连同 delegate_to,您也应该使用 run_once

-  name: Playing on group of hosts.
   hosts: someGroup
   become: yes
   tasks:
    - name: run following commands on localhost.
      shell: hostname
      delegate_to: 127.0.0.1
      run_once: true

    - name: continue to run on group hosts.
      shell: hostname

编辑: 从 localhost 连接到 host3 时将使用无密码身份验证。因此,请确保您已经配置了基于密钥的身份验证。

注意:您始终可以将多个剧本放在一个剧本中。因此,如果您在 host2 上有一组命令 运行,然后在 host3 上有一组命令 运行,我建议在单个剧本中使用多个播放。