如何在 ansible 文件模块中使用正则表达式
How to use regex with ansible file module
我有下面的文件模块,它涉及远程主机上的文件。
- 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 目录中的任何一个存在,我的播放应该不会失败。
我怎样才能达到这个要求?
找到目录。如果找到 none 则失败。创建 link 并切换第一个字母的大小写。这样 /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 }}"
我有下面的文件模块,它涉及远程主机上的文件。
- 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 目录中的任何一个存在,我的播放应该不会失败。
我怎样才能达到这个要求?
找到目录。如果找到 none 则失败。创建 link 并切换第一个字母的大小写。这样 /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 }}"