ansible_proxmox_vms/PROJECT_SCRIPTS.md
2026-06-01 23:45:18 +03:00

5.5 KiB
Raw Blame History

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 для первичной настройки нового клиента.

Он делает две вещи:

  1. На локальном компьютере добавляет fingerprints VM в ~/.ssh/known_hosts.
  2. По 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