## Установка 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 ``` ## Настройка Ansible Готово. Ansible используем ssh для подключения, лучше всего и безопаснее использовать ssh-ключ, создадим его: ``` ssh-keygen ``` У меня ключ уже создан Расположение: ``` /home//.ssh/id_ed25519.pub # публичный ключ /home//.ssh/id_ed25519 # приватный ключ ``` Перекидываем публичный ssh-ключ на наш тестовый стенд: ``` ssh-copy-id -i ~/.ssh/ed25519.pub ansible@172.16.13.101 ``` Готово. ## Первые шаги Мы можем сделать начальную структуру проекта Ansible через команду: ``` ansible-galaxy role init my-project ``` Коротко про каждую: 1. defaults - в main.yml хранятся дефолтные переменные с которыми запускается роль 2. vars - main.yml задаются переменные 3. tasks - сами задачи, плейбуки 4. handlers - это обработчики изменений, если ваша роль выполнялась, что-то изменила, потому что оно не соответствовало описанию плейбука, то будет вызван хендлер, если его описали 5. templates - шаблоны 6. files - хранение файлов, конфигов 7. tests - тесты, можно проверять работу плейбуков, не применяя к серверам, локально в среде После подключения Ansible делает сбор фактов, узнает полную информацию о системе, какая ОС, архитектура, ip адреса и так далее. ## Подключение Ansible Как Ansible понять, куда ему подключаться? Для этого существует инвентарный файл hosts.yml Это файл, где 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 ее сделать, вот какая структура должна получится: В роле update-packages мы создаем tasks "main.yml": ``` --- - name: Обновить все пакеты через apt   ansible.builtin.apt:    upgrade: yes             # выполнит обновление всего    update_cache: yes        # обновить кэш пакетов ``` Идет вызов модуля "ansible.buildin.apt" под названием apt, он принимает 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: ## Документация Все модули, их параметры, настройка инвентарного файла и много чего еще есть в [документации Ansible](https://docs.ansible.com/projects/ansible/latest/index.html)