pkvlm-create
changeset 8 ba98eb53344a
parent 7 ab661ceed4dc
child 9 ef5f501266ae
equal deleted inserted replaced
7:ab661ceed4dc 8:ba98eb53344a
    13 
    13 
    14 ### Command-line input
    14 ### Command-line input
    15 ## Command-line options
    15 ## Command-line options
    16 function _help () {
    16 function _help () {
    17     cat <<END
    17     cat <<END
    18 Usage: $1 [options] [param=value [...]]
    18 Usage: $1 [options] <name> [param=value [...]]
    19 
    19 
    20 Options:
    20 Options:
    21     -h      Show this help text
    21     -h      Show this help text
    22 
    22 
    23     -D      Debug
    23     -D      Debug
    98 
    98 
    99 # forget them
    99 # forget them
   100 shift $(( $OPTIND - 1 ))
   100 shift $(( $OPTIND - 1 ))
   101 
   101 
   102 ## Command-line arguments
   102 ## Command-line arguments
   103 log_info "Processing ${#@} arguments"
   103 # Name
       
   104 [ -z $1 ] && die "Machine name must be given as first argument"
       
   105 
       
   106 opt_name="$1"; shift
       
   107 
       
   108 # Defaults
       
   109 function define_opt () {
       
   110     local name=$1
       
   111     local value=${2:-}
       
   112 
       
   113     log_debugf "%-20s = %s" $name "$value"
       
   114     eval "opt_${name}=${value}"
       
   115 }
       
   116 
       
   117 function resolve_name () {
       
   118     local name=$1
       
   119     local out=$(dig +short $name)
       
   120 
       
   121     [ -z "$out" ] && die "Hostname lookup failed: $name"
       
   122 
       
   123     echo $out
       
   124 }
       
   125 
       
   126 define_opt  ram         1G
       
   127 define_opt  cpus        2
       
   128 define_opt  os          debiansqueeze
       
   129 define_opt  disk_size   10G
       
   130 define_opt  disk_vg     pvl
       
   131 define_opt  disk_lv     $opt_name
       
   132 define_opt  disk_bus    virtio
       
   133 define_opt  guest_disk  /dev/vda
       
   134 define_opt  hostname    $opt_name
       
   135 define_opt  bridge      br-lan
       
   136 define_opt  dns_domain  paivola.fi
       
   137 define_opt  ip          $(resolve_name ${opt_name}.${opt_dns_domain})
       
   138 
       
   139 log_info "Processing ${#@} parameters:"
   104 for param in "$@"; do
   140 for param in "$@"; do
   105     name=${param%=*}
   141     name=${param%=*}
   106     value=${param##*=}
   142     value=${param##*=}
   107 
   143 
   108     # evaluate
   144     # evaluate
   109     value=$(expand_line "$value")
   145     value=$(expand_line "$value")
   110 
   146 
   111     log_debug " $name = $value"
   147     define_opt ${name} "${value}"
   112 
       
   113     eval "opt_${name}=${value}"
       
   114 done
   148 done
   115 
   149 
   116 ### State
   150 ### State
   117 ## Guest info
   151 ## Guest info
   118 GUEST_NAME=$opt_name
   152 GUEST_NAME=$opt_name
   119 
   153 
   120 # Basic params
   154 # Basic params
   121 GUEST_RAM=${opt_ram:-1G}
   155 GUEST_RAM=$opt_ram
   122 GUEST_VCPUS=${opt_cpus:-2}
   156 GUEST_VCPUS=$opt_cpus
   123 
   157 
   124 # OS variant (for virt-install)
   158 # OS variant (for virt-install)
   125 GUEST_OS_VARIANT=${opt_os:-debiansqueeze}
   159 GUEST_OS_VARIANT=$opt_os
   126 
   160 
   127 ## Disk
   161 ## Disk
   128 # Size of LV to create
   162 # Size of LV to create
   129 DISK_SIZE=${opt_disk_size:-10G}
   163 DISK_SIZE=$opt_disk_size
   130 
   164 
   131 # LVM vg to use
   165 # LVM vg to use
   132 DISK_VG=${opt_disk_vg:-pvl}
   166 DISK_VG=$opt_disk_vg
   133 
   167 
   134 # LVM lv to use
   168 # LVM lv to use
   135 DISK_NAME=${opt_disk_lv:-${GUEST_NAME}}
   169 DISK_NAME=$opt_disk_lv
   136 
   170 
   137 # Path to disk block device
   171 # Path to disk block device
   138 DISK_PATH=/dev/mapper/${DISK_VG}-${DISK_NAME}
   172 DISK_PATH=/dev/mapper/${DISK_VG}-${DISK_NAME}
   139 DISK_BUS=${opt_disk_bus:-virtio}
   173 DISK_BUS=$opt_disk_bus
   140 GUEST_DISK=${opt_guest_disk:-/dev/vda}
   174 GUEST_DISK=$opt_guest_disk
   141 
   175 
   142 ## Network
   176 ## Network
   143 NET_HOSTNAME=${opt_hostname:-${GUEST_NAME}}
   177 NET_HOSTNAME=$opt_hostname
   144 NET_BRIDGE=${opt_bridge:-br-lan}
   178 NET_BRIDGE=$opt_bridge
   145 NET_IPADDR=${opt_ip:-194.197.235.36}
   179 NET_IPADDR=$opt_ip
   146 
   180 
   147 ## Installation image
   181 ## Installation image
   148 # Original Debian Installer image (iso)
   182 # Original Debian Installer image (iso)
   149 INSTALLER_NAME="debian-6.0.3-amd64"
   183 INSTALLER_NAME="debian-6.0.3-amd64"
   150 INSTALLER_ISO="iso-in/${INSTALLER_NAME}-netinst.iso"
   184 INSTALLER_ISO="iso-in/${INSTALLER_NAME}-netinst.iso"
   244 
   278 
   245 
   279 
   246 [ $TESTING ] && exit 0
   280 [ $TESTING ] && exit 0
   247 
   281 
   248 ### Check
   282 ### Check
       
   283 # Parameters given?
       
   284 [ -z $NET_IPADDR ] && die "net: No IP-address given: ip"
       
   285 
   249 # VM exists?
   286 # VM exists?
   250 if cmd virsh domid ${GUEST_NAME} 2> /dev/null; then
   287 if cmd virsh domid ${GUEST_NAME} 2> /dev/null; then
   251     die "Virtual machine already exists: ${GUEST_NAME}"
   288     die "Virtual machine already exists: ${GUEST_NAME}"
   252 fi
   289 fi
   253 
   290