概要
packer で WindowsServer2016 を構築する際にネットワークアダプタに DNS を設定する方法を紹介します
もし DHCP で IP を取得する場合だと大抵は DHCP サーバが DNS の情報も教えてくれますが、そうじゃない環境の場合には手動で DNS の向き先を変更する必要があります
そういった場合には使える手法だと思います
環境
- ESXi 6.0.0 (Build 3620759)
- Ubuntu 16.0.4
- packer 1.0.4
Powershell スクリプト
DNS を Ethernet0
アダプタに設定する方法を紹介します
- vim scripts/dns.ps1
Set-DnsClientServerAddress -InterfaceAlias "Ethernet0" -ServerAddresses 8.8.8.8
これを packer を使って WindowsServer 上で実行させます
テンプレートファイル修正
provisoners セクションに powershell を実行する設定を追加します
- win2016.json
"provisioners": [
{
"type": "powershell",
"execute_command": "{{ .Vars }} cmd /c C:/Windows/Temp/script.bat",
"scripts": [
"scripts/dns.ps1",
]
}
]
type は powershell を指定します
windows-shell というタイプもありますが、それは .bat 用なので違います
execute_command はそのまま使いましょう
{{ .Vars }}
は environment_vars という設定項目でセットした環境変数を参照するためのテンプレート変数です
今回は特に設定していないので何も入らないですが入れるのが基本らしいので入れておきます
そのあとの C:/Windows/Temp/script.bat
ですが、これは scripts で指定した Powershell スクリプトが WindowsServer 側にアップロードされた際のパスを指定しています
remote_path という設定項目でアップロード先を指定できるのですが、今回は指定していません
指定を省略した場合はデフォルトの C:/Windows/Temp/script.bat
が使われるため execute_command でもそのパスを指定する感じです
これで Powershell を呼び出すことができます
動作確認
実行して成功するか確認してみましょう
packer のログ的には以下のように表示されれば成功です
==> vmware-iso: Provisioning with Powershell...
==> vmware-iso: Provisioning with shell script: scripts/dns.ps1
vmware-iso: #< CLIXML
vmware-iso: <Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04"><Obj S="progress" RefId="0"><TNRefId="0"><T>System.Management.Automation.PSCustomObject</T><T>System.Object</T></TN><MS><I64 N="SourceId">1</I64><PR N="Record"><AV>Preparing modules for first use.</AV><AI>0</AI><Nil /><PI>-1</PI><PC>-1</PC><T>Completed</T><SR>-1</SR><SD> </SD></PR></MS>
</Obj></Objs>
もし失敗するとしたら Powershell 内で指定している -InterfaceAlias "Ethernet0"
の部分かと思います
ここで指定したネットワークアダプタ名がないとエラーになるので、自分の環境に合わせて変更してください
最後に
packer + Powershell で Windows サーバの DNS の設定を行ってみました
1 行で行えるので簡単でした
packer ビルド内でインターネットにアクセスするような処理がある場合に DNS で名前解決できない場合などで使えると思います
もしくは内部向けの DNS がないとイントラのホスト名を解決できない場合かなと思います
0 件のコメント:
コメントを投稿