Zoeken op website

Statische en dynamische inventarissen gebruiken in Ansible - Deel 4


In dit Deel 4 van de Ansible-serie leggen we uit hoe je statische en dynamische inventaris kunt gebruiken om groepen hosts in Ansible te definiëren.

In een Ansible worden beheerde hosts of servers die worden bestuurd door het Ansible-controleknooppunt gedefinieerd in een hostinventarisbestand, zoals uitgelegd in. Een host inventarisbestand is een tekstbestand dat bestaat uit hostnamen of IP-adressen van beheerde hosts of externe servers.

Beheerde hosts kunnen worden vermeld als individuele vermeldingen of worden gecategoriseerd onder een groepsnaam, zoals we later zullen zien. In Ansible zijn er twee typen inventarisbestanden: Statisch en Dynamisch.

Laten we deze allemaal eens bekijken en zien hoe we ze kunnen beheren. We gaan er inmiddels van uit dat u Ansible al op uw controleknooppunt hebt geïnstalleerd en een wachtwoordloze SSH-verbinding met uw beheerde hosts hebt geconfigureerd.

Statisch hostinventarisbestand

In Ansible is een statisch inventarisbestand een tekstbestand dat een lijst met beheerde hosts bevat die zijn gedeclareerd onder een hostgroep met behulp van hostnamen of IP-adressen.

De naam van een hostgroep staat tussen vierkante haakjes, d.w.z. [groepsnaam]. De beheerde hostvermeldingen worden later onder de groepsnaam vermeld, elk op een eigen regel. Zoals eerder besproken, worden de hosts weergegeven met behulp van hostnamen of IP-adressen.

[group name]

Host A ip_address 
Host B ip_address
Host c ip_address

Ter illustratie zullen we een statisch inventarisbestand aanmaken.

mkdir test_lab && cd test_lab
vim hosts
[webservers]
173.82.115.165

[database_servers]
173.82.220.239

[datacenter:children]
webservers
database_servers

Sla het bestand op en sluit af.

Zoals u kunt zien in het inventarisbestand hierboven, hebben we twee hostgroepen gemaakt: webservers en database_servers. We hebben ook een extra groep gemaakt met de naam datacenter, die een groep hostgroepen bevat, aangegeven met het achtervoegsel ':children', zoals hierboven te zien is.

Met Ansible kunnen ook groepen hosts onder een groepsnaam worden geplaatst. In het bovenstaande inventarisbestand zijn de groepen webservers en database_servers onder het datacenter geplaatst.

OPMERKING: het is niet verplicht om beheerde hosts in een hostgroep te plaatsen. U kunt ze eenvoudigweg vermelden met behulp van bijvoorbeeld hun hostnaam of IP-adres.

173.82.202.239
172.82.115.165
load_balancer.pnl.com

Laten we nu een paar Ansible-opdrachten gebruiken om te verwijzen naar het hostinventarisbestand. De basissyntaxis voor voorraadbeheer is zoals weergegeven.

ansible {host-pattern} -i /path/of/inventory/file --list-hosts

Bijvoorbeeld,

ansible all -i /root/test_labs/hosts --list-hosts

Als alternatief kunt u het jokerteken * gebruiken om het argument ‘all’ te vervangen.

ansible * -i /root/test_labs/hosts --list-hosts

Om hosts in een groep weer te geven, geeft u de hostgroep op in de plaats van het host-patroon.

ansible webservers -i /root/test_labs/hosts --list-hosts

Dynamisch hostinventarisbestand

In een configuratie – vooral een cloudconfiguratie zoals AWS waarbij het inventarisbestand voortdurend verandert terwijl u servers toevoegt of buiten gebruik stelt, wordt het in de gaten houden van de hosts die in het inventarisbestand zijn gedefinieerd een echte uitdaging. Het wordt lastig om terug te gaan naar het hostbestand en de lijst met hosts bij te werken met hun IP-adressen.

En dit is waar een dynamische inventaris in het spel komt. Dus wat is een dynamische inventaris? Een dynamische inventaris is een script geschreven in Python, PHP of een andere programmeertaal. Het is handig in cloudomgevingen zoals AWS, waar IP-adressen veranderen zodra een virtuele server wordt gestopt en opnieuw wordt gestart.

Ansible heeft al inventarisatiescripts ontwikkeld voor openbare cloudplatforms zoals onder meer Google Compute Engine, Amazon EC2 instance, OpenStack, RackSpace en cobbler.

Wat zijn de voordelen van een dynamische inventaris ten opzichte van een statische inventaris?
  • Dynamische inventarisaties zijn perfect in het verminderen van menselijke fouten, aangezien informatie wordt verzameld met behulp van scripts.
  • Er zijn minimale inspanningen nodig om de voorraden te beheren.

U kunt uw eigen aangepaste dynamische inventaris schrijven in een programmeertaal naar keuze. De inventaris moet een indeling in JSON retourneren wanneer de juiste opties worden doorgegeven.

Gebruik een bestaand dynamisch inventarisscript

Een script dat wordt gebruikt om een dynamische inventarisatie te maken, moet uitvoerbaar worden gemaakt, zodat Ansible er gebruik van kan maken.

Om informatie over de hosts binnen een dynamisch inventarisatiescript op te halen, voert u eenvoudigweg het programma uit.

./script --list 

Zoals eerder aangegeven, zou de uitvoer in JSON moeten zijn in het onderstaande formaat.

Een woordenboek bestaande uit groepen (d.w.z. webservers, database_Servers)
  • Een lijst met beheerde hosts per groep
  • Een woordenboek met variabelen
Metawoordenboek
  • Gastheren en hostvars
Voorbeelduitvoer
{
  "webservers": {
    "hosts": [
      "webserver1.example.com",
      "webserver2.example.com"
    ],
    "vars": {}
  },
  "database_servers": {
    "hosts": [
      "mysql_db1",
      "mysql_db2"
    ],
    "vars": {}
  },
  "_meta": {
    "hostvars": {
      "mysql_db2": {},
      "webserver2.example.com": {},
      "webserver1.example.com": {}, 
      "mysql_db1": {}
    }
  }
}
Conclusie

In dit artikel hebben we laten zien hoe u zowel statische als dynamische inventarissen kunt maken. Samenvattend is een statisch inventarisbestand een tekstbestand met een lijst van beheerde hosts of externe knooppunten waarvan de nummers en IP-adressen redelijk constant blijven.

Aan de andere kant blijft een dynamisch hostbestand veranderen naarmate u nieuwe hosts toevoegt of oude buiten gebruik stelt. De IP-adressen van hosts zijn ook dynamisch als u nieuwe hostsystemen stopt en start. We hopen dat je deze tutorial informatief vond.