playbook - ¿Hay alguna opción para listar grupos en Ansible?
inventory parameter ansible (5)
Hasta donde sé, ansible tiene una opción llamada --list-hosts
para listar hosts. ¿Hay alguna opción para listar grupos anfitriones? ¿O cualquier otra forma de pasar?
Nota: - Para Nuevos Usuarios Ansibles
Ansible tiene algunas variables internas especiales que también se conocen como Variables Mágicas.
Desde este enlace obtendrá una lista completa de variables mágicas Variables mágicas
Existe una variable mágica llamada "grupos" que contiene la información del grupo de inventario. podemos acceder al valor de cualquier variable (definida por el usuario e interna) mediante un módulo ansible llamado depuración .
Estoy usando archivo de inventario separado
$
$ ansible -i inventory.ini all -m debug -a "var=groups"
$
centos-client.ansible.lab | SUCCESS => {
"groups": {
"all": [
"centos-client.ansible.lab",
"ubuntu-client.ansible.lab"
],
"centos": [
"centos-client.ansible.lab"
],
"ubuntu": [
"ubuntu-client.ansible.lab"
],
"ungrouped": []
}
}
ubuntu-client.ansible.lab | SUCCESS => {
"groups": {
"all": [
"centos-client.ansible.lab",
"ubuntu-client.ansible.lab"
],
"centos": [
"centos-client.ansible.lab"
],
"ubuntu": [
"ubuntu-client.ansible.lab"
],
"ungrouped": []
}
}
Método # 1 - Usando Ansible
Si solo desea una lista de los grupos dentro de un archivo de inventario determinado, puede usar las variables mágicas como se menciona en un par de las otras respuestas.
En este caso, puede usar la variable magic de los groups
y, específicamente, simplemente mostrar las keys()
en este hash (claves + valores). Las claves son todos los nombres de los grupos.
NOTA: Al dirigirnos al localhost
, localhost
este comando a ejecutarse en un solo host cuando se procesa el archivo de inventario.
$ ansible -i inventory/rhvh localhost -m debug -a ''var=groups.keys()
localhost | SUCCESS => {
"groups.keys()": "dict_keys([''all'', ''ungrouped'', ''dc1-rhvh'', ''dc2-rhvh'', ''dc3-rhvh'', ''dc4-rhvh'', ''dc5-rhvh'', ''rhvh'', ''dc1'', ''dc2'', ''dc3'', ''dc4'', ''dc5'', ''production''])"
}
Método # 2 - usando grep
y sed
Por supuesto, también puede simplemente grep
el contenido de su archivo de inventario:
$ grep -E ''^/['' inventory/rhvh
[dc1-rhvh]
[dc2-rhvh]
[dc3-rhvh]
[dc4-rhvh]
[dc5-rhvh]
[rhvh:children]
[dc1:children]
[dc2:children]
[dc3:children]
[dc4:children]
[dc5:children]
[production:children]
Sin embargo, estás en el anzuelo por sacar provecho de la salida del segundo método o puedes usar sed
para hacerlo:
$ grep -E ''^/['' inventory/rhvh | sed ''s/:children//''
[dc1-rhvh]
[dc2-rhvh]
[dc3-rhvh]
[dc4-rhvh]
[dc5-rhvh]
[rhvh]
[dc1]
[dc2]
[dc3]
[dc4]
[dc5]
¿Algo como eso? cat ~/inventory/* | grep "/[.*/]"
Si no está seguro de si el host estará realmente en el inventario, puede usar:
ansible -i hosts/ localhost -m debug -a ''var=groups''
-i
donde se guardan tus archivos de inventario
-m
habilitar el módulo de depuración.
-a
módulo de argumentos.
Emitirá el grupo / hosts solo una vez y no para cada host en su inventario.
Lo mismo vale para obtener la lista de grupos en el inventario:
ansible -i hosts/ localhost -m debug -a ''var=groups.keys()''
Simplemente puede inspeccionar la variable de groups
usando el módulo de debug
:
ansible localhost -m debug -a ''var=groups.keys()''
Lo anterior es usar groups.keys()
para obtener solo la lista de grupos. También puede eliminar la parte .keys()
para ver la pertenencia a grupos:
ansible localhost -m debug -a ''var=groups''