Onafhankelijke vergelijking · geen betaalde rankings
Home / Blog / Technisch / Ansible: configureer servers zonder een uitzonderingsverzameling te maken

Ansible: configureer servers zonder een uitzonderingsverzameling te maken

Ansible belooft idempotence – totdat elke host vars_host verzamelt, ‘alleen voor prod-03’-taken, en inventaris die niemand durft te refactoren.

Redactie Hébergeurs.eu 4 min Bijgewerkt 19 jul. 2026

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.

Vergelijk Europese providers

Filter op compliance, locatie en gebruikssituatie — open daarna de fiches om het echte bereik te controleren.

Blader door het overzicht
Blog

Gerelateerde lectuur

Alle artikelen →