github.com/vmware/govmomi@v0.43.0/govc/test/import.bats (about) 1 #!/usr/bin/env bats 2 3 load test_helper 4 5 @test "import.ova" { 6 vcsim_env -app 1 7 8 run govc import.ova "$GOVC_IMAGES/$TTYLINUX_NAME.ova" 9 assert_success 10 11 run govc device.ls -vm "$TTYLINUX_NAME" 12 assert_success 13 assert_matches "disk-" 14 15 run govc vm.destroy "$TTYLINUX_NAME" 16 assert_success 17 18 # link ovf/ova to datastore so we can test with an http source 19 dir=$(govc datastore.info -json | jq -r .datastores[].info.url) 20 ln -s "$GOVC_IMAGES/$TTYLINUX_NAME."* "$dir" 21 22 run govc import.spec "https://$(govc env GOVC_URL)/folder/$TTYLINUX_NAME.ovf" 23 assert_success 24 25 run govc import.spec "https://$(govc env GOVC_URL)/folder/$TTYLINUX_NAME.ova" 26 assert_success 27 28 proto=$(jq -r .IPProtocol <<<"$output") 29 assert_equal IPv4 "$proto" 30 31 run govc import.ova -verbose "https://$(govc env GOVC_URL)/folder/$TTYLINUX_NAME.ova" 32 assert_success 33 34 run govc device.ls -vm "$TTYLINUX_NAME" 35 assert_success 36 assert_matches "disk-" 37 38 run govc vm.destroy "$TTYLINUX_NAME" 39 assert_success 40 41 run govc import.ova -verbose -pool /DC0/host/DC0_C0/Resources/DC0_C0_APP0 "$GOVC_IMAGES/$TTYLINUX_NAME.ova" 42 assert_success 43 } 44 45 @test "import.ova with checksum validation" { 46 vcsim_env -app 1 47 48 run govc import.ova -name=bad-checksum-vm -m "$GOVC_IMAGES/$TTYLINUX_NAME-bad-checksum.ova" 49 assert_failure # vmdk checksum mismatch 50 51 run govc import.ova -name=good-checksum-vm -m "$GOVC_IMAGES/$TTYLINUX_NAME.ova" 52 assert_success 53 } 54 55 @test "import.ova with iso" { 56 vcsim_env 57 58 run govc import.ova "$GOVC_IMAGES/${TTYLINUX_NAME}-live.ova" 59 assert_success 60 61 run govc device.ls -vm "${TTYLINUX_NAME}-live" 62 assert_success 63 assert_matches "disk-" 64 assert_matches "cdrom-.* ${TTYLINUX_NAME}-live/_deviceImage0.iso" 65 66 run govc vm.destroy "${TTYLINUX_NAME}-live" 67 assert_success 68 } 69 70 @test "import.ovf" { 71 vcsim_env 72 73 run govc import.ovf $GOVC_IMAGES/${TTYLINUX_NAME}.ovf 74 assert_success 75 76 run govc vm.destroy ${TTYLINUX_NAME} 77 assert_success 78 79 # test w/ relative dir 80 pushd $BATS_TEST_DIRNAME >/dev/null 81 run govc import.ovf ./images/${TTYLINUX_NAME}.ovf 82 assert_success 83 popd >/dev/null 84 85 run govc vm.destroy ${TTYLINUX_NAME} 86 assert_success 87 88 # ensure vcsim doesn't panic without capacityAllocationUnits 89 dir=$($mktemp --tmpdir -d govc-test-XXXXX 2>/dev/null || $mktemp -d -t govc-test-XXXXX) 90 sed -e s/capacityAllocationUnits/invalid/ "$GOVC_IMAGES/$TTYLINUX_NAME.ovf" > "$dir/$TTYLINUX_NAME.ovf" 91 touch "$dir/$TTYLINUX_NAME-disk1.vmdk" # .vmdk contents don't matter to vcsim 92 run govc import.ovf "$dir/$TTYLINUX_NAME.ovf" 93 assert_success 94 rm -rf "$dir" 95 } 96 97 @test "import.ovf -host.ipath" { 98 vcsim_env 99 100 run govc import.ovf -host.ipath="$(govc find / -type h | head -1)" "$GOVC_IMAGES/${TTYLINUX_NAME}.ovf" 101 assert_success 102 103 run govc vm.destroy "$TTYLINUX_NAME" 104 assert_success 105 } 106 107 @test "import.ovf with name in options" { 108 vcsim_env 109 110 name=$(new_id) 111 file=$($mktemp --tmpdir govc-test-XXXXX 2>/dev/null || $mktemp -t govc-test-XXXXX) 112 echo "{ \"Name\": \"${name}\"}" > ${file} 113 114 run govc import.ovf -options="${file}" $GOVC_IMAGES/${TTYLINUX_NAME}.ovf 115 assert_success 116 117 run govc vm.destroy "${name}" 118 assert_success 119 120 rm -f ${file} 121 } 122 123 @test "import.ovf with import.spec result" { 124 vcsim_env 125 126 file=$($mktemp --tmpdir govc-test-XXXXX 2>/dev/null || $mktemp -t govc-test-XXXXX) 127 name=$(new_id) 128 129 govc import.spec $GOVC_IMAGES/${TTYLINUX_NAME}.ovf > ${file} 130 131 run govc import.ovf -name="${name}" -options="${file}" $GOVC_IMAGES/${TTYLINUX_NAME}.ovf 132 assert_success 133 134 run govc vm.destroy "${name}" 135 assert_success 136 } 137 138 @test "import.ovf with name as argument" { 139 vcsim_env 140 141 name=$(new_id) 142 143 run govc import.ova -name="${name}" $GOVC_IMAGES/${TTYLINUX_NAME}.ova 144 assert_success 145 146 run govc vm.destroy "${name}" 147 assert_success 148 } 149 150 @test "import.vmdk" { 151 esx_env 152 153 name=$(new_id) 154 155 run govc import.vmdk "$GOVC_TEST_VMDK_SRC" "$name" 156 assert_success 157 158 run govc import.vmdk "$GOVC_TEST_VMDK_SRC" "$name" 159 assert_failure # exists 160 161 run govc import.vmdk -force "$GOVC_TEST_VMDK_SRC" "$name" 162 assert_success # exists, but -force was used 163 } 164 165 @test "import duplicate dvpg names" { 166 vcsim_env 167 168 run govc dvs.create DVS1 # DVS0 already exists 169 assert_success 170 171 run govc dvs.portgroup.add -dvs DVS0 -type ephemeral NSX-dvpg 172 assert_success 173 174 run govc dvs.portgroup.add -dvs DVS1 -type ephemeral NSX-dvpg 175 assert_success 176 177 ovf="$GOVC_IMAGES/$TTYLINUX_NAME.ovf" 178 179 spec=$(govc import.spec "$GOVC_IMAGES/$TTYLINUX_NAME.ovf") 180 181 run govc import.ovf -name ttylinux -options - "$ovf" <<<"$spec" 182 assert_success # no network specified 183 184 options=$(jq ".NetworkMapping[].Network = \"enoent\"" <<<"$spec") 185 186 run govc import.ovf -options - "$ovf" <<<"$options" 187 assert_failure # network not found 188 189 options=$(jq ".NetworkMapping[].Network = \"NSX-dvpg\"" <<<"$spec") 190 191 run govc import.ovf -options - "$ovf" <<<"$options" 192 assert_failure # 2 networks have the same name 193 194 options=$(jq ".NetworkMapping[].Network = \"DVS0/NSX-dvpg\"" <<<"$spec") 195 196 run govc import.ovf -name ttylinux2 -options - "$ovf" <<<"$options" 197 assert_success # switch_name/portgroup_name is unique 198 grep -v "invalid NetworkMapping.Name" <<<"$output" 199 200 options=$(jq ".NetworkMapping[].Network = \"/DC0/host/DC0_C0/DC0_DVPG0\"" <<<"$spec") 201 202 run govc import.ovf -name ttylinux3 -options - "$ovf" <<<"$options" 203 assert_success # cluster path is unique 204 205 switch=$(govc find -i network -name DVS0) 206 id=$(govc find -i network -config.distributedVirtualSwitch "$switch" -name NSX-dvpg) 207 options=$(jq ".NetworkMapping[].Network = \"$id\"" <<<"$spec") 208 options=$(jq ".NetworkMapping[].Name = \"enoent\"" <<<"$options") 209 210 run govc import.ovf -options - "$ovf" <<<"$options" 211 assert_success # using raw MO id 212 grep "invalid NetworkMapping.Name" <<<"$output" 213 } 214 215 @test "import invalid disk provisioning" { 216 vcsim_env 217 218 ovf="$GOVC_IMAGES/$TTYLINUX_NAME.ovf" 219 220 spec=$(govc import.spec "$GOVC_IMAGES/$TTYLINUX_NAME.ovf") 221 222 options=$(jq ".DiskProvisioning = \"enoent\"" <<<"$spec") 223 224 run govc import.ovf -options - "$ovf" <<<"$options" 225 assert_failure "govc: Disk provisioning type not supported: enoent" 226 227 options=$(jq ".DiskProvisioning = \"monolithicSparse\"" <<<"$spec") 228 229 run govc import.ovf -options - "$ovf" <<<"$options" 230 assert_failure 231 assert_matches DeviceUnsupportedForVmPlatform 232 } 233 234 @test "import properties" { 235 vcsim_env 236 237 ovf=../../ovf/fixtures/properties.ovf 238 239 govc import.spec $ovf | grep -q -v nfs_mount 240 241 options=$(govc import.spec -hidden $ovf) 242 243 grep -q -v vm.name <<<"$options" 244 grep -q nfs_mount <<<"$options" 245 246 run govc import.ovf -name "$(new_id)" -options - "$ovf" <<<"$options" 247 assert_success # hidden options but no value changes 248 249 run govc import.ovf -options - "$ovf" <<<"${options//transfer/other}" 250 assert_failure # userConfigurable=false 251 252 id=$(new_id) 253 run govc import.ovf -name "$id" -hidden -options - "$ovf" <<<"${options//transfer/other}" 254 assert_success # userConfigurable=true 255 256 config=$(govc object.collect -o -json "vm/$id" | jq .config.vAppConfig) 257 name=$(jq -r .product[0].name <<<"$config") 258 version=$(jq -r .product[0].version <<<"$config") 259 assert_equal ttylinux "$name" 260 assert_equal 16.1 "$version" 261 }