De eerste Ansible-implementatie was elegant: een webstack-rol, drie groepen staging, prod, bastion. Een jaar later bevat de inventaris prod-legacy, twaalf “tijdelijke” host_vars/prod-03.yml blokken en een when: inventory_hostname == 'prod-03' in de nginx-rol. Het playbook gaat door, maar niemand weet meer welke configuratie de standaard is en welke de patch is.
Ansible schaalt slecht wanneer elke uitzondering lokaal blijft in plaats van omhoog te gaan als een variabele of gedocumenteerde optionele rol. De klassieke valkuil: een draaiboek dat doorgaat in CI maar twaalf host_vars-patches documenteert. Een nieuwe engineer weet niet meer welke configuratie standaard is. Het doel is niet een groene run; het is dat een tweede 'weersbaar-playbook' niets verandert als de machine niet is afgedreven. Zonder deze discipline automatiseer je verwarring in plaats van de gewenste configuratie – en voegt elke implementatie een nieuwe patch toe.
Inventaris, group_vars en duidelijke hiërarchie
Aanbevolen structuur: inventarissen per omgeving, group_vars/all.yml, group_vars/web.yml, ontkoppelde rollen. group_vars voor alles wat een groep deelt. host_vars gereserveerd voor echte uitzonderingen (speciaal IP-adres, clientcertificaat) — met commentaar en ticket. Nee bij hostnaam in rollen — geef de voorkeur aan nginx_extra_vhosts als variabele.
Elke
when:inventory_hostname ==is een enorme schuld.
Rollen, tags en veranderoppervlak
Uitgesplitst naar verantwoordelijkheid: common, web, db_client. Tags beperken de impactradius in de productie. Documentstandaarden in roles/x/defaults/main.yml — overschrijft alleen in group_vars. Een rol die nginx, PHP en firewall combineert, wordt onmogelijk afzonderlijk te testen.
Vault-, SSH- en bastiontoegang
Versleutel geheimen met ansible-vault encrypt. SSH-sleutels via agent – geen gedeelde rootsleutel. Eén bastion, ProxyJump, beperkte sudo. Stem af op wat uw VPS-host toestaat: sommige blokkeren directe root-toegang, andere dwingen één sleutel per omgeving af.
Gebroken idempotentie: symptomen
shell: krul ... | bash' bij elke run. kopie zonder controlesom. service: state=restarted` systematisch. Correct in declaratieve modules. Handmatige drift → importeer code of blokkeer directe SSH. Een met de hand aangepaste machine is in tegenspraak met automatisering – en niemand weet welke bron gezaghebbend is.
CI, molecuul- en pariteitsstaging
Pijplijn: ansible-lint, yamllint, Molecuul convergeert twee keer - bij de tweede run zou 0 veranderd moeten worden gerapporteerd. Staging moet op productie lijken (dezelfde rollen, verschillende rollen). Zonder pariteit test u een configuratie die niet in productie bestaat. Versie de inventaris in dezelfde repository als de rollen: lokale inventaris zonder versiebeheer is de meest voorkomende bron van "het werkte op mijn machine" in prod.
Refactoreer zonder het team te verlammen
Tel de host_vars en when: hostnaam - als deze omhoog gaat, plan dan een refactorpauze. Rapporteer uitzonderingen in gedocumenteerde gegroepeerde variabelen, één per sprint. Ansible voert snel een verzameling uitzonderingen uit, maar lost deze niet op.
Op een VPS of bare metal wijkt de configuratie ook af door handmatige drift: een vergeten SSH-patch, een pakket dat met de hand is geïnstalleerd. Het blokkeren van directe toegang tot de productie – tenzij er sprake is van een gedocumenteerde noodsituatie – dwingt een terugkeer naar de code af. Kruisverwijzing met TLS en verharding: dezelfde principes van declaratieve configuratie zijn van toepassing buiten Ansible alleen.
De top: automatisering die inconsistenties verbergt
Beslis en ga vooruit zonder blinde vlek
Refactoreer uitzonderingen één voor één in gedocumenteerde gegroepeerde variabelen, met een trackingticket. Voeg Molecule toe aan continue integratie en er zijn geen wijzigingen nodig bij de tweede run. Versleutel alle geheimen met ansible-vault en trek alle geheimen in die al openbaar zijn gemaakt. Documenteer bastion- en SSH-sleutels per omgeving: wie heeft toegang, welke sleutel, welke rotatie. Tel de host_vars en de when: hostname: als deze omhoog gaat, pauzeer dan de refactor. Vergelijk VPS aangepast aan Ansible via de overzicht en de vergelijker.
Veelgestelde vragen
Rollen of monolithisch draaiboek?
Herbruikbare rollen plus group_vars; vermijd het allesomvattende draaiboek. Een monolithisch draaiboek wordt een verzameling ongeteste uitzonderingen zodra het verder gaat dan een paar rollen.
Hoe Ansible testen vóór productie?
Molecuul met tweede run bij nul veranderingen, pariteitsstaging, pluisjes in CI. --check alleen is niet genoeg; het negeert enkele bijwerkingen.
Gaat Ansible goed om met geheimhouding?
weerwerende kluis vereist; geen duidelijke geheimen in git. Trek alle geheimen in die al in de geschiedenis aan het licht zijn gekomen; daaropvolgende versleuteling wist het verleden niet uit.
Waarom is mijn draaiboek niet idempotent?
Niet-declaratieve shell-/opdrachtmodules, gedwongen herstart, uitzonderingen per host. Elke when:inventory_hostname== in een rol is een waarschuwingssignaal.
Een gezonde inventaris wordt in groepen gelezen – niet in anekdotes per server.
