#compdef gcloud #------------------------------------------------------------ # Description: # # Completion script for Google Cloud SDK # # Author: # # * Colin Su (https://github.com/littleq0903) # # Source Code: # # https://github.com/littleq0903/gcloud-zsh-completion # #------------------------------------------------------------ ## Util functions # get authorized account list __account_list () { _wanted application expl 'Authorized Google Accounts' compadd $(command gcloud auth list 2> /dev/null | grep - | sed -e "s/^ - //g" | sed -e "s/(active)//g") } # get config variable names __variable_list () { _wanted application expl 'gcloud :: config :: Configuration Variables' compadd $(command gcloud config list 2> /dev/null | grep "=" | sed -e "s/ = .*//g") } ## Common stuffs local -a _first_arguments _first_arguments=( # these are command groups 'auth:Manage oauth2 credentials for the Google Cloud SDK' 'components:Install, update, or remove the tools in the Google Cloud SDK' 'compute:Read and manipulate Google Compute Engine resources' 'config:View and edit Google Cloud SDK properties' 'sql:Manage Cloud SQL databases' # these are just commands 'init:Initialize a gcloud workspace in the current directory' 'interactive:Use this tool in an interactive python shell' 'version:Print version information for Cloud SDK components' ) # common options common_ops=( {--project+,-p+}":Google Cloud Platform project to use for this invocation:( )" {--quiet,-q}"[Disable all interactive prompts when running gcloud commands. If input is required, defaults will be used, or an error will be raised.]" "--user-output-enabled+:Control whether user intended output is printed to the console.:(true false)" "--verbosity+:Override the default verbosity for this command. This must be a standard logging verbosity level:(debug info warning error critical none)" ) ## for 'auth' command group # Commands local -a _auth_arguments _auth_arguments=( "activate-refresh-token:Get credentials via an existing refresh token" "list:List the accounts for known credentials" "login:Get credentials via Google's oauth2 web flow" "revoke:Revoke authorization for credentials" ) __gcloud-auth () { local curcontext="$curcontext" state line local -A opt_args _arguments \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t subcommand "gcloud :: auth Commands" _auth_arguments return ;; (options) case $line[1] in (list) _arguments \ "--account+::List only credentials for one account:( )" ;; (login) # TODO: make options repeatable local args args=( "--account+:Override the account acquired from the web flow:( )" "--do-not-activate[Do not set the new credentials as active]" "--no-launch-browser[Print a URL to be copied instead of launching a web browser]" ) _arguments -C $args ;; (revoke) _arguments \ "--all[Revoke all known credentials]" ;; esac ;; esac } ## for 'components' command groups local -a _components_arguments _components_arguments=( 'list:Command to list the current state of installed components' 'remove:Command to remove installed components' 'restore:Command to restore a backup of a Cloud SDK installation' 'update:Command to update existing or install new components' ) __gcloud-components () { local curcontext="$curcontext" state line local -A opt_args _arguments -C \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t commands "gcloud :: components Commands" _components_arguments return ;; (options) case $line[1] in (list) _arguments \ "--show-versions[Show version information for all components]" ;; (remove) ;; (restore) ;; (update) ;; esac ;; esac } ## for 'compute' command groups local -a _compute_arguments _compute_arguments=( "addresses:Read and manipulate Google Compute Engine addresses." "backend-services:List, create, and delete backend services." "disk-types:Read Google Compute Engine virtual disk types." "disks:Read and manipulate Google Compute Engine disks." "firewall-rules:List, create, and delete Google Compute Engine firewall rules." "forwarding-rules:Read and manipulate forwarding rules to send traffic to load balancers." "http-health-checks:Read and manipulate HTTP health checks for load balanced instances." "images:List, create, and delete Google Compute Engine images." "instances:Read and manipulate Google Compute Engine virtual machine instances." "machine-types:Read Google Compute Engine virtual machine types." "networks:List, create, and delete Google Compute Engine networks." "operations:Read and manipulate Google Compute Engine operations." "project-info:Read and manipulate project-level data like quotas and metadata." "regions:List Google Compute Engine regions." "routes:Read and manipulate routes." "snapshots:List, describe, and delete Google Compute Engine snapshots." "target-http-proxies:List, create, and delete target HTTP proxies." "target-instances:Read and manipulate Google Compute Engine virtual target instances." "target-pools:Read and manipulate Google Compute Engine target pools." "url-maps:List, create, and delete URL maps." "zones:List Google Compute Engine zones." "config-ssh:Populate SSH config files with Host entries from each instance" "copy-files:Copy files to and from Google Compute Engine virtual machines." "ssh:SSH into a virtual machine instance." ) __gcloud-compute () { local curcontext="$curcontext" state line local -A opt_args _arguments -C \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t commands "gcloud :: compute commands" _compute_arguments return ;; esac } ## for 'config' command groups local -a _config_arguments _config_arguments=( 'list:View Google Cloud SDK properties' 'set:Edit Google Cloud SDK properties' 'unset:Erase Google Cloud SDK properties' ) __gcloud-config () { local curcontext="$curcontext" state line local -A opt_args _arguments -C \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t commands "gcloud :: config Commands" _config_arguments return ;; (options) case $line[1] in (list) _arguments \ "--all[List all set and unset properties that match the arguments]" \ {--section+,-s+}":The section whose properties shall be listed:( )" ;; (set) # FEATURE: gcloud config set , will complete the property names local -a _config_set_arguments _config_set_arguments=( "--global-only[Set the option in the global properties file]" {--section+,-s+}":The section containing the option to be set:( )" ) _arguments -C \ $_config_set_arguments \ '1:feature:__variable_list' \ '*:value:->value' case $state in (value) case $line[1] in (account) # FEATURE: gcloud config set account # when `config set account `, completing by authroized accounts _arguments -C \ '2:feature:__account_list' ;; esac ;; esac ;; (unset) # FEATURE: gcloud config unset , will complete the property names local -a _config_unset_arguments _config_unset_arguments=( "--global-only[Unset the option in the global properties file]" {--section+,-s+}":The section containing the option to be unset:( )" ) _arguments \ $_config_unset_arguments \ '1:feature:__variable_list' ;; esac ;; esac } ## for 'sql' command groups local -a _sql_arguments _sql_arguments=( 'backups:Provide commands for working with backups of Cloud SQL instances' 'instances:Provide commands for managing Cloud SQL instances' 'operations:Provide commands for working with Cloud SQL instance operations' 'ssl-certs:Provide commands for managing SSL certificates of Cloud SQL instances' 'tiers:Provide a command to list tiers' ) __gcloud-sql () { local curcontext="$curcontext" state line local -A opt_args _arguments -C \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t commands "gcloud :: sql Commands" _sql_arguments return ;; (options) case $line[1] in (backups) _sql_backups_arguments=( "get:Retrieves information about a backup" "list:Lists all backups associated with a given instance" ) _arguments \ ':command:->command' \ {--instance+,-i+}":Cloud SQL instance ID:( )" \ '*::options:->options' case $state in (command) local -a _sql_backups_arguments _describe -t commands "gcloud :: sql :: backup Commands" _sql_backups_arguments ;; esac ;; (instances) # too many optional options in here, cry ;( _sql_instances_arguments=( 'create:Creates a new Cloud SQL instance' 'delete:Deletes a Cloud SQL instance' 'export:Exports data from a Cloud SQL instance' 'get:Retrieves information about a Cloud SQL instance' 'import:Imports data into a Cloud SQL instance from Google Cloud Storage' 'list:Lists Cloud SQL instances in a given project' 'patch:Updates the settings of a Cloud SQL instance' 'reset-ssl-config:Deletes all client certificates and generates a new server certificate' 'restart:Restarts a Cloud SQL instance' 'restore-backup:Restores a backup of a Cloud SQL instance' 'set-root-password:Sets the password of the MySQL root user' ) _arguments \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t commands "gcloud :: sql :: instances Commands" _sql_instances_arguments ;; esac ;; (operations) local -a _sql_operations_arguments _sql_operations_arguments=( "get:Retrieves information about a Cloud SQL instance operation." "list:Lists all instance operations for the given Cloud SQL instance" ) _arguments \ ':command:->command' \ {--instance+,-i+}":Cloud SQL instance ID:( )" \ '*::options:->options' case $state in (command) _describe -t commands "gcloud :: sql :: operations Commands" _sql_backups_arguments ;; esac ;; (ssl-certs) local -a _sql_sslcerts_arguments _sql_sslcerts_arguments=( 'create:Creates an SSL certificate for a Cloud SQL instance' 'delete:Deletes an SSL certificate for a Cloud SQL instance' 'get:Retrieves information about an SSL cert for a Cloud SQL instance' 'list:Lists all SSL certs for a Cloud SQL instance' ) _arguments \ ':command:->command' \ {--instance+,-i+}":Cloud SQL instance ID:( )" \ '*::options:->options' case $state in (command) _describe -t commands "gcloud :: sql :: ssl-certs Commands" _sql_sslcerts_arguments ;; esac ;; (tiers) local -a _sql_tiers_arguments _sql_tiers_arguments=( "list:Lists all available service tiers for Google Cloud SQL" ) _arguments \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t commands "gcloud :: sql :: tiers Commands" _sql_tiers_arguments ;; esac ;; esac ;; esac } ## Top-level completion function local expl local curcontext="$curcontext" state line local -A opt_args _arguments -C \ $common_ops \ ':command:->command' \ '*::options:->options' case $state in (command) _describe -t commands "Google Cloud SDK Commands" _first_arguments ;; (options) # subcommands case $line[1] in (auth) __gcloud-auth ;; (compute) __gcloud-compute ;; (components) __gcloud-components ;; (config) __gcloud-config ;; (sql) __gcloud-sql ;; esac ;; esac return 0 # Local Variables: # mode: Shell-Script # sh-indentation: 2 # indent-tabs-mode: nil # sh-basic-offset: 2 # End: # vim: ft=zsh sw=2 ts=2 et