我找了好几天,很郁闷。我们想使用 Foreman 作为监控和配置工具。我们想停用 Foreman 的 ENC,只使用 Hiera。我该怎么做?
至于原因:
- 我的老板也希望如此。
- Foreman 无法解析来自 Hiera 的参数
例子:
定义 repo_file_manager( $repository_url = "http://${yum_client::lib::repository_server}/repos/${name}/", $ensure = '出席', $gpgcheck = '0', $enable = '1') { $repoconfdir = '/etc/yum.repos.d' 文件 {“${repoconfdir}/${name}.repo”: 确保 => $确保, 组 => '根', 模式 => '0644', 所有者 => 'root', 需要 => 文件['/etc/yum.repos.d'], 内容 => 模板(“yum_client/repofile.erb”), } }
${yum_client::lib::repository_server}
返回 nil,但是当我这样做时hiera(yum_client::lib::repository_server)
,我得到了正确的结果。
答案1
Foreman 只是一个 ENC,这意味着当被要求时,它会向 Puppet Master 发送一组 YAML 格式的类和变量。
如果变量在 Hiera 中,并且你确实不是使用 Foreman 覆盖它,Hiera 中的变量应该会自动使用,因为它不会出现在 YAML 输出中。在较新版本的 Foreman 中,您实际上可以同时执行这两项操作:使用 Hiera 的默认设置,但仍然可以使用 Foreman 覆盖该值。
至于您的问题:iiuc,您正在创建的是已定义类型,它不具有与 Hiera 类相同的数据绑定属性。您可能想要做的是调用 hiera 函数,而不是引用已定义类型中的“原始”变量。这可能需要稍微重写该类型,但无论您是否使用 Foreman 作为 ENC,它都应该可以正常工作。