Как добавить элемент, если его еще нет в списке? - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь добавить путь к разделенному запятыми списку путей в текстовом файле через Ansible.

Мой текстовый файл имеет (или нет) свойство paths, которое содержит список путей.т.е. paths = path1, path2, path3
Я хочу быть уверен, что путь (pathX) присутствует в списке, независимо от его позиции, и добавить его в конец, если нет (или создать новую строку paths = pathX, если нетline)

Я безуспешно пытался использовать модуль lineinfile с отрицательным предвкушением регулярного выражения

    lineinfile:
      path: /myfile
      state: present
      regexp: '^(paths =([\s,]+(?!pathX)[\w=\/\-\."]+)*)([\s,]*[\w=\/\-\."]+)*$'
      line: '\1\3, 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 Ответ

0 голосов
/ 13 апреля 2019

Это немного грубо, но работает:

---
- 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"

Вам не нужно делать все в одной задаче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...