|
|
- #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 <property>, 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 <authed_account>
- # when `config set account <cursor>`, completing by authroized accounts
- _arguments -C \
- '2:feature:__account_list'
- ;;
- esac
- ;;
- esac
-
- ;;
- (unset)
- # FEATURE: gcloud config unset <property>, 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
|