Как заставить 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
Надеюсь, поможет!