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

Ansible-检查驱动器是否已安装,ansible,Ansible,我正在尝试为我的Ansible脚本创建一个EBS角色。我将创建EBS卷并通过控制台连接它。如果驱动器尚未装入,我希望此角色运行命令并装入驱动器,但如果驱动器已装入,则跳过此操作 我有特定于主机的VAR,这些VAR提供了磁盘和装载点的列表: ebs_vols: - drive: /dev/sdb mount_point: /mnt/ebs1 directory: /var/lib/mysql - drive: /dev/sdc mount_point: /mnt/e

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

我有特定于主机的VAR,这些VAR提供了磁盘和装载点的列表:

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
的输出是一个具有正确驱动器和标准输出的对象。问题在于
makefilesystem
任务。这些错误将显示为以下错误:

条件检查“{item.stdout}}==0”失败。错误是:计算条件({item.stdout}}==0时出错):“ansible.vars.safe\u proxy.AnsibleUnsafeText对象”没有属性“stdout”\n\n

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

您不能在Ansible中再使用“裸变量”。以下行导致Ansible将选中的
ebs\u解释为字符串。结果
值:

with_items: ebs_checked.results
请改用正确的语法:

with_items: "{{ ebs_checked.results }}"
您可能想试试:

- name: Check if drives are already mounted
  command: '/bin/mountpoint -q {{item.directory}}'
  with_items: '{{ebs_vols}}'
  register: ebs_checked
  changed_when: "ebs_checked.rc != 0"

此外,ansible的设置模块确实填充了一个
ansible_挂载
数组,但我还没有机会看到它在这方面是否有用。

啊,我明白了。新手犯的错误。我是Ansible的新手,我想我是在期待某种语法错误,而不是尝试实际执行它。谢谢没有语法错误<代码>项
被分配了一个字符串值
ebs\u checked。结果
,您得到一个错误,它不包含您尝试使用的
stdout
键。Ansible 2.0不赞成在
with
循环中使用裸变量,并在2.2中删除了该选项-请参阅。