--- a/pkvlm-create Thu Jan 05 14:28:31 2012 +0200
+++ b/pkvlm-create Thu Jan 05 14:45:31 2012 +0200
@@ -15,7 +15,7 @@
## Command-line options
function _help () {
cat <<END
-Usage: $1 [options] [param=value [...]]
+Usage: $1 [options] <name> [param=value [...]]
Options:
-h Show this help text
@@ -100,7 +100,43 @@
shift $(( $OPTIND - 1 ))
## Command-line arguments
-log_info "Processing ${#@} arguments"
+# Name
+[ -z $1 ] && die "Machine name must be given as first argument"
+
+opt_name="$1"; shift
+
+# Defaults
+function define_opt () {
+ local name=$1
+ local value=${2:-}
+
+ log_debugf "%-20s = %s" $name "$value"
+ eval "opt_${name}=${value}"
+}
+
+function resolve_name () {
+ local name=$1
+ local out=$(dig +short $name)
+
+ [ -z "$out" ] && die "Hostname lookup failed: $name"
+
+ echo $out
+}
+
+define_opt ram 1G
+define_opt cpus 2
+define_opt os debiansqueeze
+define_opt disk_size 10G
+define_opt disk_vg pvl
+define_opt disk_lv $opt_name
+define_opt disk_bus virtio
+define_opt guest_disk /dev/vda
+define_opt hostname $opt_name
+define_opt bridge br-lan
+define_opt dns_domain paivola.fi
+define_opt ip $(resolve_name ${opt_name}.${opt_dns_domain})
+
+log_info "Processing ${#@} parameters:"
for param in "$@"; do
name=${param%=*}
value=${param##*=}
@@ -108,9 +144,7 @@
# evaluate
value=$(expand_line "$value")
- log_debug " $name = $value"
-
- eval "opt_${name}=${value}"
+ define_opt ${name} "${value}"
done
### State
@@ -118,31 +152,31 @@
GUEST_NAME=$opt_name
# Basic params
-GUEST_RAM=${opt_ram:-1G}
-GUEST_VCPUS=${opt_cpus:-2}
+GUEST_RAM=$opt_ram
+GUEST_VCPUS=$opt_cpus
# OS variant (for virt-install)
-GUEST_OS_VARIANT=${opt_os:-debiansqueeze}
+GUEST_OS_VARIANT=$opt_os
## Disk
# Size of LV to create
-DISK_SIZE=${opt_disk_size:-10G}
+DISK_SIZE=$opt_disk_size
# LVM vg to use
-DISK_VG=${opt_disk_vg:-pvl}
+DISK_VG=$opt_disk_vg
# LVM lv to use
-DISK_NAME=${opt_disk_lv:-${GUEST_NAME}}
+DISK_NAME=$opt_disk_lv
# Path to disk block device
DISK_PATH=/dev/mapper/${DISK_VG}-${DISK_NAME}
-DISK_BUS=${opt_disk_bus:-virtio}
-GUEST_DISK=${opt_guest_disk:-/dev/vda}
+DISK_BUS=$opt_disk_bus
+GUEST_DISK=$opt_guest_disk
## Network
-NET_HOSTNAME=${opt_hostname:-${GUEST_NAME}}
-NET_BRIDGE=${opt_bridge:-br-lan}
-NET_IPADDR=${opt_ip:-194.197.235.36}
+NET_HOSTNAME=$opt_hostname
+NET_BRIDGE=$opt_bridge
+NET_IPADDR=$opt_ip
## Installation image
# Original Debian Installer image (iso)
@@ -246,6 +280,9 @@
[ $TESTING ] && exit 0
### Check
+# Parameters given?
+[ -z $NET_IPADDR ] && die "net: No IP-address given: ip"
+
# VM exists?
if cmd virsh domid ${GUEST_NAME} 2> /dev/null; then
die "Virtual machine already exists: ${GUEST_NAME}"