在我的场景中,我有三台机器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上运行命令?
非常感谢, 迪帕克
答案 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上运行一系列命令,我建议您在单个剧本中使用多个播放。