Packer: 模板元问题

创建于 2017-02-10  ·  3评论  ·  资料来源: hashicorp/packer

关于想要某种模板的问题经常被打开。 这将在文件配置期间或在 floppy_files 或 http_server 中用来自打包程序的信息替换静态文件中的变量

这里有些例子:

我不认为 packer 应该从事提供模板的业务,因为在我看来这超出了 packer 的范围。 然而,它似乎经常被要求。

我想在这里讨论可能的解决方案,但现在我没有任何解决方案。

enhancement hcl2 post-1.0 thinking

最有用的评论

一些需要考虑的用例。 现在,我有一个同事制作了一个 JS 程序来生成他所有的打包器配置,但该 JS 脚本中的逻辑相当简单,只需将所有这些都保存在一个地方就好了。 他还需要为每个目标 json 文件单独编写 JS 脚本,这是一个维护头疼的问题。

我发现自己的 json 文件可以从注释中受益,以便其他人可以更好地理解它。 我发现自己做的另一件事是复制粘贴文件上传供应商条目,这可以通过 jinja for-loop 构造轻松解决。

JSON 文件的 jinja2 模板可能存在的问题是 JSON 的尾随逗号问题。 模板必须足够聪明才能知道是否需要逗号(也许切换到 YAML 有意义?)。

所有3条评论

如果 packer 是用 python 编写的,那么答案将是使用 jinja2,这是一种非常强大且易于使用的模板语言。 看起来几年前有人尝试过它的 go 端口: https :

一些需要考虑的用例。 现在,我有一个同事制作了一个 JS 程序来生成他所有的打包器配置,但该 JS 脚本中的逻辑相当简单,只需将所有这些都保存在一个地方就好了。 他还需要为每个目标 json 文件单独编写 JS 脚本,这是一个维护头疼的问题。

我发现自己的 json 文件可以从注释中受益,以便其他人可以更好地理解它。 我发现自己做的另一件事是复制粘贴文件上传供应商条目,这可以通过 jinja for-loop 构造轻松解决。

JSON 文件的 jinja2 模板可能存在的问题是 JSON 的尾随逗号问题。 模板必须足够聪明才能知道是否需要逗号(也许切换到 YAML 有意义?)。

另一个用例:将打包程序变量(如 builder_type、...)传递给 autounattend (windows) 或 kickstart/preseed (linux) 中的脚本。

例如:vsphere-iso builder 使用 vmware 工具获取 IP 并进入下一个“等待 IP”步骤。 拥有 builder_type 变量(或类似配置阶段 PACKER_BUILDER_TYPE 环境变量)允许使用更通用的脚本切换在构建时逐步安装 vmware 工具,避免代码重复。

我认为在早期阶段使用变量可以提供更大的灵活性和 DRY 代码。

此页面是否有帮助?
0 / 5 - 0 等级