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