En este artículo, le mostraré cómo usar el formato de configuración JSON para crear los archivos de inventario 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.
Crear un directorio de proyectos:
En este artículo, usaré el código de Visual Studio para editar el archivo de configuración de Ansible, el archivo de inventario y los libros de jugadas. Puede utilizar cualquier editor o IDE que desee.
Antes de comenzar, creemos un directorio de proyecto para que podamos organizar nuestros archivos de proyecto.
He creado un nuevo directorio de proyectos json-Inventory / en mi directorio HOME como puede ver en la captura de pantalla a continuación.
Una vez que haya creado un nuevo directorio de proyecto, ábralo con su editor de texto o IDE favorito.
En Visual Studio Code, vaya a Archivo > Abrir carpeta … como se indica en la captura de pantalla siguiente.
Ahora, seleccione el directorio del proyecto json-Inventory / y haga clic en Aceptar .
El directorio del proyecto debe abrirse con Visual Studio Code.
Ahora, haga clic en Nuevo archivo y cree un nuevo archivo ansible.cfg .
Luego, escriba las siguientes líneas en el archivo ansible.cfg .
inventory = hosts.json
host_key_checking = False
Una vez que haya terminado, presione <Ctrl> + S para guardar el archivo ansible.cfg .
De la misma manera, cree un archivo hosts.json . Este es el archivo de inventario JSON. Déjelo en blanco por ahora. Trabajaremos en ello más tarde.
Ahora, haga clic en Nueva carpeta y cree un nuevo directorio de libros de jugadas como se muestra en la captura de pantalla a continuación.
Agregar hosts al archivo de inventario JSON:
En esta sección, le mostraré cómo agregar hosts a su archivo de inventario en formato JSON.
En el archivo de inventario hosts.json , agrega una sección de todos .
“all”: {
}
}
En todas las secciones, agrega una sección de host y agrega sus hosts.
“all”: {
“hosts”: {
“host1”: null,
“host2”: null
}
}
}
Por ejemplo, puede agregar los hosts vm1.nodekite.com y vm2.nodekite.com en el archivo de inventario hosts.json de la siguiente manera.
“all”: {
“hosts”: {
“vm1.nodekite.com”: null,
“vm2.nodekite.com”: null
}
}
}
Una vez que haya terminado, presione <Ctrl> + S para guardar el archivo hosts.json .
Puede verificar qué hosts están disponibles en su archivo de inventario con el siguiente comando:
Como puede ver, se enumeran los hosts que he agregado en mi archivo de inventario ( vm1.nodekite.com y vm2.nodekite.com ).
Agrupación de hosts en el archivo de inventario JSON:
En esta sección, le mostraré cómo agrupar hosts en su archivo de inventario JSON.
El grupo de host predeterminado en Ansible es todo . El grupo de todos tiene todos los hosts de cada grupo (incluidos los hosts de todos los grupos).
Agrega grupos de hosts en el niños sección de su archivo de inventario JSON.
“all”: {
…
“children”: {
“group1”: {
},
“group2”: {
}
}
}
}
Por ejemplo, para agregar los hosts vm3.nodekite.com y vm4.nodekite.com en el grupo web , y para agregar los hosts vm5.nodekite.com y vm6.nodekite.com en el grupo db , escriba las siguientes líneas en su archivo de inventario JSON.
“all”: {
“hosts”: {
“vm1.nodekite.com”: null,
“vm2.nodekite.com”: null
},
“children”: {
“web”: {
“hosts”: {
“vm3.nodekite.com”: null,
“vm4.nodekite.com”: null
}
},
“db”: {
“hosts”: {
“vm5.nodekite.com”: null,
“vm6.nodekite.com”: null
}
}
}
}
}
Una vez que haya terminado, presione <Ctrl> + S para guardar el archivo hosts.json .
Aquí, las líneas marcadas agregan los hosts vm3.nodekite.com y vm4.nodekite.com en el grupo web .
Las líneas marcadas agregan los hosts vm5.nodekite.com y vm6.nodekite.com en el grupo db .
Ahora, puede enumerar todos los hosts disponibles en su archivo de inventario JSON con el siguiente comando:
Como puede ver, se muestran todos los hosts de cada grupo ( web , db y todos ).
Para enumerar los hosts disponibles solo del grupo web , ejecute el siguiente comando:
Como puede ver, se muestran todos los hosts del grupo web .
De la misma manera, puede enumerar todos los hosts disponibles del grupo db con el siguiente comando:
Como puede ver, se muestran todos los hosts del grupo db .
Adición de hechos globales en el archivo de inventario JSON:
En Ansible, las variables también se denominan hechos. Los hechos globales o las variables globales son accesibles desde cada host de cada grupo en su archivo de inventario JSON. En esta sección, le mostraré cómo agregar hechos globales o variables globales en ansible.
Puede agregar hechos globales o variables globales en la sección vars dentro de todas las secciones de su archivo de inventario JSON de la siguiente manera:
“all”: {
“hosts”: {
…
},
“vars”: {
“variable1”: “value1”,
“variable2”: “value2”
},
“children”: {
“web”: {
…
},
“db”: {
…
}
}
}
}
Por ejemplo, puede agregar la raíz web y el índice de hechos / variables globales en la sección vars de su archivo de inventario JSON de la siguiente manera:
“all”: {
“hosts”: {
“vm1.nodekite.com”: null,
“vm2.nodekite.com”: null
},
“vars”: {
“webroot”: “/var/www/html”,
“index”: “index.php”
},
“children”: {
“web”: {
“hosts”: {
“vm3.nodekite.com”: null,
“vm4.nodekite.com”: null
}
},
“db”: {
“hosts”: {
“vm5.nodekite.com”: null,
“vm6.nodekite.com”: null
}
}
}
}
}
Una vez que haya terminado, presione <Ctrl> + S para guardar el archivo de inventario JSON.
Para verificar si los hechos / variables globales están funcionando, voy a crear un nuevo libro de jugadas print_vars1.yaml . El propósito de este manual es imprimir los hechos / variables usando el módulo de depuración de Ansible. También nos ayudará a comprender la precedencia de hechos / variables más adelante.
Por lo tanto, cree un nuevo libro de jugadas print_vars1.yaml en su directorio de libros de jugadas / y escriba las siguientes líneas en su archivo print_vars1.yaml .
user: ansible
tasks:
– name: Print webroot and index
debug:
msg: ‘WebRoot {{webroot}} and Index {{index}}‘
Una vez que haya terminado, presione <Ctrl> + S para guardar el archivo print_vars1.yaml .
Para verificar si los hechos / variables globales están funcionando, ejecute el libro de jugadas print_vars1.yaml de la siguiente manera:
El libro de jugadas debería ejecutarse correctamente.
Vuelve a la sección TASK . Como puede ver, la raíz web y los hechos / variables de índice se aplican a cada host en mi archivo de inventario JSON. Entonces, los hechos / variables globales están funcionando.
Adición de datos de grupo en el archivo de inventario JSON:
También puede agregar hechos / variables para un grupo de hosts específico. En esta sección, le mostraré cómo agregar datos / variables de grupo en su archivo de inventario JSON.
Voy a agregar los mismos datos de índice y raíz web en el grupo de alojamiento web de mi archivo de inventario JSON. El valor de estos hechos será diferente. Lo he hecho para que también puedas entender cómo funcionan los hechos / precedencia de variables en Ansible.
Para agregar la raíz web y el índice de hechos en el grupo de alojamiento web , agregue una sección vars en la sección web de su archivo de inventario JSON de la siguiente manera:
“all”: {
“hosts”: {
“vm1.nodekite.com”: null,
“vm2.nodekite.com”: null
},
“vars”: {
“webroot”: “/var/www/html”,
“index”: “index.php”
},
“children”: {
“web”: {
“hosts”: {
“vm3.nodekite.com”: null,
“vm4.nodekite.com”: null
},
“vars”: {
“webroot”: “/web/public_html”,
“index”: “index.html”
}
},
“db”: {
“hosts”: {
“vm5.nodekite.com”: null,
“vm6.nodekite.com”: null
}
}
}
}
}
Una vez que haya terminado, presione <Ctrl> + S para guardar el archivo de inventario JSON.
Para verificar los hechos, ejecute el libro de jugadas print_vars1.yaml de la siguiente manera:
Como puede ver, el webroot y el índice de datos del grupo están disponibles solo para los hosts vm3.nodekite.com y vm4.nodekite.com , los hosts del grupo web .
Además, observe que los hechos del grupo ( webroot e índice ) reemplazaron a los hechos globales ( webroot e índice ). Entonces, puede decir que los hechos grupales tienen mayor precedencia que los hechos globales.
Adición de datos del host en el archivo de inventario JSON:
También puede agregar hechos / variables específicos del host en su archivo de inventario JSON. En esta sección, le mostraré cómo agregar hechos / variables específicos del host en su archivo de inventario JSON.
Para hechos globales o grupales, hemos mantenido nulo el valor de los hosts .
Para agregar hechos del host, reemplace null con los hechos del host en el archivo de inventario JSON de la siguiente manera:
“host1”: {
“var1”: “value1”,
“var2”: “value2”,
},
“host2”: {
“var2”: “value3”,
“var3”: “value4”,
}
}
Por ejemplo, para agregar el hecho del host de índice al host vm5.nodekite.com , reemplace null con los hechos del host de la siguiente manera.
“all”: {
“hosts”: {
“vm1.nodekite.com”: null,
“vm2.nodekite.com”: null
},
“vars”: {
“webroot”: “/var/www/html”,
“index”: “index.php”
},
“children”: {
“web”: {
“hosts”: {
“vm3.nodekite.com”: null,
“vm4.nodekite.com”: null
},
“vars”: {
“webroot”: “/web/public_html”,
“index”: “index.html”
}
},
“db”: {
“hosts”: {
“vm5.nodekite.com”: {
“index”: “index.py”
},
“vm6.nodekite.com”: null
}
}
}
}
}
Una vez que haya terminado, presione <Ctrl> + S para guardar el archivo de inventario JSON.
Para verificar los datos disponibles, ejecute el libro de jugadas print_vars1.yaml de la siguiente manera:
Como puede ver, el hecho de índice está disponible solo para el host vm5.nodekite.com .
También observe que el hecho del anfitrión reemplazó al hecho global. Los hechos / variables del host tienen la mayor precedencia en Ansible. Por lo tanto, los hechos / variables del host reemplazarán los hechos / variables del grupo y los hechos / variables globales.
Conclusión:
En este artículo, le he mostrado cómo crear un archivo de inventario Ansible en formato JSON. Le he mostrado cómo agregar hosts, agregar grupos de hosts, agregar hechos globales, agregar hechos de grupo y agregar hechos de host en su archivo de inventario en formato JSON.