由于shell本地配置程序(berks)创建的不存在的自定义cookbook路径导致打包程序失败

问题描述 投票:0回答:1

我有一个打包器配置,使用AWS EC2中的chef-solo进行配置。这很好用。我已经介绍了berkshelf来管理第三方烹饪书,这也不行。

我正在一个厨师回购,有当地开发的食谱,角色,数据袋等。通过介绍berks,我想保持cookbooks目录清洁,并将第三方食谱放入vendor/cookbooks(这是git排除所以保持repos清洁/最小化其他开发者添加/推送berks管理的烹饪书到vcs的机会)。所以我在一个厨师独奏配置器之前添加了一个shell-local配置器,它运行berks vendor vendor/cookbooks并用cookbook_paths ["cookbooks","vendor/cookbooks"]更新了chef-solo provisioner。我的想法是shell-local将在Chef-solo之前运行,并且两个cookbook路径都可用。

但是,当我运行打包程序构建时,它很快就会在AWS构建器甚至开始构建之前快速尝试解析cookbook路径,并且在参考不存在的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]"]
        }
    ],

当我运行它时,它失败了:

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

在解析chef-solo provisioner之前,打包器中是否有一个机制首先运行shell-local?我想避免在构建器中运行berks(即我希望主机运行的打包器解决了这些菜单),并且理想情况下希望仅在打包器中运行,因为它首先应用于运行berks的包装脚本。我现在通过向cookbooks销售来解决这个问题,但是如果可能的话也想避开这条路线。

chef-solo packer
1个回答
0
投票

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

在解析chef-solo provisioner之前,打包器中是否有一个机制首先运行shell-local?

没有

并且理想情况下,这将仅在封装器中运行,因为它首先应用于运行berks的包装脚本。

如果您有其他问题,我建议您重新考虑。 Packer试图做好一件事并留下分配,这可以通过包装脚本更好地解决。

© www.soinside.com 2019 - 2024. All rights reserved.