我有一个打包程序配置,该配置在 AWS EC2 中使用 chef-solo 进行预置。这很好用。我已经引入了berkshelf 来管理第三方食谱,但这也不起作用。
我正在一个厨师仓库工作,该仓库拥有本地开发的食谱、角色、数据包等。通过引入 berks,我想保持cookbooks
目录干净,并将 3rd 方说明书放入vendor/cookbooks
(它被排除在外,因此保持存储库干净/最大限度地减少其他开发人员添加/推送 berks 管理的说明书到 vcs 的机会(。 因此,我在 chef-solo provisioning er 之前添加了一个 shell-local 配置器,该配置器运行berks vendor vendor/cookbooks
,并使用cookbook_paths ["cookbooks","vendor/cookbooks"]
更新了 chef-solo 配置器。我的想法是,贝壳本地将在厨师独奏之前运行,并且两个食谱路径都可用。
但是,当我运行打包程序构建时,在 AWS 构建器开始构建之前尝试解析说明书路径会快速失败,引用不存在的供应商/食谱目录失败。以下是打包器配置器部分:
"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
打包程序中是否有一种机制可以在解析厨师独奏配置器之前先运行 shell 本地?我想避免在构建器中运行 berks(即我希望由运行打包程序的主机解析说明书(,理想情况下,我希望它仅在打包器中运行,就像分配给首先运行 berks 的包装脚本一样。我现在已经通过供应商进入cookbooks
解决了这个问题,但如果可能的话,我也想避免这条路线。
只需创建一个空目录vendor/cookbooks
。
打包程序中是否有一种机制可以在解析厨师独奏配置器之前先运行 shell 本地?
不
理想情况下,希望仅在打包器中运行它,就像首先运行 berks 的包装脚本一样。
如果您遇到其他此类问题,我建议您重新考虑。Packer试图做好一件事,并省略可以通过包装脚本更好地解决的分配。