Enterprise IT Solutions/VMware

[vCenter] OVF template import via PowerCLI

iseop 2021. 12. 18. 23:49   인쇄용 버전

얼마 전 어느 vSphere 클러스터에서 다른 클러스터로 VM 하나를 복사할 일이 생겼습니다.
이럴 때 VHDX 이미지를 복사하는 것 보다 OVF template를 export하는 것이 옮길 용량도 적어지고, VHDX 스냅샷도 고려할 필요가 없어 편리합니다.
서로 분리된 시스템이라서 외장 드라이브를 통해 옮겼는데, OVF template을 import 할 때 IE에서는 파일이 4GB 이상이면 한 번에 업로드가 되지 않기때문에 PowerCLI 파워셸 모듈을 처음 사용해 보았습니다.

  • 먼저 원본 클러스터에서 내보낼 VM을 선택하고 OVF template를 다운로드 받습니다.
  • .ovf, .mf, .vhdx, .nvram 파일이 다운로드되고, .mf파일에 SHA256 해시값이 있으니 파일들을 검증하면 좋습니다.
  • 다음으로 복사 대상 클러스터에서 아래 명령을 실행합니다.
Install-Module -Name PowerCLI # 인증서 오류를 무시하고 연결하려면 이게 필요합니다. 
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false 
Connect-VIServer -Server vcsa.mgmt.x.local $ds = Get-Datastore -Name "ESXDatastore" 
Import-vApp -Source 'C:\x.ovf' -VMHost esxi1 -Datastore $ds 
# 이제 셸에 진행 상황이 표시됩니다. 작업을 실행하고 셸로 돌아오려면 -Async 옵션을 사용하면 됩니다.


이번 케이스에서는 Import-vApp 실행 시 "host did not have any virtual network defined" 오류가 발생했습니다.

OVF 파일은 XML 형식으로 되어 있는데, 문제가 되는 네트워크 태그 및 VM의 NIC 설정에 해당하는 태그를 따로 잘라내어 보관하고, mf파일 없이 import 한 후 수동으로 NIC을 설정해 주어 해결했습니다.

<NetworkSection> 
    <Info>The list of logical networks</Info> 
    <!-- Network 주석처리 
    <Network ovf:name="nat"> 
        <Description>The nat network</Description> 
    </Network> --> 
</NetworkSection> 
 
...중략... 
 
<!-- Ethernet adapter item 주석처리 
<Item> 
    <rasd:AddressOnParent>2</rasd:AddressOnParent> 
    <rasd:AutomaticAllocation>true</rasd:AutomaticAllocation> 
    <rasd:Connection>nat</rasd:Connection> 
    <rasd:Description>E1000 ethernet adapter on &quot;nat&quot;</rasd:Description> 
    <rasd:ElementName>ethernet0</rasd:ElementName> 
    <rasd:InstanceID>9</rasd:InstanceID> 
    <rasd:ResourceSubType>E1000</rasd:ResourceSubType> 
    <rasd:ResourceType>10</rasd:ResourceType> 
</Item> -->