Эксплуатация Ansible

Материал из Rosalab Wiki
Перейти к: навигация, поиск

Asible

Ansible – это система управления программным обеспечением на удаленных серверах. Есть ряд аналогичных систем (Chief, Puppet) с другими принципами работы, требующих установки клиента и пр. В чём плюс Ansible – для работы на клиенте достаточно ssh соединения с ним. Задача Ansible – выполнить ряд операций на удаленной машине. При этом машин может быть сразу несколько. Playbook Все операции вы записываете в некий Ansible-скрипт. Действия выполняются последовательно. Логика работы похожа на обычный bash-скрипт, только на своих командах. Это позволяет отвязаться от дистрибутива, описав задачи на промежуточном языке. Такой Ansible-скрипт называется playbook (сценарий) Синтаксис Ansible Все операции, выполняемые Ansible записываются в playbook в простом формате и построены на yaml-разметке. Рассмотрим пример записи сценария:

- name: "First step"
  hosts: localhost
  tasks:
  - taskA
  - taskB

Где параметр name: «First step» – имя группы задач; hosts: localhost – хосты, на которых будут выполнены задачи; параметры, перечисленные после команды tasks – перечень задач, которые необходимо выполнить. В одном playbook может быть несколько блоков с задачами, для чего необходимо добавить дополнительные параметры name, после завершения описания предыдущей группы задач. Далее рассмотрим непосредственно команды программы - tasks. Команды являются модулями Ansible. Таким образом задавая параметры task, вызывается модуль Ansible с его параметрами. Записать task можно в двух видах: кратком, и полном. Вот пример команды установки curl при помощи dnf модуля в кратком виде: - dnf: name=curl state=latest Тогда play с этим task будет выглядеть как отражено ниже, где модуль dnf устанавливает пакет curl:

- name: "First step"
  hosts: localhost
  tasks:
- dnf: name=curl state=latest

где параметры

name: - имя задачи;
hosts: - хост, на котором будет применяться playbook;
tasks: - блок задачи.

Существует возможность более полно описать команду task, присвоить ей имя (name). Совсем как в блоках задач (play). Тогда получившийся текст выглядит как подзадача основного блока задач. - name: "First step"

 hosts: localhost
 tasks:
   - name: "Add curl packege"
 dnf: name=curl state=latest

В этому случае сразу видно, что есть блок задач «First step», в нем существует 1 задача - установка пакета curl.

Запуск программы Текстовый файл, содержащий сценарии, необходимо сохранить в файл “first.yml” и запустить его, придерживаясь нижеописанной инструкции. 1. Предварительно установим сам пакет Ansible командой

dnf install –y ansible

2. Для запуска playbook, необходимо разархивировать архив и зайти в папку из архива:

ansible-playbook ./dnf_user_install.yml --ask-pass -b -K
--ask-pass ssh пароль от пользователя (администратора)
- b повышение до пользователя sudo
- K пароль sudo

Запуск playbook с помощью команды ansible-playbook при помощи написанного playbook dnf_user_install.yml. 3. После реализации данной команды получиться следующий вывод:

[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [First step] **********************************************************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************************************
ok: [localhost]
TASK [Add curl packege] ****************************************************************************************************************************************************
ok: [localhost]
TASK [Add user rosa] *******************************************************************************************************************************************************
ok: [localhost]
PLAY RECAP ****************************************************************************************************************************************************************
localhost                 : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Где блок задач PLAY, называемый First step, а также команды (TASK) по установке программы curl и добавление пользователя rosa. Все задачи завершились успешно (ok=3, failed=0) (changed=2), а именно: выполнено три действия (ok=3), завершилось с ошибкой 0 действий (filed=0) и на хосте произошло 2 изменения. Gathering Facts (Дополнительная задача) – получение информации о хосте (такой как имя хоста и пр.), вызвалась автоматически. Она необходима для использования данных о хосте в своих сценариях, это своеобразный мониторинг о системе, который собирает такую информацию имя машины, ip-адресацию и другие параметры. Можно запретить эту задачу, указав gather_facts : false

- name: "First step"
  hosts: localhost
  gather_facts: false

Файл инвентаризации Так называемый файл инвентаризации (файл hosts) – это файл, в котором хранится перечень машин, с которыми будет работать Ansible. Располагаться он может в вашей директории и иметь примерно такой вид:

[mail]
192.168.1.1
192.168.1.2
[web]
192.168.1.3

Где параметры [mail] и [web] – имена групп хостов; 192.168.1.1, 192.168.1.2, 192.168.1.3 - ip адрес второго хоста. Тут, как видно, указываются группы, в них имена хостов, можно с указанием переменных для хоста. Структура inventory-файла очень гибкая, в нем допустимо комбинировать группы, включать одну в другую, задавать переменные для групп, глобальные значения:

[all:vars]
ansible_user=pupkin
hosts: web

Где параметры [all:vars] – переменные для всех хостов; ansible_user=pupkin – пользователь, от которого будет работать ansible на удаленных машинах; hosts: web – группа хостов, на которых будут выполняться playbook. А затем вызвать наш playbook, указав параметром файл инвентаризации (предварительно этот файл нужно заполнить, так как инфраструктура у всех разная): ansible-playbook ./dnf_user_install.yml –i ./hosts С помощью данной команды запускается ansible-playbook, запускаем playbook /dnf_user_install.yml который применится на хостах из файла ./hosts где мы описывает инфенторизацию нашей сетевой инфраструктуру ip адреса до хостов. Примеры использования: Рассмотрим пример доверенной установки, удаления и централизованной настройки средств защиты данных. 1. Для установки используем playbook install.yml его содержимое выглядит так:

- name: "install rosa-removable-drive-manager 
  hosts: localhost
  tasks: 
    - name: "install rosa-removable-drive-manager
      dnf: name=rosa-removable-drive-manager state=latest 

Где параметры name – имя выполняемого таска; hosts – имя хоста, на котором будет выполняться таск; tasks - блок выполнения задания. Запускаем playbook:

ansible-playbook install.yml --ask-pass -b -K
--ask-pass ssh пароль от пользователя (администратора)
- b повышение до пользователя sudo
- K пароль sudo

2. Для удаления, используем playbook remove.yml его содержимое выглядит так:

- name: "remove rosa-removable-drive-manager" 
  hosts: localhost
  tasks:
    - name: "Remove rosa-removable-drive-manager 
      dnf: name=rosa-removable-drive-manager state=absent

Запускаем playbook:

ansible-playbook remove.yml --ask-pass -b -K
--ask-pass ssh пароль от пользователя (администратора)
- b повышение до пользователя sudo
- K пароль sudo

3. Для централизованной настройки используем playbook provision.yml его содержимое выглядит следующим образом:

- name: "insert template rosa-removable-drive-manager" 
  hosts: localhost
  tasks:
    - name: "putt template rosa-removable-drive-manager"
      template: src=00-rosa-removable-drive-manager.rules.j2 dest=/etc/polkit-1/rules.d/src=00-rosa-removable-drive-manager.rules

В данном блоке берется конфигурационный файл из папки templates(00-rosa-removable-drive-manager.rules.j2 и распространяется по пути /etc/polkit-1/rules.d/ тем самым мы осуществляем централизованную настройку приложений) 4. Запускаем playbook:

ansible-playbook provision.yml --ask-pass -b -K
--ask-pass ssh пароль от пользователя (администратора)
- b повышение до пользователя sudo
- K пароль sudo

Ansible — Роли

Роли обеспечивают основу для полностью независимых или взаимозависимых наборов переменных, задач, файлов, шаблонов и модулей. В Ansible эта роль является основным механизмом разбиения playbook на несколько файлов. Это упрощает написание сложных сценариев и облегчает их повторное использование. Роли позволяет вам логически разбить playbook на компоненты многократного использования. Каждая роль в основном ограничена определенной функциональностью или желаемым результатом со всеми необходимыми шагами для обеспечения этого результата либо внутри самой роли, либо в других ролях, перечисленных как зависимости. Создание новой роли Структура каталогов для ролей необходима для создания новой роли. Ролевая структура Роли имеют структурированный дерево файловой в системе. Структура по умолчанию может быть изменена, но пока давайте придерживаться значений по умолчанию. Каждая роль представляет собой дерево каталогов само по себе. Имя роли — это имя каталога в каталоге / role. Создание каталога ролей Приведенная выше команда описывает структуру каталога роли.

$ tree role/ 
rosa_install_tcpdump/ 
├── task                  # Папка где хранятся таски и playbook    
│   └── main.yml          # Файл с playbook где описываются действия
├── files                 # Папка где хранятся файлы или скрипты
├── templates             # Папка где хранятся файлы шаблонов программ
└── vars                  # Папка где хранятся переменные
    └── main.yml          # Файл где хранятся переменные для инфраструктуры