github.com/vmware/govmomi@v0.37.2/govc/test/guest_operations_test.sh (about)

     1  #!/bin/bash -e
     2  
     3  # This test is not run via bats.
     4  # 1) Test guest operations (govc guest.* commands)
     5  # 2) Test vm disk persistence
     6  
     7  . "$(dirname "$0")"/test_helper.bash
     8  
     9  esx_env
    10  
    11  import_ttylinux_vmdk
    12  
    13  export GOVC_GUEST_LOGIN=root:password
    14  
    15  for persist in true false ; do
    16    id=govc-test-persist-$persist
    17    govc ls vm/$id | xargs -r govc vm.destroy
    18  
    19    if [ "$persist" = "true" ] ; then
    20      grepf=-v
    21      mode=persistent
    22    else
    23      mode=independent_nonpersistent
    24    fi
    25  
    26    echo "Creating vm..."
    27    govc vm.create -m 32 -disk.controller ide -on=false $id
    28  
    29    # Save some noise by defaulting to '-vm $id'
    30    export GOVC_VM=$id
    31  
    32    echo "Attaching linked disk..."
    33    govc vm.disk.attach -controller ide -persist=$persist -link=true -disk "$GOVC_TEST_VMDK"
    34  
    35    echo "Creating data disk..."
    36    govc vm.disk.create -controller ide -mode=$mode -name "$id"/data -size "10M"
    37  
    38    echo "Powering on vm..."
    39    govc vm.power -on $id 1>/dev/null
    40    echo "Waiting for tools to initialize..."
    41    govc vm.ip $id 1>/dev/null
    42  
    43    echo "Formatting the data disk..."
    44    govc guest.mkdir /data
    45    script=$(govc guest.mktemp)
    46  
    47    govc guest.upload -f - "$script" <<'EOF'
    48  #!/bin/sh -xe
    49  
    50  opts=(n p 1 1 ' ' w)
    51  printf "%s\n" "${opts[@]}" | fdisk /dev/hdb
    52  mkfs.ext3 /dev/hdb1
    53  mount /dev/hdb1 /data
    54  df -h
    55  cp /etc/motd /data
    56  EOF
    57  
    58    govc guest.chown 65534 "$script"
    59    govc guest.chown 65534:65534 "$script"
    60    govc guest.ls "$script" | grep 65534
    61    govc guest.chmod 0755 "$script"
    62    pid=$(govc guest.start "$script" '>&' /tmp/disk.log)
    63    status=$(govc guest.ps -p "$pid" -json -X | jq .processInfo[].exitCode)
    64    govc guest.download /tmp/disk.log -
    65    if [ "$status" -ne "0" ] ; then
    66      exit 1
    67    fi
    68  
    69    echo "Writing some data to the disks..."
    70    for d in /etc /data ; do
    71      govc guest.touch "$d/motd.bak"
    72      govc guest.touch -d "$(date -d '1 day ago')" "$d/motd"
    73      govc guest.ls "$d/motd"
    74      govc guest.download $d/motd - | grep Chop
    75    done
    76    govc version | govc guest.upload -f - /etc/motd
    77    govc guest.download /etc/motd - | grep -v Chop
    78  
    79    pid=$(govc guest.start /bin/sync)
    80    status=$(govc guest.ps -p "$pid" -json -X | jq .processInfo[].exitCode)
    81    if [ "$status" -ne "0" ] ; then
    82      exit 1
    83    fi
    84  
    85    echo "Rebooting vm..."
    86    govc vm.power -off $id
    87    govc vm.power -on $id
    88    echo "Waiting for tools to initialize..."
    89    govc vm.ip $id 1>/dev/null
    90  
    91    echo "Verifying data persistence..."
    92    govc guest.download /etc/motd - | grep $grepf Chop
    93    pid=$(govc guest.start /bin/mount /dev/hdb1 /data)
    94    status=$(govc guest.ps -p "$pid" -json -X | jq .processInfo[].exitCode)
    95  
    96    if [ "$persist" = "true" ] ; then
    97      govc guest.ls /data
    98      govc guest.download /data/motd - | grep -v Chop
    99      govc guest.rm /data/motd
   100  
   101      govc guest.mkdir /data/foo/bar/baz 2>/dev/null && exit 1 # should fail
   102      govc guest.mkdir -p /data/foo/bar/baz
   103  
   104      govc guest.rmdir /data/foo 2>/dev/null && exit 1 # should fail
   105      govc guest.rmdir /data/foo/bar/baz
   106      dir=$(govc guest.mktemp -d -p /data/foo -s govc)
   107      file=$(govc guest.mktemp -p "$dir")
   108      govc guest.mv -n "$(govc guest.mktemp)" "$file" 2>/dev/null && exit 1 # should fail
   109      govc guest.mv "$file" "${file}-old"
   110      govc guest.mv "$dir" "${dir}-old"
   111      govc guest.rmdir -r /data/foo
   112      govc guest.ls /data | grep -v foo
   113    else
   114      if [ "$status" -eq "0" ] ; then
   115        echo "expected failure"
   116        exit 1
   117      fi
   118    fi
   119  done