valerium
@valerium
Изобретая велосипед

Как отметить все задачи в playbook для выполнения от имени суперпользователя?

Приветствую.

Пишу свой первый 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 менялась) только в случае изменения файла? Хочу сделать так, чтобы демон перезагружался только в случае действительного изменения конфига.
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 1
erohin_d
@erohin_d
DevOps в ЛАНИТ
---
- hosts: web-301-okt
remote_user: root
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы