由于Shell本地预配程序创建的自定义菜谱路径不存在而导致打包程序失败(错误)

时间:2018-09-13 17:19:10

标签: chef-solo packer

我有一个打包程序配置,可在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 中来解决了这个问题,但是如果可能的话,我也想避免使用这条路线。

1 个答案:

答案 0 :(得分:0)

只需创建一个空目录vendor/cookbooks

  

打包程序中是否存在一种机制,可以在首先解决chef-solo设置程序之前先运行本地shell?

  

,并且理想情况下,希望像在先运行berks的包装脚本中那样,仅在打包程序中运行此程序。

如果您还有其他类似问题,我建议您重新考虑。 Packer尝试做好一件事,而忽略分配,最好通过包装脚本来解决。