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

189 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Ansible Home VM Project Scripts
Этот файл описывает playbook-и внутри проекта `ansibleHostsHomeVM`.
## Структура проекта
```text
ansible.cfg
inventory.ini
facts.yml
add-ssh-key.yml
bootstrap-new-client.yml
generate-ssh-config.yml
```
## ansible.cfg
Локальный конфиг Ansible для этого проекта.
```ini
[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.
Пример:
```ini
[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` используется в командах:
```bash
ansible proxmox_vms -m ping
ansible-playbook facts.yml
```
## facts.yml
Диагностический playbook. Ничего не меняет на серверах.
Он собирает facts и показывает:
- имя хоста;
- семейство ОС;
- дистрибутив;
- версию ОС;
- пакетный менеджер;
- путь к Python.
Запуск:
```bash
ansible-playbook facts.yml
```
Используется для проверки, какие машины Ubuntu/Debian, какие Fedora/RedHat, и какой пакетный менеджер Ansible видит.
## add-ssh-key.yml
Playbook для добавления публичного SSH-ключа в `authorized_keys` пользователя `vrubel` на всех VM.
По умолчанию берёт ключ текущего пользователя:
```text
~/.ssh/id_ed25519.pub
```
Запуск, если доступ по ключу уже есть:
```bash
ansible-playbook add-ssh-key.yml
```
Если надо добавить не текущий ключ, а другой публичный ключ из файла:
```bash
ansible-playbook add-ssh-key.yml -e "key_file=$HOME/Downloads/new-client.pub"
```
Или, например:
```bash
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`.
Запуск на новом компьютере:
```bash
ansible-playbook bootstrap-new-client.yml --ask-pass
```
Ansible спросит SSH-пароль пользователя `vrubel`.
После успешного выполнения нужно проверить доступ без пароля:
```bash
ansible proxmox_vms -m ping
```
Если все VM отвечают `pong`, новый клиент готов.
Этот playbook заменяет ручной `ssh-copy-id` по всем VM.
## generate-ssh-config.yml
Playbook для генерации локального `~/.ssh/config` из `inventory.ini`.
Он добавляет блок вида:
```sshconfig
# 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
```
Сначала безопасная проверка:
```bash
ansible-playbook generate-ssh-config.yml --check --diff
```
Если diff выглядит нормально, применить:
```bash
ansible-playbook generate-ssh-config.yml
```
После этого можно заходить так:
```bash
ssh nginxVM
ssh docker-prodVM
ssh hermesVM
```
Playbook управляет только блоком между маркерами `ANSIBLE MANAGED HOME VM HOSTS`. Остальные ручные записи в `~/.ssh/config` не трогает.
## Типовой сценарий для нового компьютера
```bash
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
```