В чем разница между использованием sudo в плейбуке и задаче?

Если я хочу установить что-то, используя, например, apt, я могу создать playbook:

- hosts: xxx
  roles:
     - my-role

И в tasks/main.yml в роли:

- name: install something
  sudo: yes
  apt: "name=something state=installed"

Но я могу добавить sudo в playbook:

- hosts: xxx
  sudo: yes
  roles:
     - my-role

И удалить его из задач:

- name: install something
  apt: "name=something state=installed"

Оба решения работают, но какое решение лучше? Есть ли разница между этими решениями? Плюсы? Минусы?


person krynio    schedule 31.08.2015    source источник


Ответы (1)


Вы должны учитывать принцип наименьших привилегий. Пользователь или процесс должен иметь самый низкий уровень разрешений, необходимый для выполнения назначенной задачи. Например, если все, что вам нужно сделать, это загрузить файл в ваш домашний каталог, делать это от имени пользователя root — это излишество. Если вы хотите отправить новую версию приложения, сделайте это как веб-пользователь, а не как root.

Когда вы указываете sudo: на уровне playbook, все задачи ниже будут выполняться с этим (потенциально ненужным) уровнем разрешений. Принимая во внимание, что если вы укажете его на уровне task:, только эта конкретная задача будет выполняться с правами root.

person Mxx    schedule 01.09.2015
comment
Я мог бы добавить, что в случае может быть 9 из 10 задач, требующих эскалации разрешений, и в этом случае рефакторинг до уровня playbook может показаться менее повторяющимся. Вы также можете проверить изменение синтаксиса be и be_user по сравнению с sudo. docs.ansible.com/ansible/become.html - person j12y; 01.09.2015