gpt4 book ai didi

packer - 我可以将一个加壳器构建器与多个配置器一起使用并仍然运行并行构建吗?

转载 作者:行者123 更新时间:2023-12-04 02:08:32 24 4
gpt4 key购买 nike

我有一个似乎是不受支持的有效用例 - afaik - 场景,使用 packer.io我担心我可能会遗漏一些东西......

因此,在加壳器中,我可以添加:

  • 很多builders ,
  • 有一个不同的name每个 build 者,
  • 使用生成器 nameonly供应商的部分,最后
  • 运行packer build -only=<builder_name>有效地将我的构建限制为仅与特定构建器结合的供应商。

这一切都很好。

我现在尝试做的是使用相同的基础镜像创建 3 个不同的构建(以及生成的 AMI)。显然,我可以复制粘贴相同的构建器配置 3 次,然后使用 3 个不同的配置器,使用 only 将每个配置器链接到各自的构建器。范围。

虽然这感觉完全浪费并且非常容易出错......听起来我应该能够使用相同的构建器并且只限制应用哪些供应商.. ?

我唯一的解决方案是使用 3 个复制粘贴的构建器吗?有没有更好的解决方案?

最佳答案

我有同样的问题,我想构建 2 个不同的 AMI(一个用于暂存,一个用于生产),它们之间的唯一区别是在配置期间应用的 ansible 组。根据@Rickard ov Essen 的回答,我使用 jq 编写了一个 bash 脚本复制配置的构建器部分。

这是我的 packer.json 文件:

{
"builders": [
{
"type": "amazon-ebs",
"name": "staging",
"region": "ap-southeast-2",
"source_ami_filter": {
"filters": {
"virtualization-type": "hvm",
"name": "ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-*",
"root-device-type": "ebs"
},
"owners": ["099720109477"],
"most_recent": true
},
"instance_type": "t2.nano",
"ssh_username": "ubuntu",
"force_deregister": true,
"force_delete_snapshot": true,
"ami_name": "my-ami-{{ build_name }}"
}
],
"provisioners": [
{
"type": "ansible",
"playbook_file": "provisioning/site.yml",
"groups": ["{{ build_name }}"]
}
]
}

ansible provisioner 使用变量 build_name 来选择要运行的 ansible 组。

然后我有一个运行打包程序构建的 bash 脚本 build.sh:

#!/bin/bash

jq '.builders += [.builders[0] | .name = "production"]' packer.json > packer_temp.json

packer build packer_temp.json

rm packer_temp.json

您可以在 this jqplay 上看到 packer_temp.json 文件的样子.

如果您需要添加更多 AMI,您可以继续添加更多 jq 过滤器:

jq '.builders += [.builders[0] | .name = "production"] | .builders += [.builders[0] | .name = "test"]

这将为 test 添加另一个 AMI。

关于packer - 我可以将一个加壳器构建器与多个配置器一起使用并仍然运行并行构建吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41147141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com