Как использовать регулярные выражения с ansible файловым модулем - PullRequest
1 голос
/ 12 апреля 2020

У меня есть файловый модуль ниже, который касается файла на удаленных хостах.

 - name: create file
   file:
     path: "/oracle/{{ inventory_hostname }}/del.tmp"
     state: touch
   register: direxists

 - fail:
     msg: "Directory missing"
   when: direxists.changed == False

Проблема на целевых хостах, у меня может быть папка /oracle или /Oracle. Буква «о» может быть без учета регистра. Таким образом, я хотел, чтобы регулярное выражение работало

 path: "/[Oo]racle/{{ inventory_hostname }}/del.tmp"

Но, к сожалению, такое регулярное выражение не поддерживается файловым модулем.

Мне придется вернуться к модулю shell и использовать вместо него команды Unix; чего я не хотел.

Я могу sh прервать воспроизведение, если отсутствуют оба каталога / Oracle или / oracle. Если кто-либо из директории [Oo] racle существует, моя игра не должна провалиться.

Как мне выполнить это требование?

1 Ответ

1 голос
/ 12 апреля 2020

Найти каталог. Ошибка, если ничего не найдено. Создайте ссылку с переключением регистра первой буквы. Таким образом, и / 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 }}"
...