ansible_proxmox_vms/PROJECT_SCRIPTS.md

209 lines
6.4 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
playbooks/
facts.yml
add-ssh-key.yml
bootstrap-new-client.yml
generate-ssh-config.yml
shell-setup.yml
files/
config.fish
```
## 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 playbooks/facts.yml
```
## facts.yml
Диагностический playbook. Ничего не меняет на серверах.
Он собирает facts и показывает:
- имя хоста;
- семейство ОС;
- дистрибутив;
- версию ОС;
- пакетный менеджер;
- путь к Python.
Запуск:
```bash
ansible-playbook playbooks/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 playbooks/add-ssh-key.yml
```
Если надо добавить не текущий ключ, а другой публичный ключ из файла:
```bash
ansible-playbook playbooks/add-ssh-key.yml -e "key_file=$HOME/Downloads/new-client.pub"
```
Или, например:
```bash
ansible-playbook playbooks/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 playbooks/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 playbooks/generate-ssh-config.yml --check --diff
```
Если diff выглядит нормально, применить:
```bash
ansible-playbook playbooks/generate-ssh-config.yml
```
После этого можно заходить так:
```bash
ssh nginxVM
ssh docker-prodVM
ssh hermesVM
```
Playbook управляет только блоком между маркерами `ANSIBLE MANAGED HOME VM HOSTS`. Остальные ручные записи в `~/.ssh/config` не трогает.
## shell-setup.yml
Playbook для установки fish, neovim и CLI-утилит (lsd, bat, grc, zoxide) с настройкой fish как shell по умолчанию.
Устанавливает пакеты через универсальный модуль `package` (работает и с apt, и с dnf). Для Debian создаёт симлинк `batcat -> bat`.
Копирует `files/config.fish` в `~/.config/fish/config.fish` и меняет shell пользователя на `/usr/bin/fish`.
Запуск:
```bash
ansible-playbook playbooks/shell-setup.yml
```
После выполнения нужно перелогиниться для применения fish.
## Типовой сценарий для нового компьютера
```bash
sudo pacman -S ansible sshpass
git clone git@github.com:vrubelroman/ansibleHostsHomeVM.git
cd ansibleHostsHomeVM
ansible-playbook playbooks/bootstrap-new-client.yml --ask-pass
ansible proxmox_vms -m ping
ansible-playbook playbooks/generate-ssh-config.yml --check --diff
ansible-playbook playbooks/generate-ssh-config.yml
```