代码之家  ›  专栏  ›  技术社区  ›  Brett

由于shell本地设置程序(berks)创建的自定义食谱路径不存在,打包程序失败

  •  0
  • Brett  · 技术社区  · 8 年前

    cookbooks 目录清理,并将第三方食谱放入 vendor/cookbooks (不包括git,这样可以保持回购的干净/减少其他开发人员向风投添加/推送伯克斯管理的食谱的机会)。所以我在chef solo provisioner之前添加了一个shell本地provisioner,它运行 berks vendor vendor/cookbooks 并用 cookbook_paths ["cookbooks","vendor/cookbooks"] . 我的想法是shell local将在chef solo之前运行,并且两个食谱路径都可用。

    但是,当我运行packer build时,在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
    

    packer中是否有一个机制在解析chef solo provisioner之前首先运行shell本地?我希望避免在构建器中运行berks(也就是说,我希望运行packer的主机解析食谱),理想情况下,我希望只在packer中运行,就像在运行berks的包装器脚本中一样。我已经解决了这个问题 ,但如果可能的话,也希望避开此路线。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Rickard von Essen    8 年前

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

    packer中是否有一个机制在解析chef solo provisioner之前首先运行shell本地?

    不

    理想情况下,它只希望在packer中运行,这与首先运行berks的包装脚本是一样的。

    如果你还有这样的问题,我建议你重新考虑。Packer试图做好一件事,而不考虑allot,这可以通过包装器脚本更好地解决。