From 279d5c1863acde160b6a5e13e0a8129e1e30be69 Mon Sep 17 00:00:00 2001 From: "kebler.net" Date: Fri, 23 Dec 2022 08:29:06 -0800 Subject: [PATCH] feat: allow easier seperate loading of network repos from within terminal session uses new networks module functions --- alias/networks | 3 ++ modules/net-utils.mod | 7 +++ modules/network-dirs.func | 48 ++++++++++++++++++ modules/networks.mod | 103 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 161 insertions(+) create mode 100644 alias/networks create mode 100644 modules/network-dirs.func create mode 100644 modules/networks.mod diff --git a/alias/networks b/alias/networks new file mode 100644 index 0000000..6e2ea29 --- /dev/null +++ b/alias/networks @@ -0,0 +1,3 @@ +alias homenet="module_load networks && load_home_network" +alias allnets="module_load networks && load_all_networks" +alias clrnets="module_load networks && clear_networks" \ No newline at end of file diff --git a/modules/net-utils.mod b/modules/net-utils.mod index 29d9870..8718556 100644 --- a/modules/net-utils.mod +++ b/modules/net-utils.mod @@ -92,4 +92,11 @@ domain=$(echo $1 | awk -F\. '{print $(NF-1) FS $NF}') echo "$domain" } +publicip () { +dig +short myip.opendns.com @resolver1.opendns.com +} + +getip () { +dig +short $1 | tail -1 +} diff --git a/modules/network-dirs.func b/modules/network-dirs.func new file mode 100644 index 0000000..234bbd7 --- /dev/null +++ b/modules/network-dirs.func @@ -0,0 +1,48 @@ +#!/bin/bash +# to be sourced (below) not run in subshell! + +function network_dirs () { + + (return 0 2>/dev/null) || (echo network_dirs must be sourced; return 1) + + module_load path + [[ $? -ne 0 ]] && echo unable to access the file module, aboarting load && return 1 + + [[ ! $1 ]] && return 1 + local networks; + networks=$1 + [[ -f $1 ]] && networks=$(cat $1 | tr -s "\n" " ") + for network in $networks; + # while read -r network || [ -n "$network" ] + do + if [[ ${network} = *!* ]]; then + network=${network/!/} + BASH_NETWORK_HOME=$network + fi + [[ $2 ]] && network=$2/$network + if [[ $(isAbsPath $network) ]]; then + [[ ! -d $network ]] && continue + else + if [[ -d ${HOME}/${BASH_SHELL_USER}/${network} ]];then + network=${HOME}/${BASH_SHELL_USER}/${network} + else + if [[ -d ${BASH_NETWORKS_DIR}/${network} ]];then + network=${BASH_NETWORKS_DIR}/${network} + else + continue + fi + fi + fi + [[ $network =~ $NETWORK_HOME ]] && BASH_NETWORK_HOME_DIR=${network} + # echo adding $network to list of networks + BASH_SHELL_NETWORK_DIRS+="${network} " + done + # done < "$1" + # echo after network-dirs $1 + # echo DIRS: $BASH_SHELL_NETWORK_DIRS + + export BASH_NETWORK_HOME + export BASH_NETWORK_HOME_DIR + export BASH_SHELL_NETWORK_DIRS + +} \ No newline at end of file diff --git a/modules/networks.mod b/modules/networks.mod new file mode 100644 index 0000000..68a9a00 --- /dev/null +++ b/modules/networks.mod @@ -0,0 +1,103 @@ +#!/bin/bash + +# module_load network-dirs +# # These will be loaded for all users on a host +# network_dirs "$BASH_SHELL_HOST/.networks" +# # these loaded only for specific user on a host and take precedence +# network_dirs "$HOME/${BASH_SHELL_USER:-"shell"}/.networks" +# # these are exported from network_dirs +# # env | grep NETWORK +# # NETWORK_HOME +# # NETWORK_HOME_DIR +# # BASH_SHELL_NETWORK_DIRS + +loadssh () { + module_load ssh + module_load ssh-config + ssh_config + module_load ssh-copy + module_load ssh-pubkey + module_load sshfs + enable_mounts + # echo ssh modules are loaded +} + + +load_home_network() { +# unset BASH_SHELL_NETWORKS_LOAD +# export BASH_SHELL_HOME_NETWORK_LOAD=true + _load_networks -h +# loadssh +} + +load_all_networks () { +# unset BASH_SHELL_HOME_NETWORK_LOAD +# export BASH_SHELL_NETWORKS_LOAD=true + _load_networks -a +# dssh +} + +load_network () { + unset BASH_SHELL_HOME_NETWORK_LOAD + unset BASH_SHELL_NETWORKS_LOAD + _load_networks $@ +# loadssh +} + +clear_networks () { + unset BASH_SHELL_NETWORKS_LOAD + unset BASH_SHELL_HOME_NETWORK_LOAD + unset BASH_SHELL_NETWORK_DIRS + unset BASH_SHELL_NETWORK + reload_shell + ssh_config +} + +# called from reload_shell +_load_networks () { + + # echo load_networks called $@ + + [[ $1 == "-h" ]] && BASH_SHELL_HOME_NETWORK_LOAD=true && shift 1 + [[ $1 == "-a" ]] && BASH_SHELL_NETWORKS_LOAD=true && shift 1 + + if [[ ! $BASH_SHELL_NETWORKS_LOAD ]] && [[ ! $BASH_SHELL_HOME_NETWORK_LOAD ]]; then + [[ ! $1 ]] && return 0 + # echo $1 was passed + fi +# echo loading networks + module_load network-dirs + + # echo before unset $BASH_SHELL_NETWORK_DIRS + unset BASH_SHELL_NETWORK_DIRS + unset BASH_NETWORK_HOME + unset BASH_NETWORK_HOME_DIR + # echo after unset $BASH_SHELL_NETWORK_DIRS + + if [[ $1 ]]; then + network_dirs $1 + else + # These will be added for all users on a host + network_dirs "$BASH_SHELL_HOST/.networks" + # these added only for specific user on a host and take precedence + network_dirs "$HOME/${BASH_SHELL_USER:-"shell"}/.networks" + # these added only for development and take precedence + network_dirs "$BASH_SHELL_DEV/.networks" + fi + + if [[ $BASH_SHELL_HOME_NETWORK_LOAD ]]; then + # echo Home nework $BASH_NETWORK_HOME_DIR processed + shell_process_directory $BASH_NETWORK_HOME_DIR + export BASH_SHELL_NETWORK_DIRS=$BASH_NETWORK_HOME_DIR + else + for dir in ${1:-$BASH_SHELL_NETWORK_DIRS}; do + # echo network $dir processed + shell_process_directory $dir + done + fi + unset BASH_SHELL_NETWORKS_LOAD + unset BASH_SHELL_HOME_NETWORK_LOAD + loadssh + [[ $BASH_SHELL_LOADED ]] && load_shell_host_user_dev + # echo loaded $BASH_SHELL_NETWORK_DIRS +} \ No newline at end of file