ansible - introducción - ¿Cómo cambiar a un usuario por tarea o conjunto de tareas?
comentarios en ansible (4)
Un tema recurrente que está en mis libros de jugadas ansible es que a menudo debo ejecutar un comando con privilegios de sudo: yes
( sudo: yes
) porque me gustaría hacerlo para un determinado usuario. Lo ideal sería usar sudo para cambiar a ese usuario y ejecutar los comandos normalmente. Porque entonces no tendré que hacer mis tareas habituales de limpieza de correos, tales como directorios privados. Aquí hay un fragmento de uno de mis libros de jugadas:
- 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
Idealmente, podría ejecutar comandos o conjuntos de comandos como un usuario diferente, incluso si requiere sudo to su para ese usuario.
Con Ansible 1.9 o posterior
Ansible usa las directivas become
, become_user
y become_method
para lograr una escalada de privilegios. Puede aplicarlos a una obra de teatro o libro de jugadas completo, configurarlos en un libro de jugadas incluido o configurarlos para una tarea en particular.
- name: checkout repo
git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
become: yes
become_user: some_user
Puede usar become_with
para especificar cómo se logra la escalada de privilegios, siendo sudo
defecto.
La directiva está vigente para el alcance del bloque en el que se usa ( examples ).
Consulte Hosts and Users para ver ejemplos adicionales y Become (Privilege Escalation) para obtener documentación más detallada.
Además de las directivas become
y become_user
ámbito de tarea, Ansible 1.9 agregó algunas variables nuevas y opciones de línea de comando para establecer estos valores durante la duración de una obra en ausencia de directivas explícitas:
- Opciones de línea de comando para las directivas equivalente
become
/become_user
. - Variables específicas de conexión que pueden establecerse por host o grupo.
A partir de Ansible 2.0.2.0, la sintaxis sudo
/ sudo_user
descrita a continuación aún funciona, pero el aviso de desaprobación establece, "Esta característica se eliminará en una versión futura".
Sintaxis anterior, obsoleta a partir de Ansible 1.9 y programada para su eliminación:
- name: checkout repo
git: repo=https://github.com/some/repo.git version=master dest={{ dst }}
sudo: yes
sudo_user: some_user
En Ansible 2.x, puede usar el block
para un grupo de tareas:
- block:
- name: checkout repo
git:
repo: https://github.com/some/repo.git
version: master
dest: "{{ dst }}"
- name: change perms
file:
dest: "{{ dst }}"
state: directory
mode: 0755
owner: some_user
become: yes
become_user: some user
En Ansible> 1.4 puede especificar un usuario remoto en el nivel de la tarea que debería permitirle iniciar sesión como ese usuario y ejecutar ese comando sin recurrir a sudo. Si no puede iniciar sesión como ese usuario, la solución sudo_user también funcionará.
---
- hosts: webservers
remote_user: root
tasks:
- name: test connection
ping:
remote_user: yourname
Ver http://docs.ansible.com/playbooks_intro.html#hosts-and-users
Una solución es usar la instrucción include
con remote_user
var (describe allí: http://docs.ansible.com/playbooks_roles.html ) pero debe hacerse en el libro de jugadas en lugar del nivel de tareas.