Как объявить хост в файле инвентаря Ansible в формате YAML?

Ответ

В YAML-инвентаре Ansible хосты объявляются как ключи в секции hosts. Каждый хост может иметь переменные подключения, такие как ansible_host и ansible_user.

Пример базового инвентаря inventory.yml:

all:
  hosts:
    web_server_1:
      ansible_host: 192.168.1.10
      ansible_user: deploy
      ansible_ssh_private_key_file: ~/.ssh/id_rsa
    database_server:
      ansible_host: db.internal.company.com
  children:
    web_servers:
      hosts:
        web_server_1:
    database_servers:
      hosts:
        database_server:

Ключевые моменты:

  • Структура: Корневой элемент — all. Хосты перечисляются в hosts:.
  • Группы: Группы создаются в секции children. В примере web_servers и database_servers — это группы, содержащие соответствующие хосты.
  • Переменные: Параметры подключения (IP, пользователь, ключ) задаются как переменные для каждого хоста.
  • Важно: YAML чувствителен к отступам. Используйте пробелы, а не табуляцию.

Ответ 18+ 🔞

Э, слушай, смотри, как это всё работает. Ёпта, YAML-инвентарь в Ansible — это ж не просто список, это целая структура, как карта местности для твоего деплоя.

Вот, смотри, простейший пример inventory.yml:

all:
  hosts:
    web_server_1:
      ansible_host: 192.168.1.10
      ansible_user: deploy
      ansible_ssh_private_key_file: ~/.ssh/id_rsa
    database_server:
      ansible_host: db.internal.company.com
  children:
    web_servers:
      hosts:
        web_server_1:
    database_servers:
      hosts:
        database_server:

А теперь разжёвываю, что тут к чему:

  • Структура: Всё начинается с all. Это как корень всего дерева, ёбаный корень. Хосты — это ключики внутри hosts:. Просто пишешь имя и под ним — параметры.
  • Группы: А вот это уже хитрая жопа. Секция children — это где ты создаёшь свои банды серверов. Создал группу web_servers — и кидаешь туда хосты, которые туда относятся. Потом можешь на всю банду сразу команды запускать, а не по одному. Удобно, блядь.
  • Переменные подключения: Это самое важное. ansible_host — это куда стучаться (IP или домен). ansible_user — под кем заходить. А ansible_ssh_private_key_file — это путь к твоему секретному ключу, без него тебя просто пошлют нахуй с паролем.
  • Важнейший момент, на котором все обламываются: YAML, сука, помешан на пробелах. Используй ТОЛЬКО пробелы для отступов. Никаких табов! Одна табуляция — и весь твой файл накрывается медным тазом с ошибкой синтаксиса. Сам от себя охуеешь, пока ищешь, где эта невидимая залупа конская затесалась.