tower started source open modules getting docs deployment ansible

deployment - started - ansible python



Ejecutar comando en el host Ansible (6)

¿Es posible ejecutar comandos en el host de Ansible?

Mi situación es que quiero realizar un pago de un servidor git que esté alojado internamente (y que no esté accesible fuera del firewall de la empresa). Luego quiero cargar el pago (tarballed) en el servidor de producción (alojado externamente).

En este momento, estoy buscando ejecutar un script que haga el checkout, lo componga y luego ejecute el script de implementación, pero si pudiera integrarlo en Ansible, sería preferible.


Ampliando la respuesta por @gordon, aquí hay un ejemplo de sintaxis legible y el paso de argumentos con el módulo shell / command (esto difiere del módulo git en que hay argumentos necesarios pero de forma libre, como lo señala @ander)

- name: "release tarball is generated" local_action: module: shell _raw_params: git archive --format zip --output release.zip HEAD chdir: "files/clones/webhooks"


He encontrado un par de otras formas en las que puedes escribirlas, 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


Me gustaría compartir que Ansible se puede ejecutar en localhost a través de 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:

Ejecutando un libro de jugadas ansible en localhost


Puede usar delegate_to para ejecutar comandos en su host de Ansible (host de administración), desde donde está ejecutando su juego de Ansible. Por ejemplo:

Eliminar un archivo si ya existe en el host de 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

Crea un nuevo archivo en Ansible host:

- name: Create log file file: path: /tmp/logfile.log state: touch mode: "u+rw,g-wx,o-rwx" delegate_to: 127.0.0.1


Sí, puede ejecutar comandos en el host de Ansible. Puede especificar que todas las tareas de una ejecución se ejecuten en el host de Ansible, o puede marcar tareas individuales para que se ejecuten en el host de Ansible.

Si desea ejecutar una reproducción completa en el host de 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 de Ansible, puede usar local_action para especificar que una tarea debe ejecutarse 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 Delegation 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ía "localhost" en lugar de "127.0.0.1" para referirse a la obra).

Edición: en las versiones más nuevas de ansible, ya no necesita agregar la línea anterior a su inventario, asume que ya está allí.


ansible your_server_name -i custom_inventory_file_name -m -a "uptime"

El módulo predeterminado es módulo de comando, por lo tanto, la palabra clave de command no es necesaria.

Si necesita emitir un comando con privilegios elevados, use -b al final del mismo comando.

ansible your_server_name -i custom_inventory_file_name -m -a "uptime" -b