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

时间:2016-10-21 04:41:20

标签: ansible-playbook ansible-2.x

在我的场景中,我有三台机器localhost,host2和host3的库存。我想在host3上运行一些任务/命令,而我的ansible playbook仍然在host2上播放而不从host2切换到host3 - 这可能吗?我可以使用local_action模块但是在localhost上运行任务但我希望命令在host3上执行,而我在host2上。如果有人可以指点,那将会很棒。下面可以解释我想要实现的目标:

 - 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上运行命令?

非常感谢, 迪帕克

1 个答案:

答案 0 :(得分:2)

在这种情况下,您可以使用delegate_to。如果您在单个主机上运行游戏(在#34;主机:&#34;中提到了单个主机),您只需使用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

此外,当您的目标列表包含节点组(&#34; hosts:&#34;中的指定组)时,在这种情况下,还应使用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上运行一系列命令,我建议您在单个剧本中使用多个播放。