Compare commits
	
		
			2 Commits
		
	
	
		
			d4de07c340
			...
			e0de805af7
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e0de805af7 | |||
| 4cdf3b4539 | 
| @ -42,5 +42,6 @@ if not PLATFORM_VERIFY_SSL_WARNING: | |||||||
| if PLATFORM_DUMMY: | if PLATFORM_DUMMY: | ||||||
|     API_URL = PLATFORM_DUMMY_API_URL |     API_URL = PLATFORM_DUMMY_API_URL | ||||||
|     API_HEADERS = {'x-xsrf-token': PLATFORM_DUMMY_TOKEN} |     API_HEADERS = {'x-xsrf-token': PLATFORM_DUMMY_TOKEN} | ||||||
|     API_EMAIL = PLATFORM_DUMMY_EMAIL | 
 | ||||||
|     API_PASSWORD = PLATFORM_DUMMY_PASSWORD | API_EMAIL = PLATFORM_DUMMY_EMAIL | ||||||
|  | API_PASSWORD = PLATFORM_DUMMY_PASSWORD | ||||||
|  | |||||||
| @ -22,14 +22,20 @@ PLATFORM_URL = env.str( | |||||||
| # Development mode: | # Development mode: | ||||||
| PLATFORM_DUMMY = env.bool('PLATFORM_DUMMY', False) | PLATFORM_DUMMY = env.bool('PLATFORM_DUMMY', False) | ||||||
| 
 | 
 | ||||||
| if PLATFORM_DUMMY: | if PLATFORM_TYPE == 'vm': | ||||||
|     if PLATFORM_TYPE == 'vm': |  | ||||||
|     PLATFORM_DUMMY_API_URL = env.str('PLATFORM_DUMMY_VM6_API_URL', '') |     PLATFORM_DUMMY_API_URL = env.str('PLATFORM_DUMMY_VM6_API_URL', '') | ||||||
|     PLATFORM_DUMMY_EMAIL = env.str('PLATFORM_DUMMY_VM6_EMAIL', '') |     PLATFORM_DUMMY_EMAIL = env.str('PLATFORM_DUMMY_VM6_EMAIL', '') | ||||||
|     PLATFORM_DUMMY_PASSWORD = env.str('PLATFORM_DUMMY_VM6_PASSWORD', '') |     PLATFORM_DUMMY_PASSWORD = env.str('PLATFORM_DUMMY_VM6_PASSWORD', '') | ||||||
|     PLATFORM_DUMMY_TOKEN = env.str('PLATFORM_DUMMY_VM6_TOKEN', '') |     PLATFORM_DUMMY_TOKEN = env.str('PLATFORM_DUMMY_VM6_TOKEN', '') | ||||||
|     if PLATFORM_TYPE == 'dci': | elif PLATFORM_TYPE == 'dci': | ||||||
|     PLATFORM_DUMMY_API_URL = env.str('PLATFORM_DUMMY_DCI6_API_URL', '') |     PLATFORM_DUMMY_API_URL = env.str('PLATFORM_DUMMY_DCI6_API_URL', '') | ||||||
|     PLATFORM_DUMMY_EMAIL = env.str('PLATFORM_DUMMY_DCI6_EMAIL', '') |     PLATFORM_DUMMY_EMAIL = env.str('PLATFORM_DUMMY_DCI6_EMAIL', '') | ||||||
|     PLATFORM_DUMMY_PASSWORD = env.str('PLATFORM_DUMMY_DCI6_PASSWORD', '') |     PLATFORM_DUMMY_PASSWORD = env.str('PLATFORM_DUMMY_DCI6_PASSWORD', '') | ||||||
|     PLATFORM_DUMMY_TOKEN = env.str('PLATFORM_DUMMY_DCI6_TOKEN', '') |     PLATFORM_DUMMY_TOKEN = env.str('PLATFORM_DUMMY_DCI6_TOKEN', '') | ||||||
|  | else: | ||||||
|  |     # ? guarantees that constants exist for import | ||||||
|  |     # ? if the user has set the wrong PLATFORM_TYPE: | ||||||
|  |     PLATFORM_DUMMY_API_URL = env.str('PLATFORM_DUMMY_API_URL', '') | ||||||
|  |     PLATFORM_DUMMY_EMAIL = env.str('PLATFORM_DUMMY_EMAIL', '') | ||||||
|  |     PLATFORM_DUMMY_PASSWORD = env.str('PLATFORM_DUMMY_PASSWORD', '') | ||||||
|  |     PLATFORM_DUMMY_TOKEN = env.str('PLATFORM_DUMMY_TOKEN', '') | ||||||
|  | |||||||
							
								
								
									
										466
									
								
								scripts/gogo/gogo.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										466
									
								
								scripts/gogo/gogo.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,466 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  | 
 | ||||||
|  | # █▀▀ █▀█ █▀▀ █▀█ ▀ | ||||||
|  | # █▄█ █▄█ █▄█ █▄█ ▄ | ||||||
|  | # -- -- -- -- -- -- | ||||||
|  | 
 | ||||||
|  | # INIT GLOBAL VARIABLES: | ||||||
|  | _VERSION="0.1.0" | ||||||
|  | _SCRIPT_NAME="$0" | ||||||
|  | _GO_CMD="go3" | ||||||
|  | _DEBUG_MODE=false | ||||||
|  | 
 | ||||||
|  | _CONFIG_DIR="${HOME}/.config/gogo" | ||||||
|  | _CONFIG="${_CONFIG_DIR}/gogo.conf" | ||||||
|  | 
 | ||||||
|  | _IS_TTY=false | ||||||
|  | _IS_SSH_ONLY=false | ||||||
|  | _IS_MGRCTL_ARGS=false | ||||||
|  | _MGRCTL_ARGS="" | ||||||
|  | _MGRCTL_BIN="mgrctl" | ||||||
|  | _MGRCTL_CMD="" | ||||||
|  | _MGRCTL_RUN="" | ||||||
|  | _MGRCTL_KEY="" | ||||||
|  | 
 | ||||||
|  | _PLATFORM_TYPE="" | ||||||
|  | _PLATFORM_GENERATION=6 | ||||||
|  | _PLATFORM_SSH_PORT=22 | ||||||
|  | _PLATFORM_WEB_PORT=443 | ||||||
|  | _PLATFORM_IP_ADDR="" | ||||||
|  | _PLATFORM_CONFIG_FILE="" | ||||||
|  | _PLATFORM_NETWORK_NAME="" | ||||||
|  | 
 | ||||||
|  | _SSH_CONNECT_CMD="" | ||||||
|  | _SSH_REMOTE_CMD="" | ||||||
|  | 
 | ||||||
|  | _ACCESS_LINK="" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Colorize output | ||||||
|  | # Usage - $(colorize CYAN "Hello, friend!") | ||||||
|  | colorize() { | ||||||
|  | 	local RED="\033[0;31m" | ||||||
|  | 	local GREEN="\033[0;32m"  # <-- [0 means not bold | ||||||
|  | 	local YELLOW="\033[1;33m" # <-- [1 means bold | ||||||
|  | 	local BLUE="\033[0;34m" | ||||||
|  | 	local MAGNETA="\033[0;35" | ||||||
|  | 	local CYAN="\033[1;36m" | ||||||
|  | 	# ... Add more colors if you like | ||||||
|  | 
 | ||||||
|  | 	local NC="\033[0m" # No Color | ||||||
|  | 
 | ||||||
|  | 	# printf "${(P)1}${2} ${NC}\n" # <-- zsh | ||||||
|  | 	# printf "${!1}${2} ${NC}\n"   # <-- bash | ||||||
|  | 	echo -e "${!1}${2}${NC}"       # <-- all-purpose | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Print help message how used it script | ||||||
|  | help() { | ||||||
|  | 	# colorize value | ||||||
|  | 	local script=$(colorize GREEN "$_SCRIPT_NAME") | ||||||
|  | 	local required=$(colorize RED "required") | ||||||
|  | 	# help message | ||||||
|  | 	printf "Usage: $script [options [parameters]]                         \n" | ||||||
|  | 	printf "                                                              \n" | ||||||
|  | 	printf "Examples:                                                     \n" | ||||||
|  | 	printf "                                                              \n" | ||||||
|  | 	printf "./gogo.sh --init | init config file                           \n" | ||||||
|  | 	printf "./gogo.sh --crt  | get ssh certificate for go3 connections    \n" | ||||||
|  | 	printf "                                                              \n" | ||||||
|  | 	printf "./gogo.sh --bill my.example.com                               \n" | ||||||
|  | 	printf "./gogo.sh --vm 0.0.0.0 --ssh | only ssh access                \n" | ||||||
|  | 	printf "./gogo.sh --vm 0.0.0.0 --tty | use mgrctl interactive         \n" | ||||||
|  | 	printf "                                                              \n" | ||||||
|  | 	printf "./gogo.sh --dci 0.0.0.0 --mgrctl user access --id 3 --count 5 \n" | ||||||
|  | 	printf "./gogo.sh --dci 0.0.0.0 --mgrctl user ls --admins             \n" | ||||||
|  | 	printf "./gogo.sh --dci 0.0.0.0 --mgrctl user --help                  \n" | ||||||
|  | 	printf "./gogo.sh --vm 0.0.0.0 --port 22122 --mgrctl user ls --admins \n" | ||||||
|  | 	printf "./gogo.sh --dns ns1.example.com --web-port 1501               \n" | ||||||
|  | 	printf "./gogo.sh --dns ns1.example.com --port 22122 --web-port 1501  \n" | ||||||
|  | 	printf "./gogo.sh --bill my.example.com --port 22 --web-port 1501     \n" | ||||||
|  | 	printf "                                                              \n" | ||||||
|  | 	printf "Options:                                                      \n" | ||||||
|  | 	printf "                                                              \n" | ||||||
|  | 	printf " --vm[dci|bill|dns|ip] expected ip_addr             $required \n" | ||||||
|  | 	printf " --port     | -p       ssh port,   default 22                 \n" | ||||||
|  | 	printf " --web-port | -wp      web port,   default 443                \n" | ||||||
|  | 	printf " --go/--go3            go version, default go3                \n" | ||||||
|  | 	printf " --tty                 for vm6/dci6 echo cmd for run container\n" | ||||||
|  | 	printf " --mgrctl [args]       for vm6/dci6 customize access params   \n" | ||||||
|  | 	printf "                                                              \n" | ||||||
|  | 	printf " --init     | -i  generate configuration                      \n" | ||||||
|  | 	printf " --crt      | -c  generate ssh cert                           \n" | ||||||
|  | 	printf " --version  | -v  print version                               \n" | ||||||
|  | 	printf " --help     | -h  print this message and exit                 \n" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Ask confirmation user if No - exit with 1 state | ||||||
|  | continue_handler() { | ||||||
|  | 	read -p "Continue? (Y/N): " confirm \ | ||||||
|  | 	&& [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Init script configuration file: | ||||||
|  | init_config() { | ||||||
|  | 	# Lables: | ||||||
|  | 	local warning=$(colorize RED "WARNING! ") | ||||||
|  | 	local success=$(colorize GREEN "SUCCESS! ") | ||||||
|  | 	local script_name=$(colorize GREEN "${_SCRIPT_NAME}") | ||||||
|  | 	# check if config file exists: | ||||||
|  | 	if [ -f $_CONFIG ]; then | ||||||
|  | 		echo "${warning}: Config file is already exists" | ||||||
|  | 		echo "New initialization rewrites current config" | ||||||
|  | 		continue_handler | ||||||
|  | 	fi | ||||||
|  | 	# get user unputs: | ||||||
|  | 	read -p "Enter go server address: "            _GO_SERVER_ADDR | ||||||
|  | 	read -p "Enter vault server address: "         _VAULT_SERVER_ADDR | ||||||
|  | 	read -p "Enter username: "                     _SSH_PRIVATE_KEY_USER | ||||||
|  | 	read -p "Enter full path to ssh private key: " _SSH_PRIVATE_KEY_PATH | ||||||
|  | 	read -p "Enter full path to ssh public key: "  _SSH_PUBLIC_KEY_PATH | ||||||
|  | 	read -p "Enter full path to ssh certificate: " _SSH_CRT_FILE | ||||||
|  | 	read -p "Enter mgrctl image name: "            _MGRCTL_IMAGE | ||||||
|  | 	# save config: | ||||||
|  | 	mkdir -p $_CONFIG_DIR | ||||||
|  | 	cat << EOF > "${_CONFIG}" | ||||||
|  | GO_SERVER_ADDR=$_GO_SERVER_ADDR | ||||||
|  | VAULT_SERVER_ADDR=$_VAULT_SERVER_ADDR | ||||||
|  | SSH_PRIVATE_KEY_USER=$_SSH_PRIVATE_KEY_USER | ||||||
|  | SSH_PRIVATE_KEY_PATH=$_SSH_PRIVATE_KEY_PATH | ||||||
|  | SSH_PUBLIC_KEY_PATH=$_SSH_PUBLIC_KEY_PATH | ||||||
|  | SSH_CRT_FILE=$_SSH_CRT_FILE | ||||||
|  | MGRCTL_IMAGE=$_MGRCTL_IMAGE | ||||||
|  | DEBUG_MODE=false | ||||||
|  | EOF | ||||||
|  | 	echo "${success}: Config file was created, run ${script_name} again" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Read config file that contains key=value params | ||||||
|  | load_config() { | ||||||
|  | 	local file="$_CONFIG" | ||||||
|  | 
 | ||||||
|  | 	if ! [ -f $_CONFIG ]; then | ||||||
|  | 		help | ||||||
|  | 		local warning=$(colorize RED "WARNING!") | ||||||
|  | 		echo "" | ||||||
|  | 		echo "${warning} Config file doesn't exist" | ||||||
|  | 		echo "Init new config: ${_CONFIG}" | ||||||
|  | 		continue_handler | ||||||
|  | 		init_config | ||||||
|  | 	fi | ||||||
|  | 	 | ||||||
|  | 	while IFS="=" read -r key value; do | ||||||
|  | 		case "$key" in | ||||||
|  | 			"GO_SERVER_ADDR")  | ||||||
|  | 				_GO_SERVER_ADDR="$value" | ||||||
|  | 				;; | ||||||
|  | 			"VAULT_SERVER_ADDR")  | ||||||
|  | 				_VAULT_SERVER_ADDR="$value" | ||||||
|  | 				;; | ||||||
|  | 			"SSH_PRIVATE_KEY_USER") | ||||||
|  | 				_SSH_PRIVATE_KEY_USER="$value" | ||||||
|  | 				;; | ||||||
|  | 			"SSH_PRIVATE_KEY_PATH") | ||||||
|  | 				_SSH_PRIVATE_KEY_PATH="$value" | ||||||
|  | 				;; | ||||||
|  | 			"SSH_PUBLIC_KEY_PATH") | ||||||
|  | 				_SSH_PUBLIC_KEY_PATH="$value" | ||||||
|  | 				_VAULT_SSH_PUBLIC_KEY="@$value"  # @ sybol is important | ||||||
|  | 				;; | ||||||
|  | 			"SSH_CRT_FILE") | ||||||
|  | 				_SSH_CRT_FILE="$value" | ||||||
|  | 				;; | ||||||
|  | 			"MGRCTL_IMAGE") | ||||||
|  | 				_MGRCTL_IMAGE="$value" | ||||||
|  | 				;; | ||||||
|  | 			"DEBUG_MODE") | ||||||
|  | 				_DEBUG_MODE="$value" | ||||||
|  | 				;; | ||||||
|  | 		esac | ||||||
|  | 	done < "$file" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Generate key for coremgr based platrorms access link: | ||||||
|  | gen_random_key() { | ||||||
|  | 	_MGRCTL_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | gen_coremgr_access_params() { | ||||||
|  | 	# get opt name: | ||||||
|  | 	local opt=$1 | ||||||
|  | 	# gen access key: | ||||||
|  | 	gen_random_key | ||||||
|  | 	# fill current parametrs: | ||||||
|  | 	_PLATFORM_TYPE=$(sed 's~[^[:alpha:]/]\+~~g' <<< "$opt") | ||||||
|  | 	_PLATFORM_GENERATION=5 | ||||||
|  | 	_MGRCTL_BIN="/usr/local/mgr5/sbin/mgrctl" | ||||||
|  | 	_MGRCTL_ARGS="-m ${_PLATFORM_TYPE}mgr session.newkey key=$_MGRCTL_KEY"	 | ||||||
|  | 
 | ||||||
|  | 	# override _PLATFORM_GENERATION for bill6 or dns6 | ||||||
|  | 	if [[ $opt == "--bill" ]] || [[ $opt == "--dns" ]]; then | ||||||
|  | 		_PLATFORM_GENERATION=6 | ||||||
|  | 	fi | ||||||
|  | 	# override _MGRCTL_BIN _MGRCTL_ARGS for dns6 | ||||||
|  | 	if [[ $opt == "--dns" ]]; then | ||||||
|  | 		_MGRCTL_BIN="/opt/ispsystem/${_PLATFORM_TYPE}manager6/sbin/mgrctl" | ||||||
|  | 		_MGRCTL_ARGS="-m ${_PLATFORM_TYPE}mgr session.newkey key=$_MGRCTL_KEY"	 | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | gen_docker_access_params(){ | ||||||
|  | 	# get opt name: | ||||||
|  | 	local opt=$1 | ||||||
|  | 	# fill current parametrs: | ||||||
|  | 	_PLATFORM_TYPE=$(sed 's~[^[:alpha:]/]\+~~g' <<< "$opt") | ||||||
|  | 	_PLATFORM_GENERATION=6 | ||||||
|  | 	_PLATFORM_CONFIG_FILE="/opt/ispsystem/${_PLATFORM_TYPE}/config.json" | ||||||
|  | 	# set platform docker network name: | ||||||
|  | 	if [[ $_PLATFORM_TYPE == "vm" ]]; then | ||||||
|  | 		_PLATFORM_NETWORK_NAME="vm_vm_box_net" | ||||||
|  | 	else | ||||||
|  | 		_PLATFORM_NETWORK_NAME="dci_auth" | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | gen_ssh_connect_cmd(){ | ||||||
|  | 	# get params: | ||||||
|  | 	local go_server="${_GO_SERVER_ADDR}" | ||||||
|  | 	local go_cmd="${_GO_CMD}" | ||||||
|  | 	local address="${_PLATFORM_IP_ADDR}" | ||||||
|  | 	local port="${_PLATFORM_SSH_PORT}" | ||||||
|  | 	local key_path="${_SSH_PRIVATE_KEY_PATH}" | ||||||
|  | 	local key_user="${_SSH_PRIVATE_KEY_USER}" | ||||||
|  | 	local ssh_args="${key_user}@${go_server} ${go_cmd} ${address} -p ${port}" | ||||||
|  | 	# generate cmd: | ||||||
|  | 	_SSH_CONNECT_CMD="ssh -A -t -i ${key_path} ${ssh_args}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | gen_ssh_remote_cmd() { | ||||||
|  | 	# ? VMmanager6 || DCImanager6: | ||||||
|  | 	if [[ $_PLATFORM_TYPE == "vm" ]] || \ | ||||||
|  | 		[[ $_PLATFORM_TYPE == "dci" ]] && \ | ||||||
|  | 		[[ $_PLATFORM_GENERATION -eq 6 ]]; then | ||||||
|  | 		# use default mgrctl cmd if not set args: | ||||||
|  | 		if [ -z "${_MGRCTL_ARGS}" ]; then | ||||||
|  | 			_MGRCTL_ARGS="${_PLATFORM_TYPE}6 auth user access --random" | ||||||
|  | 			_MGRCTL_CMD="${_MGRCTL_BIN} ${_MGRCTL_ARGS}" | ||||||
|  | 		else | ||||||
|  | 			_MGRCTL_CMD="${_MGRCTL_BIN} ${_PLATFORM_TYPE}6 ${_MGRCTL_ARGS}" | ||||||
|  | 		fi | ||||||
|  | 		# silent mode: | ||||||
|  | 		local hide_output=">> /dev/null" | ||||||
|  | 		if $_DEBUG_MODE; then | ||||||
|  | 			hide_output="" | ||||||
|  | 		fi | ||||||
|  | 		# image: | ||||||
|  | 		local image=${_MGRCTL_IMAGE} | ||||||
|  | 		# docker cmd: | ||||||
|  | 		local docker_bin="/usr/bin/docker" | ||||||
|  | 		local docker_pull="${docker_bin} pull ${image} ${hide_output}" | ||||||
|  | 		local docker_rm="${docker_bin} image rm -f ${image} ${hide_output}" | ||||||
|  | 		local docker_run="${docker_bin} run" | ||||||
|  | 		# mount config: | ||||||
|  | 		local mount_src="source=${_PLATFORM_CONFIG_FILE}" | ||||||
|  | 		local mount_trg="target=${_PLATFORM_CONFIG_FILE}" | ||||||
|  | 		local mount_opt="type=bind,${mount_src},${mount_trg},readonly" | ||||||
|  | 		local mount="--mount ${mount_opt}" | ||||||
|  | 		# network config: | ||||||
|  | 		local network="--network=${_PLATFORM_NETWORK_NAME}" | ||||||
|  | 		# environment config: | ||||||
|  | 		local envs="-e PLATFORM_TYPE=${_PLATFORM_TYPE}" | ||||||
|  | 		# container args: | ||||||
|  | 		local args="${_MGRCTL_CMD}" | ||||||
|  | 		# mgrctl container params: | ||||||
|  | 		local container="${network} ${mount} ${envs} --rm ${image} ${args}" | ||||||
|  | 		# docker commands: | ||||||
|  | 		local cmd="${docker_pull} && ${docker_run} ${container} && ${docker_rm}" | ||||||
|  | 		# final cmd: | ||||||
|  | 		_SSH_REMOTE_CMD="${cmd}" | ||||||
|  | 		# set cmd for manual start container: | ||||||
|  | 		if $_IS_TTY; then | ||||||
|  | 			# override parammetrs if DEBUG_MODE=false add -it flag: | ||||||
|  | 			docker_pull="${docker_bin} pull ${image}" | ||||||
|  | 			docker_rm="${docker_bin} image rm -f ${image}" | ||||||
|  | 			container="${network} ${mount} ${envs} --rm -i -t ${image}" | ||||||
|  | 			cmd="${docker_pull} && ${docker_run} ${container} && ${docker_rm}" | ||||||
|  | 			_MGRCTL_RUN="${cmd}" | ||||||
|  | 		fi | ||||||
|  | 	# ? BILLmanager6 ||  DNSmanager6 || IP/DNS/DCI/VMmanager5: | ||||||
|  | 	else  | ||||||
|  | 		# final cmd: | ||||||
|  | 		_SSH_REMOTE_CMD="${_MGRCTL_BIN} ${_MGRCTL_ARGS}" | ||||||
|  | 		echo_access_link | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | gen_access_link() { | ||||||
|  | 	local url="https://${_PLATFORM_IP_ADDR}" | ||||||
|  | 	local port="${_PLATFORM_WEB_PORT}" | ||||||
|  | 	local platform="${_PLATFORM_TYPE}mgr" | ||||||
|  | 	local func="func=auth&key=${_MGRCTL_KEY}" | ||||||
|  | 	_ACCESS_LINK="${url}:${port}/${platform}?${func}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | echo_access_link() { | ||||||
|  | 	gen_access_link | ||||||
|  | 	echo "mgr    link" | ||||||
|  | 	echo "-----  -------------------------------------------------------------" | ||||||
|  | 	echo "${_PLATFORM_TYPE}${_PLATFORM_GENERATION}  ${_ACCESS_LINK}" | ||||||
|  | 	echo "" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | echo_mgrctl_run_msg() { | ||||||
|  | 	echo "--------------------------------------------------------------------" | ||||||
|  | 	echo "To run the mgrctl container manually on the client server:"  | ||||||
|  | 	echo "copy and paste the command into the terminal." | ||||||
|  | 	echo "This will download the image and run the container interactively." | ||||||
|  | 	echo "After exiting the container and its image will be deleted." | ||||||
|  | 	echo "--------------------------------------------------------------------" | ||||||
|  | 	echo "${_MGRCTL_RUN}" | ||||||
|  | 	echo "--------------------------------------------------------------------" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | get_access() { | ||||||
|  | 	gen_ssh_connect_cmd | ||||||
|  | 	if $_IS_SSH_ONLY; then | ||||||
|  | 		# run connection: | ||||||
|  | 		$_SSH_CONNECT_CMD | ||||||
|  | 	else | ||||||
|  | 		gen_ssh_remote_cmd | ||||||
|  | 		# run connection send remote cmd: | ||||||
|  | 		$_SSH_CONNECT_CMD "${_SSH_REMOTE_CMD}" | ||||||
|  | 		if [[ $_PLATFORM_TYPE == "vm" ]] || \ | ||||||
|  | 			[[ $_PLATFORM_TYPE == "dci" ]] && \ | ||||||
|  | 			[[ $_PLATFORM_GENERATION -eq 6 ]] && \ | ||||||
|  | 			$_IS_TTY; then | ||||||
|  | 			echo_mgrctl_run_msg | ||||||
|  | 		fi | ||||||
|  | 		# use default mgrctl cmd if not set args: | ||||||
|  | 		# run connection again for ssh tty session: | ||||||
|  | 		$_SSH_CONNECT_CMD | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | get_vault_crt() { | ||||||
|  | 	local public_key=$1 | ||||||
|  | 	local crt_file=$2 | ||||||
|  | 	vault login -method=oidc | ||||||
|  | 	if [ ! -f $crt_file ]; then | ||||||
|  | 		touch $crt_file | ||||||
|  | 	fi | ||||||
|  | 	vault write -field=signed_key ssh/sign/support \ | ||||||
|  | 	public_key=$public_key valid_principals=root > $crt_file | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | set_ssh_agent() { | ||||||
|  | 	local secret_key=$1 | ||||||
|  | 	ssh-add -D | ||||||
|  | 	ssh-add $secret_key | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | renewal_crt() { | ||||||
|  | 	export VAULT_ADDR=$_VAULT_SERVER_ADDR | ||||||
|  | 	get_vault_crt $_VAULT_SSH_PUBLIC_KEY $_SSH_CRT_FILE | ||||||
|  | 	set_ssh_agent $SSH_PRIVATE_KEY_PATH | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Parse user options | ||||||
|  | optparser() { | ||||||
|  | 	# count user-passed options: | ||||||
|  | 	local count_options=$# | ||||||
|  | 	# run help if empty and exit: | ||||||
|  | 	if [[ count_options -eq 0 ]]; then | ||||||
|  | 		help | ||||||
|  | 		exit 2 | ||||||
|  | 	fi | ||||||
|  | 	# parse opts: | ||||||
|  | 	while [ ! -z "$1" ]; do | ||||||
|  | 		case "$1" in | ||||||
|  | 			--vm|--dci) | ||||||
|  | 				gen_docker_access_params "$1" | ||||||
|  | 				shift | ||||||
|  | 				_PLATFORM_IP_ADDR="$1" | ||||||
|  | 				;; | ||||||
|  | 			--bill|--dns|--bill5|--ip5|--dns5|--vm5|--dci5) | ||||||
|  | 				gen_coremgr_access_params "$1" | ||||||
|  | 				shift | ||||||
|  | 				_PLATFORM_IP_ADDR="$1" | ||||||
|  | 				;; | ||||||
|  | 			--port|-p) | ||||||
|  | 				shift | ||||||
|  | 				_PLATFORM_SSH_PORT="$1" | ||||||
|  | 				;; | ||||||
|  | 			--web-port|-wp) | ||||||
|  | 				shift | ||||||
|  | 				_PLATFORM_WEB_PORT="$1" | ||||||
|  | 				;; | ||||||
|  | 			--go|--go3) | ||||||
|  | 				_GO_CMD=$(sed 's~[^[:alnum:]/]\+~~g' <<< "$1") | ||||||
|  | 				;; | ||||||
|  | 			--mgrctl|--tty|--ssh) | ||||||
|  | 				if [[ "$1" == "--mgrctl" ]]; then | ||||||
|  | 					_IS_MGRCTL_ARGS=true | ||||||
|  | 					shift | ||||||
|  | 					_MGRCTL_ARGS=$@ | ||||||
|  | 				elif [[ "$1" == "--tty" ]]; then | ||||||
|  | 					if $_IS_MGRCTL_ARGS; then | ||||||
|  | 						local error=$(colorize RED "ERROR!") | ||||||
|  | 						echo "${error} $1 must be in before --mgrctl not after" | ||||||
|  | 						exit 1 | ||||||
|  | 					fi | ||||||
|  | 					_IS_TTY=true | ||||||
|  | 				elif [[ "$1" == "--ssh" ]]; then | ||||||
|  | 					_IS_SSH_ONLY=true | ||||||
|  | 				fi | ||||||
|  | 				;; | ||||||
|  | 			--init|-i) | ||||||
|  | 				init_config | ||||||
|  | 				exit 0 | ||||||
|  | 				;; | ||||||
|  | 			--crt|-c) | ||||||
|  | 				renewal_crt | ||||||
|  | 				exit 0 | ||||||
|  | 				;; | ||||||
|  | 			--help|-h) | ||||||
|  | 				help | ||||||
|  | 				exit 0 | ||||||
|  | 				;; | ||||||
|  | 			--version|-v) | ||||||
|  | 				printf "$_VERSION\n" | ||||||
|  | 				exit 0 | ||||||
|  | 				;; | ||||||
|  | 			*) | ||||||
|  | 				if ! $_IS_MGRCTL_ARGS; then | ||||||
|  | 					help | ||||||
|  | 					exit 1 | ||||||
|  | 				fi | ||||||
|  | 				;; | ||||||
|  | 		esac | ||||||
|  | 	shift | ||||||
|  | 	done | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Entrypoint: | ||||||
|  | main() { | ||||||
|  | 	load_config | ||||||
|  | 	optparser $@ | ||||||
|  | 	get_access | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # RUN IT: | ||||||
|  | main $@ | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user