Я хочу запускать операцию parted только в том случае, если на этом устройстве в настоящее время нет разделов. Указанные части могли быть сделаны ранее или вручную вне ansible в прошлом, и в этом случае их не следует изменять и пропускать задачу.
name: "Add Disk" ## this needs amending to skip if any partition is already present on that device
become: true
parted:
device: /dev/xvdf
number: 1
state: present
flags: [ lvm ]
label: gpt
name: primary
Однако в настоящее время при запуске этого, даже если раздел уже существует, вносятся изменения, и башня печатает ошибку, подобную приведенной ниже, предполагая, что она вносит изменения (после перезагрузки система перестала загружаться)
"_ansible_no_log": false,
"err": "Error: Partition(s) 1 on /dev/xvdf have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes.\n",
Я надеялся, что это может быть достигнуто с помощью условия when, получающего ansible_fact, подобное приведенному ниже?
when: ansible_facts.device.xvdf is not defined
но я не могу найти правильный факт или синтаксис для этой идеи?
из документации я надеялся, что модуль parted был достаточно идемпотентным, чтобы распознать, существует ли уже раздел и не измениться, но я думаю, что если указанная конфигурация в любом случае отличается, он пытается ее применить
Целевая система — это AWS EC2 с RHEL7, а подключенный диск — это вторичный (без полномочий root) зашифрованный том EBS.
красная шапка
1 ответ
Попробуйте поиграть с этим, чтобы увидеть, что это поможет вам:
tasks:
- name: Debug
debug:
msg: "No xvdf1"
when: ansible_devices.xvdf.partitions.xvdf1 is not defined
Крис Ванденберг