Dvacet serverů, každý jinak nakonfigurovaný. Dokumentace v hlavě jednoho admina. Když odjede na dovolenou, nikdo neví, jak server nastavit. Infrastructure as Code s Ansible to změnilo — servery jsou definované v YAML, verzi v gitu.
Proč Ansible¶
Agentless: Ansible komunikuje přes SSH. Žádný agent na serverech, žádný daemon, žádná infrastruktura. Puppet a Chef vyžadují agenta — další software k údržbě. YAML: Playbooks v čitelném YAML. Žádný Ruby (Chef) ani DSL (Puppet).
Playbook příklad¶
---
- hosts: webservers
become: yes
tasks:
- name: Install Nginx
apt: name=nginx state=latest
- name: Deploy config
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify: Restart Nginx
- name: Ensure running
service: name=nginx state=started enabled=yes
handlers:
- name: Restart Nginx
service: name=nginx state=restarted
Idempotence a roles¶
Každý task je idempotentní — spusťte playbook 10x, výsledek je stejný. Roles organizují logiku do znovupoužitelných balíčků: role nginx, role postgresql, role java. Ansible Galaxy pro sdílení community rolí.
Inventory a dynamický inventory¶
Statický inventory pro fixní servery. Pro cloud prostředí dynamický inventory script, který dotazuje AWS/Azure API a vrátí aktuální seznam serverů.
Servery jako kód¶
Ansible je nejpřístupnější cesta k Infrastructure as Code. Agentless, YAML, SSH. Dokumentace serverů je v gitu, onboarding je čtení playbooku.