检查设备是否存在Ansible
问题描述:
创建它之前
我试图像/dev/zero
,/dev/null
等使用创建几个设备下面的代码:检查设备是否存在Ansible
- name: mknod devices in default chroot
shell: "mknod -m 0666 {{ item.localdev }} c 1 {{ item.localvalue }}"
args:
creates:{{ item.localdev }}
with_items:
- { localdev: '/var/www/dev/null', localvalue: '3'}
- { localdev: '/var/www/dev/random', localvalue: '8'}
- { localdev: '/var/www/dev/urandom', localvalue: '9'}
- { localdev: '/var/www/dev/zero', localvalue: '5'}
tags: mknod_devices
它,当我执行它的第一次工作,但第二并且每隔一段时间它都会失败并显示某个设备已经存在。我检查另一语法creates
参数和我硬编码这样的值:
creates: /var/www/dev/null
现在ansible不失败,但显然这不是一个解决方案。有没有办法将变量放入creates
参数中?
编辑:要明确,作为一种解决方法我还可以使用以下shell
语法(测试工作),但我正在寻找一个更简洁的方案
shell: "if [[ ! -e {{ item.localdev }} ]]; then mknod -m 0666 {{ item.localdev }} c 1 {{ item.localvalue }}; else echo \"{{ item.localdev }} exists, skipping\"; fi"
答
使用命令模块,而不是外壳模块,它支持“创建”功能。
---
- hosts: localhost
become: yes
tasks:
- name: mknod devices in default chroot
command: "mknod -m 0666 {{ item.localdev }} c 1 {{ item.localvalue }} creates={{ item.localdev }}"
with_items:
- { localdev: '/var/www/dev/null', localvalue: '3'}
- { localdev: '/var/www/dev/random', localvalue: '8'}
- { localdev: '/var/www/dev/urandom', localvalue: '9'}
- { localdev: '/var/www/dev/zero', localvalue: '5'}
tags: mknod_devices
这将创建目录如果他们不存在,并且如果他们做什么也不做。
答
的问题是平凡简单:
- 你需要一个空间在参数和
creates:{{ item.localdev }}
- 值之间加空格之后,你需要引用
{{ item.localdev }}
正确的语法是:
- name: mknod devices in default chroot
shell: "mknod -m 0666 {{ item.localdev }} c 1 {{ item.localvalue }}"
args:
creates: "{{ item.localdev }}"
with_items:
- { localdev: '/var/www/dev/null', localvalue: '3'}
- { localdev: '/var/www/dev/random', localvalue: '8'}
- { localdev: '/var/www/dev/urandom', localvalue: '9'}
- { localdev: '/var/www/dev/zero', localvalue: '5'}
tags: mknod_devices
这个答案错误地解释了pro blem。 ['command'](https://docs.ansible.com/ansible/command_module.html)和['shell'](https://docs.ansible.com/ansible/shell_module.html)都支持'creates''参数。有问题的问题是错误的语法没有错误的模块使用。 – techraf