У меня есть группа серверов, на которых есть четыре физических диска (/ dev/sda, sdb, sdc и sdd). На нем установлена ОС.Ansible - using with_items и при условии
Мне нужно отформатировать каждый диск, кроме sda. Мне нужно проверить, есть ли у каждого диска данные на нем. Если это так, я не должен отформатировать его.
# This will get all physical disks (sda, sdb, sdc, etc) and assign them to disk_var
- name: Get disks
set_fact: disk_var="{{hostvars[inventory_hostname]["ansible_devices"].keys()|list}}"
- name: Check if the disk is partitioned and also ignore sda
stat: path=/dev/{{item}}1
with_items: disk_var
when: item != 'sda'
register: base_secondary_partition_{{item}}
- name: Create GPT partition table
command: /sbin/parted -s /dev/{{item}} mklabel gpt
with_items: disk_var
when: item != 'sda' and base_secondary_partition_{{item}}.stat.exists == false
В форматировании этих дисков явно больше шагов, но при последней задаче при создании таблицы разделов GPT не удается выполнить последнюю задачу.
Вот как он выглядит, когда он работает. Вы увидите, что она не в последнюю задачу:
TASK: [role | Get disks] ******************************************************
ok: [server1.com]
TASK: [role | Check if the disk is partitioned] *******************************
skipping: [server1.com] => (item=sda)
ok: [server1.com] => (item=sdd)
ok: [server1.com] => (item=sdb)
ok: [server1.com] => (item=sdc)
TASK: [role | Create GPT partition table] *************************************
fatal: [server1.com] => error while evaluating conditional: base_secondary_partition_sdd.stat.exists == false
FATAL: all hosts have already failed -- aborting
Любая идея, как я могу проверить условную ? Мне нужно убедиться, что если есть данные на диске, он не будет форматировать его.
Вы должны использовать '{{ item.item}} 'для второй задачи. – yaegashi
Правильно, спасибо за определение! :) – udondan
Отлично! Это должно быть в недоступных примерах. – onnimonni