- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一堆服务器,上面有四个物理驱动器(/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/
我有两个项目列表: list1: - element1 - element2 list2: - element1 - element2 以及 group_vars 中定义的变量 env: x
我有我在每个系统上创建的完整用户列表。如何为每个系统创建一个条件来创建仅在 group_vars 中定义的用户变量 system_users ? 变量:users.yml users: user1
使用with_items有什么区别与 loops在安西尔贝? 最佳答案 更新:最新的Documentation列出差异如下 The with_ keywords rely on Lookup Plug
我只想传递 yml 文件中的 rpm 包列表,并在我的任务中的 with_items 中调用它。yml 文件应该是什么格式。请帮我。我用谷歌搜索了很多,仍然很困惑。我需要实现这样我就可以只更改外部文件
我编写了一个 ansible 任务来使用 with_items 迭代设置列表。 .现在,当我运行 ansible 时,我的所有设置都会被记录下来。它非常冗长,让人很难看出发生了什么。但是,如果我使用
我在一个变量中有一个列表,我需要对其执行 shell 命令。 - name: Set Percentage value to "yes" to all disks for NFS SERVERS
这是我的剧本。很简单。问题在于“with_items”。它遍历所有项目,但是,它只将最后一个项目写入 crontab 文件。我认为它正在覆盖它。为什么会这样? - name: Create cron
我想使用带有 with_items 的 iptables 模块来循环这些规则 iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j
在这里看一个问题时,遇到了另一个问题。 让我们假设一个带有字典列表的变量,如下所示: some_var: - k: key1 m: value1 - k: key2 m: va
我想将一个变量传递给通知处理程序,但在 SO、文档或 github 存储库中的问题、如何做的任何地方都找不到。我正在做的是部署多个 webapps,当这些 webapps 之一的代码发生更改时,它应该
我正在尝试使用 ansible 遍历列表列表以安装一些软件包。但是 {{item}} 返回子列表中的每个元素,而不是子列表本身。我有一个来自外部 ansible list 列表的 yaml 文件,它看
是否可以将项目列表应用于 Ansible 剧本中的多个任务?举个例子: - name: download and execute hosts: server1 tasks: - get_u
安全的 1.9.4。 该脚本应仅在定义了某些变量的主机上执行某些任务。它正常工作,但它不适用于 with_items陈述。 - debug: var=symlinks when: symlinks
我有一堆服务器,上面有四个物理驱动器(/dev/sda、sdb、sdc 和 sdd)。 sda 上安装有操作系统。 我需要格式化除 sda 之外的每个驱动器。我需要检查每个驱动器上是否有数据。如果是这
基于这个问题 Ansible recursive checks in playbooks 我还有一个。 我们需要遍历这个结构 区域规范 https://gist.github.com/git001/9
我想根据条件跳出 with_items 循环。为了参数的缘故,该条件是命令的标准输出是否等于特定字符串。 显然下面的示例不起作用,但这是我想做的事情的想法。 例如: - name: testing l
我使用的是一个简单的模板,其中仅包含变量。这就是我的任务在我的剧本中的样子(实际上是我的剧本中使用的角色): - name: Ensure the conf file exists templat
寻求帮助来解决我几个小时以来一直困扰的问题。我想迭代一个列表,运行一个命令,注册每个命令的输出,然后通过调试迭代每个唯一的寄存器 {{ someregister }}.stdout 例如,以下代码将输
我有以下任务来创建 MySQL 用户,并将 database_staging_users 传递给 with_items。我想在 vpc_environment == "生产" 时传递它 databas
我想知道 - shell: > hostname; whoami; 和 - shell: "{{item}}" with_items:
我是一名优秀的程序员,十分优秀!