Зацикливание facter_disks в ansible

#ansible

#ansible

Вопрос:

Я пытаюсь выполнить цикл через facter_disks, чтобы найти диск определенного размера. В приведенном ниже коде хотелось бы получить диск sdb размером 30. Любая помощь приветствуется

 
---
- 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}} "

  

Комментарии:

1. Вопрос: зачем вам вручную устанавливать переменные? Поскольку Ansible может собирать факты с самого хоста, было бы разумнее использовать.

2. Я вручную настраивал его только для тестирования. ansible gather_facts перечисляет facter_disks в том же формате, не помещает список для каждого диска, и поэтому мне трудно пытаться перебирать диски.

3. Вы должны решить это, вместо того, чтобы вручную устанавливать переменные, что является плохой практикой.

4. Извините, не понимаю. facter_disk находится в этом формате . Я не могу это изменить. Я пытаюсь зациклить facter_disks, которые ansible gather_facts собирает о системе.

5. вы пропускаете - перед sdb и sdc в своем vars объявлении

Ответ №1:

disks var — это список, тогда вам нужно использовать «-» перед sda, sdb, sdc. В этом случае, если вы хотите использовать диски в качестве списка дисков, вы можете изменить и задать свойство name, как я пишу ниже

 ---
- 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"

  

Комментарии:

1. Ansible factor (gather_facts ) генерирует информацию facter в том же формате, поэтому пытается выполнить цикл через диски. диски sda, sdb и т.д. не являются отдельными элементами списка .