Ansible Заменить модуль с помощью регулярных выражений, когда заданный список элементов не работает - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь найти и заменить строку в файле, пробовал с lineinfile и replace modules

- name : Update root-context.xml db details
  replace:
    path: "{{ path_root_context }}"
    regexp: "{{ item.regexp }} "
    replace: "{{ item.line }} "
#    regexp: <property name="url" value="jdbc:mysql://([a-zA-Z]+):3306/([a-zA-Z]+)\?zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true"/>
#    replace: <property name="url" value="jdbc:mysql://"{{ db_url }}":3306/"{{ db_name }}"?zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true"/>
  with_items:
    - { regexp: '<property name="url" value="jdbc:mysql://([a-zA-Z]+):3306/([a-zA-Z]+)\?zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true"/>' , line: '<property name="url" value="jdbc:mysql://"{{ db_url }}":3306/"{{ name_db }}"?zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true"/>'}

  become: yes
  become_user: "{{ app_user }}"

с закомментированными строками regexp: replace: его работает

Но при передаче его в список предметов он не работает

Может кто-нибудь помочь. Мне придется использовать item_list, когда у меня есть несколько строк, чтобы использовать

1 Ответ

0 голосов
/ 27 апреля 2018

Проблема с определением вашей задачи заключается в том, что в вашем регулярном выражении есть пробел, "{{ item.regexp }} ". Удалите это, и это должно работать просто отлично. Также отметил, что ваше значение замены имеет " вокруг ваших db_name и db_url. Обновленная версия может выглядеть следующим образом.

- name : Update root-context.xml db details
  replace:
    path: "{{ path_root_context }}"
    regexp: "{{ item.regexp }}"
    replace: "{{ item.line }}"
  with_items:
    - regexp: '<property name="url" value="jdbc:mysql://([a-zA-Z]+):3306/([a-zA-Z]+)\?zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true"/>'
      line: '<property name="url" value="jdbc:mysql://{{ db_url }}:3306/{{ db_name }}?zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true"/>'

В качестве альтернативы, вы можете рассмотреть xml модуль . Вот пример задачи, вам может потребоваться обновить запрос xpath в зависимости от вашего XML-файла.

- name: Update root-context.xml db details
  xml:
    path: "{{ path_root_context }}"
    xpath: /Context/property[@name='url']
    attribute: value
    value: "jdbc:mysql://{{ db_url }}:3306/{{ db_name }}?zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true"
...