Ansible

Manipuleer Ansible-gegevens met Jinja-filters

Manipuleer Ansible-gegevens met Jinja-filters

In sommige gevallen, wanneer u Ansible gebruikt om verschillende taken te automatiseren, moet u mogelijk gegevens transformeren en manipuleren. In Ansible kunt u een set ingebouwde filters gebruiken of aangepaste filters maken om gegevens te manipuleren, verwerken en converteren. Ansible gebruikt jinja2-sjabloonfilters op de achtergrond zodat gebruikers filters kunnen maken voor specifieke gegevens.

Het is belangrijk op te merken dat filtersjablonen worden uitgevoerd op de Ansible-controller en niet op de opgegeven externe hosts. Dit helpt de hoeveelheid gegevens die na lokale verwerking naar de externe host wordt overgedragen, te verminderen. Als je niet bekend bent met jinja-sjablonen, is Jinja een eenvoudige, intuïtieve, snelle en veilige sjabloontaal voor de programmeertaal Python die is ontwikkeld na het populaire Python-framework Django-sjablonen.

We zullen niet ingaan op hoe jinja-sjablonen werken, hoewel het een bijkomend voordeel kan zijn om te begrijpen hoe het werkt met sjablonen.

Bekijk de onderstaande bron voor meer informatie over Jinja.

https://linkfy.naar/jinjaDocs

Hoe Ansible-filters werken

Zoals vermeld, bouwt de Ansible-filterengine voort op het Jinja-sjabloonmodel. Hierdoor kunnen gebruikers deze sjablonen gebruiken om gegevens in te voeren, te verwerken en een uitvoer te leveren op basis van de gedefinieerde filters.

Nadat de gegevens zijn getransformeerd en gefilterd met behulp van de gedefinieerde sjabloon, kunt u deze gebruiken om andere taken in Ansible uit te voeren. Op de volgende website vind je meer informatie over filters in Ansible:

https://linkfy.naar/AnsibleFilters

Ansible heeft veel filters die allemaal erg handig zijn en toepasbaar zijn op veel verschillende scenario's. Zodra u de filteruitvoer hebt, kunt u deze gebruiken om andere taken uit te voeren, zoals foutopsporing.

De algemene syntaxis voor het filteren van gegevens is als volgt:

|

Ansible-filters gebruiken

We zullen nu kijken naar voorbeelden van Ansible-filters die we kunnen gebruiken om verschillende taken uit te voeren.

OPMERKING: Zoals eerder vermeld, heeft Ansible veel filters, dus we kunnen ze niet allemaal in dit artikel behandelen. In plaats daarvan probeert deze tutorial je de basis te geven van het gebruik van verschillende Ansible-filters.

Voorbeeld 1: Ansible Format-gegevensfilters

De gegevensfilters in Ansible-indeling nemen een uitvoergegevensstructuur in een sjabloon en gebruiken het opgegeven filter om deze weer te geven in de indeling die in het filter wordt aangeroepen.

Hieronder vindt u een voorbeeldfilter om te converteren naar JSON en YAML:

variabele | to_json
variabele | naar_yaml

Beschouw bijvoorbeeld het volgende draaiboek:

- hosts: alle taken:
- shell: kat /tmp/all.json
registreren: resultaat
- debuggen:
bericht: "resultaat.stevig | to_nice_yaml"

Als u het bovenstaande playbook uitvoert, wordt een uitvoer geproduceerd voor de JSON-gegevens die zijn geconverteerd naar YAML. Het volgende is een voorbeelduitvoer:

U kunt ook andere filters opgeven, zoals to_nice_yaml, om de uitvoer in een door mensen leesbaar formaat te verkrijgen.

variabele | to_nice_json
variabele | to_nice_yaml

Met behulp van de opmaakgegevensfilters kunt u gegevens in verschillende indelingen omzetten en voor verschillende taken gebruiken.

U kunt bijvoorbeeld YAML-tekenreeksen voor meerdere documenten doorgeven, zoals in het onderstaande playbook:

- hosts: alle taken:
- shell: kat /tmp/all.json
registreren: resultaat
- debuggen:
bericht: "resultaat.stevig | naar_yaml | lijst"

Voorbeeld 2: Ansible standaardfilter

Het Ansible-standaardfilter helpt bij het standaardwaarden voor ongedefinieerde variabelen. De standaard Ansible-configuratie mislukt niet-gedefinieerde variabelen. Als u bijvoorbeeld een niet-gedefinieerde variabele heeft, kunt u Ansible vertellen om standaard een waarde in te stellen in plaats van een fout te veroorzaken.

De algemene syntaxis voor het standaardfilter is als volgt:

| standaardwaarde)

Bijvoorbeeld:

- hosts: alle
var:
taken:
set_fact:
undef_var: "0_var | standaard(5)"

Het bovenstaande playbook stelt de waarde van de variabele '0_var' in op 5 als deze niet expliciet is gedefinieerd, in plaats van een fout te genereren.

Om een ​​variabele te definiëren, kunt u het verplichte filter gebruiken. Het enige dat u hoeft te doen, is naar het bovenstaande voorbeeld te verwijzen en de standaardwaarde te vervangen door de verplichte:

0_var | verplicht

Voorbeeld 3: Ansible-foutopsporingsfilters

Bij het debuggen kun je het filter type_debug gebruiken om informatie te krijgen over het type variabele. Het type variabele is in Python, omdat de engine op Python is gebaseerd. De algemene syntaxis voor het filter is als volgt:

variabele | type_debug

Voorbeeld 4: Wiskundige filters

Met de wiskundige filters van Ansible kunt u wiskundige zoekopdrachten uitvoeren. Deze filters omvatten het volgende:

  1. Logaritme filter - variabele | log - specificeert de basis van de logaritme tussen haakjes als variabele | logboek (2)
  2. Vermogensfilter - variabele | pow(3) - retourneert de variabele verheven tot de opgegeven macht
  3. Absoluut filter - variabele | abs - geeft de absolute waarde terug voor de doorgegeven variabele
  4. Wortelfilter - variabele | root - dit geeft de vierkantswortel van de variabele terug variable. Om de root expliciet te specificeren, geeft u de waarde tussen haakjes door; bijvoorbeeld derdemachtswortel variabele | wortel(3)

Deze wiskundige filters kunnen erg handig zijn, vooral bij het omgaan met grote hoeveelheden gegevens en directe wiskundige bewerkingen.

Voorbeeld 5: Hashfilters

Met de Ansible hash-filters kunt u de hash van een string of doorgegeven gegevens verkrijgen. In de meeste gevallen heb je deze filters niet nodig, maar ze zijn beschikbaar om te gebruiken als dat nodig is. Deze filters omvatten het volgende:

  1. Sha1 - var | hash(“sha1”)
  2. Sha256/sha512 - var | wachtwoord_hash(“sha256/512”)
  3. Md5 - var | hash ("md5")
  4. String controlesom - var | controlesom

Andere nuttige filters

Zoals je misschien hebt gemerkt, heeft Ansible veel filters. Sommige Ansible-filters die u mogelijk handig vindt, zijn onder meer:

  • URL-splitsingsfilter - “ [e-mail beveiligd]://linuxhint.com:8080/index.html?query=linux” | urlspilt(“hostnaam”), - geeft “linuxhint . terug.com”
  • Deelnemen aan lijst - lijst | join - gebruikt om een ​​lijst toe te voegen aan een string var
  • Directorypad - pad | dirnaam
  • Een tilde uitvouwen - pad | expanduser

Conclusie

Ansible-filters zijn handig wanneer u foutopsporingstaken uitvoert of specifieke informatie nodig hebt zonder al te veel te typen. Omdat Ansible aangepaste filters ondersteunt, kunnen deze filters vooral handig zijn in specifieke gebruikssituaties.

Top 5 Game Capture-kaarten
We hebben allemaal gezien en genoten van streaming gameplays op YouTube. PewDiePie, Jakesepticye en Markiplier zijn slechts enkele van de beste gamers...
Hoe een spel op Linux te ontwikkelen
Tien jaar geleden zouden niet veel Linux-gebruikers voorspellen dat hun favoriete besturingssysteem ooit een populair spelplatform voor commerciële vi...
Open source-poorten van commerciële game-engines
Gratis, open source en platformonafhankelijke game-engine-recreaties kunnen worden gebruikt om zowel oude als enkele van de vrij recente gametitels te...