opsjournal.net

Ansible для домашней лаборатории: минимальная структура

· ansiblehomelabавтоматизация

Дома пять машин: NAS, мини-ПК с сервисами, Raspberry Pi и две виртуалки для экспериментов. Настраивал всё руками, пока не пришлось переустанавливать мини-ПК и вспоминать, что я там делал два года назад. Теперь всё в Ansible. Структуру держу минимальной.

Структура репозитория

homelab/
├── inventory.yml
├── site.yml
├── group_vars/
│   └── all.yml
├── host_vars/
│   ├── nas.yml
│   └── mini.yml
└── roles/
    ├── base/        # пользователи, ssh, пакеты, часовой пояс
    ├── docker/
    ├── monitoring/  # node_exporter + алерты
    └── backup/

Никаких Galaxy-ролей на всё подряд: свои роли по 30–50 строк понятнее, чем чужие на 500.

Инвентарь

all:
  children:
    servers:
      hosts:
        nas:  { ansible_host: 192.168.1.10 }
        mini: { ansible_host: 192.168.1.11 }
    lab:
      hosts:
        vm1:  { ansible_host: 192.168.1.21 }

Роль base — самое ценное

Девяносто процентов пользы даёт одна роль, которая приводит любую машину к одному виду:

- name: базовые пакеты
  ansible.builtin.apt:
    name: [vim, htop, curl, rsync, unattended-upgrades]
    update_cache: true

- name: ssh только по ключу
  ansible.builtin.lineinfile:
    path: /etc/ssh/sshd_config
    regexp: '^#?PasswordAuthentication'
    line: 'PasswordAuthentication no'
  notify: restart ssh

Секреты

Пароли и токены лежат в group_vars/all/vault.yml, зашифрованные ansible-vault. Пароль от vault лежит в менеджере паролей, а не в репозитории. Звучит очевидно, но первые две недели он у меня лежал в .vault_pass рядом с плейбуками.

Привычки, которые окупились