ansible中的循环事实盘

ansible中的循环事实盘,ansible,Ansible,我试图通过facter_磁盘来查找具有特定大小的磁盘。在下面的代码中,您希望获得大小为30的磁盘sdb。非常感谢您的帮助 --- - name: sample Playbook hosts: localhost gather_facts: false become: yes vars: disks: - sda: model: SYMMETRIX size: 55.00 GiB size_bytes

我试图通过facter_磁盘来查找具有特定大小的磁盘。在下面的代码中,您希望获得大小为30的磁盘sdb。非常感谢您的帮助


---
- name: sample Playbook
  hosts: localhost
  gather_facts: false
  become: yes
  vars:
    disks:
      - sda:
          model: SYMMETRIX
          size: 55.00 GiB
          size_bytes: 59057111040
          vendor: EMC
        sdb:
          model: SYMMETRIX
          size: 35.00 GiB
          size_bytes: 37581619200
          vendor: EMC
        sdc:
          model: SYMMETRIX
          size: 20.00 GiB
          size_bytes: 21475491840
          vendor: EMC


  tasks:

    - debug:
        msg:
#         - "{{ disks[0]['sda']['size'] }}"
          - "{{ item['sda']['size'] }}"
      with_items: " {{disks}} "


disks var是一个列表,您需要在sda、sdb、sdc之前使用“-”。在这种情况下,如果您想使用磁盘作为磁盘列表,那么您可以修改并设置名称属性,正如我在下面写的那样

---
- name: sample Playbook
  hosts: localhost
  gather_facts: false
  become: yes
  vars:
    disks:
    - name: sda
      model: SYMMETRIX
      size: 55.00 GiB
      size_bytes: 59057111040
      vendor: EMC
    - name: sdb
      model: SYMMETRIX
      size: 35.00 GiB
      size_bytes: 37581619200
      vendor: EMC
    - name: sdc
      model: SYMMETRIX
      size: 20.00 GiB
      size_bytes: 21475491840
      vendor: EMC

  tasks:
    - debug:
        msg:
        - "{{ item.name }}"
        - "{{ item.model }}"
        - "{{ item.size }}"
        - "{{ item.size_bytes }}"
        - "{{ item.vendor }}"
      with_items: " {{disks}}"
      when: item.size == "35.00 GiB"


问题:为什么要手动设置变量?因为Ansible可以从主机本身收集事实,所以使用起来更有意义。我手动设置它只是为了测试。ansible gather_facts list facter_相同格式的磁盘不会为每个磁盘放置列表,因此我很难尝试在磁盘之间循环。您应该解决这个问题,而不是手动设置变量,这是一个糟糕的做法。很抱歉,我不明白。facter_磁盘采用这种格式。我不能改变它。我正在尝试通过ansible gather收集的有关系统的事实的磁盘进行循环。您缺少
-
sdb前面的
sdc
中的
vars
声明可转换因子(收集事实)以相同的格式生成事实信息,因此尝试循环通过磁盘。磁盘sda、sdb等不是单独的列表项。