为什么Ansible忽略delegate_to参数?

时间:2017-09-20 16:10:46

标签: ansible

我有一个非常简单的剧本:

- 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

1 个答案:

答案 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