現在、俺々 Lab に vCloud Director (vCD) モドキを vCenter Orchestrator (vCO) で作成しています。その作業の中で、Windows の DNS サーバーの A レコード作成が手間だったので PowerShell 化したので、その過程を記録に残します。

作成中 の vCD モドキは、同一の環境を 2 分程度でコピーできることを目的としています。

  • SID 同一
  • SSH の各種鍵 同一
  • IP アドレス 同一
  • MAC アドレス 同一
  • Gateway は IP Masquerade で同一
  • 環境を隠蔽

VMware 製品を簡単に試せる ProjectNee や、vCD を使った PC 教室と同様の実装になります。直ぐに試したい製品で必要な IP アドレスは 100 近くになるため、UI で A レコード、PTR レコードを追加するのはマゾい作業です。ホスト名、IP アドレス、MAC アドレスを管理するためのスプレッドシートから、ホスト名、IP アドレスの CSV ファイルを作成し、これを入力とする PowerShell を作成したいと思います。

まず、PowerShell に DNS 管理用のモジュールを追加します。PowerShell のプロンプトから以下を実行します。

Get-Command -Module DnsServer
update-help

DnsServer モジュールは、TechNet によると Windows 2012、Windows 8 以上が必要のようです。
DNS Server Comdlets in Windows PowerShell

CSV からホスト名と IP アドレスを拾って DNS に登録していくスクリプトはこちら。

$ZoneName = "corp.local"
$CsvFile = "C:Tempip-address-list.csv"

$HostInfos = Import-Csv $CsvFile

$HostInfos | ForEach-Object {
  $HostInfo = $_
  $Record = $false

  # With "-ErrorAction Ignore", if a value of -Name doesn't exist in the Zone, then Get-DnsServerResourceRecord returns $null
  # Otherwise, you get an exception which stops this script.
  $Record = Get-DnsServerResourceRecord -ZoneName $ZoneName -Name $HostInfo.Hostname -ErrorAction Ignore
  If ( ! $Record ) {
    Add-DnsServerResourceRecordA -ZoneName $ZoneName -Name $HostInfo.Hostname -IPv4Address $HostInfo.IpAddr -CreatePtr
  }
}

スクリプトに喰わせる CSV は以下になります。ProjectNee と違うのはご容赦を。完全に個人の好みです。同じ IP アドレスがあるのは、全環境で同じ DNS サービスを使い回すためです。Windows の vCenter Server を利用するときもあれば、仮想アプライアンスの vCenter Server を利用する時もあるためです。この手間は仕方ないとして、実際に利用し始める前に不要な PTR レコードは削除しています。

Hostname,IpAddr
controlcenter,192.168.110.1
vc-l-01a,192.168.110.11
vc-w12-01a,192.168.110.11
vco-l-01a,192.168.110.12
vcd-l-01a,192.168.110.21
vcd-l-02a,192.168.110.22
vcns-l-01a,192.168.110.31
nsx-l-01a,192.168.110.31
vcops-l-01a,192.168.110.41
vcops-l-02a,192.168.110.42
srm-w8-01a,192.168.110.51
srm-w12-01a,192.168.110.51
srm-w8-02a,192.168.110.52
srm-w12-02a,192.168.110.52
vr-l-01a,192.168.110.55
vr-l-02a,192.168.110.56
vcli-l-01a,192.168.110.52
vcac-l-01a,192.168.110.61
iaas-w8-01a,192.168.110.65
iaas-w12-01a,192.168.110.65
appd-l-01a,192.168.110.66
itfm-l-01a,192.168.110.67
bde-l-01a,192.168.110.71
....

小ネタ

vSphere Web Client (あるいは vSphere Client) から MAC アドレスを固定すると、MAC アドレスの先頭 3 オクテット (OUI: Organizationally Unique Identifier) は 00:50:56 となります。HomeLab などで MAC アドレスもコントロールしたい場合は、IP アドレスは Class B のアドレス体系にして、その IP アドレスとMAC アドレスの後半の 3 オクテットを 10 進数でマッピングすると管理しやすいと思いますよ。

IP アドレスを見て瞬時に脳内で 10 進数 ➡ 16 進数 の変換が出来る人は Class A のアドレス体系でも不自由ないかも知れません。