tower - Ansible y Wget
ansible tutorial (1)
Estoy tratando de obtener un archivo de un servidor web desde un libro de jugadas de Ansible.
Aquí está el fragmento Ansible:
---
- hosts: all
sudo: true
tasks:
- name: Prepare Install folder
sudo: true
action: shell sudo mkdir -p /tmp/my_install/mysql/ && cd /tmp/my_install/mysql/
- name: Download MySql
sudo: true
action: shell sudo wget http://{{ repo_host }}/MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar
Invocándolo a través de:
ansible-playbook my_3rparties.yml -l vsrv644 --extra-vars "repo_host=vsrv656" -K -f 10
Falla con lo siguiente:
Cannot write to `MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar'' (Permission denied).
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/usr2/ihazan/vufroria_3rparties.retry
vsrv644 : ok=2 changed=1 unreachable=0 failed=1
Cuando se intenta ejecutar el comando que falla a través de un ssh remoto normal para imitar lo que haría ansible, no funciona de la siguiente manera:
-bash-4.1$ ssh ihazan@vsrv644 ''cd /tmp/my_install/mysql && sudo wget http://vsrv656/MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar''
Enter passphrase for key ''/usr2/ihazan/.ssh/id_rsa'':
sudo: sorry, you must have a tty to run sudo
Pero puedo resolverlo usando -t como sigue:
-bash-4.1$ ssh -t ihazan@vsrv644 ''cd /tmp/my_install/mysql && sudo wget http://vsrv656/MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar''
Entonces funciona.
¿Hay alguna manera de configurar la opción -t (pseudo tty) en ansible?
PD: podría resolverlo editando el archivo sudoers como proponen otros, pero es un paso manual que trato de evitar.
No utilice el módulo de shell cuando haya módulos especializados disponibles. En tu caso:
Crear directorios con file -módulo:
- name: create project directory {{ common.project_dir }}
file: state=directory path={{ common.project_dir }}
Descargar archivos con get_url -module:
- name: download sources
get_url: url={{ opencv.url }} dest={{ common.project_dir }}/{{ opencv.file }}
Note la nueva sintaxis de llamada del módulo en los ejemplos anteriores.
Si tiene que usar sudo
con contraseña, recuerde dar --ask-sudo-pass
cuando sea necesario (ver, por ejemplo, Información de conexión remota ).