github.com/vmware/govmomi@v0.37.2/scripts/devbox/create.sh (about)

     1  #!/bin/bash -e
     2  
     3  # Deploy Vagrant box to esx
     4  
     5  if [ "$(uname -s)" = "Darwin" ]; then
     6    PATH="/Applications/VMware Fusion.app/Contents/Library:$PATH"
     7  fi
     8  
     9  export GOVC_DATASTORE=${GOVC_DATASTORE-"datastore1"}
    10  export GOVC_NETWORK=${GOVC_NETWORK-"VM Network"}
    11  export GOVC_INSECURE=1
    12  
    13  echo "Deploying to $(govc object.collect -s - content.about.fullName) @ $(govc env -x GOVC_URL_HOST)..."
    14  
    15  box=bento/ubuntu-16.04
    16  provider=$(dirname $box)
    17  name=$(basename $box)
    18  disk="${name}.vmdk"
    19  
    20  vm_name=${VM_NAME-"${USER}-${name}"}
    21  vm_memory=${VM_MEMORY-4096}
    22  
    23  pushd "$(dirname "$0")" >/dev/null
    24  
    25  if ! govc datastore.ls "${name}/${disk}" 1>/dev/null 2>&1 ; then
    26    if [ ! -e "$disk" ] ; then
    27      src=$(echo ~/.vagrant.d/boxes/"${provider}"-*-"${name}"/*.*.*/vmware_desktop/disk.vmdk)
    28  
    29      if [ ! -e "$src" ] ; then
    30        echo "$box not found, install via: vagrant box add --provider vmware_desktop $box"
    31        exit 1
    32      fi
    33  
    34      echo "Converting vagrant box for use with ESXi..."
    35      vmware-vdiskmanager -r "$src" -t 5 "$disk"
    36    fi
    37  
    38    echo "Importing vmdk to datastore ${GOVC_DATASTORE}..."
    39    govc import.vmdk "$disk" "$name"
    40  fi
    41  
    42  if [ -z "$(govc ls "vm/$vm_name")" ] ; then
    43    echo "Creating VM ${vm_name}..."
    44  
    45    govc vm.create -m "$vm_memory" -c 2 -g ubuntu64Guest -disk.controller=pvscsi -on=false "$vm_name"
    46  
    47    govc vm.disk.attach -vm "$vm_name" -link=true -disk "$name/$disk"
    48  
    49    govc device.cdrom.add -vm "$vm_name" >/dev/null
    50  
    51    govc vm.change -e disk.enableUUID=1 -vm "$vm_name"
    52  
    53    govc vm.power -on "$vm_name"
    54    reboot=true
    55  fi
    56  
    57  ip=$(govc vm.ip -a -v4 "$vm_name")
    58  me=$(ip route get "$ip" | head -1 | awk '{print $NF}')
    59  
    60  ssh-keygen -R "$ip"  1>/dev/null 2>&1
    61  ssh-keyscan -H "$ip" 2>/dev/null >> ~/.ssh/known_hosts
    62  
    63  echo "Installing dependencies..."
    64  ssh -i ~/.vagrant.d/insecure_private_key "vagrant@$ip" sudo bash -s - < ./provision.sh
    65  
    66  if [ -n "$reboot" ] ; then
    67    govc vm.power -r "$vm_name"
    68    ip=$(govc vm.ip -a -v4 "$vm_name")
    69  fi
    70  
    71  echo "# For SSH access:"
    72  echo % ssh-add \~/.vagrant.d/insecure_private_key
    73  echo % ssh "vagrant@$ip"
    74  
    75  GOPATH=${GOPATH-"$HOME"}
    76  echo "# To NFS export \$GOPATH on this host:"
    77  echo "% echo \"\$GOPATH $ip(rw,no_subtree_check,sync,all_squash,anonuid=\$UID,anongid=\$UID)\" | sudo tee -a /etc/exports"
    78  echo "% sudo service nfs-kernel-server restart"
    79  
    80  echo "# To NFS mount \$GOPATH in the VM:"
    81  echo % ssh "vagrant@$ip" sudo mkdir -p "\$GOPATH"
    82  echo % ssh "vagrant@$ip" sudo mount "$me:\$GOPATH" "\$GOPATH"