系统地向 puppet 代理节点中的所有用户导出 200 个环境变量列表的最佳方法是什么,hiera 会有用吗?

what's the bestway to export the list of 200 Environment variables systematically to all the users in the puppet agent node , will hiera be useful?

我有一个 RPM,我想用 Puppet 管理它的安装。在安装时,它取决于 200 个环境变量的值,这些值因系统而异,并且可能会随时间变化。最好的方法是什么?在 Puppet 中使用 Hiera 或 ERB 模板来更改和控制环境版本更好吗?

我是 Puppet 的新手,但对如何操作有了一些了解。我想知道导出如此大量环境变量的最有效方法。

您的第一个 long-term 最佳选择是重新设计 RPM 打包和/或打包软件本身,以便其 安装 完全独立于任何环境变量.这远非常态,尽管 Puppet 对大多数人来说,其他任何事情都存在严重问题。该软件可以在环境变量的影响下随心所欲地调整其 运行time 行为,但其安装应不受环境变量的影响。

但我预计您会否认这种可能性。在这种情况下,您需要了解,无论您如何配置系统以在用户会话中提供环境变量,Puppet 都会通过控制其启动的外部命令(例如包管理命令)的环境来实施良好的安全实践。因此,如果您需要通过环境变量影响其安装,您将无法使用 Package 资源来管理(安装)RPM。

我建议使用 Puppet 来管理导出所有需要的环境变量的 RPM 安装脚本,然后 运行s yum 安装 RPM。或者,如果必须,还可以管理 RPM 文件的本地副本,并让您的脚本使用 rpm 来安装它。如果您在安装时只需要 环境变量,那么它们可以直接进入脚本;否则,您可能希望通过 /etc/profile.d/software_name.sh/etc/profile.d/software_name.csh 中的环境设置文件来设置它们。无论哪种方式,模板,无论是 ERB 还是 EPP 样式,都是编写包含环境变量定义的文件的好方法。然后在适当的时候使用 Exec 资源来 运行 脚本。

Hiera 是一个单独的问题。请注意,通常情况下,Hiera 仅在目录编译期间用于主机,而不用于客户端机器。您绝对可以将环境变量值存储在外部 Hiera 数据文件中,并在目录构建时查找它们。我肯定会推荐它。根据您设置的具体方式,它可以使我建议的模板更易于实施。例如,您可以为模板提供从变量名到变量值的散列,并对其进行迭代以发出所有需要的变量定义——这比清单文件中 200 行单独的变量定义和相应的 200 行或更多行要好得多.