पर सशर्त होने पर मेरे पास उन सर्वरों का एक गुच्छा है जिन पर चार भौतिक ड्राइव हैं (/ dev/sda, sdb, sdc, और sdd)। एसडीए पर ओएस स्थापित है।उत्तरदायी - with_items का उपयोग करना और
मुझे एसडीए को छोड़कर प्रत्येक ड्राइव को प्रारूपित करने की आवश्यकता है। मुझे यह जांचने की ज़रूरत है कि प्रत्येक ड्राइव पर डेटा है या नहीं। अगर ऐसा होता है तो मुझे इसे प्रारूपित नहीं करना चाहिए।
# 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