O schemă de inventar care stabilește o sursă de adevăr ar fi interogarea acestor grupuri dintr-un sistem. Ceva mai sofisticat decât șirurile din numele DNS.
De exemplu, sistemul de baze de date de inventar netbox are un rol de dispozitiv care s-ar putea potrivi. Nu pentru a alege netbox, dar are un plugin de inventar Ansible și un model de bază de date deschisă, așa că este ușor de vorbit.
Cu toate acestea, poate că o bază de date externă frumoasă nu există încă. O astfel de schemă obișnuită de denumire poate fi generată. Cu cel mai recursiv dintre pluginurile de inventar Ansible, generator:
# inventar.yml
plugin: generator
gazde:
nume: „{{ aplicație }}{{ număr }}.{{ mediu }}.example.com”
părinţi:
- nume: „{{ aplicație }}_{{ mediu }}”
părinţi:
- nume: „{{ aplicație }}”
vars:
aplicație: „{{ aplicație }}”
- nume: „{{ mediu }}”
vars:
mediu: „{{ mediu }}”
straturi:
aplicatie:
- aplicație
- api
mediu inconjurator:
- dev
- qa
- uat
- prod
număr:
- "01"
- "02"
- "05"
Numele straturilor sunt arbitrare.Având în vedere rădăcina „gazde” și notația „părinți”, numele cu indentație mai profundă sunt grupuri care conțin numele exterioare.
ansible-inventory -i inventory.yml --list
va imprima gazde în documentul JSON de inventar al Ansible. Ieșire parțială:
{
„_meta”: {
„hostvars”: {
„app05.qa.example.com”: {
"application": "aplicație",
„mediu”: „qa”
}
}
},
„app_qa”: {
„gazde”: [
„app01.qa.example.com”,
„app02.qa.example.com”,
„app05.qa.example.com”
]
},
„aplicație”: {
„copii”: [
"app_dev",
"app_prod",
"app_qa",
"app_uat"
]
},
"qa": {
„copii”: [
"api_qa",
„app_qa”
]
},
}
Și continuăm pentru alte combinații.
Observați că a făcut:
- grupuri de „aplicații”.
- grupuri de „mediu”.
- grupuri de combinații „mediu de aplicație”.
- nume de gazdă conform modelului de nume DNS
- vars care conțin „aplicația” și „mediul” pentru fiecare gazdă
Limitările acestui plugin includ:
Făcând mereu produsul cartezian al combinațiilor de straturi. Nu pot avea mai mult sau mai puțin dintr-un anumit grup și nici nu pot începe schemele de numerotare pe valori diferite.
Neavând intervale de gazdă compacte. Nici sintaxa [01:25], nici funcția range() nu funcționează. Luați în considerare să solicitați acest lucru prin depunerea unei probleme. Ca o soluție, zeci de numere din fișierul de configurare sunt funcționale.