#!/bin/bash set -aeou pipefail function printHelp(){ cat << EOF Usage ${0##*/} [options..] -h,-?, --help Show help and exit -N, --network configure network settings -s, --salt run a masterless salt-call -y, --yes answer 'yes' on all questions EOF } function asktobreak(){ if [[ "$ANSWER_YES" == true ]];then printf "\n" return 1 fi printf "Do you want to run this step (y/n)" while read -r -n 1 -s answer; do if [[ $answer == [YyNn] ]];then [[ $answer == [Yy] ]] && return_value=1 [[ $answer == [Nn] ]] && return_value=0 printf "\n" break; fi done return $return_value } function new_log(){ # script output printf "\n**** [%s] ***\n" "$*" } function log(){ printf "%s\n" "$*" } function parse_yaml { local prefix=$2 local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034') sed -ne "s|^\($s\):|\1|" \ -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \ -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 | awk -F$fs '{ indent = length($1)/2; vname[indent] = $2; for (i in vname) {if (i > indent) {delete vname[i]}} if (length($3) > 0) { vn=""; for (i=0; i /dev/null 2>&1 RESULT=$? if [[ $RESULT != 0 ]];then printf "$1 is not installed, do your want to install it [y/N]?" read -r -n 1 -s answer; printf "\n" if [[ $answer == [yY] ]];then sudo zypper --non-interactive install "$1" fi fi set -e } function do_salt_call(){ local salt="sudo salt-call --local --file-root $HOME/tle/salt/states --pillar-root $HOME/tle/salt/pillars" new_log "Running salt high state" if asktobreak;then return fi $salt state.apply pillar="{username: $USER}" } function configure_network(){ new_log "Configure network" if asktobreak; then return fi eval $(parse_yaml salt/pillars/network.sls "SALT_") if [[ -f salt/pillars/local.sls ]];then eval $(parse_yaml salt/pillars/local.sls "SALT_") fi sudo nmcli connection modify "$SALT_network_interface_internal" ipv4.addresses "$SALT_network_ip" sudo nmcli connection modify "$SALT_network_interface_internal" ipv4.dns "127.0.0.1, 1.1.1.1, 1.1.1.2" sudo nmcli connection modify "$SALT_network_interface_internal" ipv4.method manual sudo nmcli connection down "$SALT_network_interface_internal" sudo nmcli connection up "$SALT_network_interface_internal" if [[ $(nmcli connection show | grep -i $SALT_network_interface_external | wc -l) == 0 ]]; then sudo nmcli connection add type vlan con-name "$SALT_network_interface_external" ifname "$SALT_network_interface_external" dev "$SALT_network_interface_internal" id "${SALT_network_interface_external#*.}" fi sudo nmcli connection modify "$SALT_network_interface_external" ipv4.method auto sudo nmcli connection up "$SALT_network_interface_external" } ######################### # # Main Script # ######################## #initialize all options ALL=true SALT=false NETWORK=false ANSWER_YES=false while :; do case ${1-noop} in -h|-\?|--help) printHelp exit ;; -s|--salt) SALT=true ALL=false ;; -N|--network) NETWORK=true ALL=false ;; -y|--yes) ANSWER_YES=true ;; --) #End of all options shift break ;; -?*) printf "'%s' is not a valid option\n" "$1" >&2 exit 1 ;; *) #Break out of case, no more options break esac shift done for cmd in git salt-minion curl;do check_prerequisites "$cmd" done [[ $ALL == true ]] || [[ $NETWORK == true ]] && configure_network [[ $ALL == true ]] || [[ $SALT == true ]] && do_salt_call printf "\n DONE!!!!!!!\n"