gpt4 book ai didi

Ansible - 检查驱动器是否已安装

转载 作者:行者123 更新时间:2023-12-04 01:22:47 24 4
gpt4 key购买 nike

我正在尝试为我的 Ansible 脚本创建一个 EBS 角色。我现在将创建 EBS 卷并自己通过控制台附加它。如果驱动器尚未安装,我希望此角色运行命令并安装驱动器,但如果它已安装,则跳过此操作。

我有提供磁盘和挂载点列表的主机特定变量:

ebs_vols:
- drive: /dev/sdb
mount_point: /mnt/ebs1
directory: /var/lib/mysql
- drive: /dev/sdc
mount_point: /mnt/ebs2
directory: /var/backups

我想让我的任务使用 df 命令检查每个驱动器并查看它是否已安装。如果驱动器已安装,则跳过命令:

- name: Check if drives are already mounted
shell: df | grep "{{item.drive}}" | wc -l
with_items: "{{ebs_vols}}"
register: ebs_checked

- name: output debug
debug: var=ebs_checked

- name: Make filesystem
filesystem:
fstype: xfs
dev: "{{item.item.drive}}"
when: "{{item.stdout}} == 0"
with_items: ebs_checked.results

当我运行它时,它似乎可以很好地检查每个磁盘,因为 debug 的输出是一个具有正确驱动器和标准输出的对象。问题在于 Make filesystem 任务。出现以下错误的错误:

The conditional check '{{item.stdout}} == 0' failed. The error was: error while evaluating conditional ({{item.stdout}} == 0): 'ansible.vars.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'stdout'\n\n

我在这里遗漏了什么,如果驱动器已安装,跳过命令的最佳方法是什么?

最佳答案

您不能再在 Ansible 中使用“裸变量”。以下行导致 Ansible 将 ebs_checked.results 值解释为字符串:

with_items: ebs_checked.results

改用正确的语法:

with_items: "{{ ebs_checked.results }}"

关于Ansible - 检查驱动器是否已安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42353910/

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