Cómo usar hechos personalizados Ansible

Cómo usar hechos personalizados Ansible
Los hechos son como variables en Ansible. Ansible genera muchos hechos, dependiendo del host que automatiza. Si lo necesita, también puede definir hechos/variables personalizados en Ansible.

Puede definir tres tipos de hechos personalizados en Ansible.

1) Hechos globales: Estos hechos son accesibles desde todos los host en su archivo de inventario.
2) Datos grupales: Estos hechos solo son accesibles desde un conjunto específico de hosts o un grupo de host.
3) Hechos de host: Estos hechos solo son accesibles desde un host en particular.

En este artículo, te mostraré cómo trabajar con hechos personalizados Ansible. Entonces empecemos.

Prerrequisitos:

Si quieres probar los ejemplos de este artículo,

1) Debe tener Ansible instalado en su computadora.
2) Debe tener al menos 6 hosts de Linux configurados para la automatización Ansible.

Hay muchos artículos sobre Linuxhint dedicados a instalar Ansible y configurar hosts para Automatización Ansible. Puede consultarlos si es necesario.

Configuración de un directorio de proyecto:

Antes de comenzar, creemos un directorio de proyecto para que podamos organizar nuestros archivos de proyecto.

Para crear un directorio de proyecto Facts personalizados/ en tus HOGAR directorio, ejecute el siguiente comando:

$ mkdir -pv personalizado de personalización/Playbooks, host_vars, group_vars

Ahora, navegue al Facts personalizados/ Directorio de la siguiente manera:

$ CD Facts personalizados/

Crear un archivo de configuración ansible ansible.CFG En el directorio de su proyecto de la siguiente manera:

$ nano ansible.CFG

Escriba las siguientes líneas su ansible.CFG archivo.

[Valores predeterminados]
inventario = hosts
host_key_checking = falso

Una vez que haya terminado, presione + X seguido por Y y Para salvar el ansible.CFG archivo de configuración.

Ahora, cree un archivo de inventario ansible Hospedadores En el directorio de su proyecto de la siguiente manera:

$ nano anfitriones

Escriba las siguientes líneas en su Hospedadores archivo de inventario.

VM1.notekita.comunicarse
VM2.notekita.comunicarse
[web]
VM3.notekita.comunicarse
VM4.notekita.comunicarse
[base de datos]
VM [5: 6].notekita.comunicarse

Una vez que haya terminado, presione + X seguido por Y y Para salvar el Hospedadores archivo de inventario.

Para enumerar todos los hosts disponibles en su archivo de inventario, ejecute el siguiente comando:

$ ansible todos --lists-hosts

Como puede ver, tengo seis hosts en mi archivo de inventario.

Para enumerar los hosts disponibles en el web grupo de su archivo de inventario, ejecute el siguiente comando:

$ Ansible Web --lists-hosts

Como puede ver, tengo dos anfitriones (VM3.notekita.comunicarse y VM4.notekita.comunicarse) en el web grupo de mi archivo de inventario.

Para enumerar los hosts disponibles en el base de datos grupo de su archivo de inventario, ejecute el siguiente comando:

$ Ansible Base de datos --lists-hosts

Como puede ver, tengo dos anfitriones (VM5.notekita.comunicarse y VM6.notekita.comunicarse) en el base de datos grupo de mi archivo de inventario.

Trabajar con hechos globales ansibles:

En esta sección, le mostraré cómo definir hechos/variables globales ansibles en su archivo de inventario y acceder a ellos desde sus libros de jugadas Ansible. También le mostraré cómo definir hechos/variables globales en un archivo separado.

Primero, abra el Hospedadores Archivo de inventario con el siguiente comando:

$ nano anfitriones

Ahora, agregue las líneas marcadas en su Hospedadores archivo de inventario. Una vez que haya terminado, presione + X seguido por Y y Para guardar el archivo.

'

Agregas hechos globales en el Todos: vars sección. Aquí, he agregado el Web_URL hecho global.

Ahora, crea un nuevo libro de jugadas print_global_fact.yaml en el Libros de jugadas/ Directorio de la siguiente manera:

$ Nano Playbooks/print_global_fact.yaml

Luego, escriba las siguientes líneas en el print_global_fact.yaml archivo.

- Anfitriones: todos
Usuario: Ansible
tareas:
- Nombre: Imprima el valor del hecho global 'web_URL'
depurar:
Msg: 'URL web: Web_url'

El propósito de este libro de jugadas es imprimir el Web_URL hecho global.

Una vez que haya terminado, presione + X seguido por Y y Para salvar el print_global_fact.yaml archivo.

Ahora, corre el print_global_fact.yaml Libro de jugadas de la siguiente manera:

$ Ansible-Playbook Playbooks/print_global_fact.yaml

Como puede ver, todos los hosts en mi archivo de inventario pueden acceder al hecho global Web_URL.

También puede agregar datos globales en un archivo separado. De esta manera, puede mantener limpio el archivo de inventario. Veamos cómo hacerlo.

Primero, eliminemos los hechos globales del Hospedadores archivo de inventario.

$ nano anfitriones

Ahora, elimine las líneas marcadas del archivo de inventario y presione + X, seguido por Y y Para guardar el archivo de inventario.

Luego, cree un nuevo archivo todo en el Group_vars/ Directorio de la siguiente manera:

$ nano group_vars/todos

Para agregar el hecho global Web_URL, Escriba la siguiente línea en el Group_vars/todos archivo.

web_url: https: // www.Linuxhint.comunicarse

Una vez que haya terminado, presione + X seguido por Y y Para salvar el Group_vars/todos archivo.

Para verificar si puede acceder al hecho global Web_URL, ejecutar el print_global_fact.yaml Playbook de nuevo de la siguiente manera:

$ Ansible-Playbook Playbooks/print_global_fact.yaml

Como puede ver, todos los hosts en mi archivo de inventario pueden acceder al hecho global Web_URL.

Trabajar con hechos grupales ansibles:

En esta sección, le mostraré cómo definir los hechos/variables grupales ansibles en su archivo de inventario y acceder a ellos desde sus libros de jugadas Ansible. También le mostraré cómo definir los hechos/variables del grupo en un archivo separado.

Primero, abra el Hospedadores Archivo de inventario con el siguiente comando:

$ nano anfitriones

Si tienes un grupo anfitrión grupo 1, Luego agrega datos/variables de grupo para ese grupo host en un Grupo1: Vars Sección de su archivo de inventario.

[grupo 1]

[Grupo1: Vars]
variable1 = valor1
variable2 = valor2

Por ejemplo, para agregar los hechos/variables grupales nombre de dominio y base de datos_backends Para el web Grupo de host, puede escribir las líneas marcadas en su archivo de inventario.

Una vez que haya terminado, presione + X seguido por Y y Para guardar el archivo de inventario.

Para imprimir y probar si podemos acceder a los hechos grupales, crear un nuevo libro de jugadas print_group_facts.yaml en el Libros de jugadas/ Directorio de la siguiente manera:

$ Nano Playbooks/print_group_facts.yaml

Escriba las siguientes líneas en su print_group_facts.yaml archivo.

- Hosts: Web
Usuario: Ansible
tareas:
- Nombre: Datos del grupo de impresión
depurar:
Msg: 'Nombre de dominio: Domain_name Backend de la base de datos: database_backend'

Una vez que haya terminado, presione + X seguido por Y y Para salvar el print_group_facts.yaml archivo.

Ahora, corre el print_group_facts.yaml Libro de jugadas de la siguiente manera:

$ Ansible-Playbook Playbooks/print_group_facts.yaml

Como puede ver, los anfitriones en el web el grupo puede acceder al nombre de dominio y base de datos_backend Datos/variables grupales.

Ahora, limpiemos el archivo de inventario y veamos cómo agregar datos/variables de grupo en un archivo separado.

Primero, abra el Hospedadores archivo de inventario de la siguiente manera:

$ nano hechos

Retire las líneas marcadas del Hospedadores archivo de inventario. Una vez que haya terminado, presione + X seguido por Y y Para salvar el Hospedadores archivo de inventario.

Como estamos agregando variables de grupo para el web Grupo de host, crear un nuevo archivo web (igual que el nombre del grupo) en el Group_vars/ Directorio de la siguiente manera:

$ nano group_vars/web

Para agregar los hechos grupales nombre de dominio y base de datos_backend Para el web Grupo de host, agregue las siguientes líneas en el Group_vars/Web archivo.

dominio_name: web.Linuxhint.comunicarse
database_backend: PGSQL

Una vez que haya terminado, presione + X seguido por Y y Para salvar el Group_vars/Web archivo.

Para verificar si los hosts en el web El grupo puede acceder a los hechos del grupo, ejecutar el print_group_facts.yaml Libro de jugadas de la siguiente manera:

$ Ansible-Playbook Playbooks/print_group_facts.yaml

Como puede ver, los anfitriones en el web el grupo puede acceder al nombre de dominio y base de datos_backend Datos/variables grupales.

Trabajando con hechos anfitriones de Ansible:

En esta sección, le mostraré cómo definir los hechos/variables de anfitrión ansibles en su archivo de inventario y acceder a ellos desde sus libros de jugadas Ansible. También le mostraré cómo definir hechos/variables de host en un archivo separado.

Primero, abra el Hospedadores Archivo de inventario con el siguiente comando:

$ nano anfitriones

Puede agregar hechos/variables del host después del nombre DNS o la dirección IP del host en su archivo de inventario de la siguiente manera:

www.dominio1.com variable1 = value1 variable2 = value2
192.168.22.2 variable1 = value3 variable2 = value4

Por ejemplo, puede agregar datos/variables de host nombre de dominio y base de datos_backend para los anfitriones VM3.notekita.comunicarse y VM4.notekita.comunicarse, como se marca en la captura de pantalla a continuación.

Observe que el valor del nombre de dominio y base de datos_backend Los hechos/variables son diferentes para cada host.

Una vez que haya terminado de agregar los hechos/variables del host, presione + X, seguido por Y y Para salvar el Hospedadores archivo de inventario.

Como he agregado los mismos hechos/variables que en el ejemplo de hechos grupales/variables, podemos usar el print_group_facts.yaml Playbook para probar la accesibilidad de estos hechos/variables también.

Ejecutar el print_group_facts.yaml Libro de jugadas de la siguiente manera:

$ Ansible-Playbook Playbooks/print_group_facts.yaml

Como puede ver, los hechos/variables del host son accesibles para su host especificado. Los valores también son diferentes para cada host.

Como cada uno de los hosts está en una línea separada en mi archivo de inventario, podría agregar fácilmente hechos/variables de host en mi archivo de inventario. Pero, si usa rangos para definir hosts en su archivo de inventario como marcado en la captura de pantalla a continuación, no puede agregar hechos/variables de host como esa.

Puede agregar hechos/variables de host en un archivo separado, tal como lo ha hecho para los hechos/variables globales y grupales.

Para agregar hechos/variables de host para el VM5.notekita.comunicarse host, crea un archivo nuevo VM5.notekita.comunicarse (igual que el nombre del host DNS) en el host_vars/ Directorio de la siguiente manera:

$ nano host_vars/vm5.notekita.comunicarse

Puede agregar los hechos/variables del host db_port y db_name para el anfitrión VM5.notekita.comunicarse Con las siguientes líneas.

DB_PORT: 3306
db_name: demo1

Una vez que haya terminado, presione + X seguido por Y y Para salvar el VM5.notekita.comunicarse archivo.

De la misma manera, para agregar hechos/variables del host para el host VM6.notekita.comunicarse, Crea un nuevo archivo VM6.notekita.comunicarse en el host_vars/ Directorio de la siguiente manera:

$ nano host_vars/vm6.notekita.comunicarse

Puede agregar los hechos/variables del host db_port y db_name para el anfitrión VM6.notekita.comunicarse Con las siguientes líneas.

DB_PORT: 8877
DB_NAME: APP1

Una vez que haya terminado, presione + X seguido por Y y Para salvar el VM6.notekita.comunicarse archivo.

Para imprimir y probar si podemos acceder a los hechos/variables del host, crear un nuevo libro de jugadas print_host_facts.yaml en el Libros de jugadas/ Directorio de la siguiente manera:

$ Nano Playbooks/print_host_facts.yaml

Ahora, escriba las siguientes líneas en el print_host_facts.yaml archivo.

- Hosts: base de datos
Usuario: Ansible
tareas:
- Nombre: hechos de host de impresión
depurar:
Msg: 'Nombre de la base de datos: db_name puerto de base de datos: db_port'

Una vez que haya terminado, presione + X seguido por Y y Para salvar el print_host_facts.yaml archivo.

Para verificar si el host VM5.notekita.comunicarse y VM6.notekita.comunicarse puede acceder a los hechos/variables del host, ejecutar el print_host_facts.yaml Libro de jugadas de la siguiente manera:

$ Ansible-Playbook Playbooks/print_host_facts.yaml

Como puede ver, los anfitriones VM5.notekita.comunicarse y VM6.notekita.comunicarse puede acceder al db_name y db_port Hechos/variables de host.

Poniendo todo junto: precedencia de hechos ansibles

En esta sección, voy a hablar sobre hechos ansibles/precedencia variable. Entonces empecemos.

Antes de comenzar, limpiemos el archivo de inventario.

Abre el Hospedadores Archivo de inventario con el siguiente comando:

$ nano anfitriones

Eliminar la sección marcada del archivo de inventario.

Así es como debe ver su archivo de inventario en este punto.

Ahora, agregue la línea marcada en su archivo de inventario. Estas líneas agregan los hechos/variables globales HECH_SCOPE y puerto.

Luego, agregue las líneas marcadas en su archivo de inventario. Estas líneas agregan el HECH_SCOPE y puerto hechos/variables para los hosts en el base de datos grupo.

Finalmente, agregue el HECH_SCOPE y puerto hechos de host/variables para el VM3.notekita.comunicarse y VM4.notekita.comunicarse Hosts, como se marcan en la captura de pantalla a continuación.

Una vez que haya terminado, presione + X seguido por Y y Para guardar el archivo de inventario.

Para imprimir el valor de los hechos/variables globales, grupales y de host, cree un nuevo libro de jugadas HECH_PRECIENCIA.yaml en el Libros de jugadas/ Directorio de la siguiente manera:

$ Nano Playbooks/FACT_Precedence.yaml

Escriba las siguientes líneas en el Hecho_precedencia.yaml archivo.

- Anfitriones: todos
Usuario: Ansible
tareas:
- Nombre: Imprimir todos los hechos
depurar:
Msg: 'Fact Scope: FACT_SCOPE Port: Port'

Una vez que haya terminado, presione + X seguido por Y y Para salvar el Hecho_precedencia.yaml archivo.

Para imprimir los hechos/variables globales, grupales y de host, ejecute el Hecho_precedencia.yaml Libro de jugadas de la siguiente manera:

$ Ansible-Playbook Playbooks/FACT_Precedence.yaml

Como puede ver, se imprimen los hechos/variables globales, grupales y de host.

Observe que los hechos/variables del grupo reemplazaron los hechos/variables globales (1). Además, observe que los hechos/variables del host reemplazaron tanto el grupo como los hechos/variables globales (2).

El hecho/precedencia variable de Ansible es el siguiente:

HACTO HOST> HECHO GROUP> Hecho global

Conclusión:

Después de leer este artículo, debería poder trabajar cómodamente con Hechos/Variables de Ansible Global, Group y Host. Recuerda la precedencia de hecho personalizado Ansible. Te ayudará a depurar tus libros de jugadas Ansible más fácilmente.