Files
ansible/docs/2. Настройка Ansible и первый playbook.md
T
2026-04-30 14:03:26 +03:00

5.6 KiB
Raw Blame History

Установка 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/<user>/.ssh/id_ed25519.pub # публичный ключ
/home/<user>/.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