5.5 KiB
Ansible Home VM Project Scripts
Этот файл описывает playbook-и внутри проекта ansibleHostsHomeVM.
Структура проекта
ansible.cfg
inventory.ini
facts.yml
add-ssh-key.yml
bootstrap-new-client.yml
generate-ssh-config.yml
ansible.cfg
Локальный конфиг Ansible для этого проекта.
[defaults]
inventory = inventory.ini
interpreter_python = auto_silent
host_key_checking = True
Смысл:
inventory = inventory.ini— не нужно каждый раз писать-i inventory.ini.interpreter_python = auto_silent— Ansible сам ищет Python на VM и не шумит предупреждениями.host_key_checking = True— SSH host key checking включён. Это безопаснее: если fingerprint сервера изменился, Ansible не подключится молча.
inventory.ini
Список управляемых VM.
Пример:
[proxmox_vms]
nginx ansible_host=192.168.8.170 ansible_user=vrubel
docker-prod ansible_host=192.168.8.171 ansible_user=vrubel
fedoraXfce ansible_host=192.168.8.172 ansible_user=vrubel
hermes ansible_host=192.168.8.173 ansible_user=vrubel
docker-test ansible_host=192.168.8.174 ansible_user=vrubel
cicd ansible_host=192.168.8.175 ansible_user=vrubel
monitoring ansible_host=192.168.8.176 ansible_user=vrubel
Группа proxmox_vms используется в командах:
ansible proxmox_vms -m ping
ansible-playbook facts.yml
facts.yml
Диагностический playbook. Ничего не меняет на серверах.
Он собирает facts и показывает:
- имя хоста;
- семейство ОС;
- дистрибутив;
- версию ОС;
- пакетный менеджер;
- путь к Python.
Запуск:
ansible-playbook facts.yml
Используется для проверки, какие машины Ubuntu/Debian, какие Fedora/RedHat, и какой пакетный менеджер Ansible видит.
add-ssh-key.yml
Playbook для добавления публичного SSH-ключа в authorized_keys пользователя vrubel на всех VM.
По умолчанию берёт ключ текущего пользователя:
~/.ssh/id_ed25519.pub
Запуск, если доступ по ключу уже есть:
ansible-playbook add-ssh-key.yml
Если надо добавить не текущий ключ, а другой публичный ключ из файла:
ansible-playbook add-ssh-key.yml -e "key_file=$HOME/Downloads/new-client.pub"
Или, например:
ansible-playbook add-ssh-key.yml -e "key_file=$HOME/infra/ansible/keys/laptop.pub"
Важно: файл должен быть именно публичным ключом, то есть .pub. Приватный ключ id_ed25519 в репозиторий не добавлять и никому не передавать.
Этот playbook полезен, когда управляющий комп уже имеет SSH-доступ к VM и нужно добавить новый ключ на все машины.
bootstrap-new-client.yml
Playbook для первичной настройки нового клиента.
Он делает две вещи:
- На локальном компьютере добавляет fingerprints VM в
~/.ssh/known_hosts. - По SSH-паролю подключается к VM и добавляет публичный ключ текущего клиента в
authorized_keys.
Запуск на новом компьютере:
ansible-playbook bootstrap-new-client.yml --ask-pass
Ansible спросит SSH-пароль пользователя vrubel.
После успешного выполнения нужно проверить доступ без пароля:
ansible proxmox_vms -m ping
Если все VM отвечают pong, новый клиент готов.
Этот playbook заменяет ручной ssh-copy-id по всем VM.
generate-ssh-config.yml
Playbook для генерации локального ~/.ssh/config из inventory.ini.
Он добавляет блок вида:
# BEGIN ANSIBLE MANAGED HOME VM HOSTS
Host nginxVM
HostName 192.168.8.170
User vrubel
IdentityFile ~/.ssh/id_ed25519
Host docker-prodVM
HostName 192.168.8.171
User vrubel
IdentityFile ~/.ssh/id_ed25519
# END ANSIBLE MANAGED HOME VM HOSTS
Сначала безопасная проверка:
ansible-playbook generate-ssh-config.yml --check --diff
Если diff выглядит нормально, применить:
ansible-playbook generate-ssh-config.yml
После этого можно заходить так:
ssh nginxVM
ssh docker-prodVM
ssh hermesVM
Playbook управляет только блоком между маркерами ANSIBLE MANAGED HOME VM HOSTS. Остальные ручные записи в ~/.ssh/config не трогает.
Типовой сценарий для нового компьютера
sudo pacman -S ansible sshpass
git clone git@github.com:vrubelroman/ansibleHostsHomeVM.git
cd ansibleHostsHomeVM
ansible-playbook bootstrap-new-client.yml --ask-pass
ansible proxmox_vms -m ping
ansible-playbook generate-ssh-config.yml --check --diff
ansible-playbook generate-ssh-config.yml