我有下面的文件模块,用于触摸远程主机上的文件。
- name: create file
file:
path: "/oracle/{{ inventory_hostname }}/del.tmp"
state: touch
register: direxists
- fail:
msg: "Directory missing"
when: direxists.changed == False
问题出在我可能拥有/oracle
或/Oracle
文件夹的目标主机上。字母“ o”可能不区分大小写。因此,我希望正则表达式能够正常工作
path: "/[Oo]racle/{{ inventory_hostname }}/del.tmp"
但是不幸的是,文件模块不支持这种正则表达式。
我将不得不退回到shell
模块并使用Unix命令;我不想要的。
如果/ Oracle或/ oracle目录都丢失,我希望播放失败。如果[Oo] racle目录中的任何一个存在,我的播放都不会失败。
我如何达到此要求?
答案 0 :(得分:1)
查找目录。如果找不到,则失败。在首字母切换的情况下创建链接。这样,/ Oracle和/ oracle都将存在并指向同一目录。
- find:
paths: /
patterns: '[oO]racle'
file_type: directory
register: result
- fail:
msg: Directory is missing. Play failed.
when: result.matched == 0
- set_fact:
mylink: "{{ mydir[0] ~ myswitch[mydir[1]] ~ mydir[2:] }}"
vars:
mydir: "{{ result.files.0.path }}"
myswitch:
'o': 'O'
'O': 'o'
- file:
state: link
src: "{{ result.files.0.path }}"
dest: "{{ mylink }}"