我有一个非常简单的剧本:
- hosts: test
gather_facts: no
tasks:
- name: debug
debug: msg="{{ inventory_hostname }}"
run_once: yes
delegate_to: "host2"
和库存文件:
host1 ansible_ssh_host="1.2.3.4"
host2 ansible_ssh_host="1.2.3.5"
[test]
host1
host2
游戏的结果:
TASK [debug] *************************************************************************************************************************************************************************
ok: [host1 -> host2] => {
"changed": false,
"msg": "host1"
}
要完成,无论我添加到delegate_to
,甚至是一些随机字符串,结果始终为"msg": "host1"
。
如何正确地将此任务委派给groups.test.1或任何其他主机?
编辑:
- hosts: test
gather_facts: no
tasks:
- name: 1
shell: "hostname -f"
run_once: yes
delegate_to: "host2"
register: result
- name: debug
debug: msg="{{ ansible_host }} {{ inventory_hostname }} {{ result.stdout }}"
run_once: yes
播放输出:
TASK [command] ***************************************************************************************************************************************************************************************
changed: [host1 -> None]
TASK [debug] *****************************************************************************************************************************************************************************************
ok: [host1] => {
"msg": "1.2.3.4 host1 host2"
}
Ansible 2.3.x
Ansible 2.4.0
答案 0 :(得分:3)
inventory_hostname
时, delegate_to
不会改变,以便您跟踪"跟踪"您所处的上下文,但其他变量确实发生了变化。
您可以使用以下方式进行测试:
- name: debug
debug: msg="{{ inventory_hostname }} {{ ansible_host }}"
run_once: yes
delegate_to: "host2"
你应该得到:host1 1.2.3.5