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

Проброс портов в роутере MikroTik 2

Проброс портов в роутере MikroTik (port forwarding) позволяет организовать удаленный доступ из интернета к какому-нибудь устройству внутри вашей локальной сети (к IP-камере, Web, FTP или игровому серверу). В данной статье мы рассмотрим пример, как

How to set up WireGuard Client on Debian?

WireGuard is an extremely simple yet fast and modern VPN. Setting up the WireGuard VPN client on Debian is straightforward. In this tutorial, we will set up WireGuard VPN client on Debian
Go toTop

Don't Miss

ansible

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

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

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

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