Linux · Ansible · AAPVeenendaal
← Notities uit de praktijk

Notities uit de praktijk

CI/CD voor infrastructure code: verder dan linting

Door André van Ginkel

Combineer linting, functionele tests en gecontroleerde uitrol om fouten eerder te vinden en wijzigingen beter te kunnen volgen.

Een pipeline kan controles en uitrolstappen herhaalbaar uitvoeren. Welke controles nodig zijn, hangt af van de systemen, de wijziging en de gevolgen van een fout.

Linting en functionele tests vullen elkaar aan

YAML-linting controleert onder meer opmaak en structuur. Ansible-lint controleert daarnaast verschillende Ansible-patronen en mogelijke fouten. Beide vervangen geen test van de bedoelde werking op de doelomgeving.

Voer na statische controles functionele tests uit op representatieve testmachines. Een matrixvariabele in GitLab kiest niet vanzelf een ander besturingssysteem: de testconfiguratie moet die waarde daadwerkelijk gebruiken.

Maak de uitrolvolgorde expliciet

Een bruikbare opzet is: statische controles, tests, uitrol naar acceptatie, controle van acceptatie en daarna een gecontroleerde productiestap. Leg afhankelijkheden, bevoegdheden en herstelstappen vast.

Twee jobs in dezelfde stage vormen op zichzelf geen opeenvolgende acceptatie- en productiecontrole. Een handmatige knop is evenmin een complete autorisatie- of goedkeuringsprocedure.

Beheer secrets en de toegang ertoe

Ansible Vault kan gevoelige bestanden en variabelen versleutelen, ook als de versleutelde inhoud in Git staat. Beheer de ontsleutelsleutel afzonderlijk en voorkom dat ontsleutelde waarden in logs of uitvoer terechtkomen.

Een externe secret store kan passen bij centraal toegangsbeheer en rotatie. GitLab documenteert authenticatie bij HashiCorp Vault met ID tokens. De policies en toegestane projecten moeten daarvoor expliciet worden ingericht. SOPS is versleutelingstooling en is op zichzelf geen externe secret store.

Afwijkingen signaleren met beperkingen

Een geplande check-mode-run kan aanwijzingen geven dat de configuratie afwijkt. De dekking hangt af van moduleondersteuning en de opbouw van het playbook. Taken met check_mode: false kunnen ook tijdens een check-run wijzigingen uitvoeren.

--diff kan gevoelige inhoud tonen. Bepaal welke uitvoer veilig is om te bewaren. Een succesvolle check-run bewijst geen volledige overeenstemming; afwijkingen leiden ook niet vanzelf tot een melding. Daarvoor zijn expliciete beoordeling en alarmering nodig.

Wat dit kan opleveren

Een passende pipeline kan fouten eerder zichtbaar maken en wijzigingen beter herleidbaar maken. Tests en een gecontroleerde uitrol kunnen de kans op verstoringen verminderen. Een pipeline garandeert niet dat productie altijd gelijk is aan Git of dat elke wijziging veilig is.

Bronnen

Ansible-lint: regels
Ansible: check mode en diff
Ansible Vault
GitLab: HashiCorp Vault en ID tokens

Bespreek je vraag met André van Ginkel →