Chef infra 参数化厨师食谱
我在chef中有一个菜谱,我想多次使用它(在多个角色中),只需要几个不同的参数。我希望能够在同一个节点上使用多个这样的角色Chef infra 参数化厨师食谱,chef-infra,chef-recipe,Chef Infra,Chef Recipe,我在chef中有一个菜谱,我想多次使用它(在多个角色中),只需要几个不同的参数。我希望能够在同一个节点上使用多个这样的角色 如何“参数化”配方?我不能使用属性,因为这些属性位于节点上,所以一个角色将覆盖另一个角色的属性。在这种情况下,建议使用轻量级资源提供程序或类似的方法 我认为,当运行列表聚合时,它会重复任何配方,因此,如果您有6个角色,都包含相同的配方,并将每个角色添加到运行列表中,那么它实际上只会运行该配方一次 可以找到LWRP的简要介绍,尽管这比创建一个新的更具执行性 在这种情况下,一
如何“参数化”配方?我不能使用属性,因为这些属性位于节点上,所以一个角色将覆盖另一个角色的属性。在这种情况下,建议使用轻量级资源提供程序或类似的方法 我认为,当运行列表聚合时,它会重复任何配方,因此,如果您有6个角色,都包含相同的配方,并将每个角色添加到运行列表中,那么它实际上只会运行该配方一次 可以找到LWRP的简要介绍,尽管这比创建一个新的更具执行性 在这种情况下,一旦您拥有LWRP,您可以创建一个多次调用它的配方,也可以为每次调用创建单独的配方
您可以利用节点的数据模型层次结构来构建某种对象,该对象表示您希望运行的实例,并以这种方式循环。我发现这个答案对于帮助我处理类似的用例非常有用。我想分享一个简单的例子,创建一个对象来迭代PatrickWalker所指的对象(“…构建某种表示实例的对象..并循环…”)。我希望这能帮助一些人
default['config'] = '{"files":[{"name":"/tmp/file_1","content":"file contents 1"},{"name":"/tmp/file_2","content":"file contents 2"}]}'
配方:
config = JSON.parse("#{node['config']}")
files = config['files']
files.each do |file|
file "#{file['name']}" do
content "#{file['content']}"
end
end
您可以将这个简单的示例推断到您自己的用例中。我使用了定义,但也将研究LWRP。谢谢。没问题,我们这样做是为了安装一些内部产品。我们需要为每个步骤执行一组通用步骤,因此我们定义了一个资源,定义了我们希望能够更改的参数,然后定义了一个:install操作,然后有一些配方为我们执行安装。我们这样做,而不是自动安装许多对象,以保持运行列表可读性和易于理解