Не совместно используемые запасы в ansible

#ansible #ansible-inventory

#ansible #ansible-инвентаризация

Вопрос:

У меня есть репозиторий ansible с несколькими запасами (все очень стандартно). Что-то вроде:

 - inventories/
   - inv1
   - inv2
   ...
   - invN
- roles/
- playbooks/
  

У меня есть несколько серверов развертывания, с которых я могу запускать ansible. Существует ограничение: на сервере развертывания должны быть только те запасы (я думаю, у меня всегда будет отношение 1 к 1), которые он будет использовать. Это означает, что если сервер srv1 использует inv1, остальные запасы не должны присутствовать.

Я думал о двух подходах:

  • каждый инвентарь отправляется в отдельный репозиторий git, и я буду проверять только выбранные репозитории;
  • почти то же самое, что и в предыдущем, но вместо нескольких ветвей в одном репозитории git.

Оба эти решения кажутся своего рода грязным взломом, и я считаю, что есть более простое и элегантное решение (однако я ничего не нашел в рекомендациях ansible). Есть предложения?

Спасибо

ДОБАВЛЕНО УТОЧНЕНИЕ: насколько я вижу, я не сформулировал свой вопрос четко. Вопрос скорее в том, что на сервере развертывания у меня должно быть не более N (скорее всего, 1) запасов физически. Показанная выше структура показывает мое текущее репозиторий git, но на сервере развертывания у меня должно быть что-то вроде:

 deployment_server1:
- inventories/
   - inv1/
- roles/
- ....

deployment_server2:
- inventories/
    -inv87/
- roles/
- playbooks/

... and so on.
  

Ответ №1:

Либо вы можете использовать ansible.cfg файл для указания на запасы.

 [defaults]
inventory = hosts
host_key_checking = False
  

Или вы можете изменить текущую инвентаризацию следующим образом
ansible-playbook example.yml -i inventory

Ответ №2:

В зависимости от того, как вы используете ansible на этих хостах, возможно, стоит помнить, что вы можете переопределить любой параметр в ansible с помощью переменной среды. ANSIBLE_INVENTORY — это все, что вам здесь нужно.

Например, ANSIBLE_INVENTORY=$(hostname) ansible [args] будет использовать файл инвентаризации с тем же именем, что и у текущего хоста.

Вы также можете переопределить его с помощью флага -i .

Комментарии:

1. спасибо за ответ. Я добавил некоторые пояснения к своему вопросу

2. Хм, тогда я не знаю. Здесь есть своего рода красные флажки. Я имею в виду, что если вы пытаетесь не размещать файлы инвентаризации на серверах, потому что они содержат конфиденциальную информацию о безопасности, вам, вероятно, нужно другое решение? Вы развертываете, просто выполняя git pull на каждом сервере?

3. rsync может быть простым решением. rsync —exclude=inventories/* —include/inventories/the-file-you-want приведет вас туда, где вы хотите быть, но в плохом смысле кажется хакерским.

4. Кроме того (я как бы ненавижу, что комментарии — это всего одна строка), возможно, вы захотите задать это как нечто иное, чем вопрос ansible, на самом деле это не кажется специфичным для ansible.