У нас есть ряд серверов Шеф-повара, данные узла которых мы интегрируем с данными за пределами Шеф-повара. В настоящее время мы используем пакетный синхронизирующий процесс, чтобы считать узлы из Шеф-повара и затем продвинуть данные в систему интеграции данных. Мы выполняем это каждый час, и до сих пор это хорошо работает.
Мой вопрос состоит в том, поддерживает ли Шеф-повар механизм более в реальном времени для того, чтобы достигнуть эти данные. Идеально я хотел бы получить изменение - такое как новое появление узла или быть удаленным - более или менее сразу после того, как оно происходит, уменьшая задержку и также устраняя большие пакеты. Сервер Шеф-повара публикует уведомления? (Я ничего не вижу об этом здесь.) Или можно было бы обработать эту сторону клиента (шеф-повар-клиент)? Есть ли другие подходы, которые я не рассматриваю?
Править: Я говорю конкретно о данных узла. Я делаю
GET /nodes
получить узел-> хеш URI, и затем
GET /nodes/:name
получить отдельные данные узла. Это - огромное возвращение объема данных, хотя, таким образом, было бы замечательно использовать в своих интересах некоторый механизм нажатия, если это существует. Я делаю это, потому что я хочу интегрировать эти данные с другими служебными данными (например, сервисные данные зависимости, данные фермы, состояния вращения подсистемы балансировки нагрузки, и т.д.), который живет за пределами Шеф-повара.
Вы можете использовать обработчик отчетов , который запускается в конце выполнения chef-client и уведомляет вашу другую систему.
Объект run_status содержит некоторую интересную информацию о run, например run_status.updated_resources
, что может сделать уведомление зависимым от того, был ли изменен какой-либо ресурс. Если вас интересуют атрибуты узла, run_status.node
содержит новые атрибуты, которые можно выполнить POST с помощью HTTP-запроса.
Я не думаю, что у Chef есть встроенный такой механизм. Однако вам следует взглянуть на Chef-Guard . Chef-guard действует почти как прокси между вашими узлами / рабочей станцией и chef-сервером. он реализует весь API-интерфейс chef rest, поэтому вы можете использовать его, как если бы это был ваш сервер-повар. Однако он поддерживает репозиторий github со всеми вашими изменениями - в режиме реального времени. Затем он пересылает эти изменения на шеф-сервер. Вы можете сделать одно из двух, в зависимости от того, насколько вы амбициозны.
Я понимаю, что оба ответа требуют немного больших усилий, чем вы надеялись, но они доставят вас туда, куда вы хотите.