Maison >Tutoriel système >Linux >Introduction à l'inventaire dynamique Ansible

Introduction à l'inventaire dynamique Ansible

王林
王林original
2024-08-24 10:44:02926parcourir

Ansible Inventory se compose en fait de deux parties : l'inventaire statique et l'inventaire dynamique. L'inventaire statique fait référence aux hôtes et aux groupes spécifiés dans le fichier /etc/ansible/hosts. L'inventaire dynamique fait référence à l'obtention de la liste d'hôtes via des scripts externes et au respect des exigences de. ansible Le format renvoyé à la commande ansilbe. Cette partie combine généralement le système de gestion d'actifs CMDB, le système de surveillance zabbix, le système d'installation crobble, la plate-forme cloud computing, etc. pour obtenir des informations sur l'hôte. Étant donné que les ressources hôtes augmentent ou diminuent généralement de manière dynamique, ces systèmes se mettent généralement à jour de manière intelligente. Nous pouvons renvoyer la liste d'hôtes via l'API ou accéder à la requête de bibliothèque fournie par ces outils.

1. L'exemple le plus simple

Étant donné qu'Ansible prend en charge le format json lors de l'acceptation de scripts pour obtenir dynamiquement des informations sur l'hôte, je ne les prendrai pas ici d'autres systèmes et n'imprimerai pas un segment d'informations sur l'hôte au format json via un morceau de code :

#!/usr/bin/env python
# coding=utf-8
import json
host1ip = ['10.212.52.252','10.212.52.14']
host2ip = ['10.212.52.16']
group = 'test1'
group2 = 'test2'
hostdata = {group:{"hosts":host1ip},group2:{"hosts":host2ip}}
print json.dumps(hostdata,indent=4)

Remarque :

1. La partie hôte doit être sous forme de liste ;

2. Dans la ligne hostdata, la partie "hosts" peut être omise, mais si elle est utilisée, elle doit être "hosts" et ne peut pas être d'autres chaînes telles que "hostlist".

Après avoir omis

, vous pouvez l'écrire ainsi :

hostdata = {group:host1ip,group2:host2ip}
Le résultat de l'exécution directe de ce code est le suivant :

[root@361way.com ~]# python twogroup.py
{
"test1": {
"hosts": [
"10.212.52.252",
"10.212.52.14"
]
},
"test2": {
"hosts": [
"10.212.52.16"
]
}
}
Deux groupes d'hôtes sont définis ci-dessus. Le groupe test1 contient les hôtes 10.212.52.252 et 10.212.52.14, et le groupe test2 contient l'hôte 10.212.52.16. ansible peut être appelé via les méthodes suivantes :

[root@361way.com ~]# ansible -i twogroup.py test1 -m command -a 'uptime' -k
SSH password:
10.212.52.252 | success | rc=0 >>
23:01pm up 24 days 8:24, 2 users, load average: 0.21, 0.35, 0.39
10.212.52.14 | success | rc=0 >>
23:08pm up 332 days 5:23, 2 users, load average: 0.00, 0.01, 0.05
[root@361way.com ~]# ansible -i twogroup.py test2 -m command -a 'uptime' -k
SSH password:
10.212.52.16 | success | rc=0 >>
23:09pm up 332 days 6:00, 2 users, load average: 0.08, 0.06, 0.05
2. Exemple complexe
Dans l'exemple de fichier de configuration d'hôte statique, il y aura des variables de groupe (vars), y compris entre les groupes, comme indiqué ci-dessous :

Ansible Dynamic Inventory 介绍

Si vous souhaitez la partie ci-dessus, obtenez l'implémentation via le script. Le format json renvoyé après l'implémentation doit être comme indiqué ci-dessous :

Ansible Dynamic Inventory 介绍

Les formats de retour complexes comme ceux ci-dessus ne sont généralement pas utilisés dans les environnements ad hoc. La plupart d'entre eux sont utilisés dans ansible-playbook, car le fichier playbook implique parfois la transmission de paramètres vars.

3. Obtenez des exemples d'hôtes sur des plateformes tierces
Cela a été mentionné au début de cet article. Nous avons obtenu des exemples de plateformes telles que cobbler et cmdb. Puisque l'initiateur (auteur) d'ansible est également le créateur du logiciel cobbler, le document officiel nous donne un exemple de cobbler et un exemple d'obtention d'informations sur l'hôte auprès d'AWS. Comme suit :

Obtenir le code d'information de l'hôte sur Cobbler

Obtenir le code d'informations de l'hôte sur AWS Cloud

Concernant la façon d'obtenir des informations sur l'hôte d'AWS et de les mettre dans la base de données, j'ai déjà écrit un chapitre connexe. Pour plus de détails, vous pouvez également vous référer à mon article de blog précédent - AWS Host Asset Management (cet article est également implémenté en python pur. ).

Obtenez des informations sur l'hôte via l'API Zabbix. J'ai également écrit un résumé de Zabbix (8) API Zabbix. Si vous souhaitez obtenir des informations sur la liste d'hôtes via la plate-forme Zabbix, vous pouvez également vous y référer.

4.Autres

1. Le script appelé après le paramètre ansible -i n'est pas nécessairement un fichier py, ​​il peut aussi être le résultat de sortie d'autres scripts :

[root@361way.com yaml]# ansible -i group.sh test1 -m command -a 'uptime' -k
SSH password:
10.212.52.16 | success | rc=0 >>
00:18am up 332 days 7:10, 2 users, load average: 0.00, 0.01, 0.05
10.212.52.14 | success | rc=0 >>
00:17am up 332 days 6:32, 2 users, load average: 0.01, 0.03, 0.05
10.212.52.252 | success | rc=0 >>
00:11am up 24 days 9:33, 2 users, load average: 0.49, 0.42, 0.41
[root@localhost yaml]# cat group.sh
#!/bin/bash
groups='''
{
"test1": {
"hosts": [
"10.212.52.252",
"10.212.52.14",
"10.212.52.16"
]
}
}
'''
echo $groups

2. Le script spécifié par le paramètre -i doit avoir l'autorisation d'exécutable, sinon une erreur sera signalée, comme suit :

[root@361way.com yaml]# ansible -i hostjson.py AA -a 'uptime'
ERROR: The file hostjson.py looks like it should be an executable inventory script, but is not 
marked executable. Perhaps you want to correct this with `chmod +x hostjson.py`?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn