#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 и т.д. не являются отдельными элементами списка .