ANSIBLE playbook найти / заменить странные действия во второй раз - PullRequest
0 голосов
/ 12 июня 2019

У меня есть эта задача, которая находит 2 строки в sshd_config и изменяет их.Это отлично работает при первом запуске, заменяет строки src на линии dest.Но если я запускаю его второй раз, после того, как 2 строки в файле уже верны, он добавляет 2 новые строки в конец файла.

Я попытался добавить состояние: присутствует, но это не изменило поведение.

  - name: Configuring sshd_config
    lineinfile:
      path: /etc/ssh/sshd_config
      regexp: "{{ item.src }}"
      state: present
      line: "{{ item.dest }}"
    with_items:
      - { src: "#PrintLastLog yes", dest: "PrintLastLog no" }
      - { src: "#Banner none", dest: "Banner /etc/issue.net" }

Я ожидал, что он не будет соответствовать строкам src и не внесет никаких изменений.

1 Ответ

1 голос
/ 12 июня 2019

То, что вы получаете, - это точное ожидаемое поведение. Цитирование документации о параметре regexp при использовании state: present

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

Изменение вашей задачи следующим образом должно выполнить работу.

  - name: Configuring sshd_config
    lineinfile:
      path: /etc/ssh/sshd_config
      regexp: "{{ item.src }}"
      state: present
      line: "{{ item.dest }}"
    with_items:
      - { src: "^(# *)?PrintLastLog", dest: "PrintLastLog no" }
      - { src: "^(# *)?Banner", dest: "Banner /etc/issue.net" }

Это будет соответствовать закомментированной строке (с дополнительными пробелами после хеша) или новой измененной строке.

...