Ruby 在puppet中添加自定义函数
我正在尝试在puppet中移植Ruby脚本。据我所知,实现这一点的唯一方法是在模块中创建自定义函数。如果还有别的办法,请随时告诉我。我尝试了如所示的第一个测试,在中声明了一个新模块:Ruby 在puppet中添加自定义函数,ruby,function,file-io,puppet,Ruby,Function,File Io,Puppet,我正在尝试在puppet中移植Ruby脚本。据我所知,实现这一点的唯一方法是在模块中创建自定义函数。如果还有别的办法,请随时告诉我。我尝试了如所示的第一个测试,在中声明了一个新模块: /etc/puppet/modules/custom_module 并使用以下代码编辑了名为/etc/puppet/modules/custom_module/lib/puppet/parser/functions/newfunction的新函数文件: module Puppet::Parser::Functio
/etc/puppet/modules/custom_module
并使用以下代码编辑了名为/etc/puppet/modules/custom_module/lib/puppet/parser/functions/newfunction
的新函数文件:
module Puppet::Parser::Functions
newfunction(:write_line_to_file) do |args|
filename = args[0]
str = args[1]
File.open(filename, 'a') {|fd| fd.puts str }
end
end
然后我在清单/etc/puppet/environments/desarrolo/manifests/des.pp
中使用了以下内容:
node "develserver" {
write_line_to_file('/tmp/some_file', "Hello world!")
}
最后,当我运行puppet代理-tod
时,它会显示以下错误:
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Unknown function write_line_to_file at /etc/puppet/environments/desarrollo/manifests/des.pp:5 on node develserver
我做错了什么?直接的问题可能是函数文件名上缺少扩展名
.rb
请记住,在目录编译期间,Ruby代码是在主机上运行的。如果希望Puppet在代理端执行操作,则不能使用自定义函数。你必须写一个(通常是一个提供者)来完成这项工作。你错过了第一部分。谢谢你,菲利克斯,我会努力的。我的目的是在代理上运行ruby脚本,这样您的解决方案将是对它们采取的最佳操作。