Crystalnix/termius-cli

View on GitHub
contrib/completion/zsh/_termius

Summary

Maintainability
Test Coverage
#compdef termius
 
# termius ZSH completion function
# Drop this somewhere in your $fpath (like /usr/share/zsh/site-functions)
# and rename it _termius
 
_termius() {
if (( CURRENT > 2 )); then
# shift words so _arguments doesn't have to be concerned with second command
(( CURRENT-- ))
shift words
# use _call_function here in case it doesn't exist
_call_function 1 _termius_${words[1]}
else
_values "termius command" \
"complete[Generate shell completion script.]" \
"connect[Connect to host or start port forwarding rule.]" \
"fullclean[Clean local storage and push it.]" \
"group[Host group operations.]" \
"groups[List host groups.]" \
"help[Display a list of tasks or help for a given task.]" \
"host[Host operations.]" \
"hosts[List hosts.]" \
"identities[List ssh identities.]" \
"identity[identity operations.]" \
"info[Display host or group connection arguments.]" \
"info[Initialize termius cli.]" \
"key[Ssh key operations.]" \
"keys[List ssh keys.]" \
"login[Authenticate on termius.com.]" \
"logout[Remove termius.com credentials.]" \
"pfrule[Port forwarding rule operations.]" \
"pfrules[List port forwarding rules.]" \
"pull[Retrieve data from termius.com.]" \
"push[Send local changes to serveraudtor.com.]" \
"snippet[Snippet operations.]" \
"snippets[List snippets.]" \
"import-ssh-config[Import hosts from user`s ssh config.]" \
"export-ssh-config[Export hosts from local storage to generated file.]" \
"tags[List tags.]" \
"settings[Configure application settings.]"
fi
}
 
_termius_complete() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--name[Name]' \
'--shell[Shell type]:type:(bash)'
}
_termius_connect() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-R[Start port forwarding rule]:label:->pfrule' \
'--pfrule[Start port forwarding rule]:label:->pfrule' \
'-H[Connect to host]:label:->host' \
'--host[Connect to host]:label:->host'
if [[ $state != '' ]];
then
__termius_instances $state
fi
}
_termius_fullclean() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-p[Password]:isnotsecure:()' \
'--password[Password]:isnotsecure:()'
}
_termius_settings() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'--agent-forwarding[Enable agent forwarding]:agent_forwarding:(yes no)' \
'--synchronize-key[Enable syncing ssh keys]:synchronize_key:(yes no)'
}
_termius_group() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-d[Delete instances]' \
'--delete[Delete instances]' \
'-L[Instance label]:label:()' \
'--label[Instance label]:label:()' \
'-u[Host User name]:username:()' \
'--username[Host User name]:username:()' \
'-p[Host User password]:insecure:()' \
'--password[Host User password]:insecure:()' \
'-i[Identity file - ssh private key file]:filename:_files' \
'--identity-file[Identity file - ssh private key file]:filename:_files' \
'-S[Strictly check host or not]:yesno:(yes no)' \
'--strict-host-key-check[Strictly check host or not]:yesno:(yes no)' \
'--use-ssh-key[Force to use only ssh key for authentication or not]:yesno:(yes no)' \
'-k[Count of missed keep alive packages]:packagse:()' \
'--keep-alive-packages[Count of missed keep alive packages]:packagse:()' \
'-T[Set keep alive packages interval]:time:()' \
'--timeout[Set keep alive packages interval]:time (ms)' \
'-p[Set SSH Server port]:port:()' \
'--port[Set SSH Server port]:port:()' \
"-g[Set parent Group]:group_label:($(__termius_entity 'groups'))" \
"--parent-group[Set parent Group]:group_label:($(__termius_entity 'groups'))"
"-s[Set startup snippet]:snippet_label:($(__termius_entity 'snippets'))" \
"--snippet[Set startup snippet]:snippet_label:($(__termius_entity 'snippets'))" \
"--identity[Set identity]:identity_label:($(__termius_entity 'identities'))"
 
}
_termius_groups() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-f[Output format]:formats:(csv json table value yaml)' \
'--format[Output format]:formats:(csv json table value yaml)' \
'--max-widht[Maximum display width]:width:()' \
'--noindent[whether to disable indenting the JSON]' \
'-c[The column(s) to include]:columns:()' \
'--column[The column(s) to include]:columns:()' \
'--quote[When to include quotes]:quote:(all minimal none nonnumeric)' \
'-r[Display subgroups recursvely]' \
'--recursive[Display subgroups recursvely]' \
}
_termius_help() {
_arguments \
'1:command:(complete connect fullclean group groups help host hosts identities identity info init key keys login logout pfrule pfrules pull push snippet snippets sync tags)' \
'-h[Display help]' \
'--help[Display help]'
}
_termius_host() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-d[Delete instances]' \
'--delete[Delete instances]' \
'-L[Instance label]:label:()' \
'--label[Instance label]:label:()' \
'-u[Host User name]:username:()' \
'--username[Host User name]:username:()' \
'-p[Host User password]:insecure:()' \
'--password[Host User password]:insecure:()' \
'-i[Identity file - ssh private key file]:filename:_files' \
'--identity-file[Identity file - ssh private key file]:filename:_files' \
'-S[Strictly check host or not]:yesno:(yes no)' \
'--strict-host-key-check[Strictly check host or not]:yesno:(yes no)' \
'--use-ssh-key[Force to use only ssh key for authentication or not]:yesno:(yes no)' \
'-k[Count of missed keep alive packages]:packagse:()' \
'--keep-alive-packages[Count of missed keep alive packages]:packagse:()' \
'-T[Set keep alive packages interval]:time:()' \
'--timeout[Set keep alive packages interval]:time (ms)' \
'-p[Set SSH Server port]:port:()' \
'--port[Set SSH Server port]:port:()' \
'-a[Set SSH server address]:hostname:_hosts' \
'--address[Set SSH server address]:hostname:_hosts' \
"-t[Set Tag]:tag_label:($(__termius_entity 'tags'))" \
"--tag[Set Tag]:tag_label:($(__termius_entity 'tags'))" \
"-g[Set Group]:group_label:($(__termius_entity 'groups'))" \
"--group[Set Group]:group_label:($(__termius_entity 'groups'))" \
"-s[Set startup snippet]:snippet_label:($(__termius_entity 'snippets'))" \
"--snippet[Set startup snippet]:snippet_label:($(__termius_entity 'snippets'))" \
"--identity[Set identity]:identity_label:($(__termius_entity 'identities'))"
 
}
_termius_hosts() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-f[Output format]:formats:(csv json table value yaml)' \
'--format[Output format]:formats:(csv json table value yaml)' \
'--max-widht[Maximum display width]:width:()' \
'--noindent[whether to disable indenting the JSON]' \
'-c[The column(s) to include]:columns:()' \
'--column[The column(s) to include]:columns:()' \
'--quote[When to include quotes]:quote:(all minimal none nonnumeric)' \
"-t[Filter by tags]:tag_label:($(__termius_entity 'tags'))" \
"--tag[Filter by tags]:tag_label:($(__termius_entity 'tags'))" \
"-g[Filter in group]:group_label:($(__termius_entity 'groups'))" \
"--group[Filter in group]:group_label:($(__termius_entity 'groups'))"
}
_termius_identities() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-f[Output format]:formats:(csv json table value yaml)' \
'--format[Output format]:formats:(csv json table value yaml)' \
'--max-widht[Maximum display width]:width:()' \
'--noindent[whether to disable indenting the JSON]' \
'-c[The column(s) to include]:columns:()' \
'--column[The column(s) to include]:columns:()' \
'--quote[When to include quotes]:quote:(all minimal none nonnumeric)'
}
_termius_identity() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-d[Delete instances]' \
'--delete[Delete instances]' \
'-L[Instance label]:label:()' \
'--label[Instance label]:label:()' \
'-u[Host User name]:username:()' \
'--username[Host User name]:username:()' \
'-p[Host User password]:insecure:()' \
'--password[Host User password]:insecure:()' \
'-i[Identity file - ssh private key file]:filename:_files' \
'--identity-file[Identity file - ssh private key file]:filename:_files' \
"-k[Set key]:key_label:($(__termius_entity 'keys'))" \
"--ssh-keySet key]:key_label:($(__termius_entity 'keys'))"
 
}
_termius_info() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'--address[Use this address in ssh format]:hostname:()'
'-G[Info for Group]:instance type:->group' \
'--group[Info for Group]:instance type:->group' \
'-H[Info for Host]:instance type:->host' \
'--host[Info for Host]:instance type:->host' \
'-c[The column(s) to include]:columns:()' \
'--column[The column(s) to include]:columns:()' \
'--noindent[whether to disable indenting the JSON]' \
'--max-widht[Maximum display width]:width:()' \
'--prefix[Add a prefix to all shell variable names]:prefix:()' \
'-f[Output format]:formats:(json shell ssh table value yaml)' \
'--format[Output format]:formats:(json shell ssh table value yaml)'
}
_termius_key() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-d[Delete instances]' \
'--delete[Delete instances]' \
'-L[Instance label]:label:()' \
'--label[Instance label]:label:()'
'-i[Identity file - ssh private key file]:filename:_files' \
'--identity-file[Identity file - ssh private key file]:filename:_files'
 
}
_termius_keys() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-f[Output format]:formats:(csv json table value yaml)' \
'--format[Output format]:formats:(csv json table value yaml)' \
'--max-widht[Maximum display width]:width:()' \
'--noindent[whether to disable indenting the JSON]' \
'-c[The column(s) to include]:columns:()' \
'--column[The column(s) to include]:columns:()' \
'--quote[When to include quotes]:quote:(all minimal none nonnumeric)'
}
_termius_login() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-u[Username]:username:()' \
'--username[Username]:username:()' \
'-p[Password]:isnotsecure:()' \
'--password[Password]:isnotsecure:()'
}
_termius_logout() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files'
}
_termius_pfrule() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'--local[Local port forwarding]' \
'--remote[Remote port forwarding]' \
'--dynamic[Dynamic port forwarding]' \
'--binding[Address binding]:binding:()' \
'-d[Delete instances]' \
'--delete[Delete instances]' \
'-L[Instance label]:label:()' \
'--label[Instance label]:label:()' \
"-H[Set Host]:host_label:($(__termius_entity 'hosts'))" \
"--host[Set Host]:host_label:($(__termius_entity 'hosts'))"
 
}
 
_termius_pfrules() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-f[Output format]:formats:(csv json table value yaml)' \
'--format[Output format]:formats:(csv json table value yaml)' \
'--max-widht[Maximum display width]:width:()' \
'--noindent[whether to disable indenting the JSON]' \
'-c[The column(s) to include]:columns:()' \
'--column[The column(s) to include]:columns:()' \
'--quote[When to include quotes]:quote:(all minimal none nonnumeric)'
}
_termius_pull() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-p[Password]:isnotsecure:()' \
'--password[Password]:isnotsecure:()'
}
_termius_push() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-p[Password]:isnotsecure:()' \
'--password[Password]:isnotsecure:()'
}
_termius_init() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-u[Username]:username:()' \
'--username[Username]:username:()' \
'-p[Password]:isnotsecure:()' \
'--password[Password]:isnotsecure:()'
}
_termius_snippet() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-L[Instance label]:label:()' \
'--label[Instance label]:label:()' \
'-s[Script]:script:()' \
'--script[Script]:script:()' \
'-d[Delete instances]' \
'--delete[Delete instances]'
 
}
_termius_snippets() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-f[Output format]:formats:(csv json table value yaml)' \
'--format[Output format]:formats:(csv json table value yaml)' \
'--max-widht[Maximum display width]:width:()' \
'--noindent[whether to disable indenting the JSON]' \
'-c[The column(s) to include]:columns:()' \
'--column[The column(s) to include]:columns:()' \
'--quote[When to include quotes]:quote:(all minimal none nonnumeric)'
}
_termius_import-ssh-config() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files'
}
_termius_export-ssh-config() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files'
}
_termius_tags() {
_arguments \
'-h[Display help]' \
'--help[Display help]' \
'--log-file[Log to this file]:filename:_files' \
'-f[Output format]:formats:(csv json table value yaml)' \
'--format[Output format]:formats:(csv json table value yaml)' \
'--max-widht[Maximum display width]:width:()' \
'--noindent[whether to disable indenting the JSON]' \
'-c[The column(s) to include]:columns:()' \
'--column[The column(s) to include]:columns:()' \
'-d[Delete instances]' \
'--delete[Delete instances]' \
'--quote[When to include quotes]:quote:(all minimal none nonnumeric)'
 
}
 
__termius_entity_labels() {
termius $1 -f csv --quote none -c label -c id | awk 'FS="," {if (NR>1) print $2":[id="$1"]" }'
}
 
__termius_entity() {
termius $1 -f value --quote none -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_instances() {
instances=($(__termius_get_labels_ids $1))
if [[ "X$instances" != "X" ]];
then
_describe -o "instances_$1" instances
fi
}
 
# vim: ft=zsh sw=2 ts=2 et