如何将正则表达式与Ansible文件模块一起使用

时间:2020-04-12 13:18:21

标签: file ansible touch createfile

我有下面的文件模块,用于触摸远程主机上的文件。

 - 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目录中的任何一个存在,我的播放都不会失败。

我如何达到此要求?

1 个答案:

答案 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 }}"