Blame tools/deploy-qemu

Packit Service 509fd4
#!/bin/bash
Packit Service 509fd4
Packit Service 509fd4
#
Packit Service 509fd4
# deploy-qemu IMAGE USERDATA
Packit Service 509fd4
#
Packit Service 509fd4
# Starts an ephemeral virtual machine in qemu, injecting configuration via
Packit Service 509fd4
# cloud-init. Stopping this script stops the VM and discards all data.
Packit Service 509fd4
#
Packit Service 509fd4
# IMAGE    -- An os image that can be booted by qemu and has cloud-init
Packit Service 509fd4
#             installed and enabled. No changes are made to this file.
Packit Service 509fd4
#
Packit Service 509fd4
# USERDATA -- A cloud-init user-data config file, or a directory of
Packit Service 509fd4
#             configuration as accepted by the `gen-user-data` tool.
Packit Service 509fd4
#
Packit Service 509fd4
# In addition, if the QEMU_EXTRA_ARGS environment variable is defined, it adds
Packit Service 509fd4
# its content as additional arguments to qemu.
Packit Service 509fd4
Packit Service 509fd4
set -euo pipefail
Packit Service 509fd4
Packit Service 3a6627
if [[ "$#" != 2 ]]; then
Packit Service 509fd4
  echo "usage: $0 IMAGE USERDATA"
Packit Service 509fd4
  exit 1
Packit Service 509fd4
fi
Packit Service 509fd4
Packit Service 509fd4
scriptdir=$(dirname "$0")
Packit Service 509fd4
image=$1
Packit Service 509fd4
userdata=$2
Packit Service 509fd4
read -ra qemu_extra_args <<< "${QEMU_EXTRA_ARGS:-}"
Packit Service 509fd4
workdir=$(mktemp -d "$scriptdir/qemu-tmp-XXXXXX")
Packit Service 509fd4
function cleanup() {
Packit Service 509fd4
  rm -rf "$workdir"
Packit Service 509fd4
}
Packit Service 509fd4
trap cleanup EXIT
Packit Service 509fd4
Packit Service 509fd4
mkdir "$workdir/cidata"
Packit Service 509fd4
Packit Service 509fd4
if [ -d "$userdata" ]; then
Packit Service 509fd4
  "$scriptdir/gen-user-data" "$userdata" > "$workdir/cidata/user-data"
Packit Service 509fd4
else
Packit Service 509fd4
  cp "$userdata" "$workdir/cidata/user-data"
Packit Service 509fd4
fi
Packit Service 509fd4
Packit Service 509fd4
echo -e "instance-id: nocloud\nlocal-hostname: vm\n" > "$workdir/cidata/meta-data"
Packit Service 509fd4
Packit Service 509fd4
case $(uname -s) in
Packit Service 509fd4
  "Linux")
Packit Service 509fd4
    genisoimage \
Packit Service 509fd4
      -input-charset utf-8 \
Packit Service 509fd4
      -output "$workdir/cloudinit.iso" \
Packit Service 509fd4
      -volid cidata \
Packit Service 509fd4
      -joliet \
Packit Service 509fd4
      -rock \
Packit Service 509fd4
      -quiet \
Packit Service 509fd4
      -graft-points \
Packit Service 509fd4
      "$workdir/cidata/user-data" \
Packit Service 509fd4
      "$workdir/cidata/meta-data"
Packit Service 509fd4
    ;;
Packit Service 509fd4
Packit Service 509fd4
  "Darwin")
Packit Service 509fd4
    # conviently uses the last component of source as volumeid, which has to be cidata
Packit Service 509fd4
    hdiutil makehybrid -iso -joliet -o "$workdir/cloudinit.iso" "$workdir/cidata"
Packit Service 509fd4
    ;;
Packit Service 509fd4
esac
Packit Service 509fd4
Packit Service 509fd4
qemu-system-x86_64 \
Packit Service 509fd4
  -M accel=kvm:hvf \
Packit Service 509fd4
  -m 1024 \
Packit Service 509fd4
  -snapshot \
Packit Service 509fd4
  -cpu host \
Packit Service 509fd4
  -net nic,model=virtio \
Packit Service 509fd4
  -net user,hostfwd=tcp::2222-:22,hostfwd=tcp::4430-:443 \
Packit Service 509fd4
  -cdrom "$workdir/cloudinit.iso" \
Packit Service 509fd4
  "${qemu_extra_args[@]}" "$image"