github.com/vmware/govmomi@v0.43.0/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