57 votes

Différence entre become et become_user dans Ansible

Récemment, j'ai commencé à creuser dans Ansible et à écrire mes propres playbooks. Cependant, j'ai un problème pour comprendre la différence entre become et become_user . Comme je le comprends become_user est quelque chose de similaire à su <username> et become signifie quelque chose comme sudo su ou "exécuter toutes les commandes en tant qu'utilisateur sudo". Mais parfois ces deux directives sont mélangées.

Pourriez-vous en expliquer la signification correcte ?

115voto

Daniel Schroeder Points 41

become_user définit l'utilisateur qui est utilisé pour escalade des privilèges .

become est simplement un drapeau pour activer ou désactiver la même chose.

Voici trois exemples qui devraient vous éclairer :

  1. Cette tâche sera exécutée comme root parce que root est l'utilisateur par défaut pour l'escalade des privilèges :

     - do: something
       become: true
  2. Cette tâche sera exécutée en tant qu'utilisateur someone car l'utilisateur est explicitement défini :

     - do: something
       become: true
       become_user: someone
  3. Cette tâche ne fera rien avec become_user parce que become n'est pas défini et prend la valeur par défaut false / no :

     - do: something
       become_user: someone

...à moins que devenir ne soit réglé sur true à un niveau supérieur, par exemple un bloc, le livre de jeu, le groupe ou les variables d'hôte, etc.

Voici un exemple avec un bloc :

    - become: true
      block:
        - do: something
          become_user: someone
        - do: something

Le premier est exécuté en tant qu'utilisateur someone le 2e comme root .

Si je comprends bien, become_user est quelque chose de similaire à su, et become signifie quelque chose comme sudo su ou "exécuter toutes les commandes comme un utilisateur sudo".

La valeur par défaut become_method est sudo donc sudo do something ou sudo -u <become_user> do something

<sup>Fineprint : Bien sûr " <em>faire : quelque chose </em>" est un pseudo-code. Mettez votre module Ansible réel ici.</sup>

0 votes

Ainsi, si je veux activer l'escalade des privilèges pour les tâches dans le livre de jeu, je peux le faire : True une fois avant de définir les tâches, et ensuite juste utiliser become_user quand je veux, n'est-ce pas ?

4 votes

Cela dépend de ce que vous entendez par "une fois auparavant". Si vous mettez become sur une seule tâche, elle n'est active que pour cette seule tâche. Si vous souhaitez définir become pour les tâches multiples, vous devez le définir à un niveau plus élevé. Vous pouvez utiliser blocs ou comprend pour cela ou de vous fixer sur votre rôle.

0 votes

@udondan je reçois l'erreur en utilisant votre point no 2. Pouvez-vous m'aider ?

6voto

AATHITH RAJENDRAN Points 952
  1. become: yes = sudo
    become_user: user_name = sudo -u user_name
  2. become: yes
    become_user: root est l'équivalent de become: yes

ce lien explique clairement la différence.

0voto

oneindelijk Points 130

Si je dois exécuter un lot de tâches avec sudo, j'utilise souvent une instruction include_task. Cela aide aussi beaucoup à garder un grand playbook divisé en plusieurs parties. Par exemple

 - name: prepare task x
   include_tasks: x-preparation.yml
   when: condition is true
   args:
     apply:
       become: yes

C'est également une approche pratique lorsque vous utilisez des balises :

  - name: execute tasks x
     include_tasks: x-execution.yml
     args:
       apply:
         tags: exec
     tags:
     - exec

Il est important que vous mettiez également une balise sur l'instruction include_tasks. J'espère que cela vous sera utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X