Ansible для домашней лаборатории: минимальная структура
Дома пять машин: 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 рядом с плейбуками.
Привычки, которые окупились
- перед применением всегда
--check --diff; - одна роль — одна задача, без «универсальных» ролей;
- теги на каждую роль, чтобы прогонять только нужное:
--tags monitoring; - в README записываю, как поднять машину с нуля. Проверял дважды: работает за 20 минут.