Добавить строку в файл в нескольких местах при условии, используя Ansible - PullRequest
1 голос
/ 07 января 2020

Я sh добавлю строку "Привет!" В file1.txt после того, как найду строку, которая начинается с тега Каталога, если он уже отсутствует.

У меня есть несколько записей тега Каталога в my file1.txt Ниже приведены некоторые из них:

<Directory "/web/htdocs">
<Directory />
.....
.....
<Directory "/web/cgi-bin">

С помощью приведенного ниже кода я смог добавить строку «Привет!» только после последней записи тега Справочника.

- name: Insert After string
  replace:
    path: "/tmp/file1.txt"
    state: present
    line: 'Hi There'
    insertafter: '^<Directory '

Результаты:

<Directory "/web/cgi-bin">
Hi There

Тем не менее, я sh получу «Привет!» На следующей строке каждой из / всех записей Справочника.

Я понимаю, что модуль "замена" заменяет все найденные вхождения. Тем не менее, мои ограниченные знания говорят о том, что модуль замены нуждается в замене строки.

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

1 Ответ

1 голос
/ 07 января 2020

Идея: сопоставить любую строку, например '', за исключением случаев, когда следующая строка 'Hi there'. Замените на ту же строку, за которой следует «Привет!». Это регулярное выражение, известное как отрицательный взгляд

Мой test.txt файл при запуске

<Directory "/web/htdocs">
<Directory />

<Directory "/web/cgi-bin">
<Directory />

<Directory "/some/other">
Hi there
</Directory>

Мой test.yml playbook

---
- name: Replace several lines
  hosts: localhost

  tasks:
    - name: Add 'Hi there' after directory def if not present
      replace:
        path: test.txt
        regexp: '^(<Directory ".*">\n)(?!Hi there)'
        replace: '\1Hi there\n'

Первый запуск:

$ ansible-playbook test.yml 

PLAY [Replace several lines] ********************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Add 'Hi there' after directory def if not present] ****************************************************************************************************************************************************************************************************************
changed: [localhost]

PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

test.txt файл после первого запуска. Обратите внимание, что строки добавляются только там, где это необходимо.

<Directory "/web/htdocs">
Hi there
<Directory />

<Directory "/web/cgi-bin">
Hi there
<Directory />

<Directory "/some/other">
Hi there
</Directory>

Второй запуск:

$ ansible-playbook test.yml 
[WARNING]: No inventory was parsed, only implicit localhost is available

[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'


PLAY [Replace several lines] ********************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Add 'Hi there' after directory def if not present] ****************************************************************************************************************************************************************************************************************
ok: [localhost]

PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Как видите, на этот раз файл не изменился, поскольку были добавлены все возможные строки.

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