github.com/vmware/govmomi@v0.37.2/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 properties" {
   216    vcsim_env
   217  
   218    ovf=../../ovf/fixtures/properties.ovf
   219  
   220    govc import.spec $ovf | grep -q -v nfs_mount
   221  
   222    options=$(govc import.spec -hidden $ovf)
   223  
   224    grep -q -v vm.name <<<"$options"
   225    grep -q nfs_mount <<<"$options"
   226  
   227    run govc import.ovf -name "$(new_id)" -options - "$ovf" <<<"$options"
   228    assert_success # hidden options but no value changes
   229  
   230    run govc import.ovf -options - "$ovf" <<<"${options//transfer/other}"
   231    assert_failure # userConfigurable=false
   232  
   233    id=$(new_id)
   234    run govc import.ovf -name "$id" -hidden -options - "$ovf" <<<"${options//transfer/other}"
   235    assert_success # userConfigurable=true
   236  
   237    config=$(govc object.collect -o -json "vm/$id" | jq .config.vAppConfig)
   238    name=$(jq -r .product[0].name <<<"$config")
   239    version=$(jq -r .product[0].version <<<"$config")
   240    assert_equal ttylinux "$name"
   241    assert_equal 16.1 "$version"
   242  }