如何让 Rudder 根据应用指令的节点动态设置配置?
例如 - 管理数百个节点,每个节点都应该有一个文件“storage_password”,其中包含每个节点唯一的 32 位密码。
为每个节点创建一个唯一的 [directive, rule, group] 元组感觉显然是错误的,而且看起来很混乱且没有必要。
我想到了动态变量,在($prefix_${variable_suffix})
、 where的意义上,variable_suffix = "hostA"
还有一个名为 的变量prefix_hostA
,其中包含密码。variable_suffix 将是节点的主机名。
但是,我不确定这是否可能,或者即使它是更推荐的方法。
变量 dict 方法似乎是一种方法,但我不确定它是否可以在指令中使用,并且目前无法让它工作。
我应该如何最好地进行?
我提到了密码情况,但在其他情况下我也需要一些类似的行为,比如为每个节点设置 vpn 配置。
背景:公司正在从 Puppet 迁移到 Rudder,我的任务是使用他们在 Puppet 上使用的相当简单的功能来镜像 Rudder。使用 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
节点可以对节点属性具有“本地覆盖”,即可以在节点文件系统上定义的属性值,而不是在 Rudder 节点详细信息中(也在https://docs.rudder.io/reference/5.0/usage中解释/advanced_configuration_management.html#_node_properties )
您可以使用“数据源”舵插件https://docs.rudder.io/reference/5.0/plugins/datasources.html从外部 rest API 同步节点属性
来自节点环境的变量
您可以从节点上的事物定义变量,例如文件内容、命令输出等。
您可以使用标准库中的变量技术(在“杂项”类别中)定义此类变量。例如,
Variable from JSON file (dict)
允许将 json 文件加载为可在指令参数中使用的变量,语法为${variable_prefix.variable_name[json-key][json-subkey]}
. 还有variable from command
,或variable (string)
。如果从技术编辑器构建技术,则具有相应的通用方法:在“变量”类别中查找方法,例如“命令变量”允许(暂停)从命令结果创建变量;或者在 json 文件内容的情况下,如您所说,“来自前缀的变量 dict”。这些方法也可以在指令中使用。
模板
如果您需要更多涉及的模板工作,您可以使用 jinja 或 mustache,如下所述: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
希望能帮助到你!