deployment open - Ejecutar comando en el host Ansible




source download (6)

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

¿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"

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í.


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

Si realmente desea adjuntar al contenido, deberá utilizar el módulo set_fact . Pero si solo quieres usar las listas combinadas es tan fácil como esto:

{{ list1 + list2 }}

Con set_fact se vería así:

- set_fact:
    list_merged: "{{ list1 + list2 }}"

NOTA: Si necesita realizar operaciones adicionales en las listas concatenadas, asegúrese de agruparlas así:

- set_fact:
    list_merged: "{{ (list1 + list2) | ... }}"




deployment ansible