Switched from flags to prompts (#1)
Reviewed-on: #1 Co-authored-by: Beth <ejparker@actcur.com> Co-committed-by: Beth <ejparker@actcur.com>
This commit is contained in:
parent
830b402277
commit
dce537e67a
3 changed files with 126 additions and 51 deletions
|
@ -1,65 +1,75 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
cd "$(dirname "$(readlink -f "$0")")"
|
cd "$(dirname "$(readlink -f "$0")")"
|
||||||
#change to prompts w/ default values
|
|
||||||
# set defaults
|
#define defaults
|
||||||
cpu=1
|
cpu=1
|
||||||
memory=1024
|
memory=1
|
||||||
root_disk=10
|
root_disk=10
|
||||||
variant="archlinux"
|
variant="archlinux"
|
||||||
path="default"
|
path="/virtual/disks/"
|
||||||
dhcp_opts=""
|
dhcp_opts=""
|
||||||
ssh_key_dir="../../identity_files"
|
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`
|
mac=52:54:00:`openssl rand -hex 1`:`openssl rand -hex 1`:`openssl rand -hex 1`
|
||||||
branch="prod"
|
branch="prod"
|
||||||
|
deflate="y"
|
||||||
|
ansible="y"
|
||||||
|
|
||||||
usage="$(basename "$0") [options] -n server_name
|
#get variables
|
||||||
where:
|
numre='^[0-9]+$'
|
||||||
-n name Name of new vm/server (required, caps allowed, not fqdn)
|
macre='^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$'
|
||||||
-c number Numver of CPU cores (default $cpu)
|
ipsegre='^[0-255]$'
|
||||||
-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"
|
|
||||||
|
|
||||||
# process flags
|
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 getopts "h:n:c:r:d:v:p:m:s:i:b:f:" flag
|
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
|
||||||
do
|
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
|
||||||
case "$flag" in
|
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
|
||||||
n) name=${OPTARG};;
|
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
|
||||||
c) cpu=${OPTARG};;
|
variant=$(dialog --clear --title "Select Linux variant to use" --menu "Choose one of the following options:" 15 40 4 \
|
||||||
r) memory=${OPTARG};;
|
archlinux "Arch Linux" \
|
||||||
d) root_disk=${OPTARG};;
|
alma "Alma Linux 9" \
|
||||||
v) variant=${OPTARG};;
|
2>&1 >/dev/tty);clear
|
||||||
p) path=${OPTARG};;
|
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
|
||||||
m) mac=${OPTARG};;
|
#add subnet list
|
||||||
s) subnet=${OPTARG};dhcp_opts+=" -s $subnet";;
|
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/$/\'/"`)"
|
||||||
i) ip=${OPTARG};dhcp_opts+=" -i $ip";;
|
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;
|
||||||
b) branch=${OPTARG};;
|
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
|
||||||
a) attach=${OPTARG};;
|
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
|
||||||
f) deflate=${OPTARG};;
|
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
|
||||||
h) ;&
|
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
|
||||||
*) echo "$usage";exit;;
|
while true; do read -p "Autorun ansible build script (default $ansible)? " v;if [ -z $v ]; then break;elif [ "$v" == "y" ];then break; elif [ "$v" == "n" ];then ansible=$v;break;else echo "error: select y or n";fi;done
|
||||||
esac
|
|
||||||
done
|
path=`echo $path | sed -s 's/\/\//\//'`
|
||||||
|
attach=`echo $attach | sed -s 's/\/\//\//'`
|
||||||
|
|
||||||
|
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 "Run Ansible: $ansible"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
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
|
||||||
dhcp_opts+=" -m $mac"
|
dhcp_opts+=" -m $mac"
|
||||||
|
|
||||||
# get name
|
|
||||||
shift $(($OPTIND - 1))
|
|
||||||
|
|
||||||
if [[ -z "$name" ]];then echo "Server name undefined";echo "$usage";exit;fi
|
|
||||||
|
|
||||||
lname=`echo $name | tr '[:upper:]' '[:lower:]'`
|
lname=`echo $name | tr '[:upper:]' '[:lower:]'`
|
||||||
|
|
||||||
if [[ "$path" -eq "default" ]];then path=/virtual/disks/${name}.qcow2;fi
|
|
||||||
|
|
||||||
img=`./shared_scripts/download_install_image.sh $variant`
|
img=`./shared_scripts/download_install_image.sh $variant`
|
||||||
|
|
||||||
|
memory=$((memory*1024))
|
||||||
|
|
||||||
#update DHCP
|
#update DHCP
|
||||||
./shared_scripts/update_dhcp.sh $dhcp_opts $lname
|
./shared_scripts/update_dhcp.sh $dhcp_opts $lname
|
||||||
|
|
||||||
|
@ -67,14 +77,13 @@ img=`./shared_scripts/download_install_image.sh $variant`
|
||||||
if [ -n "$attach" ]; then attach="--disk ${attach},discard=unmap";fi
|
if [ -n "$attach" ]; then attach="--disk ${attach},discard=unmap";fi
|
||||||
|
|
||||||
#determine if deflate should be on
|
#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
|
case "$variant" in
|
||||||
"archlinux")
|
"archlinux")
|
||||||
# create cloud-init - replace by grabbing these directly from git
|
# create cloud-init - replace by grabbing these directly from git
|
||||||
mkdir -p /tmp/cloud-init
|
mkdir -p /tmp/cloud-init
|
||||||
|
|
||||||
|
|
||||||
echo "#cloud-config
|
echo "#cloud-config
|
||||||
- name: root
|
- name: root
|
||||||
ssh_authorized_keys:
|
ssh_authorized_keys:
|
||||||
|
@ -161,10 +170,15 @@ ssh -i $ssh_key_dir/id_arch_builder ${lname}.actcur.com "ansible-galaxy collecti
|
||||||
ssh -i $ssh_key_dir/id_arch_builder ${lname}.actcur.com "ansible-galaxy collection install community.crypto"
|
ssh -i $ssh_key_dir/id_arch_builder ${lname}.actcur.com "ansible-galaxy collection install community.crypto"
|
||||||
ssh -i $ssh_key_dir/id_arch_builder ${lname}.actcur.com "ansible-galaxy collection install ansible.posix"
|
ssh -i $ssh_key_dir/id_arch_builder ${lname}.actcur.com "ansible-galaxy collection install ansible.posix"
|
||||||
|
|
||||||
# run ansible
|
# Set up ansible
|
||||||
ssh -i $ssh_key_dir/id_arch_builder ${lname}.actcur.com "mkdir /ansible/; curl -k 'https://git.actcur.com/actcur-ansible/playbook-builder/raw/branch/$branch/build_ansible.sh' -H 'accept: application/raw' -o /ansible/build_ansible.sh;echo "$branch" > /ansible/branch;/bin/bash /ansible/build_ansible.sh"
|
ssh -i $ssh_key_dir/id_arch_builder ${lname}.actcur.com "mkdir /ansible/; curl -k 'https://git.actcur.com/actcur-ansible/playbook-builder/raw/branch/$branch/build_ansible.sh' -H 'accept: application/raw' -o /ansible/build_ansible.sh;echo "$branch" > /ansible/branch"
|
||||||
|
|
||||||
ssh -i $ssh_key_dir/id_arch_builder ${lname}.actcur.com "/bin/bash /ansible/build_ansible.sh"
|
if [[ "$ansible" == "y" ]]; then
|
||||||
|
# Run ansible twice - some configurations don't take effect on first run (i.e. when they are dependent on other configurations)
|
||||||
|
ssh -i $ssh_key_dir/id_arch_builder ${lname}.actcur.com "/bin/bash /ansible/build_ansible.sh"
|
||||||
|
|
||||||
|
ssh -i $ssh_key_dir/id_arch_builder ${lname}.actcur.com "/bin/bash /ansible/build_ansible.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
ssh -i $ssh_key_dir/id_arch_builder ${lname}.actcur.com "git config --global user.email 'ejparker@actcur.com';git config --global user.name 'Beth Parker'"
|
ssh -i $ssh_key_dir/id_arch_builder ${lname}.actcur.com "git config --global user.email 'ejparker@actcur.com';git config --global user.name 'Beth Parker'"
|
||||||
|
|
||||||
|
|
61
scripts/shared_scripts/get_sever_settings.sh
Normal file
61
scripts/shared_scripts/get_sever_settings.sh
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
#!/bin/bash
|
||||||
|
cd "$(dirname "$(readlink -f "$0")")"
|
||||||
|
|
||||||
|
#define defaults
|
||||||
|
cpu=1
|
||||||
|
memory=1
|
||||||
|
root_disk=10
|
||||||
|
variant="archlinux"
|
||||||
|
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"
|
||||||
|
ansible="y"
|
||||||
|
|
||||||
|
#get variables
|
||||||
|
numre='^[0-9]+$'
|
||||||
|
macre='^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$'
|
||||||
|
ipsegre='^[0-255]$'
|
||||||
|
|
||||||
|
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
|
||||||
|
while true; do read -p "Autorun ansible build script (default $ansible)? " v;if [ -z $v ]; then break;elif [ "$v" == "y" ];then break; elif [ "$v" == "n" ];then ansible=$v;break;else echo "error: select y or n";fi;done
|
||||||
|
|
||||||
|
path=`echo $path | sed -s 's/\/\//\//'`
|
||||||
|
attach=`echo $attach | sed -s 's/\/\//\//'`
|
||||||
|
|
||||||
|
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 "Run Ansible: $ansible"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
read -p "Is this correct (y/n)? " v;if [ "$v" != "y" ];then "Exiting, restart to reenter info"; exit;fi
|
|
@ -52,7 +52,7 @@ if [[ "$ip" -eq "generate" ]];then
|
||||||
ip="${subnet}.2"
|
ip="${subnet}.2"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
subnet=`echo $ip | grep -Po "\d+\.\d+\.\d+"`
|
ip="${subnet}.$ip"
|
||||||
fi
|
fi
|
||||||
touch $dhcp_dir/subnets/$subnet
|
touch $dhcp_dir/subnets/$subnet
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue