我们在木偶中使用角色模式和hiera,这意味着我们在hiera.yaml中有这些行
- name: "Roles data"
path: "roles/%{::server_role}.yaml"我们有一个定制的事实,在facter运行时生成角色名称,但是我们希望将它移到hiera中。与facter生成的server_role变量不同,我们希望在hiera中指定server_role,并让该变量在hiera的其他地方引用。就像这样:
hiera.yaml:
- name: "Per-node data"
path: "nodes/%{trusted.certname}.yaml"
- name: "Roles data"
path: "roles/%{lookup(server_role)}.yaml"节点/主机名.nodes:
server_role: foo_bar我见过这个问题,它说要使用hiera()或lookup(),但是当我尝试使用它们时,我会得到以下错误消息:
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事实。虽然这听起来很恶心,但到目前为止,这是最著名的解决方案。还在为这个问题寻找更好的答案。
谢谢。
https://stackoverflow.com/questions/71297930
复制相似问题