Crystalnix/termius-cli

View on GitHub
contrib/completion/bash/termius

Summary

Maintainability
Test Coverage
__termius_entity_labels() {
termius $1 -f value -c label
}
 
__termius_get_labels_ids() {
case $1 in
host|group|key|pfrule|snippet)
__termius_entity_labels "$1"s
;;
identity)
__termius_entity_labels identities
;;
*) return 0
;;
esac
}
 
__termius_subcommand_instance() {
case $1 in
host|group|identity|key|pfrule|snippet)
__termius_get_labels_ids $1
;;
connect)
__termius_complete_connect
;;
info)
__termius_complete_info
;;
*) return 0
;;
esac
}
 
__termius_complete_option_value() {
local completion
completion="__termius_complete_options_$1"
if ! type $completion >/dev/null 2>&1; then
__termius_complete_common_options $2
else
$completion $2
fi
}
 
__termius_complete_connect() {
if [[ " ${words[@]} " =~ " -R " ]] || [[ " ${words[@]} " =~ " --pfrule " ]]; then
__termius_get_labels_ids pfrule
else
__termius_get_labels_ids host
fi
}
 
__termius_complete_info() {
if [[ " ${words[@]} " =~ " -g " ]] || [[ " ${words[@]} " =~ " --group " ]]; then
__termius_get_labels_ids group
else
__termius_get_labels_ids host
fi
}
 
__termius_complete_options_complete() {
case $1 in
--shell)
echo bash
;;
--name)
echo termius
;;
*)
return 0
;;
esac
}
__termius_complete_options_connect() {
return 0
}
__termius_complete_options_fullclean() {
__termius_complete_common_options $1
}
__termius_complete_options_group() {
case $1 in
-g|--parent-group)
__termius_get_labels_ids group
;;
-s|--snippet)
__termius_get_labels_ids snippet
;;
--identity)
__termius_get_labels_ids identity
;;
*)
__termius_complete_common_options $1
;;
esac
}
__termius_complete_options_groups() {
__termius_complete_common_list_options $1
}
__termius_complete_options_help() {
return 0
}
__termius_complete_options_host() {
case $1 in
-g|--group)
__termius_get_labels_ids group
;;
-t|--tag)
__termius_get_labels_ids tag
;;
-s|--snippet)
__termius_get_labels_ids snippet
;;
--identity)
__termius_get_labels_ids identity
;;
*)
__termius_complete_common_options $1
;;
esac
}
__termius_complete_options_hosts() {
case $1 in
-g|--group)
__termius_get_labels_ids group
;;
-t|--tag)
__termius_get_labels_ids tag
;;
*)
__termius_complete_common_list_options $1
;;
esac
}
__termius_complete_options_identities() {
__termius_complete_common_list_options $1
}
__termius_complete_options_identity() {
case $1 in
-k|--ssh-key)
__termius_get_labels_ids key
;;
*)
__termius_complete_common_options $1
;;
esac
}
__termius_complete_options_info() {
case $1 in
-f|--format)
echo json shell ssh table value yaml
;;
*)
__termius_complete_common_options $1
;;
esac
}
__termius_complete_options_keys() {
__termius_complete_common_list_options $1
}
__termius_complete_options_pfrule() {
case $1 in
-H|--host)
__termius_get_labels_ids host
;;
*)
__termius_complete_common_options $1
;;
esac
}
__termius_complete_options_pfrules() {
__termius_complete_common_list_options $1
}
__termius_complete_options_snippets() {
__termius_complete_common_list_options $1
}
__termius_complete_options_tags() {
__termius_complete_common_list_options $1
}
 
__termius_complete_common_list_options() {
case $1 in
-f|--format)
echo csv json table value yaml
;;
*)
__termius_complete_common_options $1
;;
esac
}
 
__termius_complete_common_options() {
return 0
}
 
_termius()
{
local cur prev words
COMPREPLY=()
_get_comp_words_by_ref -n : cur prev words
 
# Command data:
cmds='complete connect fullclean group groups help host hosts identities identity info init key keys login logout pfrule pfrules pull push snippet snippets import-ssh-config export-ssh-config tags settings'
cmds_complete='-h --help --name --shell'
cmds_complete_arg_options='--name --shell'
cmds_settings='-h --help --synchronize-key --agent-forwarding --log-file'
cmds_settings_arg_options='--synchronize-key --agent-forwarding --log-file'
cmds_settings_file_options='--log-file'
cmds_connect='-h --help --log-file -R --pfrule -H --host'
cmds_connect_arg_options='--log-file'
cmds_connect_file_options='--log-file'
cmds_fullclean='-h --help --log-file -p --password'
cmds_fullclean_arg_options='--log-file -p --password'
cmds_fullclean_file_options='--log-file'
cmds_group='-h --help --log-file -g --parent-group -p --port -s --snippet --identity -S --strict-host-key-check -T --timeout --use-ssh-key -k --keep-alive-packages -u --username -P --password -i --identity-file -d --delete -L --label'
cmds_group_arg_options='--log-file -g --parent-group -p --port -s --snippet --identity -u --username -P --password -i --identity-file -L --label -S --strict-host-key-check -T --timeout --use-ssh-key -k --keep-alive-packages'
cmds_group_file_options='--log-file -i --identity-file'
cmds_groups='-h --help -f --format -c --column --max-width --noindent --quote --log-file -r --recursive'
cmds_groups_arg_options='-f --format -c --column --max-width --log-file'
cmds_groups_file_options='--log-file'
cmds_help='-h --help'
cmds_host='-h --help --log-file -t --tag -g --group -a --address -p --port -s --snippet --identity -u --username -i --identity-file -d --delete -L --label -S --strict-host-key-check -T --timeout --use-ssh-key -k --keep-alive-packages'
cmds_host_arg_options='--log-file -t --tag -g --group -a --address -p --port -s --snippet --identity -u --username -i --identity-file -L --label -S --strict-host-key-check -T --timeout --use-ssh-key -k --keep-alive-packages'
cmds_host_file_options='--log-file -i --identity-file'
cmds_hosts='-h --help -f --format -c --column --max-width --noindent --quote --log-file -t --tag -g --group'
cmds_hosts_arg_options='-f --format -c --column --max-width --log-file -t --tag -g --group'
cmds_hosts_file_options='--log-file'
cmds_identities='-h --help -f --format -c --column --max-width --noindent --quote --log-file'
cmds_identities_arg_options='-f --format -c --column --max-width --log-file'
cmds_identities_file_options='--log-file'
cmds_identity='-h --help --log-file -u --username -i --identity-file -k --ssh-key -d --delete -L --label'
cmds_identity_arg_options='--log-file -u --username -i --identity-file -k --ssh-key -L --label'
cmds_identity_file_options='--log-file -i --identity-file'
cmds_info='-h --help --log-file -G --group -H --host -M --no-merge -f --format -c --column --prefix --noindent --address --max-width'
cmds_info_arg_options='--log-file -f --format -c --column --prefix --address'
cmds_info_file_options='--log-file'
cmds_init='-h --help --log-file -u --username -p --password'
cmds_init_arg_options='--log-file -u --username -p --password'
cmds_init_file_options='--log-file'
cmds_key='-h --help --log-file -i --identity-file -d --delete -L --label'
cmds_key_arg_options='--log-file -i --identity-file -L --label'
cmds_key_file_options='--log-file -i --identity-file'
cmds_keys='-h --help -f --format -c --column --max-width --noindent --quote --log-file'
cmds_keys_arg_options='-f --format -c --column --max-width --log-file'
cmds_keys_file_options='--log-file'
cmds_login='-h --help --log-file -u --username -p --password'
cmds_login_arg_options='--log-file -u --username -p --password'
cmds_login_file_options='--log-file'
cmds_logout='-h --help --log-file'
cmds_logout_arg_options='--log-file'
cmds_logout_file_options='--log-file'
cmds_pfrule='-h --help --log-file -H --host --dynamic --remote --local --binding -d --delete -L --label'
cmds_pfrule_arg_options='--log-file -H --host --binding -L --label'
cmds_pfrule_file_options='--log-file'
cmds_pfrules='-h --help -f --format -c --column --max-width --noindent --quote --log-file'
cmds_pfrules_arg_options='-f --format -c --column --max-width --log-file'
cmds_pfrules_file_options='--log-file'
cmds_pull='-h --help --log-file -p --password'
cmds_pull_arg_options='--log-file -p --password'
cmds_pull_file_options='--log-file'
cmds_push='-h --help --log-file -p --password'
cmds_push_arg_options='--log-file -p --password'
cmds_push_file_options='--log-file'
cmds_snippet='-h --help --log-file -s --script -d --delete -L --label'
cmds_snippet_arg_options='--log-file -s --script -L --label'
cmds_snippet_file_options='--log-file'
cmds_snippets='-h --help -f --format -c --column --max-width --noindent --quote --log-file'
cmds_snippets_arg_options='-f --format -c --column --max-width --log-file'
cmds_snippets_file_options='--log-file'
cmds_import-ssh-config='-h --help --log-file'
cmds_import-ssh-config_arg_options='--log-file'
cmds_import-ssh-config_file_options='--log-file'
cmds_export-ssh-config='-h --help --log-file'
cmds_export-ssh-config_arg_options='--log-file'
cmds_export-ssh-config_file_options='--log-file'
cmds_tags='-h --help -f --format -c --column --max-width --noindent --quote --log-file -d --delete'
cmds_tags_arg_options='-f --format -c --column --max-width --log-file'
cmds_tags_file_options='--log-file'
 
cmd=""
words[0]=""
completed_options="${cmds}"
for var in "${words[@]:1}"
do
if [[ ${var} == -* ]] ; then
break
fi
if [ -z "${cmd}" ] ; then
proposed="${var}"
else
proposed="${cmd}_${var}"
fi
local i="cmds_${proposed}"
local comp="${!i}"
if [ -z "${comp}" ] ; then
break
fi
if [[ ${comp} == -* ]] ; then
if [[ ${cur} != -* ]] ; then
completed_options=""
break
fi
fi
cmd="${proposed}"
completed_options="${comp}"
done
 
subcommand=${words[1]}
arg_options="cmds_${subcommand}_arg_options"
arg_file_options="cmds_${subcommand}_file_options"
 
if [ -z "${completed_options}" ] ;
then
if [ -n "${subcommand}" ] ;
then
if [[ "${prev}" == -* ]] && [[ " ${!arg_options} " =~ " ${prev} " ]];
then
if [[ " ${!arg_file_options} " =~ " ${prev} " ]];
then
COMPREPLY=( $(compgen -f -- ${cur}) )
else
COMPREPLY=( $(compgen -W "$(__termius_complete_option_value $subcommand $prev)" -- ${cur}) )
fi
else
COMPREPLY=( $(compgen -W "$(__termius_subcommand_instance $subcommand)" -- ${cur}) )
fi
else
COMPREPLY=( $( compgen -W "" -- "$cur" ) )
fi
else
COMPREPLY=( $(compgen -W "${completed_options}" -- ${cur}) )
fi
return 0
}
complete -F _termius termius
# vim: ft=sh sw=2 ts=2 et