#!/bin/bash set -e PROGNAME=$(basename $0) # $HeadURL: http://sos16-vip/svn/kickstart/trunk/bin/defaults-dumper $ $LastChangedRevision: 669 $ # Load libraries . $(dirname $0)/../include/mkdi.sh main() { local TARGET_HOSTNAME TARGET_MACADDR RELEASE_CMDLINE TARGET_VM_FLAG ISCSISERVER_HOSTNAME TARGET_IPADDR TARGET_HVM_FLAG VMSERVER_HOSTNAME TARGET_RELEASE ISCSISERVER_VOLUME_GROUP TARGET_ROOT_DISK_SIZE TARGET_PROFILE TARGET_RAM MAILTO # Defaults for options VERBOSELEVEL=2 # Process options while [ "X$1" != X ]; do case $1 in # Application specific options --target-hostname=*) TARGET_HOSTNAME=${1#*=} ;; --target-macaddr=*) TARGET_MACADDR=${1#*=} ;; --release-cmdline=*) RELEASE_CMDLINE=${1#*=} ;; --target-vm-flag=*) TARGET_VM_FLAG=${1#*=} ;; --iscsiserver-hostname=*) ISCSISERVER_HOSTNAME=${1#*=} ;; --target-ipaddr=*) TARGET_IPADDR=${1#*=} ;; --target-hvm-flag=*) TARGET_HVM_FLAG=${1#*=} ;; --vmserver-hostname=*) VMSERVER_HOSTNAME=${1#*=} ;; --target-release=*) TARGET_RELEASE=${1#*=} ;; --iscsiserver-volume-group=*) ISCSISERVER_VOLUME_GROUP=${1#*=} ;; --target-root-disk-size=*) TARGET_ROOT_DISK_SIZE=${1#*=} ;; --target-profile=*) TARGET_PROFILE=${1#*=} ;; --target-ram=*) TARGET_RAM=${1#*=} ;; --mailto=*) MAILTO=${1#*=} ;; # General options --help|-h) usage 0 ;; --verbose|-v) VERBOSELEVEL=3 ;; -d) VERBOSELEVEL=$2; shift ;; --debug=*) VERBOSELEVEL=${1#*=} ;; --) shift; break ;; -*) usage ;; *) break ;; esac shift done # Process arguments [ $# -ge 1 ] || usage MODE=$1; shift debug 10 "main: MODE=$MODE" # Guts case $MODE in create) create --target-hostname=$TARGET_HOSTNAME --target-macaddr=$TARGET_MACADDR --release-cmdline="$RELEASE_CMDLINE" --target-vm-flag=$TARGET_VM_FLAG --iscsiserver-hostname=$ISCSISERVER_HOSTNAME --target-ipaddr=$TARGET_IPADDR --target-hvm-flag=$TARGET_HVM_FLAG --vmserver-hostname=$VMSERVER_HOSTNAME --target-release=$TARGET_RELEASE --iscsiserver-volume-group=$ISCSISERVER_VOLUME_GROUP --target-root-disk-size=$TARGET_ROOT_DISK_SIZE --target-profile=$TARGET_PROFILE --target-ram=$TARGET_RAM --mailto=$MAILTO "$@" || return $? ;; delete) delete --target-hostname=$TARGET_HOSTNAME --target-macaddr=$TARGET_MACADDR --release-cmdline="$RELEASE_CMDLINE" --target-vm-flag=$TARGET_VM_FLAG --iscsiserver-hostname=$ISCSISERVER_HOSTNAME --target-ipaddr=$TARGET_IPADDR --target-hvm-flag=$TARGET_HVM_FLAG --vmserver-hostname=$VMSERVER_HOSTNAME --target-release=$TARGET_RELEASE --iscsiserver-volume-group=$ISCSISERVER_VOLUME_GROUP --target-root-disk-size=$TARGET_ROOT_DISK_SIZE --target-profile=$TARGET_PROFILE --target-ram=$TARGET_RAM --mailto=$MAILTO "$@" || return $? ;; list) list "$@" || return $? ;; purge) purge "$@" || return $? ;; *) usage ;; esac return 0 } create() { local TARGET_HOSTNAME TARGET_MACADDR RELEASE_CMDLINE TARGET_VM_FLAG ISCSISERVER_HOSTNAME TARGET_IPADDR TARGET_HVM_FLAG VMSERVER_HOSTNAME TARGET_RELEASE ISCSISERVER_VOLUME_GROUP TARGET_ROOT_DISK_SIZE TARGET_PROFILE TARGET_RAM MAILTO # Process options while [ "X$1" != X ]; do case $1 in # Application specific options --target-hostname=*) TARGET_HOSTNAME=${1#*=} ;; --target-macaddr=*) TARGET_MACADDR=${1#*=} ;; --release-cmdline=*) RELEASE_CMDLINE=${1#*=} ;; --target-vm-flag=*) TARGET_VM_FLAG=${1#*=} ;; --iscsiserver-hostname=*) ISCSISERVER_HOSTNAME=${1#*=} ;; --target-ipaddr=*) TARGET_IPADDR=${1#*=} ;; --target-hvm-flag=*) TARGET_HVM_FLAG=${1#*=} ;; --vmserver-hostname=*) VMSERVER_HOSTNAME=${1#*=} ;; --target-release=*) TARGET_RELEASE=${1#*=} ;; --iscsiserver-volume-group=*) ISCSISERVER_VOLUME_GROUP=${1#*=} ;; --target-root-disk-size=*) TARGET_ROOT_DISK_SIZE=${1#*=} ;; --target-profile=*) TARGET_PROFILE=${1#*=} ;; --target-ram=*) TARGET_RAM=${1#*=} ;; --mailto=*) MAILTO=${1#*=} ;; # General options --) shift; break ;; -*) internal "create: $1: invalid option" ;; *) break ;; esac shift done # Process arguments [ $# = 0 ] || internal "create: $#: wrong arg count" # Create entry info "creating in_progress record ..." create_or_delete --target-hostname=$TARGET_HOSTNAME --target-macaddr=$TARGET_MACADDR --release-cmdline="$RELEASE_CMDLINE" --target-vm-flag=$TARGET_VM_FLAG --iscsiserver-hostname=$ISCSISERVER_HOSTNAME --target-ipaddr=$TARGET_IPADDR --target-hvm-flag=$TARGET_HVM_FLAG --vmserver-hostname=$VMSERVER_HOSTNAME --target-release=$TARGET_RELEASE --iscsiserver-volume-group=$ISCSISERVER_VOLUME_GROUP --target-root-disk-size=$TARGET_ROOT_DISK_SIZE --target-profile=$TARGET_PROFILE --target-ram=$TARGET_RAM --mailto=$MAILTO create || return $? return 0 } delete() { local TARGET_HOSTNAME TARGET_MACADDR RELEASE_CMDLINE TARGET_VM_FLAG ISCSISERVER_HOSTNAME TARGET_IPADDR TARGET_HVM_FLAG VMSERVER_HOSTNAME TARGET_RELEASE ISCSISERVER_VOLUME_GROUP TARGET_ROOT_DISK_SIZE TARGET_PROFILE TARGET_RAM MAILTO # Process options while [ "X$1" != X ]; do case $1 in # Application specific options --target-hostname=*) TARGET_HOSTNAME=${1#*=} ;; --target-macaddr=*) TARGET_MACADDR=${1#*=} ;; --release-cmdline=*) RELEASE_CMDLINE=${1#*=} ;; --target-vm-flag=*) TARGET_VM_FLAG=${1#*=} ;; --iscsiserver-hostname=*) ISCSISERVER_HOSTNAME=${1#*=} ;; --target-ipaddr=*) TARGET_IPADDR=${1#*=} ;; --target-hvm-flag=*) TARGET_HVM_FLAG=${1#*=} ;; --vmserver-hostname=*) VMSERVER_HOSTNAME=${1#*=} ;; --target-release=*) TARGET_RELEASE=${1#*=} ;; --iscsiserver-volume-group=*) ISCSISERVER_VOLUME_GROUP=${1#*=} ;; --target-root-disk-size=*) TARGET_ROOT_DISK_SIZE=${1#*=} ;; --target-profile=*) TARGET_PROFILE=${1#*=} ;; --target-ram=*) TARGET_RAM=${1#*=} ;; --mailto=*) MAILTO=${1#*=} ;; # General options --) shift; break ;; -*) internal "create: $1: invalid option" ;; *) break ;; esac shift done # Process arguments [ $# = 0 ] || internal "delete: $#: wrong arg count" # Delete entry info "deleting in_progress record ..." create_or_delete --target-hostname=$TARGET_HOSTNAME --target-macaddr=$TARGET_MACADDR --release-cmdline="$RELEASE_CMDLINE" --target-vm-flag=$TARGET_VM_FLAG --iscsiserver-hostname=$ISCSISERVER_HOSTNAME --target-ipaddr=$TARGET_IPADDR --target-hvm-flag=$TARGET_HVM_FLAG --vmserver-hostname=$VMSERVER_HOSTNAME --target-release=$TARGET_RELEASE --iscsiserver-volume-group=$ISCSISERVER_VOLUME_GROUP --target-root-disk-size=$TARGET_ROOT_DISK_SIZE --target-profile=$TARGET_PROFILE --target-ram=$TARGET_RAM --mailto=$MAILTO delete || return $? return 0 } create_or_delete() { local TARGET_HOSTNAME TARGET_MACADDR RELEASE_CMDLINE TARGET_VM_FLAG ISCSISERVER_HOSTNAME TARGET_IPADDR TARGET_HVM_FLAG VMSERVER_HOSTNAME TARGET_RELEASE ISCSISERVER_VOLUME_GROUP TARGET_ROOT_DISK_SIZE TARGET_PROFILE TARGET_RAM MAILTO local MODE LINE DHCPD_OUTPUT CMDLINE # Process options while [ "X$1" != X ]; do case $1 in # Application specific options --target-hostname=*) TARGET_HOSTNAME=${1#*=} ;; --target-macaddr=*) TARGET_MACADDR=${1#*=} ;; --release-cmdline=*) RELEASE_CMDLINE=${1#*=} ;; --target-vm-flag=*) TARGET_VM_FLAG=${1#*=} ;; --iscsiserver-hostname=*) ISCSISERVER_HOSTNAME=${1#*=} ;; --target-ipaddr=*) TARGET_IPADDR=${1#*=} ;; --target-hvm-flag=*) TARGET_HVM_FLAG=${1#*=} ;; --vmserver-hostname=*) VMSERVER_HOSTNAME=${1#*=} ;; --target-release=*) TARGET_RELEASE=${1#*=} ;; --iscsiserver-volume-group=*) ISCSISERVER_VOLUME_GROUP=${1#*=} ;; --target-root-disk-size=*) TARGET_ROOT_DISK_SIZE=${1#*=} ;; --target-profile=*) TARGET_PROFILE=${1#*=} ;; --target-ram=*) TARGET_RAM=${1#*=} ;; --mailto=*) MAILTO=${1#*=} ;; # General options --) shift; break ;; -*) internal "create: $1: invalid option" ;; *) break ;; esac shift done # Process arguments [ $# = 1 ] || internal "create_or_delete: $#: wrong arg count" MODE=$1 # Sanity checks and derivations validate_vars MODE TARGET_HOSTNAME TARGET_MACADDR RELEASE_CMDLINE TARGET_VM_FLAG ISCSISERVER_HOSTNAME TARGET_IPADDR TARGET_HVM_FLAG VMSERVER_HOSTNAME TARGET_RELEASE ISCSISERVER_VOLUME_GROUP TARGET_ROOT_DISK_SIZE TARGET_PROFILE TARGET_RAM || return $? debug 10 "main: MODE=$MODE, TARGET_HOSTNAME=$TARGET_HOSTNAME, TARGET_MACADDR=$TARGET_MACADDR, RELEASE_CMDLINE=\"$RELEASE_CMDLINE\", TARGET_VM_FLAG=$TARGET_VM_FLAG, ISCSISERVER_HOSTNAME=$ISCSISERVER_HOSTNAME, TARGET_IPADDR=$TARGET_IPADDR, TARGET_HVM_FLAG=$TARGET_HVM_FLAG, VMSERVER_HOSTNAME=$VMSERVER_HOSTNAME, TARGET_RELEASE=$TARGET_RELEASE, ISCSISERVER_VOLUME_GROUP=$ISCSISERVER_VOLUME_GROUP, TARGET_ROOT_DISK_SIZE=$TARGET_ROOT_DISK_SIZE, TARGET_PROFILE=$TARGET_PROFILE, TARGET_RAM=$TARGET_RAM" # Guts if [ $MODE = create ]; then CMDLINE="$SQLITE_CMD $MKDI_DB_FILE \"INSERT INTO in_progress (target_hostname,target_macaddr,release_cmdline,target_vm_flag,iscsiserver_hostname,target_ipaddr,target_hvm_flag,vmserver_hostname,target_release,iscsiserver_volume_group,target_root_disk_size,target_profile,target_ram,mailto) VALUES (\\\"$TARGET_HOSTNAME\\\",\\\"$TARGET_MACADDR\\\",\\\"$RELEASE_CMDLINE\\\",\\\"$TARGET_VM_FLAG\\\",\\\"$ISCSISERVER_HOSTNAME\\\",\\\"$TARGET_IPADDR\\\",\\\"$TARGET_HVM_FLAG\\\",\\\"$VMSERVER_HOSTNAME\\\",\\\"$TARGET_RELEASE\\\",\\\"$ISCSISERVER_VOLUME_GROUP\\\",\\\"$TARGET_ROOT_DISK_SIZE\\\",\\\"$TARGET_PROFILE\\\",\\\"$TARGET_RAM\\\",\\\"$MAILTO\\\");\"" elif [ $MODE = delete ]; then CMDLINE="$SQLITE_CMD $MKDI_DB_FILE \"DELETE FROM in_progress WHERE (target_hostname == \\\"$TARGET_HOSTNAME\\\");\"" fi debug 10 "create_or_delete: calling [$CMDLINE] ..." eval "$CMDLINE" return 0 } purge() { local CMDLINE # Guts CMDLINE="$SQLITE_CMD $MKDI_DB_FILE \"DELETE FROM in_progress;\"" debug 10 "create_or_delete: calling [$CMDLINE] ..." eval "$CMDLINE" return 0 } list() { local CMDLINE # Process options while [ "X$1" != X ]; do case $1 in # Application specific options # General options --) shift; break ;; -*) internal "list: $1: invalid option" ;; *) break ;; esac shift done # Process arguments [ $# = 0 ] || internal "list: $#: wrong arg count" # Guts CMDLINE="$SQLITE_CMD $MKDI_DB_FILE \"SELECT * FROM in_progress;\"" debug 10 "create_or_delete: calling [$CMDLINE] ..." eval "$CMDLINE" return 0 } usage() { local RC RC=${1:-1} { echo "Usage: $PROGNAME [ ] { create | delete | list }" echo } | if [ $RC = 0 ]; then cat else cat >&2 fi exit $RC } main "$@"