Как заставить Rudder устанавливать разные конфигурации для каждого узла?

Как я могу заставить Rudder динамически устанавливать конфигурацию в зависимости от того, к какому узлу она применяет директиву?

Например, для управления сотнями узлов каждый должен иметь файл "storage_password", который содержит 32-значный пароль, уникальный для каждого узла.

Создание уникального кортежа [directive, rule, group] для каждого отдельного узла кажется явно неправильным, и кажется грязным и ненужным.

Я думал о динамических переменных, в смысле ($prefix_${variable_suffix}), где variable_suffix = "hostA"и есть переменная с именем prefix_hostA, который будет содержать пароль. Variable_suffix будет именем хоста узла.

Однако я не уверен, возможно ли это, или даже если это будет более рекомендуемый подход.

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

Как лучше мне продолжить?

Я упомянул случай с паролем, но есть и другие ситуации, в которых мне также понадобится такое поведение, например, настройка vpn config для каждого узла.

Справочная информация: компания переходит с Puppet на Rudder, и мне поручено отразить Rudder с помощью достаточно простых функций, которые они использовали в Puppet. С Puppet, вышеуказанная задача довольно проста.

1 ответ

Решение

Есть несколько способов сделать это - и вы правы, что построение правила для каждого узла не является правильным:)

В зависимости от более общего контекста, следует список возможностей:

Свойства узла

Наиболее распространенный способ сделать это - использовать свойства узла, то есть свойства, которые являются специфическими для каждого узла и могут быть пользовательскими в директивах. Документация находится здесь: https://docs.rudder.io/reference/5.0/usage/advanced_configuration_management.html И вы пример использования в руководстве по началу работы: определение https://docs.rudder.io/get-started/current/node-management/data.html и использование: https://docs.rudder.io/get-started/current/advanced-configuration/apply.html

Узел может иметь "локальное переопределение" для свойств узла, то есть значение свойства, которое может быть определено в файловой системе узла, а не в деталях узла руля (также объясняется в https://docs.rudder.io/reference/5.0/usage/advanced_configuration_management.html)

Вы можете синхронизировать свойства узла из внешнего API отдыха с плагином руддера "Источники данных" https://docs.rudder.io/reference/5.0/plugins/datasources.html

Переменные из окружения узла

Вы можете определять переменные из вещей на узле, таких как содержимое файла, вывод команды и т. Д.

Вы можете определить такую ​​переменную с помощью техники Variable (в категории "Разное") в стандартной библиотеке. Например, Variable from JSON file (dict) позволяет загрузить файл json как переменные, которые могут использоваться в параметрах директивы с синтаксисом ${variable_prefix.variable_name[json-key][json-subkey]}, Существует также variable from command, или же variable (string),

У вас есть соответствующие универсальные методы, если вы строите технику из редактора техник: ищите методы в категории "Переменная", например, "переменная из команды", которая позволяет (приостанавливать) создание переменной из результата команды; или в случае содержимого файла json, как вы сказали, "переменная dict из префикса". Эти методы также могут использоваться в директивах.

Будьте осторожны, когда вы используете эти директивы, вам нужно определить переменную перед их использованием, поэтому проверьте порядок вашей политики: https://docs.rudder.io/reference/5.0/usage/advanced_configuration_management.html

шаблонирование

Если вам нужна более сложная работа с шаблонами, вы можете использовать jinja или усы, как описано здесь: https://docs.rudder.io/rudder-by-example/current/files/advanced-file-templating.html

Свод

В Rudder 5.0 мы добавили плагин Vault, который позволяет получить секрет от (приостановки, снова) установки Vault: https://github.com/Normation/rudder-plugins/tree/master/vault

Старые ресурсы

Вы можете найти некоторую информацию о том, как это делалось раньше, без: https://www.mauras.ch/rudder-fun-with-variables.html

Еще кое-что

Это не имеет прямого отношения к вашей проблеме, но, поскольку она противоположна, она может быть актуальной. Иногда вы хотите получить информацию об инвентаризации из узлов, которых нет в стандартных данных инвентаризации, а затем использовать эти данные для создания групп, вы можете расширить инвентаризацию с помощью "ловушки инвентаризации узлов": https://docs.rudder.io/reference/5.0/usage/advanced_node_management.html

Надеюсь, поможет!

Другие вопросы по тегам