Поиск по сайту:

Как использовать статические и динамические инвентаризации в Ansible. Часть 4


В этой Части 4 серии Ansible мы объясним, как использовать статическую и динамическую инвентаризацию для определения групп хостов в Ansible.

В Ansible управляемые хосты или серверы, которые контролируются узлом управления Ansible, определяются в файле инвентаризации хостов, как описано в разделе . Хост Файл инвентаризации — это текстовый файл, состоящий из имен хостов или IP-адресов управляемых хостов или удаленных серверов.

Управляемые хосты могут быть указаны как отдельные записи или отнесены к категории по имени группы, как мы увидим позже. В Ansible существует два типа файлов инвентаризации: Статические и Динамические.

Давайте посмотрим на каждый из них и посмотрим, как мы можем ими управлять. К настоящему моменту мы предполагаем, что вы уже установили Ansible на свой узел управления и настроили беспарольное SSH-соединение с управляемыми хостами.

Статический файл инвентаризации хоста

В Ansible файл статической инвентаризации представляет собой обычный текстовый файл, содержащий список управляемых хостов, объявленных в группе хостов с использованием либо имен хостов, либо IP-адресов.

Имя группы хостов заключено в квадратные скобки, т.е. [имя группы]. Записи управляемого хоста позже будут перечислены под именем группы, каждая в отдельной строке. Как обсуждалось ранее, хосты перечислены с использованием либо имен хостов, либо IP-адресов.

[group name]

Host A ip_address 
Host B ip_address
Host c ip_address

В целях иллюстрации мы создадим статический файл инвентаризации.

mkdir test_lab && cd test_lab
vim hosts
[webservers]
173.82.115.165

[database_servers]
173.82.220.239

[datacenter:children]
webservers
database_servers

Сохраните файл и выйдите.

Как вы можете видеть в приведенном выше файле инвентаризации, мы создали две группы хостов: веб-серверы и database_servers. Кроме того, мы создали дополнительную группу под названием datacenter, которая включает группу групп хостов, обозначенную суффиксом ': Children', как показано выше.

Ansible также позволяет размещать группы хостов под именем группы. В приведенном выше файле инвентаризации группы веб-серверы и database_servers помещены в центр обработки данных.

ПРИМЕЧАНИЕ. Необязательно помещать управляемые хосты в группу хостов. Вы можете просто перечислить их, например, используя имена хостов или IP-адреса.

173.82.202.239
172.82.115.165
load_balancer.pnl.com

Давайте теперь воспользуемся несколькими командами Ansible для ссылки на файл инвентаризации хоста. Основной синтаксис управления запасами показан ниже.

ansible {host-pattern} -i /path/of/inventory/file --list-hosts

Например,

ansible all -i /root/test_labs/hosts --list-hosts

Альтернативно вы можете использовать подстановочный знак * для замены аргумента ’all’.

ansible * -i /root/test_labs/hosts --list-hosts

Чтобы перечислить хосты в группе, укажите группу хостов вместо шаблона хостов.

ansible webservers -i /root/test_labs/hosts --list-hosts

Файл динамической инвентаризации хоста

В конфигурации, особенно в облачной конфигурации, такой как AWS, где файл инвентаризации постоянно меняется по мере добавления или вывода из эксплуатации серверов, отслеживание хостов, определенных в файле инвентаризации, становится настоящей проблемой. Становится неудобно возвращаться к файлу хостов и обновлять список хостов их IP-адресами.

И здесь на помощь приходит динамический инвентарь. Так что же такое динамическая инвентаризация? Динамическая инвентаризация — это скрипт, написанный на Python, PHP или любом другом языке программирования. Это удобно в облачных средах, таких как AWS, где IP-адреса меняются после остановки и повторного запуска виртуального сервера.

Ansible уже разработал сценарии инвентаризации для общедоступных облачных платформ, таких как Google Compute Engine, экземпляр Amazon EC2, OpenStack, RackSpace, Cobbler и других.

Каковы преимущества динамической инвентаризации перед статической?
  • Динамические инвентаризации прекрасно сокращают количество человеческих ошибок, поскольку информация собирается с помощью сценариев.
  • Управление запасами требует минимальных усилий.

Вы можете написать собственную динамическую инвентаризацию на любом языке программирования по вашему выбору. Инвентаризация должна возвращать формат JSON при передаче соответствующих параметров.

Используйте существующий сценарий динамической инвентаризации

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

Чтобы получить информацию о хостах внутри сценария динамической инвентаризации, просто запустите его.

./script --list 

Как указывалось ранее, выходные данные должны быть в формате JSON в формате, указанном ниже.

Словарь, состоящий из групп (т. е. веб-серверов, баз данных_серверов).
  • Список управляемых хостов для каждой группы
  • Словарь переменных
Мета-словарь
  • Хосты и хоствары
Пример вывода
{
  "webservers": {
    "hosts": [
      "webserver1.example.com",
      "webserver2.example.com"
    ],
    "vars": {}
  },
  "database_servers": {
    "hosts": [
      "mysql_db1",
      "mysql_db2"
    ],
    "vars": {}
  },
  "_meta": {
    "hostvars": {
      "mysql_db2": {},
      "webserver2.example.com": {},
      "webserver1.example.com": {}, 
      "mysql_db1": {}
    }
  }
}
Заключение

В этой статье мы продемонстрировали, как создавать как статические, так и динамические инвентаризации. Таким образом, файл статической инвентаризации представляет собой обычный текстовый файл, содержащий список управляемых хостов или удаленных узлов, номера и IP-адреса которых остаются довольно постоянными.

С другой стороны, динамический файл хоста постоянно меняется по мере добавления новых хостов или вывода из эксплуатации старых. IP-адреса хостов также являются динамическими при остановке и запуске новых хост-систем. Мы очень надеемся, что этот урок был для вас информативным.