从Puppet中的Ruby自定义类型获取模块文件的内容

问题描述:

我正在为Puppet编写一个Ruby自定义类型,我必须加载位于'files'文件夹中相同模块中的文件的内容。有没有可以从供应商处获得的功能,可以给我的文件内容由"puppet:///modules/my_module/test.yaml"寻址?从Puppet中的Ruby自定义类型获取模块文件的内容

不,我不这么认为。

模块的清单应负责通过file资源将文件复制到代理程序,以便提供程序可以从已知位置使用它。

+0

听起来不错。我认为最好是将自定义类型封装在一个定义好的类型中来完成复制工作。 – 2014-09-25 14:28:54

+0

看看我的文章...你觉得,这是工作吗? – 2014-09-25 15:44:25

+0

@ Herr-Herner csanchez指出,这通常不起作用,因为类型代码运行代理端,而不是主端。 – 2014-09-26 13:27:00

我找到了一种方法让它工作......这是一个合适的解决方案吗?

file = Puppet::Parser::Files.find_file("my_module/my_file", 
       Puppet::Module.find('my_module').environment) 
File.open('/tmp/test', 'w') { |f| f.write(File.read(file)) } 

在服务器上运行的函数,代理中的类型。如果您使用标准的Ruby代码创建一个返回服务器文件内容的函数,则可以使用该函数将值注入到类型中。

有一些caveats关于你可以用功能做什么。