mirror of
				https://github.com/ohmybash/oh-my-bash.git
				synced 2024-05-11 05:55:37 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#! bash oh-my-bash.module
 | 
						|
# ---------------------------------------------------------------------------
 | 
						|
# vault-bash-completion
 | 
						|
#
 | 
						|
# This adds bash completions for [HashiCorp Vault](https://www.vaultproject.io/)
 | 
						|
#
 | 
						|
# see https://github.com/iljaweis/vault-bash-completion
 | 
						|
# ---------------------------------------------------------------------------
 | 
						|
 | 
						|
function _vault_mounts() {
 | 
						|
  (
 | 
						|
    set -euo pipefail
 | 
						|
    if ! vault mounts 2> /dev/null | awk 'NR > 1 {print $1}'; then
 | 
						|
      echo "secret"
 | 
						|
    fi
 | 
						|
  )
 | 
						|
}
 | 
						|
 | 
						|
function _vault() {
 | 
						|
  local VAULT_COMMANDS=$(vault 2>&1 | command grep -E '^ +' | awk '{print $1}')
 | 
						|
 | 
						|
  local cur
 | 
						|
  local prev
 | 
						|
 | 
						|
  if [ $COMP_CWORD -gt 0 ]; then
 | 
						|
    cur=${COMP_WORDS[COMP_CWORD]}
 | 
						|
    prev=${COMP_WORDS[COMP_CWORD-1]}
 | 
						|
  fi
 | 
						|
 | 
						|
  local line=${COMP_LINE}
 | 
						|
 | 
						|
  if [[ $prev =~ ^(policies|policy-write|policy-delete) ]]; then
 | 
						|
    local policies=$(vault policies 2> /dev/null)
 | 
						|
    COMPREPLY=($(compgen -W "$policies" -- $cur))
 | 
						|
  elif [ "$(echo "$line" | wc -w)" -le 2 ]; then
 | 
						|
    if [[ "$line" =~ ^vault\ (read|write|delete|list)\ $ ]]; then
 | 
						|
      COMPREPLY=($(compgen -W "$(_vault_mounts)" -- ''))
 | 
						|
    else
 | 
						|
      COMPREPLY=($(compgen -W "$VAULT_COMMANDS" -- $cur))
 | 
						|
    fi
 | 
						|
  elif [[ "$line" =~ ^vault\ (read|write|delete|list)\ (.*)$ ]]; then
 | 
						|
    path=${BASH_REMATCH[2]}
 | 
						|
    if [[ "$path" =~ ^([^ ]+)/([^ /]*)$ ]]; then
 | 
						|
      list=$(vault list -format=yaml ${BASH_REMATCH[1]} 2> /dev/null | awk '{ print $2 }')
 | 
						|
      COMPREPLY=($(compgen -W "$list" -P "${BASH_REMATCH[1]}/" -- ${BASH_REMATCH[2]}))
 | 
						|
    else
 | 
						|
      COMPREPLY=($(compgen -W "$(_vault_mounts)" -- $path))
 | 
						|
    fi
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
complete -o default -o nospace -F _vault vault
 |