我正在尝试使用不同的属性两次运行相同的配方。有没有办法在运行列表中指定它?例子:
"myRecipe":{
"run-list": "recipe[test], recipe[test]"
}
第一个应该有 flag=false 而第二个应该使用 flag=true 执行。
我正在尝试使用不同的属性两次运行相同的配方。有没有办法在运行列表中指定它?例子:
"myRecipe":{
"run-list": "recipe[test], recipe[test]"
}
第一个应该有 flag=false 而第二个应该使用 flag=true 执行。
不,那是不可能的。你必须在你的配方中实现这样的逻辑,例如遍历一个数组。
我之前回答过一个类似的问题:简短的版本是,你需要修改你的想法。如果您需要安装软件并对其进行配置,最好考虑将其分成两部分。
更长的答案:你看过 opscode 社区网站上的任何食谱吗?许多模式重复出现,其他人发表的工作肯定会很有用......尤其是当你似乎刚开始接触厨师时。
我也尝试过使用资源:
define :installx, :cmd=>'good', :upgrade=>true do
Chef::Log.info('cmd = #{params[:cmd]}')
if params[:upgrade]
Chef::Log.info('upgrading...')
else
Chef::Log.info('installing...')
end
end
installx resource
installx "name" do
cmd "install 1"
upgrade true
end
它出错了:“错误:找不到用于定义的资源”这几乎完全出自官方文档。如果有人知道是什么原因造成的,请告诉我。
在我看来,一些 Chef 食谱写得很好,例如https://github.com/daptiv/visualstudio的 visualstudio 食谱。
当我需要运行这个食谱两次时,我确实有一个案例。我必须在机器上安装 Visual Studio 2012 和 2013 才能编译不同的源代码。这些版本的 Visual Studio 通过指向 XML 文件具有完全相同的静默安装过程,因此很容易使其适用于 2012 年和 2013 年。
我能够创建一个 Chef 角色文件来覆盖 visualstudio 食谱的属性,以指向我的私有 Visual Studio 2012 ISO。那很简单。然后我创建了另一个用于安装 2013 的 Chef 角色文件以指向单独的 Visual Studio 2013 ISO。由于 Chef 没有两次运行该配方,因此最终只安装了 Visual Studio 2013。:(
如果我必须制作两本“visualstudio”食谱的本地副本,那就太糟糕了。