首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在hiera的其他地方引用hiera变量?

如何在hiera的其他地方引用hiera变量?
EN

Stack Overflow用户
提问于 2022-02-28 16:16:13
回答 1查看 298关注 0票数 0

我们在木偶中使用角色模式和hiera,这意味着我们在hiera.yaml中有这些行

代码语言:javascript
复制
- name: "Roles data"
  path: "roles/%{::server_role}.yaml"

我们有一个定制的事实,在facter运行时生成角色名称,但是我们希望将它移到hiera中。与facter生成的server_role变量不同,我们希望在hiera中指定server_role,并让该变量在hiera的其他地方引用。就像这样:

hiera.yaml:

代码语言:javascript
复制
- name: "Per-node data"
  path: "nodes/%{trusted.certname}.yaml"

- name: "Roles data"
  path: "roles/%{lookup(server_role)}.yaml"

节点/主机名.nodes:

代码语言:javascript
复制
server_role: foo_bar

我见过这个问题,它说要使用hiera()lookup(),但是当我尝试使用它们时,我会得到以下错误消息:

代码语言:javascript
复制
Interpolation using method syntax is not allowed in this context

那么,如何使用hiera中其他地方定义的hiera变量呢?

编辑:

定义角色的原型代码示例可以使用facter已知的任何事实,通常提供基于主机名的示例。当无法将服务器配置嵌入到主机名中时,常见的(Ish)解决方法是编写像/etc/server_role这样的文件,但当您需要将ssh放入机器并编辑文件时,它似乎不符合配置管理的目的。正如这里提到的其他注释和答案一样,您可以使用ENC,但这里的目标是不要将配置存储在版本控制之外。事实上,我们有领班作为一个ENC,我们做了一个实践,永远不使用它,因为然后升级和其他维护变得不可持续。

我们可以编写一个类,该类将从hiera获取数据,并将其写入/etc/server_role,在下一次木偶运行时,facter将获取该数据并将其发送回hiera,因此我们将在hiera.yaml中使用server_role事实。虽然这听起来很恶心,但到目前为止,这是最著名的解决方案。还在为这个问题寻找更好的答案。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-02-28 18:57:22

正如@MattSchuchard在注释中解释的那样,您不能将Hiera数据插入到Hiera配置中,因为在查找数据之前必须知道配置。

如果您需要数据层次结构中的每个角色级别,那么另一种选择是通过外部节点分类器将角色分配给机器。您不需要它来分配任何类,只需要server_role顶级变量,可能还有environment

另一方面,也许您一开始就不需要一般层次结构中的每个角色级别。很多人做角色&配置文件中没有每个角色的数据,但是即使您不想完全没有角色数据,也可能是模块中提供角色类的模块专用数据已经足够了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71297930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档