Ножевой вид узлов, не синхронизированных с сервером Automate

Итак, в нашей среде AWS мы запускаем Chef-Automate через AWS OpsWorks. Узлы автоматически регистрируются и загружают клиент Chef с помощью кода в пользовательских данных AWS. У нас есть еще один экземпляр EC2, работающий как рабочая станция Chef. Все это работает хорошо. Однако в этой конкретной непроизводственной среде узлы EC2 появляются и исчезают довольно часто. Чтобы все было в порядке, мы запускаем следующее задание cron на сервере Automate:

automate-ctl node-summary | grep missing | awk '{print $2}' |  while read var; do automate-ctl delete-node --force -d -u $var; done

Это удаляет любой узел, как только он отображается как «отсутствующий». Это тоже отлично работает. Однако когда мы запускаем список узлов-ножей или статус ножей на рабочей станции, мы получаем сотни неработающих узлов, некоторые из которых отсутствуют уже тысячи часов.

Очевидно, что knife не получает данные узлов из той же базы данных, что и automate-ctl. В идеале я хотел бы, чтобы какая-нибудь команда, которую я мог бы запустить через cron на сервере Automate, чтобы синхронизировать их, но я не вижу очевидного решения в документах. Я предполагаю, что knife подключается к серверу Automate, чтобы получить его список, поэтому я бы предпочел какое-то решение, которое работает там, а не на рабочей станции.

Любые идеи???


person Matt    schedule 15.06.2018    source источник


Ответы (1)


Вы бы запустили что-то подобное, используя knife node bulk delete и knife client bulk delete. Существуют также задачи Lambda, которые будут отслеживать, например, события выключения экземпляра и очищать сервер Chef.

Chef Server и Automate обмениваются данными, но каждый из них имеет свою собственную базу данных, поскольку Automate часто сохраняет исторические записи даже после удаления узла с Chef Server для аудита или отслеживания соответствия.

person coderanger    schedule 15.06.2018
comment
Для всех, кто это видит, вот задание cron, которое выполняет очистку для синхронизации с сервером автоматизации: knife status | awk '{if ($2 == "hours" && $1 >= 24) print substr($4, 1, length($4)-1)}' | while read var; do knife client delete -y $var; knife node delete -y $var; done - person Matt; 26.06.2018