更改自动化变量的最佳实践是什么

更改自动化变量的最佳实践是什么

我正在尝试在 Hyper-V 上使用打包程序创建自动安装 Ubuntu 操作系统,我有这样的项目:

packer-main/
|
|--->http/
|       |--->user-data
|
|--->templates/
|        |--->build.pkr.hcl
|
|--->variables
|         |--->pkrvars.hcl   
      

用户数据中的内容

#cloud-config
autoinstall:
  version: 1
  identity:
   hostname: jammy-daily
   username: ubuntu

pkrvars.hcl 的内容

hostname = "jammy-daily"
username = "ubuntu"

和 build.pkr.hcl

...

ssh_username = "${var.username}"
vm_name = "${var.hostname}"

...

我的挑战在于需要在启动构建过程之前动态修改用户数据中的变量。虽然我知道 PowerShell 脚本或 Bash 脚本可以达到此目的,但我很好奇是否有专门的工具可用于简化此类自动化。我也有兴趣了解创建自动化基础设施的最佳实践。

答案1

几乎任何服务器/网络配置管理(通常称为“编排”)工具都可以使用模板来生成文件数据,您可以将其放入 user_data 参数中。 Ansible 和 Saltstack 原生使用 Jinja2 模板; Chef、Puppet 和 Terraform 也支持 Jinja2。

您可能会发现,当从映像启动虚拟机时,而不是由 Packer 创建映像时,会更好地生成 user_data(并将变量替换为值)。如果您的主机名嵌入在映像中,则需要为网络中的每个主机 (VM) 构建不同的映像。

相比之下,当主机特定信息未烘焙到映像中时,单个映像可以由多个 VM 使用,并且主机特定信息可以在 VM 启动时放入 user_data 中。它需要配置管理/编排工具来进行启动,但从长远来看,您可以通过减少构建和维护的映像数量来节省精力。只是一个想法。

相关内容