From ee19e2b84718ed35050d9a6f95cbc70c9786c23a Mon Sep 17 00:00:00 2001 From: Rustam Tagaev Date: Mon, 1 Jun 2020 20:03:41 +0300 Subject: [PATCH 1/2] #new-plugin add a new plugin "vault-switch" --- plugins/vault-switch/README.md | 29 ++++++++++ plugins/vault-switch/example.png | Bin 0 -> 4246 bytes plugins/vault-switch/vault-switch.plugin.zsh | 57 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 plugins/vault-switch/README.md create mode 100644 plugins/vault-switch/example.png create mode 100644 plugins/vault-switch/vault-switch.plugin.zsh diff --git a/plugins/vault-switch/README.md b/plugins/vault-switch/README.md new file mode 100644 index 000000000..7dd07f82d --- /dev/null +++ b/plugins/vault-switch/README.md @@ -0,0 +1,29 @@ +# Vault-switch plugin + +## Description + +This plugin can switch among nodes of Vault - HashiCorp + +## Configuration + +For using a plugin you should add VAULT_NODES to **~/.zshrc** +Variable **VAULT_NODES** must look as + +```bash +VAULT_NODES="node1,https://vault1.example.com,secret_token1;node2,https://vault2.example.com,secret_token2" +``` + +If you want to skip verify checking of ssl then add true to end of the string. + +```bash +VAULT_NODES="node1,https://vault1.example.com,secret_token1,true;node2,https://vault2.example.com,secret_token2" +``` + +Name of a node, address, token are separating comma. Other nodes separate semicolon. +After need to add the name of the plugin to **~/.zshrc** to variable **plugins=(vault-switch)** + +**Example usage:** + +![vault-switch](example.png) + +State of restoring stored in **~/.vault-switch/credentials** diff --git a/plugins/vault-switch/example.png b/plugins/vault-switch/example.png new file mode 100644 index 0000000000000000000000000000000000000000..055b8e534ca2f8fd36ec38bbd9b6cde4090053dd GIT binary patch literal 4246 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 literal 0 HcmV?d00001 diff --git a/plugins/vault-switch/vault-switch.plugin.zsh b/plugins/vault-switch/vault-switch.plugin.zsh new file mode 100644 index 000000000..ca3127f25 --- /dev/null +++ b/plugins/vault-switch/vault-switch.plugin.zsh @@ -0,0 +1,57 @@ +autoload -U add-zsh-hook +add-zsh-hook precmd _restore_cache + +FILE_CREDENTIALS="${HOME}/.vault-switch/credentials" + +function _restore_cache(){ + [ ! -d ${HOME}/.vault-switch ] && mkdir -p ${HOME}/.vault-switch + [ ! -f $FILE_CREDENTIALS ] && touch ${FILE_CREDENTIALS} + source ${FILE_CREDENTIALS} +} + +function _get-nodes(){ + IFS=";" read -A NODES <<< ${VAULT_NODES} +} + +function _set-color(){ + echo "\e[1;32m$1\e[0m" +} + +function _list-nodes(){ + INDEX=1 + for i in ${NODES[@]} + do + NODE=$(echo $i | cut -d "," -f 1) + [[ "${NODE}" == "${VAULT_SELECT_NODE}" ]] && ASTERISK="*" + echo "${INDEX}) ${NODE} $(_set-color ${ASTERISK})" + INDEX=$[$INDEX+1] + unset ASTERISK + done +} + +function _set-work-node(){ + if [ $1 -gt ${#NODES[@]} ] + then + echo "Number of node not found" + else + VAULT_SELECT_NODE=$(echo ${NODES[$1]} | cut -d "," -f 1) + VAULT_ADDR=$(echo ${NODES[$1]} | cut -d "," -f 2) + VAULT_TOKEN=$(echo ${NODES[$1]} | cut -d "," -f 3) + VAULT_SKIP_VERIFY=$(echo ${NODES[$1]} | cut -d "," -f 4) + + echo > ${FILE_CREDENTIALS} + echo "export VAULT_SELECT_NODE=${VAULT_SELECT_NODE}" >> ${FILE_CREDENTIALS} + echo "export VAULT_ADDR=${VAULT_ADDR}" >> ${FILE_CREDENTIALS} + echo "export VAULT_TOKEN=${VAULT_TOKEN}" >> ${FILE_CREDENTIALS} + [[ $VAULT_SKIP_VERIFY ]] && echo "export VAULT_SKIP_VERIFY=true" >> ${FILE_CREDENTIALS} + + _list-nodes + fi + +} + +function vault-switch() { + _get-nodes + [ ! $1 ] && _list-nodes + [ $1 ] && _set-work-node $1 +} From 43079320a29b6d44a7c2a1b7ee47557952880e45 Mon Sep 17 00:00:00 2001 From: Rustam Tagaev Date: Mon, 1 Jun 2020 20:17:41 +0300 Subject: [PATCH 2/2] #new-plugin follow Conventions --- plugins/vault-switch/vault-switch.plugin.zsh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/vault-switch/vault-switch.plugin.zsh b/plugins/vault-switch/vault-switch.plugin.zsh index ca3127f25..42a3a487f 100644 --- a/plugins/vault-switch/vault-switch.plugin.zsh +++ b/plugins/vault-switch/vault-switch.plugin.zsh @@ -3,21 +3,21 @@ add-zsh-hook precmd _restore_cache FILE_CREDENTIALS="${HOME}/.vault-switch/credentials" -function _restore_cache(){ +_restore_cache(){ [ ! -d ${HOME}/.vault-switch ] && mkdir -p ${HOME}/.vault-switch [ ! -f $FILE_CREDENTIALS ] && touch ${FILE_CREDENTIALS} source ${FILE_CREDENTIALS} } -function _get-nodes(){ +_get-nodes(){ IFS=";" read -A NODES <<< ${VAULT_NODES} } -function _set-color(){ +_set-color(){ echo "\e[1;32m$1\e[0m" } -function _list-nodes(){ +_list-nodes(){ INDEX=1 for i in ${NODES[@]} do @@ -29,7 +29,7 @@ function _list-nodes(){ done } -function _set-work-node(){ +_set-work-node(){ if [ $1 -gt ${#NODES[@]} ] then echo "Number of node not found" @@ -50,7 +50,7 @@ function _set-work-node(){ } -function vault-switch() { +vault-switch() { _get-nodes [ ! $1 ] && _list-nodes [ $1 ] && _set-work-node $1