Ansible:在其他主机上运行的任务中使用hostvars访问自定义事实(set_facts)时未定义

Ansible:在其他主机上运行的任务中使用hostvars访问自定义事实(set_facts)时未定义,ansible,ansible-facts,Ansible,Ansible Facts,我正在尝试使用Ansible配置Docker swarm群集,在配置manager节点时,我使用ip地址设置了一个自定义事实(Docker\u manager\u地址),以便其他节点可以知道加入群集的ip 事实设置正确,我可以在manager节点中获取其值,但当我尝试在其他节点(使用hostvars)中运行的任务中获取事实时,它没有定义 以下是我的任务: -name:将第一个Swarm manager的地址声明为事实。 设定事实: docker_经理地址:{{docker_swarm_addr}

我正在尝试使用Ansible配置Docker swarm群集,在配置manager节点时,我使用ip地址设置了一个自定义事实(Docker\u manager\u地址),以便其他节点可以知道加入群集的ip

事实设置正确,我可以在manager节点中获取其值,但当我尝试在其他节点(使用hostvars)中运行的任务中获取事实时,它没有定义

以下是我的任务:

-name:将第一个Swarm manager的地址声明为事实。
设定事实:
docker_经理地址:{{docker_swarm_addr}:{{{docker_swarm_port}}”
当:“库存\u主机名==组['docker\u swarm\u Manager'][0]”
-姓名:打印管理员地址
ansible.builtin.debug:
var:hostvars[groups['docker\u swarm\u managers'][0]['docker\u manager\u address']
-名称:分发包含第一个Swarm manager地址的事实。
设定事实:
docker_manager_地址:“{{hostvars[groups['docker_swarm_manager'][0]['docker_manager_地址']}”
当:“库存\u主机名!=组['docker\u swarm\u Manager'][0]”
“打印管理器地址”在设置事实的节点中执行时有效,但在工作节点上为空

我的剧本目前仅此而已:

-主机:所有
学前任务:
-名称:更新系统包
apt:update\u cache=yes force\u apt\u get=yes cache\u valid\u time=3600
变成:真的
角色:
-使用者
-ssh
-{角色:geerlingguy.docker,变成:true}
-码头工人群
swarm设置代码改编自使用此策略的角色:。不知道为什么它对我不起作用


使用Ansible 2.9,我发现了这个问题。我使用Vagrant来测试我的剧本,默认情况下,它使用“限制”来指定要运行的主机。改为“全部”解决了这个问题