lineinfile / regexp / line: почему строка в конце файла? - PullRequest
1 голос
/ 26 апреля 2020

Я не понимаю, как работает lineinfile, я использую:

    - name: "configure"
      lineinfile:
        path: /etc/apt/apt.conf.d/50unattended-upgrades
        regexp: '^\/\/      "\${distro_id}:\${distro_codename}-updates";'
        line: '      "${distro_id}:${distro_codename}-updates";'
        state: present

И я ожидаю, что строка в файле будет некомментирована:

//      "${distro_id}:${distro_codename}-updates";

вместо этой строки оставайтесь, как есть, но в конце файла я вижу:

      "${distro_id}:${distro_codename}-updates";

, поэтому происходит «совпадение», но почему в конце файла вместо новой замены появляется новая строка?

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Ваше регулярное выражение не экранирует все специальные символы и, следовательно, нет совпадения, которое вызывает добавление новой строки вместо замены. Кудрявые скобки следует экранировать, согласно документации Python к модулю .

Эта задача работает должным образом на моем сервере Ubuntu 18.04.

- name: "configure"
  lineinfile:
    path: /etc/apt/apt.conf.d/50unattended-upgrades
    regexp: '^//\s+"\$\{distro_id\}:\$\{distro_codename\}-updates";'
    line: '       "${distro_id}:${distro_codename}-updates";'
    state: present

Diff

-// "${distro_id}:${distro_codename}-updates";
+   "${distro_id}:${distro_codename}-updates";
1 голос
/ 26 апреля 2020

Должна быть другая проблема. Код работает как expexted

shell> diff 50unattended-upgrades 50unattended-upgrades.orig 
1c1
<       "${distro_id}:${distro_codename}-updates";
---
> //      "${distro_id}:${distro_codename}-updates";
...