2

我正在扩展puppetlabs-mongodb模块以允许用户身份验证。挑战在于 mongo 更改了在2.22.4版本之间启用用户身份验证的机制,因此必须运行不同的代码才能将用户身份验证凭据提供给数据库。

我最初的想法是创建一个自定义事实事实,该事实基本上捕获了 的输出mongod --version,但似乎事实事实是在执行 puppet 清单之前加载的。有没有办法在 puppet 执行期间在运行时执行任意代码,以便我可以访问mongod --version并决定使用哪种方法来启用用户身份验证?

注意:一种方法是让 puppet 运行单个脚本来创建用户凭据并让脚本mongod --version在运行时检测。这似乎不是一种非常木偶的做事方式,但也许我不相信这一点。处理在 puppet/facter 中动态访问变量的最佳方法是什么?

4

2 回答 2

2

来自@puppetlabs的说法是,您不能在 puppet 运行期间动态运行 ruby​​ 代码(或任何其他代码)。执行此操作的“正确”方法是在上面的注释中使用exec动态检查 mongodb 版本的语句。有关实现的详细信息,请参阅manifests/add_user.pp和相关的模板/add_user*.erb

如果有人有更“傀儡”的方法来完成这个,我很想了解它!

于 2013-07-16T14:06:05.387 回答
1

只需将您的 Ruby 代码放在 ERB 模板中并使用它template("${module_name}/templ.erb")来返回您的版本字符串。

于 2013-11-13T21:33:10.410 回答