Hur man använder statiska och dynamiska inventarier i Ansible – Del 4

I denna del 4 av Ansible Series kommer vi att förklara hur man använder statiska och dynamiska inventarier för att definiera grupper av värddatorer i Ansible.

I Ansible definieras hanterade värddatorer eller servrar som styrs av Ansible-kontrollnoden i en värddatorinventeringsfil, vilket förklaras i. En värdförteckningsfil är en textfil som består av värdnamn eller IP-adresser för hanterade värddatorer eller fjärrservrar.

Hanterade värddatorer kan antingen listas som enskilda poster eller kategoriseras under ett gruppnamn som vi ska se senare. I Ansible finns det två typer av inventeringsfiler: Statiska och Dynamiska.

Låt oss ta en titt på var och en av dessa och se hur vi kan hantera dem. Vid det här laget antar vi att du redan har installerat Ansible på din kontrollnod och konfigurerat lösenordsfri SSH-anslutning till dina hanterade värdar.

Statisk värdinventeringsfil

I Ansible är en statisk inventeringsfil en vanlig textfil som innehåller en lista över hanterade värdar som deklarerats under en värddatorgrupp med hjälp av antingen värddatornamn eller IP-adresser.

Ett värddatorgruppnamn är inneslutet i fyrkantiga hakparenteser, t.ex. . De hanterade värdposterna listas senare under gruppnamnet, var och en på en egen rad. Som tidigare diskuterats listas värdarna med hjälp av antingen värdnamn eller IP-adresser.

Host A ip_address Host B ip_addressHost c ip_address

För illustrationens skull ska vi skapa en statisk inventeringsfil.

# mkdir test_lab && cd test_lab# vim hosts
Statisk inventeringsfil
173.82.115.165173.82.220.239webserversdatabase_servers

Spara filen och avsluta.

Som du kan se i inventeringsfilen ovan har vi skapat 2 värddygnsgrupper: webservers och database_servers. Dessutom har vi skapat ytterligare en grupp som heter datacenter som innehåller en grupp värdgrupper som betecknas med suffixet ': children' som du ser ovan.

Ansible tillåter också att grupper av värddatorer placeras under ett gruppnamn. I inventeringsfilen ovan har grupperna webservers och database_servers placerats under datacenter.

OBS: Det är inte obligatoriskt att placera hanterade värddatorer i en värdgrupp. Du kan helt enkelt lista dem med hjälp av deras värdnamn eller IP-adresser till exempel.

173.82.202.239172.82.115.165load_balancer.pnl.com

Låt oss nu använda några Ansible-kommandon för att referera till värdförteckningsfilen. Den grundläggande syntaxen för inventariehantering är som visas.

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

Till exempel,

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

List Ansible Hosts

Alternativt kan du använda jokertecknet * för att ersätta 'all' argumentet.

$ ansible * -i /root/test_labs/hosts --list-hosts
List Ansible Hosts Using Wildcards

För att lista värdar i en grupp anger du värdgruppen i stället för host-pattern.

$ ansible webservers -i /root/test_labs/hosts --list-hosts
List Ansible Hosts in Group

Dynamic Host Inventory File

I en konfiguration – särskilt i en molnkonfiguration som AWS där inventeringsfilen ständigt förändras när du lägger till eller avvecklar servrar, blir det en riktig utmaning att hålla koll på de värdar som definieras i inventeringsfilen. Det blir besvärligt att gå tillbaka till värdfilen och uppdatera listan över värdar med deras IP-adresser.

Det är här en dynamisk inventering kommer in i bilden. Så vad är en dynamisk inventering? En dynamisk inventering är ett skript som är skrivet i Python, PHP eller något annat programmeringsspråk. Det är praktiskt i molnmiljöer som AWS där IP-adresser ändras när en virtuell server stoppas och startas igen.

Ansible har redan utvecklat inventeringsskript för offentliga molnplattformar som Google Compute Engine, Amazon EC2 instance, OpenStack, RackSpace, cobbler, med flera.

Vad är fördelarna med en dynamisk inventering jämfört med en statisk inventering?
  • Dynamiska inventeringar gör ett perfekt jobb med att minska mänskliga fel eftersom informationen samlas in med hjälp av skript.
  • Minimal ansträngning krävs för att hantera inventeringar.

Du kan skriva en egen skräddarsydd dynamisk inventering i ett valfritt programmeringsspråk. Inventeringen bör returnera ett format i JSON när lämpliga alternativ skickas över.

Använda ett befintligt skript för dynamisk inventering

Ett skript som används för att skapa en dynamisk inventering måste göras körbart så att Ansible kan använda det.

För att hämta information om värdarna inne i ett skript för dynamisk inventering körs helt enkelt.

# ./script --list 

Som tidigare påpekats bör utdata vara i JSON i formatet nedan.

En ordbok som består av grupper (dvs.e webservers, database_Servers)
  • En lista över hanterade värdar per grupp
  • En ordbok med variabler
Meta dictionary
  • Hosts and hostvars
Exempel på utdata
Slutsats

I den här artikeln har vi demonstrerat hur man skapar både statiska och dynamiska inventeringar. Sammanfattningsvis är en statisk inventeringsfil en vanlig textfil som innehåller en lista över hanterade värdar eller fjärrnoder vars nummer och IP-adresser förblir ganska konstanta.

En dynamisk värddatorfil förändras däremot hela tiden när du lägger till nya värdar eller avvecklar gamla värdar. Värdarnas IP-adresser är också dynamiska när du stoppar och startar nya värdsystem. Vi hoppas att du fann den här handledningen informativ.