ansitest/server-naming-translator-general.sh
2022-01-19 13:52:28 -06:00

337 lines
7.2 KiB
Bash

#!/bin/bash
# Author: dave.bechtel kingneutron@gmail , +%Y2022
# Utility script to translate server names to cloud service / physical location and type (sandbox, dev, prod, etc)
# Current version: 1.2 2022.0119.1300
# Requires: bash v3.2.57 or later
# NOTE set to 0 to disable "gt<1 ae<2 scg<3 d<4 01<5" helpful breakdown output
debugg=1
[ $debugg -gt 1 ] && set -e # Exit at first error
# failexit.mrg
function failexit () {
echo '! Something failed! Code: '"$1 $2" # code # (and optional description)
exit $1
}
#echo "** Server Translator -- Author: dave.bechtel kingneutron@gmail **"
# Azure cloud
# 3 chars for location, 3 for app, 3 for function, 2 for environment, 2 for server count
# ex. zgq xym mgm cs 01 == "Azure Gov Qual - Xymon - Management - Customer Services - 01"
# 1 2 3 4 5
zgq="Azure Gov Qual"
zgb="Azure Gov Bensonville"
sb="Sandbox"
de="Development"
np="NonProd"
cs="Customer Services"
pr="Production"
qa="Quality Assurance"
# AWS cloud
# 3 for location, 3 for app, 3 for function, 2 for env, 2 for server count
# ex. aw1 xym mgm ss 01 == "AWS Virginia - Xymon - Management - Shared Services - 01"
aw1="AWS Virginia"
ss="Shared Services"
te="Test"
# On-prem physical / VM
# 2 for location, 2 for app owner, 3 for function, 1 for env, 2 for server count
# Prefixes
ch="Chicago (on-prem)"
sa="San Antonio (on-prem)"
# Appowner
db="Database"
lx="Linux"
# server function
adm="AHE LINUX Gateway"
app="Application"
azs="Replication"
cfj="Confluence / JIRA"
dbe="Database"
dbg="Oracle Dataguard"
gms="Golden Master Server"
mgm="Management"
oem="OEM"
web="Webserver"
xym="XYMon Monitoring"
# Env
s="Sandbox"
d="Development"
t="Test"
q="QA"
p="Production"
h="Training"
#############################
# Functions
function transazure () {
# arg=zgqxymmgmcs01
# 111
# 0123456789012
# Print a helpful breakdown of parts
[ $debugg -gt 0 ] && echo ${arg:0:3}'<1 '${arg:3:3}'<2 '${arg:6:3}'<3 '${arg:9:2}'<4 '${arg:11:2}'<5 '
#zgq<1 xym<2 mgm<3 cs<4 01<5
part1=${arg:0:3}
part2=${arg:3:3}
part3=${arg:6:3}
part4=${arg:9:2}
part5=${arg:11:2}
case "$part1" in
zgq )
buildstr="$arg = $zgq -" ;;
zgb )
buildstr="$arg = $zgb -" ;;
esac
# 1-offs
case "$part2" in
bfg )
buildstr="$buildstr DoomBFG -" ;;
# xym )
# buildstr="$buildstr $xym -" ;;
# oem )
# buildstr="$buildstr $oem -" ;;
* )
# Fallthru
# REF: https://unix.stackexchange.com/questions/23111/what-is-the-eval-command-in-bash
# see if section EVALuates to already-defined var, populate if result = not blank
eval tmptest='$'$part2; [ "$tmptest" = "" ] ||buildstr="$buildstr $tmptest -"
esac
# case "$part3" in
# dbe )
# buildstr="$buildstr $dbe -" ;;
# mgm )
# buildstr="$buildstr $mgm -" ;;
# esac
eval tmptest='$'$part3; [ "$tmptest" = "" ] ||buildstr="$buildstr $tmptest -"
# case "$part4" in
# sb )
# buildstr="$buildstr $sb -" ;;
# de )
# buildstr="$buildstr $de -" ;;
# np )
# buildstr="$buildstr $np -" ;;
# cs )
# buildstr="$buildstr $cs -" ;;
# pr )
# buildstr="$buildstr $pr -" ;;
# qa )
# buildstr="$buildstr $qa -" ;;
# esac
eval tmptest='$'$part4; [ "$tmptest" = "" ] ||buildstr="$buildstr $tmptest -"
buildstr="$buildstr $part5"
echo "$buildstr"
exit 0;
}
function transamazon () {
# arg=aw1xymmgmss99
# 111
# 0123456789012
[ $debugg -gt 0 ] && echo ${arg:0:3}'<1 '${arg:3:3}'<2 '${arg:6:3}'<3 '${arg:9:2}'<4 '${arg:11:2}'<5 '
#aw1<1 xym<2 mgm<3 ss<4 01<5
part1=${arg:0:3}
part2=${arg:3:3}
part3=${arg:6:3}
part4=${arg:9:2}
part5=${arg:11:2}
case "$part1" in
aw1 )
buildstr="$arg = $aw1 -" ;;
esac
# case "$part2" in
# adm )
# buildstr="$buildstr $adm -" ;;
# xym )
# buildstr="$buildstr $xym -" ;;
# cfj )
# buildstr="$buildstr $cfj -" ;;
# esac
eval tmptest='$'$part2; [ "$tmptest" = "" ] ||buildstr="$buildstr $tmptest -"
# 1-offs
case "$part3" in
# mgm )
# buildstr="$buildstr $mgm -" ;;
# app )
# buildstr="$buildstr $app -" ;;
web )
buildstr="$buildstr Webserver -" ;;
* )
# Fallthru
eval tmptest='$'$part3; [ "$tmptest" = "" ] ||buildstr="$buildstr $tmptest -"
esac
# case "$part4" in
# sb )
# buildstr="$buildstr $sb -" ;;
# de )
# buildstr="$buildstr $de -" ;;
# np )
# buildstr="$buildstr $np -" ;;
# cs )
# buildstr="$buildstr $cs -" ;;
# ss )
# buildstr="$buildstr $ss -" ;;
# pr )
# buildstr="$buildstr $pr -" ;;
# te )
# buildstr="$buildstr $te -" ;;
# esac
eval tmptest='$'$part4; [ "$tmptest" = "" ] ||buildstr="$buildstr $tmptest -"
buildstr="$buildstr $part5"
echo "$buildstr"
exit 0;
}
function transonprem () {
# arg=chdbadmp99
# 1
# 01234567890
[ $debugg -gt 0 ] && echo ${arg:0:2}'<1 '${arg:2:2}'<2 '${arg:4:3}'<3 '${arg:7:1}'<4 '${arg:8:2}'<5 '
#ch<1 db<2 adm<3 p<4 01<5
part1=${arg:0:2}
part2=${arg:2:2}
part3=${arg:4:3}
part4=${arg:7:1}
part5=${arg:8:2}
#[ $debugg -gt 0 ] && echo "part1=$part1..gt=$gt"
case "$part1" in
ch )
buildstr="$arg = $ch -" ;;
sa )
buildstr="$arg = $sa -" ;;
esac
# case "$part2" in
# db )
# buildstr="$buildstr $db -" ;;
# lx )
# buildstr="$buildstr $lx -" ;;
# esac
eval tmptest='$'$part2; [ "$tmptest" = "" ] ||buildstr="$buildstr $tmptest -"
# case "$part3" in
# azs )
# buildstr="$buildstr $azs -" ;;
# dbg )
# buildstr="$buildstr $dbg -" ;;
# gms )
# buildstr="$buildstr $gms -" ;;
# web )
# buildstr="$buildstr $web -" ;;
# esac
eval tmptest='$'$part3; [ "$tmptest" = "" ] ||buildstr="$buildstr $tmptest -"
# case "$part4" in
# s )
# buildstr="$buildstr $s -" ;;
# d )
# buildstr="$buildstr $d -" ;;
# t )
# buildstr="$buildstr $t -" ;;
# q )
# buildstr="$buildstr $q -" ;;
# p )
# buildstr="$buildstr $p -" ;;
# h )
# buildstr="$buildstr $h -" ;;
# esac
eval tmptest='$'$part4; [ "$tmptest" = "" ] ||buildstr="$buildstr $tmptest -"
buildstr="$buildstr $part5"
echo "$buildstr"
exit 0;
}
#############################
# MAIN
arg="$1"
# ${string:position:length} ## 0-indexed!
prefix3=${arg:0:3}
prefix2=${arg:0:2}
case "$prefix3" in
zgq )
transazure ;;
zgb )
transazure ;;
aw1 )
transamazon ;;
esac
case "$prefix2" in
ch )
transonprem ;;
sa )
transonprem ;;
* )
# Fallthru
failexit 404 "Unknown server prefix - please add to code or correct input argument"
esac
exit;
# REF: https://tldp.org/LDP/abs/html/string-manipulation.html
# REF: https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_03.html
# REF: shared drive AHE Unix Onboarding docs "ServerList.txt" and ServerNamingConventions.txt
# Latest updates at top
2022.0119 (DONE) IDEA - refactored to use eval, generic version rev
# REF: https://unix.stackexchange.com/questions/23111/what-is-the-eval-command-in-bash
This saves A LOT on coding, and nearly no update-in-two-places unless 1-offs
v1.2
$ echo $sname
ssdsotweb01
# 1
#01234567890
web="Web Server"
part=${sname:6:3}; echo $part
web
#eval testt=$web; if blank, NOP OR printit
eval testt='$'$part; [ "$testt" = "" ] ||echo $testt
Web Server
#=============