#regex #ansible
#регулярное выражение #ansible
Вопрос:
Я пытаюсь добавить путь к списку путей, разделенных запятыми, в текстовом файле через Ansible.
В моем текстовом файле есть (или нет) свойство paths
, которое содержит список путей. т.Е. пути = пути 1, пути 2, пути
3 Я хочу быть уверенным, что путь (pathX) присутствует в списке, независимо от его позиции, и добавить его в конец, если нет (или создать новую строку пути= pathX, если нет строки)
Я безуспешно пытался использовать модуль lineinfile с отрицательным прогнозом регулярного выражения
lineinfile:
path: /myfile
state: present
regexp: '^(paths =([s,] (?!pathX)[w=/-."] )*)([s,]*[w=/-."] )*$'
line: '13, pathX'
backrefs: yes
когда путей нет, я хочу вставить paths = pathX
когда paths = path1
я хочу иметь paths = path1, pathX
когда paths = path1, pathX
я хочу иметь paths = path1, pathX
когда paths = pathX, path1
я хочу иметь paths = pathX, path1
(или path1, pathX
что-то еще)
Ответ №1:
Это немного грубо, но это работает:
---
- name: Fix line
hosts: localhost
connection: local
tasks:
- name: get line from file
command: grep '^paths = ' file
register: grep
failed_when: false
- name: Add line if not present
lineinfile:
path: file
state: present
line: "paths = pathX"
when: grep.rc != 0
- name: Ensure pathX is in line
lineinfile:
path: file
regexp: '^paths = path1'
state: present
line: "paths = path1, pathX"
when: "'paths = path1' in grep.stdout"
- name: Ensure path1 is in line
lineinfile:
path: file
regexp: '^paths = pathX'
state: present
line: "paths = pathX, path1"
when: "'paths = pathX' in grep.stdout"
Вам не обязательно делать все в одной задаче.
Комментарии:
1. Я знаю ;), но я хотел узнать, как работает регулярное выражение с отрицательным прогнозом, и может (или нет) решить мою проблему