如何创建一个使用通用方式中的对象实例的fiels来填充其属性的配方?以通用的方式从变量配置提供程序
作为一个例子,考虑以下几招:
component = $auth_docker
docker_image component.name do
registry component.registry
tag component.tag
action :pull
end
当你有一个像这样的食谱50多岁,他们保持真正得到压倒性的。
在Python中,我可能会实施一个解决方案,看起来有点像这样:
docker_image = DockerImage(**$auth_docker)
或者,我会建立某种形式的辅助函数的建立对我来说:
def generate_docker_image_lwrp(attributes):
lwrp = DockerImage()
lwrp.registry = attributes.registry
lwrp.tag = attributes.tag
return lwrp
目标是减少食谱的维护。例如今天早上,我想在所有拉取图像的食谱中添加厨师的“重试”属性。我不得不编辑所有这些 - 我不想那样。我应该能够a)将属性添加到堆栈的JSON中b)编辑Ruby包装类,使它的实例(即:$ auth_docker)获得“retries”字段,然后c)将retries属性添加到lwrp发电机。由于所有配方都使用相同的发生器,因此配方根本不需要编辑。
这是可能的使用厨师,在'通知'的方式仍然工作?
具有可你考虑过使用'BasicObject#instance_eval'? [#instance_eval](http://ruby-doc.org/core-1.9.3/BasicObject.html#method-i-instance_eval) – floum
嗯,不,我的Ruby语言知识和经验非常非常薄,而且这更复杂,因为Chef不提供完全纯粹的Ruby上下文......即使在阅读粘贴的文档后,我也不确定我将如何使用这种方法来对付LWRP。任何指针? – Joe