GNU/Linux >> Tutoriales Linux >  >> Linux

Introducción a los comandos ad hoc de Ansible

En nuestro artículo anterior, hemos discutido qué es el archivo de configuración e inventario ansible que sienta las bases para aprender ansible. En este artículo, analizaremos los comandos ad hoc de ansible con algunos ejemplos.

Introducción

Los comandos Ad hoc de Ansible son excelentes cuando desea ejecutar tareas rápidas y tareas que no se repiten con frecuencia. Por lo general, estos comandos ad hoc serán comandos de una sola línea que puede ejecutar directamente desde la terminal o desde el script de shell.

Antes de aprender a trabajar con comandos ad hoc, debe saber qué es idempotente. Ansible es idempotente por naturaleza, es decir, independientemente de cuántas veces ejecute la misma tarea si el estado de un objeto ya ha cambiado, ansible no intentará volver a realizar los mismos cambios en ese objeto.

Los comandos ad hoc se envían a través de /usr/bin/ansible programa. Puede ejecutar el siguiente comando para obtener la lista de opciones admitidas para el comando ansible.

$ ansible --help

Si no tiene un laboratorio de ansible para practicar, puede consultar nuestra guía sobre cómo configurar ansible manualmente y usar Vagrant y Virtualbox.

  • Instalar y configurar Ansible en Linux
  • Configuración automatizada de Ansible Lab con Vagrant y Virtualbox en Linux

Conozca el objetivo

Antes de trabajar con comandos ad hoc o escribir libros de jugadas, debe comprender claramente los requisitos comerciales y el entorno de destino con el que va a trabajar.

El entorno de destino puede ser cualquier cosa, como servidores, dispositivos de red, contenedores, soluciones en la nube, etc., compatibles con ansible. Aquí estoy usando dos nodos administrados que ejecutan Ubuntu 20.04.

Puede ejecutar el siguiente comando para verificar la lista de hosts que se utilizarán cuando ejecute un comando ad hoc o un libro de jugadas.

#SYNTAX
$ ansible --list-hosts

El nombre del grupo puede ser predeterminado (todos , desagrupado ) o grupos definidos por el usuario .

Si desea obtener más información sobre los grupos, consulte el siguiente enlace.

  • Archivos de configuración e inventario de Ansible

Obtenga la lista de anfitriones para todos los grupos.

$ ansible all --list-hosts
hosts (2):
  managed1.anslab.com
  managed2.anslab.com

Obtenga una lista de hosts para el grupo definido por el usuario. Aquí mi nombre de grupo es ubuntu .

$ ansible ubuntu --list-hosts
hosts (2):
  managed1.anslab.com
  managed2.anslab.com

Archivo de inventario

El archivo de inventario contiene la lista de nodos administrados. La ubicación del archivo de inventario se configurará en ansible.cfg expediente. Puede anular la ubicación del archivo de inventario usando -i o --inventory bandera al ejecutar comandos ad hoc.

Tengo dos archivos de inventario y el archivo predeterminado se llama hosts. Para usar el archivo host2, necesito usar -i marcar y pasar el archivo como argumento.

$ ansible all -i host2 --list-hosts
hosts (1):
  managed2.anslab.com

Aviso: Si el archivo de inventario está en una ubicación diferente, debe proporcionar la ruta absoluta. Puede consultar el siguiente enlace para conocer el orden de precedencia del archivo de inventario.

  • Archivos de configuración e inventario de Ansible

Módulos Ansible

Ansible es una herramienta con batería incluida, lo que significa que tiene toneladas de módulos enviados con ella. Los módulos son programas escritos en Python que ansible utiliza para ejecutarse en los nodos administrados para realizar una tarea. Ansible sigue el enfoque plug and play, lo que significa que puede escribir su propio módulo y ejecutarlo a través de ansible.

Ansible admite muchos paquetes creados por la comunidad de código abierto y diferentes proveedores de productos. Para obtener la lista de todos los módulos instalados en su máquina, ejecute el siguiente comando.

$ ansible-doc -l                    # LIST ALL MODULES AVAILABLE
$ ansible-doc -l | grep -i -w ^apt  # GREP PARTICULAR MODULE(APT) MODULE

Para ver la documentación de un módulo, puede ejecutar el siguiente comando. Aquí estoy viendo la documentación del módulo apt, que es el módulo administrador de paquetes para distribuciones basadas en Debian/Ubuntu.

$ ansible-doc apt

La siguiente imagen muestra la documentación del módulo ansible apt.

Sintaxis de comandos ad hoc

Hay algunas entradas que debe proporcionar al ejecutar el comando ad hoc.

  • Debe especificar los objetivos (nodos administrados). Puede usar los grupos predeterminados "todos/desagrupados" o grupos definidos por el usuario.
  • Tienes que pasar el nombre del módulo como argumento al -m bandera.
  • Cada módulo acepta un conjunto de opciones. Esas opciones deben pasarse como argumentos a -a flag. Si hay varias opciones, deben estar entre comillas.
$ ansible [group] -m [module] -a [module arguments]

Puede combinar otros argumentos que hemos visto en las secciones anteriores en comandos ad hoc.

Verificar la conectividad mediante el módulo de ping

El primer módulo que ejecuta después de configurar ansible es "ping" módulo. El módulo de ping se usa para verificar si la conectividad está bien con el controlador y los nodos administrados. Si la conexión es exitosa, obtendrá una respuesta como "ping:pong" .

$ ansible all -m ping

También puede condensar la salida usando -o bandera.

$ ansible all -m ping -o

Ejecutar comandos a través del módulo Shell

El módulo shell se utiliza para ejecutar cualquier comando que pueda ejecutar en la terminal. Es simplemente como ejecutar los comandos en una terminal de Linux.

Debes usar -a marcar y pasar comandos como argumentos al módulo de shell.

$ ansible all -m shell -a "arguments"

A continuación se muestran algunos de los comandos que ejecuté a través del módulo de shell ansible.

$ ansible all -m shell -a "echo $USER"
$ ansible all -m shell -a "uptime"
$ ansible all -m shell -a "cat /etc/os-release | grep -i PRETTY_NAME"
$ ansible all -m shell -a "touch /tmp/abc.txt"
$ ansible all -m shell -a "ls -l /tmp/abc.txt"

Como alternativa al módulo de shell, también puede usar el módulo de comando, que es el módulo predeterminado en ansible. Puede usar directamente el -a marcar y pasar comandos como argumento ya que el módulo de comando es el módulo predeterminado.

$ ansible all -m command -a "uptime"       # EXCLUSIVELY PASSING COMMAND MODULE
$ ansible all -a "uptime"                  # NOT USING -m TO PASS MODULE

La diferencia entre el shell y el módulo de comando es que con el módulo de comando puede acceder a algunas variables especiales y no puede usar canalizaciones, redirecciones y operadores lógicos AND.

Ejecute el siguiente comando y obtendrá un error.

$ ansible all -m command -a "test -f /etc/hosts && echo 'hosts file present'"

Puede ejecutar el mismo comando a través del módulo de shell y funcionará bien.

$ ansible all -m shell -a "test -f /etc/hosts && echo 'hosts file present'"

Ejecutar secuencias de comandos a través del módulo de secuencias de comandos

Cuando desee ejecutar cualquier secuencia de comandos (python, shell, etc.), puede usar el módulo de secuencia de comandos que copiará la secuencia de comandos de su máquina controladora a todos los nodos administrados y luego ejecutará la secuencia de comandos.

Tengo el siguiente código python en mi /tmp directorio.

import sys,os

print("CURRENT PYTHON VERSION = ", sys.version_info)
print("HOSTNAME               = ", os.uname()[1])
print("CURRENT DIRECTORY      = ", os.getcwd())

Ejecute el siguiente comando para usar el módulo de script para ejecutar el script. El módulo de secuencia de comandos admite argumentos adicionales según cómo esté ejecutando su secuencia de comandos. En mi caso, estoy ejecutando una secuencia de comandos de python, por lo que intento pasar el argumento adicional "ejecutable=python3" junto con la ruta del script.

$ ansible all -m script -a "/tmp/get_host_details.py executable=python3"

Módulos de gestión de paquetes

Hay módulos para trabajar con administradores de paquetes del sistema operativo como dnf , apt , pacman , etc. Aquí estoy usando apt ya que estoy ejecutando Ubuntu. Pero la sintaxis será la misma para todos los administradores de paquetes con diferencias de parámetros. Debe mirar la documentación respectiva para saber más al respecto.

Para instalar paquetes, puede ejecutar el siguiente comando y establecer el estado en "presente" . Debe elegir -b o -become bandera para ejecutar el módulo con sudo privilegio en los nodos gestionados. Si ha configurado la contraseña para el usuario sudo, debe pasar -K junto con -b bandera que solicitará el convertirse contraseña.

$ ansible all -m apt -a "name=cowsay,vim,cmatrix state=present" -b -K

Para saber cómo funciona la escalada de privilegios, consulte nuestro artículo usando el enlace a continuación.

  • Autenticación SSH de Ansible y escalada de privilegios

Para eliminar los paquetes, puede ejecutar el siguiente comando y establecer el estado en "ausente" .

$ ansible all -m apt -a "name=cowsay,vim,cmatrix state=absent" -b -K

Hasta ahora he mostrado cómo usar diferentes módulos para diferentes tareas. Esto podría haberle dado una buena comprensión de cómo funcionan las cosas cuando ejecuta comandos ad hoc.

Hay toneladas de otros módulos y este artículo no será suficiente para repasarlos todos. Por lo tanto, le sugiero que elija el módulo de acuerdo con su caso de uso y comience a practicar con los comandos ad hoc.

Colores de salida

Cuando ejecuta comandos ad hoc, debería haber visto la salida en tres colores diferentes. Cada color tiene un significado.

RED    - Failure
YELLOW - Success With Changes happened
GREEN  - Success but no changes happened

ROJO - Fallo

Si su tarea falla, se imprimirá en color rojo.

AMARILLO - Éxito con los cambios

Cuando el estado está configurado para cambiar, la salida será de color amarillo.

VERDE - Éxito pero sin cambios

Cuando el estado del objeto no cambia, la salida será de color verde.

Conclusión

En este artículo, hemos discutido qué son los comandos ad hoc y cómo usar los comandos ad hoc en Ansible. Como principiante, los comandos ad hoc le darán una buena comprensión de cómo ansible usa los módulos para realizar una tarea. En el siguiente nivel, comenzará a escribir libros de jugadas en formato YAML que se tratarán en detalle en un artículo separado.

Leer a continuación:

  • Trabajar con libros de estrategias de Ansible

Recursos:

  • https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html
  • https://www.redhat.com/sysadmin/ansible-ad-hoc-commands

Linux
  1. Comenzando con Zsh

  2. Primeros pasos con el comando tac de Linux

  3. Primeros pasos con el Administrador de archivos de Plesk

  4. Comenzando con ls

  5. Primeros pasos con PostgreSQL en Linux

Primeros pasos con GitHub

Primeros pasos con los libros de jugadas de Ansible

Primeros pasos con el administrador de paquetes de Nix

Primeros pasos con systemctl

Introducción a los comandos de Pacman en distribuciones de Linux basadas en Arch

Introducción a Emacs:explicación de los comandos básicos