如果在我的剧本中,一部戏正在多台主机上运行,每台主机都更新一个localhost变量,那么该localhost变量的值是多少?
- hosts: groupa
serial: 2
tasks:
- set_fact:
deploy: A Random Integer (different for different server)
when: prev_failure.stat.exists
delegate_to: localhost
- debug: msg="{{hostvars['localhost']['deploy']}}"
我应该期望这种代码的行为是什么?
它应该打印相同的值还是不同的?
答案 0 :(得分:1)
localhost
是Ansible控制器。
debug
将从Ansible控制器打印deploy
值(如果已执行),即localhost
是groupa
的成员。
如果localhost
不是groupa
的成员,则会引发异常。
groupa
的每个成员都将设置deploy
个事实。
请参阅文档中的delegated facts:
默认情况下,委派任务收集的所有事实都分配给
inventory_hostname
(当前主机),而不是实际产生事实的主机(委派给主机)。
您可以使用delegate_facts: true
更改行为。