diff --git a/scripts/create.sh b/scripts/create.sh index 7e5f548..f99dd57 100644 --- a/scripts/create.sh +++ b/scripts/create.sh @@ -1,58 +1,61 @@ #!/bin/bash cd "$(dirname "$(readlink -f "$0")")" -#change to prompts w/ default values -# set defaults + +#define defaults cpu=1 -memory=1024 +memory=1 root_disk=10 variant="archlinux" -path="default" +path="/virtual/disks/" dhcp_opts="" ssh_key_dir="../../identity_files" +dhcp_dir="../../dhcp_files" mac=52:54:00:`openssl rand -hex 1`:`openssl rand -hex 1`:`openssl rand -hex 1` branch="prod" +deflate="y" -usage="$(basename "$0") [options] -n server_name -where: - -n name Name of new vm/server (required, caps allowed, not fqdn) - -c number Numver of CPU cores (default $cpu) - -r number Ram in MB (default $memory) - -d size Root disk size in GB (default 10) - -v variant Linux variant (default archlinux - note should add list of optional variants) - -p image_path Path to image (default /virtual/disks/[name].qcow2) - -m mac_addr Specify mac address to use - if not specified, will use 52:54:00:*:*:* - -s subnet Subnet to place server on (default to 172.16.99.xx) - -i ip_address Specify IP address to assign (default to next available in subnet) - -b branch Specify branch of build_ansible to use (defult prod) - -a attach Attach existing extra disk (use full path to disK, default none) - -f autodeflate Autodeflate memory on use - default true, avoid for ipa-server" +#get variables +numre='^[0-9]+$' +macre='^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$' +ipsegre='^[0-255]$' -# process flags -while getopts "h:n:c:r:d:v:p:m:s:i:b:f:" flag -do - case "$flag" in - n) name=${OPTARG};; - c) cpu=${OPTARG};; - r) memory=${OPTARG};; - d) root_disk=${OPTARG};; - v) variant=${OPTARG};; - p) path=${OPTARG};; - m) mac=${OPTARG};; - s) subnet=${OPTARG};dhcp_opts+=" -s $subnet";; - i) ip=${OPTARG};dhcp_opts+=" -i $ip";; - b) branch=${OPTARG};; - a) attach=${OPTARG};; - f) deflate=${OPTARG};; - h) ;& - *) echo "$usage";exit;; - esac -done -dhcp_opts+=" -m $mac" +while true; do read -p "Name of new vm/server (caps allowed, not fqdn): " v;if [ -z $v ]; then echo "error: name is required";else name=$v;break;fi;done +while true; do read -p "Number of CPU cores (default $cpu): " v;if [ -z $v ]; then break;else if ! [[ $v =~ $numre ]] ; then echo "error: not a number";else cpu=$v; break;fi;fi;done +while true; do read -p "Ram in GB (default $memory): " v;if [ -z $v ]; then break;else if ! [[ $v =~ $numre ]] ; then echo "error: not a number";else memory=$v; break;fi;fi;done +while true; do read -p "Root disk size in GB (default $root_disk): " v;if [ -z $v ]; then break;else if ! [[ $v =~ $numre ]] ; then echo "error: not a number";else root_disk=$v; break;fi;fi;done +while true; do read -p "Path to store root disk (default $path): " v;if [ -z $v ]; then path=$path/$name.qcow2 break;else if ! [ -d $v ] ; then echo "error: not a directory";else path=$v/$name.qcow2; break;fi;fi;done +variant=$(dialog --clear --title "Select Linux variant to use" --menu "Choose one of the following options:" 15 40 4 \ +archlinux "Arch Linux" \ +alma "Alma Linux 9" \ +2>&1 >/dev/tty);clear +while true; do read -p "Mac address (default $mac): " v;if [ -z $v ]; then break;else if ! [[ $v =~ $macre ]] ; then echo "error: invalid mac address";else mac=$v; break;fi;fi;done +#add subnet list +eval "dhcp_sets=(`grep "#" $dhcp_dir/subnets/172.* | grep -o 172.* | sort -t . -k 1,1n -k 2,2n -k 3,3n | sed -e "s/:# /.* \'/" | sed -e "s/$/\'/"`)" +subnet=$(dialog --clear --title "Select subnet to use" --menu "Choose one of the following: " 20 100 10 "${dhcp_sets[@]}" 2>&1 >/dev/tty);subnet=`echo $subnet | grep -oP "172.16.\d+"`;clear; +while true; do read -p "Specify last segment of IP (defaults to next available): " v;if [ -z $v ]; then break;else if ! [[ $v =~ $numre ]] ; then echo "error: not a number";else ip=$v; break;fi;fi;done +while true; do read -p "Specify branch of build_ansible to use (defult $branch): " v;if [ -z $v ]; then break;else branch=$v;break;fi;done +while true; do read -p "Full path to extra disk to attach (if applicable, default none): " v;if [ -z $v ]; then break;else if ! [ -f $v ] ; then echo "error: file doesn't exist";else attach=$v;break;fi;fi;done +while true; do read -p "Autodeflate memory on use y/n (default $deflate)? " v;if [ -z $v ]; then break;elif [ "$v" == "y" ];then break; elif [ "$v" == "n" ];then deflate=$v;break;else echo "error: select y or n";fi;done -# get name -shift $(($OPTIND - 1)) +echo "" +echo "Name: $name" +echo "CPU: $cpu" +echo "Ram: $memory" +echo "Root Disk: $root_disk" +echo "Path: $path" +echo "Variant: $variant" +echo "Mac: $mac" +echo "Subnet: $subnet" +echo "IP: $ip" +echo "Branch: $branch" +echo "Attach: $attach" +echo "Deflate: $deflate" +echo "" -if [[ -z "$name" ]];then echo "Server name undefined";echo "$usage";exit;fi +read -p "Is this correct (y/n)? " v;if [ "$v" != "y" ];then "Exiting, restart to reenter info"; exit;fi + +if [ -n $subnet ]; then dhcp_opts=" -s $subnet";fi +if [ -n $ip ]; then dhcp_opts+=" -i $ip";fi lname=`echo $name | tr '[:upper:]' '[:lower:]'` @@ -67,14 +70,13 @@ img=`./shared_scripts/download_install_image.sh $variant` if [ -n "$attach" ]; then attach="--disk ${attach},discard=unmap";fi #determine if deflate should be on -if [ -n "$deflate" ]; then deflate="--memballoon model=virtio,autodeflate=on";else deflate="--memballoon model=virtio";fi +if [[ "$deflate" == "y" ]]; then deflate="--memballoon model=virtio,autodeflate=on";else deflate="--memballoon model=virtio";fi case "$variant" in "archlinux") # create cloud-init - replace by grabbing these directly from git mkdir -p /tmp/cloud-init - echo "#cloud-config - name: root ssh_authorized_keys: diff --git a/scripts/shared_scripts/update_dhcp.sh b/scripts/shared_scripts/update_dhcp.sh index 84ad11e..d137df4 100755 --- a/scripts/shared_scripts/update_dhcp.sh +++ b/scripts/shared_scripts/update_dhcp.sh @@ -52,7 +52,7 @@ if [[ "$ip" -eq "generate" ]];then ip="${subnet}.2" fi else - subnet=`echo $ip | grep -Po "\d+\.\d+\.\d+"` + ip="${subnet}.$ip" fi touch $dhcp_dir/subnets/$subnet