Назад | Перейти на главную страницу

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

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

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

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

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

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

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

Как мне лучше действовать?

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

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

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

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

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

Наиболее распространенный способ сделать это - использовать свойства узла, то есть свойства, которые специфичны для каждого узла и могут быть указаны пользователем в директивах. Документация здесь: https://docs.rudder.io/reference/5.0/usage/advanced_configuration_management.html#_node_properties И вы являетесь примером варианта использования в руководстве по началу работы: определение 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#_node_properties)

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

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

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

Вы можете определить такую ​​переменную с помощью техники переменных (в категории «Разное») в стандартной библиотеке. Например, 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#_directives_ordering

Шаблоны

Если вам нужна более сложная работа с шаблонами, вы можете использовать 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#extend-nodes-inventory

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