Итак, в нашей среде 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, чтобы получить его список, поэтому я бы предпочел какое-то решение, которое работает там, а не на рабочей станции.
Любые идеи???