在木偶执行期间运行任意ruby代码?

时间:2013-07-15 15:19:32

标签: puppet facter

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

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

  

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

2 个答案:

答案 0 :(得分:2)

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

如果有人有更多的“傀儡”方法来实现这一点,我很乐意了解它!

答案 1 :(得分:1)

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