pkvlm-create
changeset 8 ba98eb53344a
parent 7 ab661ceed4dc
child 9 ef5f501266ae
--- 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}"