1

Кажется, что в безразличном мире есть слишком много способов справиться с инвентарем, и мы столкнулись с какими-то трудными вопросами.Как управлять доступным инвентарем с несколькими средами масштабируемым и гибким способом?

В настоящее время у нас есть 4 официальных целевых среды: производство, постановка, тестирование и локальный (localhost). Теперь это все группы хостов внутри одного инвентаря, который находится в корне.

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

Некоторые сотрудники хотели бы разделить их на разные запасы для каждой среды, чтобы избежать случайного исполнения против всех сразу. Я немного обеспокоен тем, что это может увеличить затраты на обслуживание, и, вероятно, будет труднее работать с такими инструментами, как Ansible Tower, Semamphore или RunDeck. Я также хочу переключиться на динамический ресурс ec2, который делает разделение менее интересным.

Вот несколько вопросов, которые должны быть addresed по оптимальной настройке:

  • как развернуть конкретный компонент по отношению к конкретной среде?
  • Как я могу протестировать книгу, не влияя на производство или постановку?
  • значение, что по умолчанию он должен держать в качестве «хозяев: значение» внутри нашего playbooks
  • , что должно быть инвентаризации по умолчанию, если мы будем использовать несколько файлов
  • как мы можем развернуть что-то против всей инфраструктуры (несколько запасов на в то же время)
+1

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

ответ

1

Я думаю, что пришло время для динамического инвентаря. Я столкнулся с аналогичной проблемой, когда у меня было 3 среды для развертывания и один файл инвентаря. Я решил его, сохранив все хосты в базе данных (MongoDB в моем случае), а затем написал динамический инвентарь для создания списка хостов. Выбор среды был сделан путем добавления переменной env перед вызовом функции (что-то вроде environ=PROD ansible-playbook -i inventory ... В инвентаре также было немного логики, чтобы избежать возможности развертывания на производстве (на основе uid/gid). Чтобы ответить на ваши вопросы:

  • вы можете использовать несколько способов сделать это, используйте переменную ENV и динамический инвентарь, отдельные инвентарные файлы или использовать единый кадастр и название группы (prod|dev|staging)_<hostgroup>
  • Это полностью зависит от того, как вы решили управлять инвентарь
  • В проигрывателе нет значения по умолчанию для - hosts:. Выберите только хосты вам нужно от правильного инвентаря.
  • Значение по умолчанию зависит от того, что вы решите, но я бы сказал, не использовать производство по умолчанию .. Не самая безопасная вещь, возможно, использовать dev по умолчанию?
  • Просто используйте -i inventory_dir/. Вы можете передать директорию в -i. Ansible прочитает все файлы и выполнит все файлы -x.
+0

Спасибо за ввод. Тем не менее, есть несколько вещей, которые я не совсем понимаю: зачем иметь разные запасы, когда вы будете использовать переменную окружения? Почему бы не назначить среду через группу внутри самого инвентаря? Что касается значения по умолчанию для хостов внутри playbook ... немного странно, мой инстинкт подскажет мне указать группу там, группу, которая включает в себя все хосты, к которым должна применяться эта игра. Мне не очень нравится идея предположить, что ansible будет исполнен человеком, который знает, к какому хозяину применить, это должно быть внутри файла. – sorin

+0

Извините, может быть, я не был чист. Я использовал переменную env с динамической инвентаризацией, в моем случае был скрипт python, читающий env var и выбирая хосты из базы данных на основе этого (и, конечно, хост-группы). Многочисленные запасы будут использоваться, если вы не хотите/не можете использовать динамический инвентарь или env var. Я не совсем понял, что вы подразумеваете в части значений по умолчанию. – shaps

1

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

Мы не на AWS или что-то подобное. Так что, к сожалению, у меня нет причудливой апи с тегом и т. Д.В этом случае наилучшим решением для нас является инвентарь для каждой среды. В этих инвентарях мы используем простые группы хостов.

инвентаризации файлы хранятся в subfoder: инвентарь/prod.ini

[mysql] 
db-server.prod.domain 

[web] 
app-1-server.prod.domain 
app-2-server.prod.domain 

Playbooks организованы по группам. Итак, у меня есть плейер mysql.yml для всего материала базы данных и игровая автомат web.yml для веб-сервера. Они включены в книжку main.yml, чтобы организовать их для полноценного запуска, возможно, в определенном порядке.

include mysql.yml 
include web.yml 

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^