Разница между статьей и стать_пользователем в Ansible
Недавно я начал копаться в Ansible и писать свои собственные пьесы. Тем не менее, у меня есть проблемы с пониманием разницы между become
а также become_user
, Как я понимаю become_user
что-то похожее на su <username>
, а также become
означает что-то вроде sudo su
или "выполнять все команды как пользователь sudo". Но иногда эти две директивы смешаны.
Не могли бы вы объяснить их правильное значение?
4 ответа
become_user
определяет пользователя, который используется для повышения привилегий.
become
просто флаг, чтобы активировать или деактивировать то же самое.
Вот три примера, которые должны прояснить это:
Эта задача будет выполнена как
root
, так какroot
пользователь по умолчанию для повышения привилегий:- do: something become: yes
Эта задача будет выполнена от имени пользователя
someone
потому что пользователь явно установлен:- do: something become: yes become_user: someone
Эта задача не будет ничего делать с
become_user
, так какbecome
не установлен и по умолчаниюfalse
/no
:- do: something become_user: someone
... если не стало установлено
true
на более высоком уровне, например блок, playbook, группа или host-vars и т. д.Вот пример с блоком:
- become: yes block: - do: something become_user: someone - do: something
Первый 1-й запускается от имени пользователя
someone
2-й какroot
,
Насколько я понимаю, становиться чем-то похожим на su_wser, а становиться означает что-то вроде sudo su или "выполнять все команды как пользователь sudo".
По умолчанию become_method
является sudo
, так sudo do something
или же sudo -u <become_user> do something
become: yes
знак равноsudo
become_user: user_name
знак равноsudo -u user_name
become: yes
become_user: root
эквивалентноbecome: yes
эта ссылка четко объясняет разницу.
Стать yes заставит запустить блок кода от имени пользователя root по умолчанию. Если вы добавите be_user: «user1» вместе с ben: yes, то текущий блок кода будет работать как user1.
Если мне нужно запустить пакет задач с помощью sudo, я часто использую инструкцию include_task. Также очень помогает разделение большого учебника на части. Например
- name: prepare task x
include_tasks: x-preparation.yml
when: condition is true
args:
apply:
become: yes
Это также удобный подход при использовании тегов:
- name: execute tasks x
include_tasks: x-execution.yml
args:
apply:
tags: exec
tags:
- exec
Важно то, что вам нужно добавить тег в оператор include_task s. Надеюсь, это будет полезно для всех.