Comment puis-je obtenir une liste de serveurs à partir d'une Ansible fichier d'inventaire?
Est-il un moyen d'utiliser l'Ansible l'API Python pour obtenir une liste de serveurs à partir d'un fichier d'inventaire /la combinaison de groupe?
Par exemple, notre inventaire fichiers sont divisés par type de service:
[dev:children]
dev_a
dev_b
[dev_a]
my.host.int.abc.com
[dev_b]
my.host.int.xyz.com
[prod:children]
prod_a
prod_b
[prod_a]
my.host.abc.com
[prod_b]
my.host.xyz.com
Puis-je utiliser ansible.inventory
d'une certaine façon à passer dans un inventaire spécifique de fichier, et le groupe je veux agir sur, et il retourne la liste des hôtes de ce match?
OriginalL'auteur MrDuk | 2016-06-03
Vous devez vous connecter pour publier un commentaire.
J'ai eu du mal avec ce même pendant un certain temps, mais a trouvé une solution par le biais de procès & erreur.
L'un des principaux avantages de l'API est que vous pouvez tirer des variables et des métadonnées, et pas seulement les noms d'hôtes.
À partir de L'API Python - Ansible Documentation:
Cela vous donne un Inventaire de l'instance, qui a des méthodes et des propriétés pour fournir des groupes et des hôtes.
À se développer (et à fournir des exemples de groupes et de classes d'Hôte), voici un morceau de code que j'ai écrit qui sérialise l'inventaire, comme une liste de groupes, chaque groupe ayant un "hôte" de l'attribut est une liste de chaque hôte attributs.
J'ai couru ce à l'encontre de mon laboratoire de quatre F5 BIG-IP, et c'est le résultat (paré):
Autre chose à prendre en considération - nous n'avons pas de document ou de "soutien" des appelants externes à l'Ansible API Python. Il est là pour soutenir nos outils en ligne de commande. Évidemment, il est open source et vous êtes libre de faire ce que vous voulez, mais attention: nous ne faisons pas d'efforts pour éviter de casser les modifications, même mineures/versions de patch.
OriginalL'auteur Theo
Faire le même truc avant, mais au lieu de
all
, passer le nom du groupe que vous souhaitez ajouter à la liste:ansible (group name here) -i (inventory file here) --list-hosts
Ruwd la réponse ci-dessous à propos de l'utilisation ansible-l'inventaire est le meilleur moyen pour ce faire sur les versions modernes de la Ansible.
OriginalL'auteur nitzmahone
Pour moi à la suite travaillé
inventaire.get_groups_dict() retourne un dictionnaire que vous pouvez utiliser pour obtenir des hôtes à l'aide de la group_name comme la clé comme indiqué dans le code.
Vous devrez installer ansible, vous pouvez le faire par le pip comme suit
OriginalL'auteur smishra
J'ai eu un problème similaire et je pense que nitzmahone de l'approche de la non-utilisation non pris en charge les appels à l'API Python. Voici une solution de travail, en s'appuyant sur les bien au format JSON sortie de
ansible-inventory
de la CLI:Un exemple de fichier de stock,
inventory/qa.ini
:Un Python 2.7 fonction pour extraire des informations (facilement extensible pour hostvars et cetera):
La preuve que cela fonctionne (aussi avec les enfants et petits-enfants des groupes):
ansible-inventory
a été créé pour résumé tout l'inventaire de bits par Tour/AWX, et il est absolument la bonne façon de le faire dans les versions modernes de la Ansible. Cheers!OriginalL'auteur mblomdahl