태그: PowerCLI

PowerCLI OSCustomizationNicMapping Default Gateway 문제

VMware의 PowerCLI를 통한 deployment 기능 중 OS Customization이 있습니다.

웹 콘솔에서는 ‘VM 사용자 지정 규격’이라고 불리는 기능인데, VMware Tools가 설치된 VM을 대상으로 (일반적으로) 최초 부팅 때 어느 정도의 기본적인 설정을 적용할 수 있게 해 줍니다. 웹 콘솔에서는 유연성이 부족하여 사용하지 않았지만, PowerCLI를 사용한다면 아주 유연한 배포 스크립트를 작성할 수 있습니다.

그 중 네트워크 설정을 제어하는 OSCustomizationNicMapping에서 IpMode로 UseStaticIP를 사용할 경우, Default Gateway를 입력할 것을 요구하는 문제가 있습니다.

덕분에 기본적으로 제공하는 cmdlet은

1. 모든 NIC에 DHCP를 적용하거나
2. 하나의 NIC를 사용하고 고정 IP를 할당하거나
3. DHCP와 고정 IP를 섞어서 사용하되, 디폴트 게이트웨이는 고정 IP의 것을 사용하거나

라는 세가지 케이스에 한해 사용할 수 있습니다.

대체 왜 이렇게 구현해뒀는지 도무지 이해를 할 수가 없습니다.

저는 고정 IP 하나를 사용하고, DHCP를 통해 디폴트 게이트웨이를 가져와야 했으므로, 하위 클래스를 통해 직접 CustomizationSpec 객체를 생성하였습니다.

기본적인 틀은 VMware Forum의 글에서 확인하실 수 있으며, Windows가 아닌 리눅스 시스템에 적용하기 위한 차이점, DHCP 할당을 위한 설정을 언급하도록 하겠습니다.

1. 리눅스 VM에 적용하기 위한 설정

– $item.Info.Type 을 “Windows”에서 “Linux”로 변경합니다.
– $item.Spec.Identity = New-Object VMware.Vim.CustomizationSysPrep 대신 $item.Spec.Identity = New-Object VMware.Vim.CustomizationLinuxPrep을 사용합니다.
– 리눅스 VM에서는 윈도의 Workgroup, FullName 대신 Domain을 반드시 입력해야 합니다. 따라서 $item.Spec.Identity.domain을 입력해 줍니다.
– $item.Spec.Identity.hostName을 반드시 입력해야 하는데, 요구하는 Type이 String이 아닙니다.
$LinuxPrepName = New-Object VMware.Vim.CustomizationFixedName
$LinuxPrepName.Name = <String>
$item.Spec.Identity.hostName = $LinuxPrepName

으로 입력해 줍니다.

2. DHCP IP 할당

$nic = New-Object VMware.Vim.CustomizationAdapterMapping
$nic.Adapter = New-Object VMware.Vim.CustomizationIPSettings
$nic.Adapter.Ip = New-Object VMware.Vim.CustomizationDhcpIpGenerator
$item.Spec.NicSettingMap += $nic

이제 원하는 OS Customization Spec을 생성할 수 있습니다.