#compdef rke typeset -A opt_args _arguments -C \ '1:cmd:->cmds' \ '2:subcmd:->subcmds' \ '*:: :->args' \ && ret=0 case "$state" in (cmds) local commands; commands=( 'up:Bring the cluster up' 'remove:Teardown the cluster and clean cluster nodes' 'version:Show cluster Kubernetes version' 'config:Setup cluster configuration' 'etcd:etcd snapshot save/restore operations in k8s cluster' 'cert:Certificates management for RKE cluster' 'encrypt:Manage cluster encryption provider keys' 'help:Shows a list of commands or help for one command' ) _describe -t commands 'command' commands && ret=0 ;; (subcmds) case $line[1] in (up) local ups; ups=( '--config:Specify an alternate cluster YAML file (default: "cluster.yml") $RKE_CONFIG' '--local:Deploy Kubernetes cluster locally' '--dind:Deploy Kubernetes cluster in docker containers (experimental)' '--dind-storage-driver:Storage driver for the docker in docker containers (experimental)' '--dind-dns-server:DNS resolver to be used by docker in docker container. Useful if host is running systemd-resovld (default: "8.8.8.8")' '--update-only:Skip idempotent deployment of control and etcd plane' '--disable-port-check:Disable port check validation between nodes' '--init:Initiate RKE cluster' '--cert-dir:Specify a certificate dir path' '--custom-certs:Use custom certificates from a cert dir' '--ssh-agent-auth:Use SSH Agent Auth defined by SSH_AUTH_SOCK' '--ignore-docker-version:Disable Docker version check' ) _describe -t ups 'up' ups && ret=0 ;; (remove) local removes; removes=( '--config:Specify an alternate cluster YAML file (default: "cluster.yml") $RKE_CONFIG' '--force:Force removal of the cluster' '--local:Remove Kubernetes cluster locally' '--dind:Remove Kubernetes cluster deplozed in dind mode' '--ssh-agent-auth:Use SSH Agent Auth defined by SSH_AUTH_SOCK' '--ignore-docker-version:Disable Docker version check' ) _describe -t removes 'remove' removes && ret=0 ;; (version) local versions; versions=( '--config:Specify an alternate cluster YAML file (default: "cluster.yml") $RKE_CONFIG' ) _describe -t versions 'version' versions && ret=0 ;; (config) local configs; configs=( '--name:Name of the configuration file (default: "cluster.yml")' '-n:Name of the configuration file (default: "cluster.yml")' '--empty:Generate Empty configuration file' '-e:Generate Empty configuration file' '--print:Print configuration' '-p:Print configuration' '--system-images:Generate the default system images' '-s:Generate the default system images' '--list-version:List the default kubernetes version' '-l:List the default kubernetes version' '--all:Used with -s and -l, get all available versions' '-a:Used with -s and -l, get all available versions' '--version:Generate the default system images for specific k8s versions' ) _describe -t configs 'config' configs && ret=0 ;; (etcd) local etcds; etcds=( 'snapshot-save:Take snapshot on all etcd hosts' 'snapshot-restore:Restore existing snapshot' ) _describe -t etcds 'etcd' etcds && ret=0 ;; (cert) local certs; certs=( 'rotate:Rotate RKE cluster certificates' 'generate-csr:Generate certificate sign requests for k8s components' ) _describe -t certs 'cert' certs && ret=0 ;; (encrypt) local encrypts; encrypts=( 'rotate-key:Rotate cluster encryption provider key' ) _describe -t encrypts "encrypts" encrypts && ret=0 ;; esac ;; (args) case $line[2] in (snapshot-save) local saveopts; saveopts=( '--name:Specify snapshot name' '--config:Specify an alternate cluster YAML file (default: "cluster.yml") $RKE_CONFIG' '--s3:Enabled backup to s3' '--s3-endpoint:Specify s3 endpoint url (default: "s3.amazonaws.com")' '--s3-endpoint-ca:Specify a custom CA cert to connect to S3 endpoint' '--access-key:Specify s3 accessKey' '--secret-key:Specify s3 secretKey' '--bucket-name:Specify s3 bucket name' '--region:Specify the s3 bucket location (optional)' '--folder:Specify s3 folder name' '--ssh-agent-auth:Use SSH Agent Auth defined by SSH_AUTH_SOCK' '--ignore-docker-version:Disable Docker version check' ) _describe -t saveopts 'snapshot-save' saveopts && ret=0 ;; (snapshot-restore) local restoreopts; restoreopts=( '--name:Specify snapshot name' '--config:Specify an alternate cluster YAML file (default: "cluster.yml") $RKE_CONFIG' '--s3:Enabled backup to s3' '--s3-endpoint:Specify s3 endpoint url (default: "s3.amazonaws.com")' '--s3-endpoint-ca:Specify a custom CA cert to connect to S3 endpoint' '--access-key:Specify s3 accessKey' '--secret-key:Specify s3 secretKey' '--bucket-name:Specify s3 bucket name' '--region:Specify the s3 bucket location (optional)' '--folder:Specify s3 folder name' '--cert-dir value:Specify a certificate dir path' '--custom-certs:Use custom certificates from a cert dir' '--use-local-state:Use local state file (do not check or use snapshot archive for state file)' '--ssh-agent-auth:Use SSH Agent Auth defined by SSH_AUTH_SOCK' '--ignore-docker-version:Disable Docker version check' ) _describe -t restoreopts 'snapshot-restore' restoreopts && ret=0 ;; (rotate) local rotateopts; rotateopts=( '--config:Specify an alternate cluster YAML file (default: "cluster.yml") $RKE_CONFIG' '--service:Specify a k8s service to rotate certs, (allowed values: kube-apiserver, kube-controller-manager, kube-scheduler, kubelet, kube-proxy, etcd)' '--rotate-ca:Rotate all certificates including CA certs' '--ssh-agent-auth:Use SSH Agent Auth defined by SSH_AUTH_SOCK' '--ignore-docker-version:Disable Docker version check' ) _describe -t rotateopts 'rotate' rotateopts && ret=0 ;; (generate-csr) local generatecsropts; generatecsropts=( '--config:Specify an alternate cluster YAML file (default: "cluster.yml") $RKE_CONFIG' '--cert-dir: Specify a certificate dir path' ) _describe -t generatecsropts 'generate-csr' generatecsropts && ret=0 ;; (rotate-key) local rotatekeyopts; rotatekeyopts=( '--config:Specify an alternate cluster YAML file (default: "cluster.yml") $RKE_CONFIG' '--ssh-agent-auth:Use SSH Agent Auth defined by SSH_AUTH_SOCK' '--ignore-docker-version:Disable Docker version check' ) _describe -t rotatekeyopts 'rotate-key' rotatekeyopts && ret=0 ;; esac ;; esac return ret