0

ansible

Знакомство с Ansible. Часть 3: переменные

В первой части знакомства с Ansible мы успешно установили систему управления конфигурациями и написали первый playbook, во второй части разобрали результат выполнения нашего набора инструкций и научились повторно использовать playbook’и.

В этой части давайте разберемся с использованием переменных в Ansible.

В системе управления конфигурациями Ansible переменные хранят значения, которые могут использоваться в наборах инструкций (playbook). Информация об удаленных хостах из файла inventory также может быть использована в качестве переменных.

Лучше всего важность и полезность использования переменных может показать очень простой пример — установка web-сервера apache.

Примечание. Дело в том, что пакет Apache имеет разное название в различных дистрибутивах — httpd для RedHat и apache2 для Debian.

Создадим файл /etc/ansible/playbooks/install_apache.yml:

touch /etc/ansible/playbooks/install_apache.yml

Содержимое файла следующее:

---
- hosts: test
  tasks:
 
  - name: Debug
    debug: msg={{ ansible_os_family }}
 
  - set_fact: package_name=httpd
    when: ansible_os_family == "Redhat"
 
  - set_fact: package_name=apache2
    when: ansible_os_family == "Debian"
 
  - name: Install httpd package
    yum: name={{ package_name }} state=latest
    sudo: yes
    when: ansible_os_family == "Redhat"
   
  - name: Debug1
    debug: msg={{ package_name }}
 
  - name: Install apache2 package
    apt: name={{ package_name }} state=latest
    sudo: yes
    when: ansible_os_family == "Debian"

Таким будет результат выполнения данного набора инструкций:

ansible-playbook install_apache.yml 

PLAY [test] ******************************************************************* 

GATHERING FACTS *************************************************************** 
ok: [test-1]

TASK: [Debug] ***************************************************************** 
ok: [test-1] => {
    "msg": "Debian"
}

TASK: [set_fact package_name=httpd] ******************************************* 
skipping: [test-1]

TASK: [set_fact package_name=apache2] ***************************************** 
ok: [test-1]

TASK: [Install httpd package] ************************************************* 
skipping: [test-1]

TASK: [Debug1] **************************************************************** 
ok: [test-1] => {
    "msg": "apache2"
}

TASK: [Install apache2 package] *********************************************** 
changed: [test-1]

PLAY RECAP ******************************************************************** 
test-1                 : ok=5    changed=1    unreachable=0    failed=0   

Примечание. Дополнительные задачи Debug и Debug1 позволяют увидеть, что на удаленном хосте установлена ОС Debian, и в переменную package_name записано значение apache2.

Благодаря успешному использованию переменной package_name данный набор инструкций правильно установит web-сервер apache и на RedHat, и на Debian.

В Ansible переменные можно задавать в отдельном (глобальном) файле, а потом включать этот файл в playbook с помощью ключевого слова vars_files:. Например, у нас есть файл с переменными /etc/ansible/vars/test_var.yml с таким содержанием:

---
package_name: "apache2"

В наборе инструкций включение этого файла с переменными будет выглядеть следующим образом:

---
- hosts: test
  vars_files:
    - /etc/ansible/vars/test_var.yml
  tasks:
    ...

Также есть возможность устанавливать переменные непосредственно в playbook с помощью ключевого слова vars:, выглядит это так:

---
- hosts: test
  vars:
    - package_name: "apache2"
  tasks:
    ...

Как уже упоминалось во второй части знакомства с Ansible, в качестве переменных можно использовать данные, полученные при выполнении задачи GATHERING FACTS.

Посмотреть переменные и их значения можно командой:

ansible -m setup test

В первой части мы создали инвентарный (inventory) файл /etc/ansible/hosts, в котором описали группу test и два хоста (test-1 и test-2), входящие в эту группу. Использование групп в инвентарном файле позволяет группировать удаленные хосты по регионам размещения или по ролям серверов — это чрезвычайно удобно при работе с сотнями и тысячами серверов.

Также в inventory файле можно использовать регулярные выражения, например запись:

[test]
test-[01:99]

будет соответствовать группе хостов test, в которую входят хосты test-01, test-02, test-03, … test-99.

Для конкретного хоста или группы хостов из инвентарного файла можно установить специфические переменные при необходимости. Например, хосту test-1 можно назначить ssh порт таким образом:

[test]
test-1 ssh_port=5555
test-2

Изменить ssh порт для всей группы хостов можно так:

[test]
test-1
test-2
[test:vars]
ssh_port=5555

Примечание. Конечно же, можно создавать отдельные файлы переменных для хостов и для групп — в директории host_vars и в директории group_vars соответственно. Единственное условие — каталоги с этими файлами переменных должны находиться в одной директории с инвентарным (inventory) файлом.

Стоит помнить об иерархии переменных: переменные из глобального файла переопределяют хост-переменные, групповые переменные и переменные в инвентарном файле. Групповые переменные переопределяют переменные из инвентарного файла, а хост-переменные переопределяют групповые переменные.

С переменными в Ansible мы разобрались, в следующей статье поговорим об использовании модулей при настройке удаленных хостов.

Облачная платформа

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

1 ansible

Знакомство с Ansible. Часть 1: Введение

Ansible – одна из систем управления конфигурациями (автоматизации настройки и развертывания серверов). Особенность Ansible – наличие управляющего сервера, с которого отправляются команды или наборы инструкций
2 ansible

Знакомство с Ansible. Часть 4: модули

Мы уже справились установкой системы управления конфигурациями Ansible, написали первый набор инструкций (playbook) и разобрали результат его выполнения, а также ознакомились с использованием переменных в Ansible. В этой части
ansible
Previous Story

Знакомство с Ansible. Часть 2: разбор вывода playbook

ansible
Next Story

Знакомство с Ansible. Часть 4: модули

Latest from Blog

Docker: собираем веб сервер

Ниже предоставлен готовый набор окружения веб сервера на базе контейнеров Docker. Включает в себя MySQL, PHP, NGINX, composer, SSL сертификаты и механизм резервного копирования в облако. Код доступен на github. Компоненты сервера Для

Как с помощью docker запустить окружение для разработки nginx + php + mysql

Создание проекта Compose Подготовка контейнерной среды разработки веб-приложения отождествляется с созданием проекта Compose. Для этого начинать нужно с создания каталога проекта Compose.Его имя – new_compose_project. Создадим каталог, после чего перейдем к нему. Введем в

обновить Debian 11 до Debian 12 Bookworm

Подготовка системы к обновлению Перед обновлением рекомендую ознакомиться с официальным руководством Upgrades from Debian 11 (bullseye). Мои дальнейшие действия соответствуют некоторым рекомендациям из этого документа. В первую очередь проверьте все бэкапы. И по

Мониторинг докер-хостов, контейнеров и контейнерных служб

Я искал self-hosted мониторинговое решение с открытым кодом, которое может предоставить хранилище метрик, визуализацию и оповещение для физических серверов, виртуальных машин, контейнеров и сервисов, действующих внутри контейнеров. Опробовав Elastic Beats, Graphite и
Go toTop

Don't Miss

ansible

Ansible: ввод sudo-пароля при выполнении playbook

Большинство действий в наборах инструкций системы управления конфигурациями Ansible следует выполнять с
ansible

Добавление учетных записей с помощью Ansible

Ранее мы уже рассматривали несколько вариантов использования системы управления конфигурациями Ansible,