ansible-当只有一个主机满足条件时,为所有主机设置事实

ansible-当只有一个主机满足条件时,为所有主机设置事实,ansible,Ansible,使用Ansible v2.9.12 问题:当至少有一个主机满足特定条件时,如何为游戏中的所有主机设置变量 例如: - hosts: - host1 - host2 - host3 - host4 tasks: - stat: path: /tmp/file register: something - set_fact something: true when: something <

使用Ansible v2.9.12

问题:当至少有一个主机满足特定条件时,如何为游戏中的所有主机设置变量

例如:

- hosts:
    - host1
    - host2
    - host3
    - host4
  tasks:
    - stat:
        path: /tmp/file
      register: something

    - set_fact
        something: true
      when: something <at least one of the hosts has /tmp/file>
 
-主机:
-旅社1
-旅社2
-旅社3
-旅社4
任务:
-统计:
路径:/tmp/文件
登记员:什么
-设定事实
有些事:真的
什么时候

现在,只有host4的文件系统中存在
/tmp/file
。在这种情况下,如何设置所有主机的事实?

在Vladimir Botka的帮助下:

---
- hosts:
    - test-multi-03
    - test-multi-02
    - test-multi-01
  tasks:
    - name: stat file
      stat:
        path: /tmp/file
      register: status

    - block:

        - name: create dictionary
          set_fact:
            status: "{{ dict(keys|zip(values)) }}"
          vars:
            keys: "{{ ansible_play_hosts }}"
            values: "{{ ansible_play_hosts|
                        map('extract', hostvars, ['status','stat','exists'])
                        | list }}"

        - name: set fact when file is present on at least one host, for all hosts
          set_fact:
            something: yeah
          when: status.values() | list is any

      run_once: true

    - debug:
        msg: "{{ something }}"
      when: something is defined

您肯定希望首先将
register:
添加到
stat:
中,否则您无法告诉任何有关其结果的信息;也请告诉我你尝试了什么,产生了什么错误,这实际上是一个复制品。而不是在以下情况下失败:。。。当:。。。是否有任何@mdaniel不是所有的东西都需要自己的工作,对吗?穿过树林,我再也看不见树了。不管怎样,弗拉基米尔,你给我指明了正确的方向,我已经成功了。