Приветствую.
Пишу свой первый playbook для Ansible. Задача простая: убедиться, что установлен актуальный transmission-daemon, скормить ему собранный из шаблона конфиг, сделать reload и убедиться, что он успешно запущен.
Вопрос в том, как отметить, что все задачи в сценарии должны быть выполнены от имени суперпользователя. Сейчас я к каждой задаче добавляю ключи become и become_pass:
- name: ensure transmission-daemon is up to date
become: true
become_pass: "{{ become_pass }}"
apt:
name: transmission-daemon
state: latest
- name: write transmission config and reload transmission-daemon
become: true
become_pass: "{{ become_pass }}"
template:
src: configs/transmission.j2
dest: /etc/transmission-daemon/settings.json
На мой вкус, это неправильно, потому что всячески нарушает DRY принцип. Как избавиться от этого повторения? Хотя бы от повторения пароля.
Второй вопрос заключается в том, есть ли более кошерный способ исправить файл конфигурации? Ведь это всего лишь JSON, а Python умеет чудесно работать с JSON. Можно ли не собирать конфиг из шаблона целиком, а на месте загрузить его, заменить две-три переменных и записать обратно? Для того, чтобы не затирать значения по умолчанию.
Ну и, раз пошла такая пляска, третий вопрос. При перезаписи конфига из шаблона значение переменной changed становится true, даже если фактически изменений не было. Как сделать так, чтобы файл перезаписывался (и переменная changed менялась) только в случае изменения файла? Хочу сделать так, чтобы демон перезагружался только в случае действительного изменения конфига.