#ansible
#ansible
Вопрос:
Я пытаюсь заставить ansible настроить автоматические обновления в ubuntu. К сожалению, я получаю дублирующиеся строки при многократном запуске роли.
Вот мой код:
- name: apt | Configure unattended-upgrades
lineinfile:
dest: /etc/apt/apt.conf.d/50unattended-upgrades
regexp: "{{ item }}"
line: "{{ harden_linux_unattended_upgrades_settings[item] }}"
state: present
with_items:
- "{{ harden_linux_unattended_upgrades_settings | list }}"
и
harden_linux_unattended_upgrades_settings:
"^Unattended-Upgrade::Mail": 'Unattended-Upgrade::Mail "{{ ubuntu_common_email }}";'
"^Unattended-Upgrade::MailReport": 'Unattended-Upgrade::MailReport "on-change";' # later if working set to "only-on-error"
"^Unattended-Upgrade::Remove-Unused-Kernel-Packages": 'Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";'
"^Unattended-Upgrade::Remove-Unused-Dependencies": 'Unattended-Upgrade::Remove-Unused-Dependencies "true";'
"^Unattended-Upgrade::Automatic-Reboot": 'Unattended-Upgrade::Automatic-Reboot "true";'
"^Unattended-Upgrade::Automatic-Reboot-Time": 'Unattended-Upgrade::Automatic-Reboot-Time "2:50";'
Результатом при его запуске является то, что он отлично работает с первого раза. Каждый раз после этого я получаю этот результат и (как ни странно, только некоторые) повторяющиеся строки:
changed: [cloud-host] => (item=^Unattended-Upgrade::Mail)
changed: [cloud-host] => (item=^Unattended-Upgrade::MailReport)
ok: [cloud-host] => (item=^Unattended-Upgrade::Remove-Unused-Kernel-Packages)
ok: [cloud-host] => (item=^Unattended-Upgrade::Remove-Unused-Dependencies)
changed: [cloud-host] => (item=^Unattended-Upgrade::Automatic-Reboot)
changed: [cloud-host] => (item=^Unattended-Upgrade::Automatic-Reboot-Time)
с этим в конце файла:
Unattended-Upgrade::Mail "john@doe.com";
Unattended-Upgrade::Mail "john@doe.com";
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Mail "john@doe.com";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Mail "john@doe.com";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Mail "john@doe.com";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::MailReport "on-change";
Unattended-Upgrade::Automatic-Reboot-Time "2:50";
Я видел много потоков с проблемами с дублирующимися строками, но я не могу определить свою проблему там. В частности, я не понимаю, почему это работает с
Unattended-Upgrade::Remove-Unused-Kernel-Packages
и
Unattended-Upgrade::Remove-Unused-Dependencies
Я просто не вижу никакой разницы с другими строками..
Редактировать: Спасибо за очень полезный ответ! Это то, с чем я закончил (я также изменил другие части):
- name: apt | Configure unattended-upgrades
lineinfile:
dest: /etc/apt/apt.conf.d/50unattended-upgrades
regexp: "^{{ item }}\s"
line: '{{ item }} "{{ harden_linux_unattended_upgrades_settings[item] }}";'
state: present
with_items:
- "{{ harden_linux_unattended_upgrades_settings | list }}"
и
harden_linux_unattended_upgrades_settings:
"Unattended-Upgrade::Mail": "{{ ubuntu_common_email }}"
"Unattended-Upgrade::MailReport": "on-change" # later if working set to "only-on-error"
"Unattended-Upgrade::Remove-Unused-Kernel-Packages": "true"
"Unattended-Upgrade::Remove-Unused-Dependencies": "true"
"Unattended-Upgrade::Automatic-Reboot": "true"
"Unattended-Upgrade::Automatic-Reboot-Time": "2:50"
Ответ №1:
у вас есть :
"^Unattended-Upgrade::Automatic-Reboot": 'Unattended-Upgrade::Automatic-Reboot "true";'
"^Unattended-Upgrade::Automatic-Reboot-Time": 'Unattended-Upgrade::Automatic-Reboot-Time "2:50";'
первое регулярное выражение ^Unattended-Upgrade::Automatic-Reboot
соответствует обоим: Unattended-Upgrade::Automatic-Reboot
и Unattended-Upgrade::Automatic-Reboot-Time
.
итак, во второй раз он выполняет следующее:
- сопоставьте
Unattended-Upgrade::Automatic-Reboot
и ничего не делайте - сопоставьте
Unattended-Upgrade::Automatic-Reboot-Time
и замените его наUnattended-Upgrade::Automatic-Reboot
- поскольку
Unattended-Upgrade::Automatic-Reboot-Time
больше нет, он добавляет ее обратно
итак, теперь у вас есть 2 Automatic-Reboot
и 1 Automatic-Reboot-Time
та же логика для Unattended-Upgrade::Mail
и Unattended-Upgrade::Mail-Report
вы можете улучшить регулярное выражение, сопоставив следующее "