Разница между статьей и стать_пользователем в Ansible

Недавно я начал копаться в Ansible и писать свои собственные пьесы. Тем не менее, у меня есть проблемы с пониманием разницы между become а также become_user, Как я понимаю become_user что-то похожее на su <username>, а также become означает что-то вроде sudo su или "выполнять все команды как пользователь sudo". Но иногда эти две директивы смешаны.

Не могли бы вы объяснить их правильное значение?

4 ответа

Решение

become_user определяет пользователя, который используется для повышения привилегий.

become просто флаг, чтобы активировать или деактивировать то же самое.

Вот три примера, которые должны прояснить это:

  1. Эта задача будет выполнена как root, так как root пользователь по умолчанию для повышения привилегий:

    - do: something
      become: yes
    
  2. Эта задача будет выполнена от имени пользователя someoneпотому что пользователь явно установлен:

    - do: something
      become: yes
      become_user: someone
    
  3. Эта задача не будет ничего делать с 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-й запускается от имени пользователя someone2-й как root,

Насколько я понимаю, становиться чем-то похожим на su_wser, а становиться означает что-то вроде sudo su или "выполнять все команды как пользователь sudo".

По умолчанию become_method является sudo, так sudo do something или же sudo -u <become_user> do something

  1. become: yes знак равно sudo
    become_user: user_name знак равно sudo -u user_name
  2. 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. Надеюсь, это будет полезно для всех.

Другие вопросы по тегам