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]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.comunicarseUna 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.yamlLuego, escriba las siguientes líneas en el print_global_fact.yaml archivo.
- Anfitriones: todosEl 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.yamlComo 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.yamlComo 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]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.yamlEscriba las siguientes líneas en su print_group_facts.yaml archivo.
- Hosts: WebUna 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.yamlComo 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.comunicarseUna 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.yamlComo 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 = value2Por 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.yamlComo 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.comunicarsePuede 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: 8877Una 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.yamlAhora, escriba las siguientes líneas en el print_host_facts.yaml archivo.
- Hosts: base de datosUna 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.yamlComo 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.yamlEscriba las siguientes líneas en el Hecho_precedencia.yaml archivo.
- Anfitriones: todosUna 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.yamlComo 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 globalDespué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.