Как настроить путь к файлу инвентаризации по умолчанию в Ansible

AnsibleBeginner
Практиковаться сейчас

Введение

Ansible – это широко используемый инструмент автоматизации IT, упрощающий управление инфраструктурой и приложениями. В этом руководстве мы рассмотрим, как установить путь к файлу инвентаризации по умолчанию в Ansible, обеспечивая эффективное и последовательное управление инфраструктурой. Файл инвентаризации в Ansible содержит список хостов, которыми управляет Ansible. Настроив пользовательское местоположение файла инвентаризации, вы сможете лучше организовать свой рабочий процесс автоматизации.

Понимание инвентаризации Ansible

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

Что такое инвентаризация Ansible?

Инвентаризация Ansible – это файл, содержащий информацию о хостах, которыми будет управлять Ansible. По умолчанию Ansible ищет файл инвентаризации в /etc/ansible/hosts. Инвентаризация может быть в разных форматах, но наиболее распространенным является файл в стиле INI или файл YAML.

Давайте проверим, правильно ли установлен Ansible в нашей системе:

ansible --version

Вы должны увидеть вывод, похожий на этот:

ansible [core 2.12.x]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/labex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.10.x (default, Ubuntu, etc.)

Теперь давайте посмотрим на местоположение файла инвентаризации по умолчанию:

cat /etc/ansible/hosts

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

## Example inventory file

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

В этом формате:

  • [webservers] и [dbservers] – это имена групп
  • Имена хостов или IP-адреса, перечисленные под каждой группой, принадлежат этой группе

Для нашей лаборатории мы создадим собственный пользовательский файл инвентаризации в другом месте.

Создание пользовательского файла инвентаризации

Теперь, когда мы понимаем, что такое файл инвентаризации, давайте создадим свой собственный пользовательский файл инвентаризации в каталоге нашего проекта.

Создание каталога для файлов Ansible

Сначала перейдем в каталог нашего проекта и создадим отдельную папку для наших файлов Ansible:

cd ~/project
mkdir -p ansible/inventory

Создание пользовательского файла инвентаризации

Теперь давайте создадим простой файл инвентаризации в нашем новом каталоге:

cat > ansible/inventory/hosts.ini << 'EOF'
## Custom inventory file

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

[local]
localhost ansible_connection=local

[all:vars]
ansible_user=ubuntu
EOF

Этот файл инвентаризации определяет три группы:

  • webservers: Содержит два веб-сервера
  • dbservers: Содержит два сервера баз данных
  • local: Содержит localhost со специальной настройкой подключения

Давайте проверим наш вновь созданный файл инвентаризации:

cat ansible/inventory/hosts.ini

Вы должны увидеть содержимое, которое мы только что создали.

Этот файл теперь готов к использованию в качестве нашего пользовательского файла инвентаризации. На следующем шаге мы настроим Ansible на использование этого файла по умолчанию вместо общесистемного файла /etc/ansible/hosts.

Установка пути к файлу инвентаризации по умолчанию

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

Метод 1: Использование файла конфигурации Ansible

Ansible ищет файлы конфигурации в следующем порядке:

  1. Переменная окружения ANSIBLE_CONFIG
  2. ansible.cfg в текущем каталоге
  3. ~/.ansible.cfg (домашний каталог пользователя)
  4. /etc/ansible/ansible.cfg (общесистемный)

Давайте создадим файл ansible.cfg в каталоге нашего проекта:

cat > ~/project/ansible/ansible.cfg << 'EOF'
[defaults]
inventory = ~/project/ansible/inventory/hosts.ini
host_key_checking = False
EOF

В этом файле конфигурации мы установили:

  • inventory: Путь к нашему пользовательскому файлу инвентаризации
  • host_key_checking: Отключено, чтобы предотвратить запросы проверки ключа хоста SSH

Метод 2: Использование переменной окружения

Другой способ указать файл инвентаризации – использовать переменную окружения ANSIBLE_INVENTORY. Это полезно, когда вы хотите временно использовать другой файл инвентаризации, не изменяя конфигурацию:

export ANSIBLE_INVENTORY=~/project/ansible/inventory/hosts.ini

Давайте убедимся, что наша конфигурация работает, выполнив простую команду Ansible:

cd ~/project/ansible
ansible --list-hosts all

Эта команда должна вывести список всех хостов из нашего пользовательского файла инвентаризации:

  hosts (5):
    web1.example.com
    web2.example.com
    db1.example.com
    db2.example.com
    localhost

Теперь Ansible будет использовать наш пользовательский файл инвентаризации по умолчанию, когда мы запускаем команды Ansible из каталога ~/project/ansible.

Проверка конфигурации инвентаризации

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

Проверка инвентаризации с помощью ansible-inventory

Команда ansible-inventory позволяет нам просматривать и проверять конфигурацию нашей инвентаризации:

cd ~/project/ansible
ansible-inventory --list

Это отобразит инвентаризацию в формате JSON:

{
  "_meta": {
    "hostvars": {
      "localhost": {
        "ansible_connection": "local"
      }
    }
  },
  "all": {
    "children": ["dbservers", "local", "ungrouped", "webservers"]
  },
  "dbservers": {
    "hosts": ["db1.example.com", "db2.example.com"]
  },
  "local": {
    "hosts": ["localhost"]
  },
  "webservers": {
    "hosts": ["web1.example.com", "web2.example.com"]
  }
}

Для более читаемого формата мы можем использовать опцию --graph:

ansible-inventory --graph

Это покажет инвентаризацию в древовидной структуре:

@all:
  |--@dbservers:
  |  |--db1.example.com
  |  |--db2.example.com
  |--@local:
  |  |--localhost
  |--@ungrouped:
  |--@webservers:
  |  |--web1.example.com
  |  |--web2.example.com

Тестирование соединения с локальным хостом

Давайте выполним простую команду ping, чтобы убедиться, что мы можем общаться с локальным хостом:

ansible local -m ping

Вы должны увидеть вывод, похожий на:

localhost | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Запуск простой команды на хостах

Мы также можем запустить команду на наших хостах, используя команду ansible. Поскольку наши примеры хостов на самом деле не существуют, давайте нацелимся только на локальный хост:

ansible local -a "uname -a"

Это выполнит команду uname -a на локальном хосте и покажет вывод, похожий на:

localhost | CHANGED | rc=0 >>
Linux ubuntu 5.15.0-1033-aws #37-Ubuntu SMP Wed Aug 16 07:38:46 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

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

Резюме

В этом руководстве вы узнали, как настроить и сконфигурировать путь к пользовательскому файлу инвентаризации в Ansible. Теперь вы понимаете:

  • Что такое файл инвентаризации Ansible и его местоположение по умолчанию
  • Как создать пользовательский файл инвентаризации с группами хостов
  • Как настроить Ansible для использования вашего пользовательского файла инвентаризации по умолчанию, используя как метод файла конфигурации, так и переменные окружения
  • Как проверить конфигурацию вашей инвентаризации с помощью различных команд Ansible

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

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