オートメーション変数の変更に関するベストプラクティスは何ですか

オートメーション変数の変更に関するベストプラクティスは何ですか

Hyper-Vでパッケージを使用してUbuntu OSのサイレントインストールを作成しようとしていますが、次のプロジェクトがあります。

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に配置できます。開始するには、構成管理/調整ツールが必要ですが、構築および維持するイメージの数を減らすことで、長期的な労力を節約できます。ただ考えです。

関連情報