Если вы используете Linux, выполните следующие команды в терминале, чтобы установить Ansible с помощью менеджера пакетов вашего дистрибутива:
$ sudo apt-get update
$ sudo apt-get install ansible
$ sudo yum update
$ sudo yum install ansible
$ brew update
$ brew install ansible
Ansible использует инвентарь для определения хостов, на которых нужно выполнить задачи. Инвентарь представляет собой файл, в котором перечислены IP-адреса или имена хостов, а также переменные, необходимые для настройки подключения к хостам.
Для создания инвентаря создайте файл с именем inventory.ini
в любом месте на вашем компьютере и добавьте следующие строки:
[webservers]
web1.example.com
web2.example.com
[database]
db1.example.com
Кроме перечисления хостов, в инвентаре можно использовать переменные для настройки подключения к хостам. Для этого можно определить переменные для каждой группы хостов или для отдельных хостов
Например, вы можете определить переменную ansible_user
для каждого хоста, чтобы указать имя пользователя, с которым нужно подключаться к хосту
[webservers]
web1.example.com ansible_user=ubuntu
web2.example.com ansible_user=root
[database]
db1.example.com ansible_user=dbadmin
Также вы можете определить общие переменные для всех хостов в инвентаре, создав файл group_vars/all.yml
и определив переменные в нем:
---
ansible_ssh_private_key_file: /path/to/private_key
Это позволит указать путь к файлу с приватным ключом SSH, который будет использоваться при подключении к хостам
Плейбуки - это файлы YAML, которые содержат инструкции по выполнению задач на хостах. Каждый плейбук может содержать одну или несколько задач, которые Ansible будет выполнять последовательно на каждом хосте
Для создания плейбука создайте файл с именем playbook.yml
в любом месте на вашем компьютере и добавьте следующий код:
---
- hosts: webservers
become: true
tasks:
- name: Установить Nginx
apt:
name: nginx
state: present
Этот плейбук выполняет задачу установки Nginx
на все хосты из группы webservers
. Атрибут become указывает на то, что Ansible должен использовать привилегии суперпользователя для выполнения задач
Для выполнения плейбука используйте команду ansible-playbook
и передайте ей имя файла плейбука:
$ ansible-playbook playbook.yml -i inventory.ini
Ansible будет выполнять плейбук на каждом хосте из группы webservers
, установив Nginx
на каждом хосте
Ansible предоставляет множество модулей, которые можно использовать для выполнения различных задач на хостах. Например, с помощью модуля copy
можно копировать файлы на хосты, а с помощью модуля service
можно управлять службами на хостах
Для копирования файла на удаленный хост используйте модуль copy
. В следующем примере мы скопируем файл index.html
на все хосты из группы webservers
:
---
- hosts: webservers
become: true
tasks:
- name: Копирование файла index.html
copy:
src: /path/to/local/index.html
dest: /var/www/html/index.html
Этот плейбук выполняет задачу копирования файла index.html
с локального хоста на удаленные хосты из группы webservers
Для управления службами на удаленном хосте используйте модуль service
. В следующем примере мы будем перезапускать службу Nginx
на всех хостах из группы webservers
:
---
- hosts: webservers
become: true
tasks:
- name: Перезапуск службы Nginx
service:
name: nginx
state: restarted
Этот плейбук выполняет задачу перезапуска службы Nginx
на всех хостах из группы webservers
Роли позволяют организовать плейбуки и задачи в более структурированном виде, что делает их более читабельными и управляемыми. Роль - это набор плейбуков, задач и переменных, которые можно использовать для выполнения определенной функции на хостах.
Для создания роли используйте команду ansible-galaxy
:
$ ansible-galaxy init myrole
Затем создайте файл nginx/tasks/main.yml
и добавьте следующий код:
---
- name: Установить Nginx
apt:
name: nginx
state: present
update_cache: true
- name: Настройка конфигурации Nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
notify: Перезапуск службы Nginx
Этот файл определяет две задачи: первая задача устанавливает Nginx
с помощью модуля apt
, а вторая задача копирует файл конфигурации nginx.conf.j2
в /etc/nginx/nginx.conf
на удаленных хостах с помощью модуля template
. Затем задача оповещает модуль service
о том, что необходимо перезапустить службу Nginx
, используя оповещение notify
Для использования роли в плейбуке добавьте раздел roles
и укажите имя роли. В следующем примере мы используем роль nginx
в плейбуке:
---
- hosts: webservers
become: true
roles:
- nginx
Этот плейбук выполнит задачи из роли nginx
на всех хостах из группы webservers
.