Un thème récurrent dans mes playbooks ansible est que je dois souvent exécuter une commande avec les privilèges sudo ( sudo: yes
) parce que j'aimerais le faire pour un certain utilisateur. Idéalement, je préfère de loin utiliser sudo pour basculer vers cet utilisateur et exécuter les commandes normalement. Parce qu'alors je n'aurai pas à nettoyer mes commandes de publication habituelles, comme chowning des répertoires. Voici un extrait de l'un de mes playbooks:
- name: checkout repo
git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
sudo: yes
- name: change perms
file: dest={{ dst }} state=directory mode=0755 owner=some_user
sudo: yes
Idéalement, je pourrais exécuter des commandes ou des ensembles de commandes en tant qu'utilisateur différent, même si cela nécessite sudo pour su à cet utilisateur.
sudo_user: "{{ ansible_ssh_user }}"
ou vous obtiendrez une erreur de syntaxe yaml.become
système au lieu de "sudo *".New Ansible variables and command line options are added to set these values for the duration of a play.
@Brett, cela signifie-t-il que les tâches suivantes seront exécutées parsome_user
et non par l'utilisateur d'origineremote_user
qui a été utilisé pour se connecter à l'hôte, est-ce correct?Dans Ansible 2.x, vous pouvez utiliser le
block
groupe de tâches pour:la source
Dans Ansible> 1.4, vous pouvez en fait spécifier un utilisateur distant au niveau de la tâche, ce qui devrait vous permettre de vous connecter en tant que cet utilisateur et d'exécuter cette commande sans recourir à sudo. Si vous ne pouvez pas vous connecter en tant que cet utilisateur, la solution sudo_user fonctionnera également.
Voir http://docs.ansible.com/playbooks_intro.html#hosts-and-users
la source
Une solution consiste à utiliser l'
include
instruction avecremote_user
var (décrivez ici: http://docs.ansible.com/playbooks_roles.html ) mais cela doit être fait au niveau du playbook au lieu du niveau de la tâche.la source
Vous pouvez spécifier
become_method
de remplacer la méthode par défaut définie dansansible.cfg
(le cas échéant), et qui peut être définie sur l'un dessudo, su, pbrun, pfexec, doas, dzdo, ksu
.Devrait afficher
la source