我目前正在编写一个充当“资源包装器”的提供程序。本质上,它需要一个名称,类型,一些参数,然后基于该名称创建资源。
我一直在使用Puppet::Resource.new(<type>, <name>, parameters: <parameters>)
,但似乎没有考虑Sensitive
参数。
例如,我尝试创建File
资源,如下所示:
Puppet::Resource.new('file', '/root/.ssh/id_rsa', parameters: params)
如果参数包含一个Sensitive
值,则会给我以下错误:
Could not evaluate: Parameter content failed on File[/root/.ssh/id_ra]:
Munging failed for value #<Sensitive [value redacted]> in class
content: no implicit conversion of
Puppet::Pops::Types::PSensitiveType::Sensitive into String
我需要对所有参数(敏感或不敏感)进行正确的资源创建调用吗?
编辑:由于我要完成的工作,我需要一个自定义类型和提供程序。我想管理需要可靠地知道用户主目录的资源。例如,我想管理/home/<user>/.vimrc
而不必事先知道该目录是什么。新的资源类型旨在将资源与用户的主目录“包装”在一起。编写自定义类型和提供程序是我知道的唯一方法。
编辑2:我已经按照建议尝试了以下操作,以将参数标记为敏感:
params = {
name: '/root/.ssh/id_rsa',
owner: 'root',
<more parameters...>
sensitive_parameters: ['content'],
}
Puppet::Type.type('file').new params
这似乎没有任何效果(我仍然遇到相同的错误),即使看起来应该有效果(根据puppet / type.rb的源代码)。