我有一个打包程序配置,可在AWS EC2中使用Chef-solo进行配置。这很好。我已经介绍了berkshelf来管理第三方食谱,但是效果也不佳。
我正在一个厨师仓库中工作,该仓库具有本地开发的食谱,角色,数据包等。通过引入伯克,我想保持cookbooks
目录的清洁,并将第三方食谱放入{{1} }(不包括git,因此可以使存储库保持干净/最小化其他开发人员将berks管理的食谱添加到vc中的机会)。因此,我在运行vendor/cookbooks
的chef-solo预置器之前添加了一个本地shell预置器,并用berks vendor vendor/cookbooks
更新了chef-solo预置器。我的想法是,shell-local将在chef-solo之前运行,并且两个菜谱路径都可用。
但是,当我运行打包程序构建时,尝试在AWS构建器甚至没有开始构建之前就尝试解析食谱路径时,它无法快速完成,失败是参考了不存在的vendor / cookbooks目录。这是打包程序供应商细分:
cookbook_paths ["cookbooks","vendor/cookbooks"]
运行此命令时,它会失败:
"provisioners" : [
{
"type": "shell-local",
"command": "bundle install && bundle exec berks vendor vendor/cookbooks"
},
{
"type" : "chef-solo",
"cookbook_paths" : ["cookbooks","vendor/cookbooks"],
"environments_path" : "environments",
"roles_path" : "roles",
"run_list" : ["role[somerole]"]
}
],
在打包程序中是否存在一种机制,该机制将在解决chef-solo设置程序之前首先运行本地shell?我想避免在构建器中运行berk(即我希望菜谱由运行packer的主机来解决),并且理想情况下,它希望像在先运行berk的包装脚本中那样,仅在packer中运行。我现在已经通过出售到amazon-ebs output will be in this color.
1 error(s) occurred:
* Bad cookbook path 'vendor/cookbooks': stat vendor/cookbooks: no such file or directory
中来解决了这个问题,但是如果可能的话,我也想避免使用这条路线。
答案 0 :(得分:0)
只需创建一个空目录vendor/cookbooks
。
打包程序中是否存在一种机制,可以在首先解决chef-solo设置程序之前先运行本地shell?
否
,并且理想情况下,希望像在先运行berks的包装脚本中那样,仅在打包程序中运行此程序。
如果您还有其他类似问题,我建议您重新考虑。 Packer尝试做好一件事,而忽略分配,最好通过包装脚本来解决。