Sí, puede ejecutar comandos en el host Ansible. Puede especificar que todas las tareas en una jugada 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 obra completa en el host Ansible, especifique hosts: 127.0.0.1
y connection:local
en la obra, 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
Consulte los Playbooks locales en la documentación de Ansible para obtener más detalles.
Si solo desea ejecutar una única tarea en su host Ansible, puede usarla local_action
para especificar que una tarea se ejecute 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
Consulte Delegación en la documentación de Ansible para obtener más detalles.
Editar: puede evitar tener que escribir connection: local
su juego agregando esto a su inventario:
localhost ansible_connection=local
(Aquí usarías "localhost" en lugar de "127.0.0.1" para referirte a la obra).
Editar: en las versiones más recientes de ansible, ya no necesita agregar la línea anterior a su inventario, ansible asume que ya está allí.
sudo: no
en el escenario de la delegaciónansible-playbook -K playbook.yml
donde -K para rootHe encontrado un par de otras formas en que puedes escribir estas, que son un poco más legibles en mi humilde opinión.
O
fuente
shell
módulo.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 un aprendizaje práctico de Ansible.
El ejemplo de código se toma de este buen artículo:
Ejecutar un libro de jugadas ansible en localhost
fuente
Puede utilizar
delegate_to
para ejecutar comandos en su host Ansible (host de administrador), desde donde está ejecutando su juego Ansible. Por ejemplo:Elimine un archivo si ya existe en el host Ansible:
Cree un nuevo archivo en el host Ansible:
fuente
become
es verdadero para la tarea, se quejará de sudo y tal. Eso podría suceder directamente en la tarea o ser heredado por otro lado.Ampliando la respuesta de @gordon, aquí hay un ejemplo de sintaxis legible y argumento que pasa con el módulo de shell / comando (estos difieren del módulo git en que hay argumentos obligatorios pero de forma libre, como señaló @ander)
fuente
De la documentación de Ansible :
Delegación Esto no es realmente una actualización continua, pero aparece con frecuencia en esos casos.
Si desea realizar una tarea en un host con referencia a otros hosts, use la palabra clave 'delegate_to' en una tarea. Esto es ideal para colocar nodos en un grupo de carga equilibrada o eliminarlos. También es muy útil para controlar ventanas de interrupción. Tenga en cuenta que no tiene sentido delegar todas las tareas, depurar, agregar_host, incluir, etc. siempre se ejecutan en el controlador. Usar esta opción con la palabra clave 'serial' para controlar el número de hosts que se ejecutan al mismo tiempo también es una buena idea:
Estos comandos se ejecutarán en 127.0.0.1, que es la máquina que ejecuta Ansible. También hay una sintaxis abreviada que puede usar por tarea: 'local_action'. Aquí está el mismo libro de jugadas que el anterior, pero usando la sintaxis abreviada para delegar a 127.0.0.1:
Un patrón común es utilizar una acción local para llamar a 'rsync' para copiar archivos de forma recursiva a los servidores administrados. Aquí hay un ejemplo:
Tenga en cuenta que debe tener claves SSH sin frase de contraseña o un agente ssh configurado para que esto funcione; de lo contrario, rsync deberá solicitar una frase de contraseña.
fuente
El módulo predeterminado es el módulo de comando, por lo tanto,
command
no se requiere una palabra clave.Si necesita emitir algún comando con privilegios elevados, use
-b
al final del mismo comando.fuente
puedes intentarlo de esta manera
fuente