我想为我的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
的输出是一个具有正确驱动器和标准输出的对象。问题出在创建文件系统
任务上。出现以下错误:
我错过了什么?如果驱动器已经挂载,跳过命令的最佳方法是什么?条件检查'{{item.stdout}} == 0'失败。 错误是:在评估条件时发生错误({{item.stdout}} == 0):'ansible.vars.unsafe_proxy.AnsibleUnsafeText object'没有属性'stdout'
item
被赋予了一个字符串值ebs_checked.results
,但是你得到了一个错误,说它不包含你尝试使用的stdout
键。 - techrafwith_
循环中使用裸变量已被弃用,并在2.2中删除 - 请参阅Ansible 2.0移植指南。 - RichVel