GNU/Linux >> Tutoriales Linux >  >> Linux

Archivos de inventario y configuración de Ansible

Hace unos días, discutimos cómo configurar un laboratorio Ansible de tres nodos usando Vagrant. en linux En este artículo, aprenderemos en detalle los conceptos fundamentales de Ansible, como el inventario de Ansible y los archivos de configuración.

Estructura básica de Ansible

Cuando comienza a trabajar con ansible, hay dos archivos importantes que debe conocer. Uno es el inventario de Ansible y el segundo es la configuración de Ansible archivo.

La configuración El archivo contiene todas las configuraciones que ansible usará durante el tiempo de ejecución. Cuando instala ansible con el administrador de paquetes del sistema operativo, puede ver que hay un archivo de configuración predeterminado llamado "ansible.cfg " creado en /etc/ansible directorio.

El archivo de inventario contiene la dirección IP o la información de DNS sobre la lista de hosts administrados con los que queremos trabajar. Ansible leerá los nombres de host del archivo de inventario y las tareas/juegos se ejecutarán en esos nodos. Los archivos de inventario se pueden crear en ini , yaml y json formatos.

A continuación se muestra la estructura de mi proyecto. Tengo un ansible.cfg archivo de configuración, un archivo de hosts y un libro de jugadas que está escrito en yaml formato.

Cuando active el libro de jugadas, ansible leerá la configuración de ansible.cfg y los detalles del anfitrión del archivo de anfitriones para ejecutar las reproducciones.

[email protected]:~/ansible_project$ tree .
.
├── ansible.cfg
├── hosts
└── playbook.yml

0 directories, 3 files

Hablemos en detalle sobre estos dos archivos y finalmente ejecutaremos algunos comandos adhoc.

Archivo de configuración de Ansible

Ansible usa el archivo de configuración para cargar los parámetros necesarios para ejecutar la tarea de ansible. Si ha instalado ansible mediante el administrador de paquetes , tendrá un ansible.cfg archivo en /etc/ansible directorio.

A continuación se muestra el ejemplo de ansible.cfg archivo.

Ansible buscará el archivo de configuración en el siguiente orden.

  • ANSIBLE_CONFIG - variable de entorno
  • ansible.cfg - Directorio actual desde donde está ejecutando el comando
  • .ansible.cfg - Directorio de inicio de usuarios
  • /etc/ansible/ansible.cfg - En /etc/ansible directorio

Ejecute ansible --version comando para ver qué archivo de configuración está eligiendo ansible.

$ ansible --version
ansible [core 2.12.3]
  config file = /home/vagrant/ansible_project/ansible.cfg
  configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  ansible collection location = /home/vagrant/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.8.10 (default, Nov 26 2021, 20:14:08) [GCC 9.3.0]
  jinja version = 2.10.1
  libyaml = True

Creé un directorio de proyecto personalizado y creé un ansible.cfg expediente. Mi archivo de configuración contiene solo dos propiedades, ubicación de inventario y verificación de clave de host deshabilitada.

[defaults]
inventory = /home/karthick/ansible_project/hosts
host_key_checking = False

Hay toneladas de otras propiedades, pero por el momento puede comenzar a usarlas agregando solo la propiedad "inventario".

Archivo de inventario de Ansible

En el archivo de inventario, proporcionaremos la dirección IP o DNS de los nombres de servidor, dispositivos de red, servicios en la nube o cualquier cosa con la que pueda trabajar ansible.

Los inventarios se pueden escribir en ini , json y yaml y también tiene scripts para convertir un formato de inventario a otros formatos.

De forma predeterminada, puede encontrar un archivo de inventario (hosts) en /etc/ansible directorio si instaló ansible usando el administrador de paquetes del sistema operativo. Siempre se recomienda crear un directorio de proyecto separado y crear un archivo de inventario y configuración.

La siguiente tabla representa cómo está configurado mi laboratorio ansible. Voy a crear el archivo de inventario para la configuración de este laboratorio y ejecutaré el módulo de ping para demostrar cómo funcionan las cosas en el archivo de inventario.

Archivo de inventario sin agrupación explícita

El archivo de inventario tiene un concepto llamado agrupación en el que agrupará sus recursos y ejecutará tareas en ese grupo. Tendrá la siguiente estructura.

[group-name]
Resource1
Resource2
....
Resource N

Puede crear el archivo de inventario sin usar grupos. En este caso, Ansible utilizará dos grupos predeterminados "todos" y "desagrupado" .

  • TODO EL GRUPO - Todos los recursos que están disponibles en el archivo de inventario de forma predeterminada se asignarán a todos los grupos .
  • SIN GRUPO - Los recursos que no forman parte de ningún grupo definido por el usuario se asignarán automáticamente al grupo sin agrupar .

He creado un archivo de inventario sin ningún grupo. Ahora, estos dos nodos estarán en todos los grupos, así como en el grupo no agrupado.

$ cat hosts
managed1.anslab.com
managed2.anslab.com

Puede ejecutar el siguiente comando ansible para verificar la lista de hosts en todos y en el grupo no agrupado.

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

Archivo de inventario con agrupación

Como se predijo, la agrupación es una excelente manera de organizar sus recursos, por lo que le resultará fácil ejecutar la tarea en el grupo específico. Tengo dos nodos administrados y ejecutan Ubuntu 20.04LTS.

Digamos que quiero agrupar mi archivo de inventario según el tipo de sistema operativo, entonces el archivo de inventario se verá como se muestra a continuación. Aquí ubuntu es el nombre del grupo.

[ubuntu]
managed1.anslab.com
managed2.anslab.com

Las tareas se pueden ejecutar contra este grupo.

$ ansible ubuntu -m ping -o
managed1.anslab.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
managed2.anslab.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}

Si busco el grupo "desagrupado" ahora, no habrá ningún anfitrión.

$ ansible ungrouped --list-hosts
[WARNING]: No hosts matched, nothing to do
hosts (0):

Puede crear tantos grupos como desee en el archivo de inventario y usar los mismos nombres de recursos.

[ubuntu]
managed1.anslab.com
managed2.anslab.com

[dev]
managed1.anslab.com

[test]
managed2.anslab.com
$ ansible ubuntu -m ping -o
$ ansible dev -m ping -o
$ ansible test -m ping -o

Archivo de inventario con rangos

Cuando tiene un patrón de nomenclatura común para sus recursos, puede usar rangos. Eche un vistazo al siguiente ejemplo donde, en lugar de repetir el DNS, he usado el rango para acortarlo.

[ubuntu]
managed[1:2].anslab.com

Archivo de inventario con grupos secundarios

Puede crear un grupo y usar otros nombres de grupo debajo de él. Eche un vistazo al siguiente ejemplo, tengo el grupo ubuntu que tiene los nombres de mi servidor. Creé otro grupo llamado servidor que contiene el grupo ubuntu.

Es importante que agregues :niños al nombre del grupo; de lo contrario, el grupo de servidores tratará "ubuntu " como el nombre del servidor en lugar del nombre del grupo.

[ubuntu]
managed[1:2].anslab.com

[server:children]
ubuntu

Archivo de inventario con variables de host y variables de grupo

El archivo de inventario admite variables de host y grupo. Las variables del host no son más que variables y sus valores se pasan al host en el archivo de inventario. En la siguiente configuración, le digo a ansible que use ostechnix como mi usuario y en lugar de usar el puerto ssh estándar, use puerto 2222 .

[ubuntu]
managed1.anslab.com ansible_user=ostechnix ansible_port=2222
managed2.anslab.com ansible_user=ostechnix ansible_port=2222

Group vars es lo mismo que host vars, pero las variables se aplicarán a todo el grupo en lugar de a un solo host. Puede ver en la configuración anterior, ansible_user y ansible_port son iguales para ambos nodos. Entonces puede crear un grupo var donde las variables serán heredadas por todos los nodos del grupo. Debe agregar :vars para hacer el grupo como grupo vars.

[ubuntu]
managed1.anslab.com
managed2.anslab.com

[ubuntu:vars]
ansible_user=ostechnix
ansible_port=2222

Aviso: Cuando tiene una variable de grupo y una variable de host para el mismo nodo, entonces la variable de host tiene una prioridad alta.

Hay muchos parámetros de inventario que puede usar y puede obtener la lista del documento oficial .

Archivo de inventario con alias

Puede crear un alias para el recurso como se muestra a continuación. Aquí m1 y m2 son alias.

[ubuntu]
m1 ansible_host=managed1.anslab.com
m2 ansible_host=managed2.anslab.com

Ahora este alias se puede usar para ejecutar algunas tareas.

$ ansible m1 -m ping -o
m1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
$ ansible m2 -m ping -o
m2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}

Archivo de inventario en formato YAML

Los archivos de inventario también se pueden escribir en formato YAML. Todo lo que hemos discutido en las secciones anteriores está escrito en formato YAML.

La siguiente imagen representa dos nodos con un par de variables de host.

La imagen de abajo representa dos nodos con variables de grupo.

Comando de inventario de Ansible

Ansible tiene un comando de inventario que será muy útil para ver la información de los archivos de inventario.

Para obtener la lista de opciones admitidas, ejecute el comando de ayuda.

$ ansible-inventory --help

Para obtener los detalles del inventario en formato gráfico, use --graph bandera. Si tiene diferentes archivos de inventario, puede usar -i bandera para apuntar explícitamente al archivo de inventario.

$ ansible-inventory --graph

Puede imprimir la información de var del host y del grupo pasando --vars bandera junto con --graph bandera.

$ ansible-inventory --graph --vars

Cuando usas la --list flag, la salida estará en formato JSON.

$ ansible-inventory -list

Puede obtener información sobre un nodo en particular usando --host bandera.

$ ansible-inventory --host managed1.anslab.com

Conclusión

En este artículo, hemos visto un concepto importante que forma el núcleo de la arquitectura ansible. Si es un principiante, concéntrese en crear el inventario con formato ini y, en el futuro, conocerá más sobre las mejores prácticas cuando comience a trabajar en proyectos de producción.

Leer a continuación:

  • Autenticación SSH de Ansible y escalada de privilegios
  • Introducción a los comandos ad hoc de Ansible

Linux
  1. Cómo encontrar archivos de configuración de MySQL, PHP y Apache

  2. Una manera fácil de ocultar archivos y directorios en Linux

  3. Cómo administrar el inventario de hosts estáticos y dinámicos de Ansible

  4. Crear y eliminar archivos de intercambio en Ubuntu

  5. diferencia entre archivo de dispositivo y controlador de dispositivo

Cómo crear y ejecutar un archivo de libro de jugadas de Ansible

Cómo cambiar el nombre de archivos y directorios en Linux

Cómo copiar archivos y directorios en la terminal de Linux

Comando Stat:mostrar atributos de archivos y directorios

Comando tar de Linux para comprimir y extraer archivos

Renombrar archivos y carpetas en cPanel

    TIPO DE NODO NOMBRE DEL NODO DIRECCIÓN IP SABOR SO
    Nodo de control controlador.anslab.com 192.168.10.3 ubuntu/focal64
    Nodo administrado gestionado1.anslab.com 192.168.10.4 ubuntu/focal64
    Nodo administrado gestionado2.anslab.com 192.168.10.5 ubuntu/focal64