142 lines
5.3 KiB
Markdown
142 lines
5.3 KiB
Markdown
## Установка Ansible
|
||
Ansible работает через питон, по этому необходимо установить его:
|
||
```
|
||
apt update && apt upgrade -y
|
||
apt install python3 python3-pip python3-venv -y
|
||
```
|
||
Установка виртуального окружения:
|
||
```
|
||
python3 -m venv
|
||
source venv/bin/activate
|
||
```
|
||
И устанавливаем Ansible:
|
||
```
|
||
pip install ansible
|
||
ansible --version
|
||
```
|
||
<img src="assets/image_1777451283920.jpg" width="auto">
|
||
|
||
## Настройка Ansible
|
||
Готово.
|
||
Ansible используем ssh для подключения, лучше всего и безопаснее использовать ssh-ключ, создадим его:
|
||
```
|
||
ssh-keygen
|
||
```
|
||
<img src="assets/image_1777451977808.jpg" width="auto">
|
||
|
||
У меня ключ уже создан
|
||
Расположение:
|
||
```
|
||
/home/<user>/.ssh/id_ed25519.pub # публичный ключ
|
||
/home/<user>/.ssh/id_ed25519 # приватный ключ
|
||
```
|
||
|
||
Перекидываем публичный ssh-ключ на наш тестовый стенд:
|
||
```
|
||
ssh-copy-id -i ~/.ssh/ed25519.pub ansible@172.16.13.101
|
||
```
|
||
<img src="assets/image_1777454341479.jpg" width="auto">
|
||
|
||
Готово.
|
||
|
||
## Первые шаги
|
||
Мы можем сделать начальную структуру проекта Ansible через команду:
|
||
```
|
||
ansible-galaxy role init my-project
|
||
```
|
||
<img src="./assets/image_1777454975978.jpg" width="auto">
|
||
|
||
Коротко про каждую:
|
||
1. defaults - в main.yml хранятся дефолтные переменные с которыми запускается роль
|
||
2. vars - main.yml задаются переменные
|
||
3. tasks - сами задачи, плейбуки
|
||
4. handlers - это обработчики изменений, если ваша роль выполнялась, что-то изменила, потому что оно не соответствовало описанию плейбука, то будет вызван хендлер, если его описали
|
||
5. templates - шаблоны
|
||
6. files - хранение файлов, конфигов
|
||
7. tests - тесты, можно проверять работу плейбуков, не применяя к серверам, локально в среде
|
||
|
||
После подключения Ansible делает сбор фактов, узнает полную информацию о системе, какая ОС, архитектура, ip адреса и так далее.
|
||
|
||
## Подключение Ansible
|
||
Как Ansible понять, куда ему подключаться? Для этого существует инвентарный файл hosts.yml
|
||
|
||
<img src="./assets/image_1777458099510.jpg" width="auto">
|
||
|
||
Это файл, где Ansible хранит список управляемых машин, пример:
|
||
|
||
```
|
||
all:
|
||
hosts: # сервера
|
||
web:
|
||
ansible_host: 172.16.13.11
|
||
db:
|
||
ansible_host: 172.16.13.12
|
||
ansible_user: postres
|
||
git:
|
||
ansible_host: 172.16.13.12
|
||
ansible_user: gitea
|
||
|
||
children: # группа серверов
|
||
storage-service:
|
||
hosts:
|
||
db:
|
||
git:
|
||
|
||
vars:
|
||
ansible_ssh_private_key_file: ~/.ssh/id_25519
|
||
ansible_become_password: P@ssw0rd
|
||
```
|
||
|
||
Это один из возможных вариантов использования hosts.
|
||
Мой hosts, на котором буду показывать пример:
|
||
```
|
||
all:
|
||
hosts:
|
||
my-vm:
|
||
ansible_host: 172.16.13.101
|
||
ansible_user: ansible
|
||
|
||
vars:
|
||
ansible_ssh_private_key_file: ~/.ssh/id_ed25519
|
||
ansible_become_password: P@ssw0rd
|
||
```
|
||
|
||
Так же мы будем писать playbook в yml формате, вот простой пример:
|
||
```
|
||
---
|
||
- name: Обновление пакетов
|
||
hosts: all # все хосты из hosts.yml, можно
|
||
become: true # получение root прав
|
||
roles:
|
||
- update-packages
|
||
```
|
||
|
||
Мы указали роль update-packages, значит нужно в папке roles ее сделать, вот какая структура должна получится:
|
||
|
||
<img src="./assets/image_1777459628010.jpg" width="auto">
|
||
|
||
В роле update-packages мы создаем tasks "main.yml":
|
||
```
|
||
---
|
||
- name: Обновить все пакеты через apt
|
||
ansible.builtin.apt:
|
||
upgrade: yes # выполнит обновление всего
|
||
update_cache: yes # обновить кэш пакетов
|
||
|
||
```
|
||
|
||
Идет вызов модуля "ansible.buildin.<font color="#f79646">apt</font>" под названием <font color="#f79646">apt</font>, он принимает 2 параметра:
|
||
`upgrade` и `update_cache`
|
||
|
||
Всё хорошо, но при запуске playbook будет искать roles относительно папки с ним `/ansible/playbooks/roles/`, наше же расположение `/ansible/roles/`, чтобы Ansible знал, где искать мы сделаем ansible.cfg в корневой папке, в которой пропишем полный
|
||
```
|
||
[defaults]
|
||
roles_path = /home/chase/file-fg/ansible/roles
|
||
inventory = inventory/hosts.yml
|
||
```
|
||
|
||
Теперь запустим наш playbook.yml:
|
||
|
||
<img src="./assets/image_1777543685692.jpg" width="auto">
|
||
|