Un comando ad hoc de Ansible utiliza el /usr/bin/ansible herramienta de línea de comandos para automatizar una sola tarea en uno o más nodos administrados. Los comandos ad hoc son rápidos y fáciles, pero no son reutilizables. Entonces, ¿por qué aprender primero sobre los comandos ad hoc? Los comandos ad hoc demuestran la simplicidad y el poder de Ansible. Los conceptos que aprenda aquí se transferirán directamente al lenguaje del libro de jugadas. Antes de leer y ejecutar estos ejemplos, lea Cómo construir su inventario.

  • ¿Por qué utilizar comandos ad hoc?
  • Casos de uso para tareas ad hoc

    • Reiniciar servidores
    • Administrar archivos
    • Gestionar paquetes
    • Gestionar usuarios y grupos
    • Gestionar servicios
    • Recopilación de hechos

¿Por qué utilizar comandos ad hoc?

Los comandos ad hoc son excelentes para tareas que se repiten con poca frecuencia. Por ejemplo, si desea apagar todas las máquinas de su laboratorio durante las vacaciones de Navidad, puede ejecutar una frase rápida en Ansible sin escribir un libro de jugadas. Un comando ad hoc tiene este aspecto:

$ ansible [pattern] -m [module] -a "[module options]"

Puedes aprender más sobre patrones y modulos en otras páginas.

Casos de uso para tareas ad hoc

Las tareas ad hoc se pueden utilizar para reiniciar servidores, copiar archivos, administrar paquetes y usuarios, y mucho más. Puede utilizar cualquier módulo de Ansible en una tarea ad hoc. Las tareas ad hoc, como los libros de jugadas, utilizan un modelo declarativo, calculando y ejecutando las acciones necesarias para alcanzar un estado final específico. Alcanzan una forma de idempotencia al verificar el estado actual antes de comenzar y no hacer nada a menos que el estado actual sea diferente del estado final especificado.

Reiniciar servidores

El módulo predeterminado para el ansible La utilidad de línea de comandos es la módulo ansible.builtin.command. Puede usar una tarea ad hoc para llamar al módulo de comando y reiniciar todos los servidores web en Atlanta, 10 a la vez. Antes de que Ansible pueda hacer esto, debe tener todos los servidores en Atlanta listados en un grupo llamado [atlanta] en su inventario, y debe tener credenciales SSH que funcionen para cada máquina en ese grupo. Para reiniciar todos los servidores en el [atlanta] grupo:

$ ansible atlanta -a "/sbin/reboot"

De forma predeterminada, Ansible usa solo 5 procesos simultáneos. Si tiene más hosts que el valor establecido para el recuento de bifurcaciones, Ansible hablará con ellos, pero tardará un poco más. Para reiniciar el [atlanta] servidores con 10 bifurcaciones paralelas:

$ ansible atlanta -a "/sbin/reboot" -f 10

/ usr / bin / ansible se ejecutará de forma predeterminada desde su cuenta de usuario. Para conectarse como un usuario diferente:

$ ansible atlanta -a "/sbin/reboot" -f 10 -u username

El reinicio probablemente requiera una escalada de privilegios. Puede conectarse al servidor como username y ejecute el comando como el root usuario mediante el volverse palabra clave:

$ ansible atlanta -a "/sbin/reboot" -f 10 -u username --become [--ask-become-pass]

Si agrega --ask-become-pass o -K, Ansible le solicita la contraseña que debe usar para la escalada de privilegios (sudo / su / pfexec / doas / etc).

Nota

los módulo de mando no admite la sintaxis de shell extendida como canalización y redirecciones (aunque las variables de shell siempre funcionarán). Si su comando requiere una sintaxis específica de shell, use la shell módulo en su lugar. Leer más sobre las diferencias en el Trabajar con módulos página.

Hasta ahora, todos nuestros ejemplos han utilizado el módulo ‘comando’ predeterminado. Para usar un módulo diferente, pase -m para el nombre del módulo. Por ejemplo, para usar el módulo ansible.builtin.shell:

$ ansible raleigh -m ansible.builtin.shell -a 'echo $TERM'

Al ejecutar cualquier comando con Ansible ad hoc CLI (a diferencia de Playbooks), preste especial atención a las reglas de cotización de shell, por lo que el shell local retiene la variable y se la pasa a Ansible. Por ejemplo, usar comillas dobles en lugar de simples en el ejemplo anterior evaluaría la variable en el cuadro en el que estaba.

Administrar archivos

Una tarea ad hoc puede aprovechar el poder de Ansible y SCP para transferir muchos archivos a varias máquinas en paralelo. Para transferir un archivo directamente a todos los servidores del [atlanta] grupo:

$ ansible atlanta -m ansible.builtin.copy -a "src=/etc/hosts dest=/tmp/hosts"

Si planea repetir una tarea como esta, use el ansible.builtin.template módulo en un libro de jugadas.

los ansible.builtin.file El módulo permite cambiar la propiedad y los permisos de los archivos. Estas mismas opciones se pueden pasar directamente al copy módulo también:

$ ansible webservers -m ansible.builtin.file -a "dest=/srv/foo/a.txt mode=600"
$ ansible webservers -m ansible.builtin.file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan"

los file módulo también puede crear directorios, similar a mkdir -p:

$ ansible webservers -m ansible.builtin.file -a "dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory"

Además de eliminar directorios (recursivamente) y eliminar archivos:

$ ansible webservers -m ansible.builtin.file -a "dest=/path/to/c state=absent"

Gestionar paquetes

También puede usar una tarea ad hoc para instalar, actualizar o eliminar paquetes en nodos administrados usando un módulo de administración de paquetes como yum. Para asegurarse de que un paquete esté instalado sin actualizarlo:

$ ansible webservers -m ansible.builtin.yum -a "name=acme state=present"

Para asegurarse de que se instala una versión específica de un paquete:

$ ansible webservers -m ansible.builtin.yum -a "name=acme-1.5 state=present"

Para asegurarse de que un paquete tenga la última versión:

$ ansible webservers -m ansible.builtin.yum -a "name=acme state=latest"

Para asegurarse de que un paquete no esté instalado:

$ ansible webservers -m ansible.builtin.yum -a "name=acme state=absent"

Ansible tiene módulos para administrar paquetes en muchas plataformas. Si no hay un módulo para su administrador de paquetes, puede instalar paquetes usando el módulo de comando o crear un módulo para su administrador de paquetes.

Gestionar usuarios y grupos

Puede crear, administrar y eliminar cuentas de usuario en sus nodos administrados con tareas ad hoc:

$ ansible all -m ansible.builtin.user -a "name=foo password="

$ ansible all -m ansible.builtin.user -a "name=foo state=absent"

Ver el ansible.builtin.user documentación del módulo para obtener detalles sobre todas las opciones disponibles, incluido cómo manipular grupos y pertenencia a grupos.

Gestionar servicios

Asegúrese de que se inicie un servicio en todos los servidores web:

$ ansible webservers -m ansible.builtin.service -a "name=httpd state=started"

Alternativamente, reinicie un servicio en todos los servidores web:

$ ansible webservers -m ansible.builtin.service -a "name=httpd state=restarted"

Asegúrese de que un servicio esté detenido:

$ ansible webservers -m ansible.builtin.service -a "name=httpd state=stopped"

Recopilación de hechos

Los hechos representan variables descubiertas sobre un sistema. Puede utilizar hechos para implementar la ejecución condicional de tareas, pero también solo para obtener información ad hoc sobre sus sistemas. Para ver todos los hechos:

$ ansible all -m ansible.builtin.setup

También puede filtrar esta salida para mostrar solo ciertos hechos, consulte la ansible.builtin.setup documentación del módulo para obtener más detalles.

Ahora que comprende los elementos básicos de la ejecución de Ansible, está listo para aprender a automatizar tareas repetitivas utilizando Playbooks de Ansible.

Ver también

Configuración de Ansible

Todo sobre el archivo de configuración de Ansible

Índice de colección

Explore colecciones, módulos y complementos existentes

Trabajar con libros de jugadas

Uso de Ansible para la implementación y la gestión de la configuración

Lista de correo

¿Preguntas? ¿Ayudar? Ideas? Pasa por la lista de Grupos de Google

irc.freenode.net

Canal de chat de IRC #ansible