Ombyggnad 2026/2027 pågår - döda länkar förekommer. Mer information

Några lärdomar från att sätta upp Ansible

2026-06-05 på Anders Ytterströms webblogg

Jag har senaste året förkovrat mig ordentligt i Ansible för att automatisera saker på servrar. Detta inlägg sammanfattar några viktiga lärdomar för referens i framtiden.

Struktur i inventory spelar stor roll

Var noga med att strukturera inventory-filen. Det lönar sig. Var inte blyg för att lägga servrar med flera syften på mer än ett ställe. Lär dig att uppskatta nästling.

group_vars och host_vars importerar saker automatiskt

För varje maskin som kör playbooks så kommer Ansible automatiskt att inkludera filer med variabler (vars). Man behöver inte använda include_vars.

Så givet följande inventory:

servers:
  demandred:
  rahvin:
  ishamael:
  samael:

och följande Ansible playbook-kommando:

ansible-playbook -i inventory.yml install.yml

Så kommer följande att hända:

  1. Ansible kommer att leta efter ./group_vars/servers.yml och automatiskt inkludera den om den finns.
  2. Ansible kommer att leta efter ./group_vars/servers/ och automatiskt inkludera alla filer i katalogen om den finns.
  3. För varje maskin, så kommer Ansible att kika efter en katalog eller en fil i ./host_vars/<server> enligt samma princip som ovan. Exempel: ./host_vars/demandred.yml, ./host_vars/demandred/*.yml.
  4. Om det finns host_vars, skriver dessa över tidigare inkluderade variabler från .group_vars.

Detta är en konvention som är otroligt tacksam och kraftfull. Det funkar även med nästlade grupper, där föräldern alltid skrivs över av barnet.

Så prioordningen blir denna: parent_group_vars < child_group_vars < host_vars < lokala vars.

Jobba med modularitet

Istället för att kopiera tasks mellan playbooks, lägg vanligt återanvända tasks i egna filer och importera dem med import_tasks. pwd är det playbooken som avgör.

Så här ser t ex min playbook för att konfigurera servrar ut:

- name: Konfigurera server
  hosts: servers
  tasks:
    - import_tasks: tasks/segments/apt_install.yml
    - import_tasks: tasks/segments/sysctl.yml
    - import_tasks: tasks/segments/apparmor.yml
    - import_tasks: tasks/segments/logrotate.yml
    - import_tasks: tasks/segments/nagios.yml
    - import_tasks: tasks/segments/otelcol_install.yml
    - import_tasks: tasks/segments/otelcol_config.yml
    - import_tasks: tasks/segments/server_dirs.yml

Så här ser ett "segment" ut, för att installera paket och ta bort ej använda paket.

- name: Uppdatera APT-repositorier
  become: true
  ansible.builtin.apt:
    update_cache: true

- name: Uppgradera systempaket
  become: true
  ansible.builtin.apt:
    name: "*"
    state: latest

- name: Avinstallera ej använda dependencies
  become: true
  ansible.builtin.apt:
    autoremove: true
    purge: true

Ansible vaults funkar precis som vanliga inkludes

Lägg Ansible Vaults på samma ställen som du skulle ha lagt en vanlig fil med variabler. group_vars och host_vars är bra startlägen.


Ovanstående inlägg publicerades 2026-06-05. Det går att prenumerera på denna webblogg. Härifrån är följande mål rekommenderade: