gpt4 book ai didi

Ansible - 使用 with_items 以及当有条件时

转载 作者:行者123 更新时间:2023-12-02 20:21:03 25 4
gpt4 key购买 nike

我有一堆服务器,上面有四个物理驱动器(/dev/sda、sdb、sdc 和 sdd)。 sda 上安装有操作系统。

我需要格式化除 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

知道如何检查条件 base_secondary_partition_{{item}}.stat.exists 吗?我需要确保如果驱动器上有数据,它不会对其进行格式化。

最佳答案

您不需要使用 item salt 注册您的结果。当您注册循环结果(例如 with_items)时,注册值将包含一个键 results,其中包含循环所有结果的列表。 (参见docs)

您可以循环第一个任务的注册结果,而不是循环原始设备列表:

- name: Check if the disk is partitioned and also ignore sda
stat: path=/dev/{{item}}1
with_items: disk_var
when: item != 'sda'
register: device_stat

- name: Create GPT partition table
command: /sbin/parted -s /dev/{{ item.item }} mklabel gpt
with_items: "{{ device_stat.results }}"
when:
- not item | skipped
- item.stat.exists == false

条件不是项目 | skipped 负责处理在原始循环 (sda) 中过滤的元素将不会被处理。

虽然这可能可以解决您的问题,但您的问题非常有趣。 Jinja2 中似乎没有 eval 功能。虽然您可以连接字符串,但不能使用该字符串作为变量名来获取其值...

关于Ansible - 使用 with_items 以及当有条件时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32214529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com