我正在尝试为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
Run Code Online (Sandbox Code Playgroud)
我想让我的任务使用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
Run Code Online (Sandbox Code Playgroud)
当我运行它时,似乎检查每个磁盘都很好,因为的输出debug是具有正确驱动器和stdout的对象。问题出在Make filesystem任务上。错误列出以下错误:
条件检查“ {{item.stdout}} == 0”失败。错误是:评估条件({{item.stdout}} == 0)时出错:“ ansible.vars.unsafe_proxy.AnsibleUnsafeText对象”没有属性“ stdout” \ n \ n
我在这里缺少什么?如果已经安装了驱动器,跳过命令的最佳方法是什么?
您不能再在Ansible中使用“裸变量”。以下行使Ansible将ebs_checked.results值解释为字符串:
with_items: ebs_checked.results
Run Code Online (Sandbox Code Playgroud)
改用正确的语法:
with_items: "{{ ebs_checked.results }}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6098 次 |
| 最近记录: |