Ejecutar el comando en el host Ansible
¿Es posible ejecutar comandos en el host Ansible?
Mi escenario es que quiero realizar un pago desde un servidor git que está alojado internamente (y no es accesible fuera del firewall de la empresa). Luego quiero subir el checkout (tarballed) al servidor de producción (alojado externamente).
En este momento, estoy viendo ejecutar un script que hace el checkout, lo descarga y luego ejecuta el script de implementación, pero si pudiera integrar esto en Ansible, eso sería preferible.
6 answers
Sí, puede ejecutar comandos en el host Ansible. Puede especificar que todas las tareas de un juego se ejecuten en el host Ansible, o puede marcar tareas individuales para que se ejecuten en el host Ansible.
Si desea ejecutar una reproducción completa en el host Ansible, especifique hosts: 127.0.0.1
y connection:local
en la reproducción, por ejemplo:
- name: a play that runs entirely on the ansible host
hosts: 127.0.0.1
connection: local
tasks:
- name: check out a git repository
git: repo=git://foosball.example.org/path/to/repo.git dest=/local/path
Ver Libros de jugadas locales en la documentación de Ansible para más detalles.
Si solo desea ejecutar una sola tarea en su host Ansible, puede usar local_action
para especificar que una tarea debe ser ejecutada localmente. Por ejemplo:
- name: an example playbook
hosts: webservers
tasks:
- ...
- name: check out a git repository
local_action: git repo=git://foosball.example.org/path/to/repo.git dest=/local/path
Ver Delegación en la documentación de Ansible para más detalles.
Editar: Puedes evitar tener que escribir connection: local
en tu juego agregando esto a tu inventario:
localhost ansible_connection=local
(Aquí usarías " localhost "en lugar de" 127.0.0.1 " para referirte a la reproducción).
Editar: En las versiones más recientes de ansible, ya no es necesario agregar la línea anterior a su inventario, ansible asume que ya está allí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-09 23:19:45
He encontrado un par de otras formas de escribir estas que son un poco más legibles en mi humilde opinión.
- name: check out a git repository
local_action:
module: git
repo: git://foosball.example.org/path/to/repo.git
dest: /local/path
O
- name: check out a git repository
local_action: git
args:
repo: git://foosball.example.org/path/to/repo.git
dest: /local/path
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-07 22:17:45
Me gustaría compartir que Ansible se puede ejecutar en localhost a través del shell:
ansible all -i "localhost," -c local -m shell -a 'echo hello world'
Esto podría ser útil para tareas simples o para algún aprendizaje práctico de Ansible.
El ejemplo de código está tomado de este buen artículo:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-18 08:08:33
Puede usar delegate_to
para ejecutar comandos en su host Ansible (host admin), desde donde está ejecutando su Ansible play. Por ejemplo:
Eliminar un archivo si ya existe en el host Ansible:
- name: Remove file if already exists
file:
path: /tmp/logfile.log
state: absent
mode: "u+rw,g-wx,o-rwx"
delegate_to: 127.0.0.1
Crear un nuevo archivo en el host Ansible:
- name: Create log file
file:
path: /tmp/logfile.log
state: touch
mode: "u+rw,g-wx,o-rwx"
delegate_to: 127.0.0.1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-29 12:26:29
Ampliando la respuesta de @gordon, aquí hay un ejemplo de sintaxis legible y paso de argumentos con el módulo shell / command (estos difieren del módulo git en que hay argumentos requeridos pero de forma libre, como señaló @ander)
- name: "release tarball is generated" local_action: module: shell _raw_params: git archive --format zip --output release.zip HEAD chdir: "files/clones/webhooks"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-05 02:17:13
ansible your_server_name -i custom_inventory_file_name -m -a "uptime"
El módulo predeterminado es command module, por lo tanto no se requiere la palabra clave command
.
Si necesita emitir cualquier comando con privilegios elevados use -b
al final del mismo comando.
ansible your_server_name -i custom_inventory_file_name -m -a "uptime" -b
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-20 14:28:36