Cómo utilizar datos personalizados de 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) Datos globales: se puede acceder a estos datos desde todos los hosts de su archivo de inventario.
2) Datos del grupo: estos datos solo son accesibles desde un conjunto específico de hosts o un grupo de hosts.
3) Datos del anfitrión: estos datos solo son accesibles desde un anfitrión en particular.

En este artículo, le mostraré cómo trabajar con datos personalizados de Ansible. Entonces empecemos.

Requisitos previos:

Si desea probar los ejemplos de este artículo,

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

Hay muchos artículos sobre dedicados a la instalación de Ansible y la configuración de hosts para la automatización de Ansible. Puede consultarlos si es necesario.

Configuración de un directorio de proyectos:

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

Para crear un directorio de proyectos custom-hechos / en su directorio INICIO , ejecute el siguiente comando:

$ mkdir -pv custom-facts/{playbooks,host_vars,group_vars}

Ahora, navegue hasta el directorio custom-hechos / de la siguiente manera:

$ cd custom-facts/

Cree un archivo de configuración Ansible ansible.cfg en el directorio de su proyecto de la siguiente manera:

$ nano ansible.cfg

Escriba en las siguientes líneas su archivo ansible.cfg .

[defaults]
inventory          = hosts
host_key_checking  = False

Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo de configuración ansible.cfg .

Ahora, cree un archivo de inventario Ansible anfitriones en el directorio del proyecto de la siguiente manera:

$ nano hosts

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

vm1.nodekite.com
vm2.nodekite.com
[web]
vm3.nodekite.com
vm4.nodekite.com
[database]
vm[5:6].nodekite.com

Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo de inventario de hosts .

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

$ ansible all –list-hosts

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

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

$ ansible web –list-hosts

Como puede ver, tengo dos hosts ( vm3.nodekite.com y vm4.nodekite.com ) en el grupo web de mi archivo de inventario.

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

$ ansible database –list-hosts

Como puede ver, tengo dos hosts ( vm5.nodekite.com y vm6.nodekite.com ) en el grupo de base de datos de mi archivo de inventario.

Trabajar con Ansible Global Facts:

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

Primero, abra el archivo de inventario del host con el siguiente comando:

$ nano hosts

Ahora, agregue las líneas marcadas en el archivo de inventario de su anfitrión . Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo.

Agrega hechos globales en la sección all: vars . Aquí, he agregado el hecho global web_url .

Ahora, cree un nuevo playbook print_global_fact.yaml en el directorio playbooks / de la siguiente manera:

$ nano playbooks/print_global_fact.yaml

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

– hosts: all
  user
: ansible
  tasks
:
    – name
: Print the value of global fact ‘web_url’
      debug
:
        msg
: ‘Web URL: {{web_url}}

El propósito de este manual es imprimir el hecho global web_url .

Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo print_global_fact.yaml .

Ahora, ejecute el libro de jugadas print_global_fact.yaml de la siguiente manera:

$ ansible-playbook playbooks/print_global_fact.yaml

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

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

Primero, eliminemos los datos globales del archivo de inventario del host .

$ nano hosts

Ahora, elimine las líneas marcadas del archivo de inventario y presione &ltCtrl&gt + X, seguido de Y e &ltEnter&gt para guardar el archivo de inventario.

A continuación, cree un nuevo archivo de todos en el group_vars / directorio de la siguiente manera:

$ nano group_vars/all

Para agregar el hecho global web_url , escriba la siguiente línea en el archivo group_vars / all .

web_url: https://www.hazlolinux.com

Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo group_vars / all .

Para comprobar si puede acceder al hecho global web_url , ejecute el libro de jugadas print_global_fact.yaml nuevamente de la siguiente manera:

$ ansible-playbook playbooks/print_global_fact.yaml

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

Trabajando con Ansible Group Facts:

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

Primero, abra el archivo de inventario del host con el siguiente comando:

$ nano hosts

Si tiene un grupo de hosts group1 , agregue datos / variables de grupo para ese grupo de hosts en una sección group1: vars de su archivo de inventario.

[group1]

[group1:vars]
variable1=value1
variable2=value2

Por ejemplo, para agregar los hechos / variables del grupo nombre_de_dominio y backends de base de datos para el grupo de host web , puede escribir las líneas marcadas en su archivo de inventario.

Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo de inventario.

Para imprimir y probar si podemos acceder a los datos del grupo, cree un nuevo libro de jugadas print_group_facts.yaml en el directorio playbooks / de la siguiente manera:

$ nano playbooks/print_group_facts.yaml

 

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

– hosts: web
  user
: ansible
  tasks
:
    – name
: Print group facts
      debug
:
        msg
: ‘Domain Name: {{domain_name}} Database Backend: {{database_backend}}

Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo print_group_facts.yaml .

Ahora, ejecute el libro de jugadas print_group_facts.yaml de la siguiente manera:

$ ansible-playbook playbooks/print_group_facts.yaml

Como puede ver, los hosts del grupo web pueden acceder a los hechos / variables del grupo domain_name y database_backend .

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

Primero, abra el archivo de inventario del host de la siguiente manera:

$ nano facts

Elimine las líneas marcadas del archivo de inventario del anfitrión . Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo de inventario de hosts .

Como estamos agregando variables de grupo para el grupo de host web , cree un nuevo archivo web (igual que el nombre del grupo) en el directorio group_vars / de la siguiente manera:

$ nano group_vars/web

Para agregar los hechos del grupo domain_name y database_backend para el grupo de host web , agregue las siguientes líneas en el archivo group_vars / web .

domain_name: web.hazlolinux.com
database_backend
: pgsql

Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo group_vars / web .

Para comprobar si los hosts del grupo web pueden acceder a los datos del grupo, ejecute el manual print_group_facts.yaml de la siguiente manera:

$ ansible-playbook playbooks/print_group_facts.yaml

Como puede ver, los hosts del grupo web pueden acceder a los hechos / variables del grupo domain_name y database_backend .

Trabajar con Ansible Host Facts:

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

Primero, abra el archivo de inventario del host con el siguiente comando:

$ nano hosts

Puede agregar datos / 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.domain1.com      variable1=value1       variable2=value2
192.168.22.2         variable1=value3       variable2=value4

Por ejemplo, puede agregar hechos anfitrionas / variables de nombre_de_dominio y database_backend para los anfitriones vm3.nodekite.com y vm4.nodekite.com, según se indica en la siguiente imagen.

Observe que el valor de los hechos / variables domain_name y database_backend son diferentes para cada host.

Una vez que haya terminado de agregar los hechos / variables del host, presione &ltCtrl&gt + X, seguido de Y e &ltEnter&gt para guardar el archivo de inventario del host .

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

Ejecute el libro de jugadas print_group_facts.yaml 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 se marca en la captura de pantalla a continuación, no puede agregar hechos / variables de host como ese.

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

Para agregar datos / variables del host para el host vm5.nodekite.com , cree un nuevo archivo vm5.nodekite.com (igual que el nombre DNS del host) en el directorio host_vars / de la siguiente manera:

$ nano host_vars/vm5.nodekite.com

Puede agregar el host hechos / variables de db_port y nombre_base_de_datos para el anfitrión vm5.nodekite.com con las siguientes líneas.

db_port: 3306
db_name: demo1

Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo vm5.nodekite.com .

De la misma manera, para agregar hechos / variables del host para el host vm6.nodekite.com , cree un nuevo archivo vm6.nodekite.com en el directorio host_vars / de la siguiente manera:

$ nano host_vars/vm6.nodekite.com

Puede agregar el host hechos / variables de db_port y nombre_base_de_datos para el anfitrión vm6.nodekite.com con las siguientes líneas.

db_port: 8877
db_name
: app1

Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo vm6.nodekite.com .

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

$ nano playbooks/print_host_facts.yaml

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

– hosts: database
  user
: ansible
  tasks
:
    – name
: Print host facts
      debug
:
        msg
: ‘Database Name: {{db_name}} Database Port: {{db_port}}

Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo print_host_facts.yaml .

Para comprobar si el host vm5.nodekite.com y vm6.nodekite.com pueden acceder a los hechos / variables del host, ejecute el libro de jugadas print_host_facts.yaml de la siguiente manera:

$ ansible-playbook playbooks/print_host_facts.yaml

Como se puede ver, los anfitriones vm5.nodekite.com y vm6.nodekite.com pueden acceder a los nombre_de_base_de_datos y db_port anfitrionas hechos / variables.

Poniéndolo todo junto: Precedencia de los hechos de Ansible

En esta sección, voy a hablar sobre la precedencia de hechos / variables de Ansible. Entonces empecemos.

Antes de comenzar, limpiemos el archivo de inventario.

Abra el archivo de inventario del host con el siguiente comando:

$ nano hosts

Elimine la sección marcada del archivo de inventario.

Así es como debería verse su archivo de inventario en este momento.

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

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

Por último, agregue fact_scope y los hechos / variables del host del puerto para los hosts vm3.nodekite.com y vm4.nodekite.com , como se indica en la captura de pantalla siguiente.

Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo de inventario.

Para imprimir el valor de los hechos / variables globales, de grupo y de host, cree un nuevo manual de estrategias fact_precendence.yaml en el directorio de libros de jugadas / de la siguiente manera:

$ nano playbooks/fact_precedence.yaml

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

– hosts: all
user
: ansible
tasks
:
– name
: Print all facts
debug
:
msg
: ‘Fact Scope: {{fact_scope}}    Port: {{port}}

Una vez que haya terminado, presione &ltCtrl&gt + X seguido de Y e &ltEnter&gt para guardar el archivo fact_precedence.yaml .

Para imprimir los hechos / variables globales, de grupo y del host, ejecute el manual de estrategias fact_precedence.yaml de la siguiente manera:

$ ansible-playbook playbooks/fact_precedence.yaml

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

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

La precedencia de hechos / variables de Ansible es la siguiente:

Host fact &gt Group fact &gt Global fact

Conclusión:

Después de leer este artículo, debería poder trabajar cómodamente con hechos / variables globales, grupales y de host de Ansible. Recuerde la precedencia de hechos personalizados de Ansible. Le ayudará a depurar sus libros de jugadas de Ansible más fácilmente.

Leave a Comment

Your email address will not be published. Required fields are marked *

Hazlo Linux