cmd/werf/docs/replacers/kubectl/kubectl.go
package kubectl
import (
"fmt"
"github.com/spf13/cobra"
"k8s.io/client-go/tools/clientcmd"
"github.com/werf/werf/cmd/werf/common"
)
const (
flagAuthProvider = "auth-provider"
flagAuthProviderArg = "auth-provider-arg"
flagExecCommand = "exec-command"
flagExecAPIVersion = "exec-api-version"
flagExecArg = "exec-arg"
flagExecEnv = "exec-env"
)
func ReplaceKubectlDocs(cmd *cobra.Command) *cobra.Command {
if len(cmd.Commands()) > 0 {
for _, c := range cmd.Commands() {
if len(c.Commands()) > 0 {
ReplaceKubectlDocs(c)
}
setNewDocs(c)
}
}
setNewDocs(cmd)
return cmd
}
func setNewDocs(cmd *cobra.Command) {
switch cmd.Use {
case "events [--for TYPE/NAME] [--watch]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetAlphaEventsDocs().LongMD,
}
case "kubectl":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetKubectlDocs().LongMD,
}
case "alpha":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetAlphaDocs().LongMD,
}
case "annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetAnnotateDocs().LongMD,
}
case "api-resources":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetApiResourcesDocs().LongMD,
}
case "api-versions":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetApiVersionsDocs().LongMD,
}
case "apply (-f FILENAME | -k DIRECTORY)":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetApplyDocs().LongMD,
}
case "edit-last-applied (RESOURCE/NAME | -f FILENAME)":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetApplyEditLastAppliedDocs().LongMD,
}
case "set-last-applied -f FILENAME":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetApplySetLastAppliedDocs().LongMD,
}
case "view-last-applied (TYPE [NAME | -l label] | TYPE/NAME | -f FILENAME)":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetApplyViewLastAppliedDocs().LongMD,
}
case "attach (POD | TYPE/NAME) -c CONTAINER":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetAttachDocs().LongMD,
}
case "auth":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetAuthDocs().LongMD,
}
case "whoami":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetWhoamiDocs().LongMD,
}
case "can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetAuthCanIDocs().LongMD,
}
case "reconcile -f FILENAME":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetAuthReconcileDocs().LongMD,
}
case "autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetAutoscaleDocs().LongMD,
}
case "certificate SUBCOMMAND":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCertificateDocs().LongMD,
}
case "approve (-f FILENAME | NAME)":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCertificateApproveDocs().LongMD,
}
case "deny (-f FILENAME | NAME)":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCertificateDenyDocs().LongMD,
}
case "cluster-info":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetClusterInfoDocs().LongMD,
}
case "dump":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetClusterInfoDumpDocs().LongMD,
}
case "completion SHELL":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCompletionDocs().LongMD,
}
case "config SUBCOMMAND":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigDocs(clientcmd.NewDefaultPathOptions()).LongMD,
}
case "current-context":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigCurrentContextDocs().LongMD,
}
case "delete-cluster NAME":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigDeleteClusterDocs().LongMD,
}
case "delete-context NAME":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigDeleteContextDocs().LongMD,
}
case "delete-user NAME":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigDeleteUserDocs().LongMD,
}
case "get-clusters":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigGetClustersDocs().LongMD,
}
case "get-contexts [(-o|--output=)name)]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigGetContextsDocs().LongMD,
}
case "get-users":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigGetUsersDocs().LongMD,
}
case "rename-context CONTEXT_NAME NEW_NAME":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigRenameContextDocs().LongMD,
}
case "set PROPERTY_NAME PROPERTY_VALUE":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigSetDocs().LongMD,
}
case fmt.Sprintf("set-cluster NAME [--%v=server] [--%v=path/to/certificate/authority] "+
"[--%v=true] [--%v=example.com]", clientcmd.FlagAPIServer, clientcmd.FlagCAFile,
clientcmd.FlagInsecure, clientcmd.FlagTLSServerName):
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigSetClusterDocs().LongMD,
}
case fmt.Sprintf("set-context [NAME | --current] [--%v=cluster_nickname] [--%v=user_nickname] "+
"[--%v=namespace]", clientcmd.FlagClusterName, clientcmd.FlagAuthInfoName, clientcmd.FlagNamespace):
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigSetContextDocs().LongMD,
}
case fmt.Sprintf(
"set-credentials NAME [--%v=path/to/certfile] "+
"[--%v=path/to/keyfile] "+
"[--%v=bearer_token] "+
"[--%v=basic_user] "+
"[--%v=basic_password] "+
"[--%v=provider_name] "+
"[--%v=key=value] "+
"[--%v=exec_command] "+
"[--%v=exec_api_version] "+
"[--%v=arg] "+
"[--%v=key=value]",
clientcmd.FlagCertFile,
clientcmd.FlagKeyFile,
clientcmd.FlagBearerToken,
clientcmd.FlagUsername,
clientcmd.FlagPassword,
flagAuthProvider,
flagAuthProviderArg,
flagExecCommand,
flagExecAPIVersion,
flagExecArg,
flagExecEnv,
):
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigSetCredentialsDocs().LongMD,
}
case "unset PROPERTY_NAME":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigUnsetDocs().LongMD,
}
case "use-context CONTEXT_NAME":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigUseContextDocs().LongMD,
}
case "view":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetConfigViewDocs().LongMD,
}
case "cordon NODE":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCordonDocs().LongMD,
}
case "cp <file-spec-src> <file-spec-dest>":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCpDocs().LongMD,
}
case "create -f FILENAME":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateDocs().LongMD,
}
case "token SERVICE_ACCOUNT_NAME":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateTokenDocs().LongMD,
}
case "clusterrole NAME --verb=verb --resource=resource.group [--resource-name=resourcename] " +
"[--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateClusterRoleDocs().LongMD,
}
case "clusterrolebinding NAME --clusterrole=NAME [--user=username] [--group=groupname] " +
"[--serviceaccount=namespace:serviceaccountname] [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateClusterRoleBindingDocs().LongMD,
}
case "configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateConfigMapDocs().LongMD,
}
case "cronjob NAME --image=image --schedule='0/5 * * * ?' -- [COMMAND] [args...]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateCronJobDocs().LongMD,
}
case "deployment NAME --image=image -- [COMMAND] [args...]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateDeploymentDocs().LongMD,
}
case "ingress NAME --rule=host/path=service:port[,tls[=secret]] ":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateIngressDocs().LongMD,
}
case "job NAME --image=image [--from=cronjob/name] -- [COMMAND] [args...]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateJobDocs().LongMD,
}
case "namespace NAME [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateNamespaceDocs().LongMD,
}
case "poddisruptionbudget NAME --selector=SELECTOR --min-available=N [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreatePodDisruptionBudgetDocs().LongMD,
}
case "priorityclass NAME --value=VALUE --global-default=BOOL [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreatePriorityClassDocs().LongMD,
}
case "quota NAME [--hard=key1=value1,key2=value2] [--scopes=Scope1,Scope2] [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateQuotaDocs().LongMD,
}
case "role NAME --verb=verb --resource=resource.group/subresource " +
"[--resource-name=resourcename] [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateRoleDocs().LongMD,
}
case "rolebinding NAME --clusterrole=NAME|--role=NAME [--user=username] [--group=groupname] " +
"[--serviceaccount=namespace:serviceaccountname] [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateRoleBindingDocs().LongMD,
}
case "secret (docker-registry | generic | tls)":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateSecretDocs().LongMD,
}
case "docker-registry NAME --docker-username=user --docker-password=password " +
"--docker-email=email [--docker-server=string] [--from-file=[key=]source] " +
"[--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateSecretDockerRegistryDocs().LongMD,
}
case "generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateSecretGenericDocs().LongMD,
}
case "tls NAME --cert=path/to/cert/file --key=path/to/key/file [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateSecretTLSDocs().LongMD,
}
case "service":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateServiceDocs().LongMD,
}
case "clusterip NAME [--tcp=<port>:<targetPort>] [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateServiceClusterIPDocs().LongMD,
}
case "externalname NAME --external-name external.name [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateServiceExternalNameDocs().LongMD,
}
case "loadbalancer NAME [--tcp=port:targetPort] [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateServiceLoadBalancerDocs().LongMD,
}
case "nodeport NAME [--tcp=port:targetPort] [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateServiceNodePortDocs().LongMD,
}
case "serviceaccount NAME [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetCreateServiceAccountDocs().LongMD,
}
case "debug (POD | TYPE[[.VERSION].GROUP]/NAME) [ -- COMMAND [args...] ]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetDebugDocs().LongMD,
}
case "delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)])":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetDeleteDocs().LongMD,
}
case "describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetDescribeDocs().LongMD,
}
case "diff -f FILENAME":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetDiffDocs().LongMD,
}
case "drain NODE":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetDrainDocs().LongMD,
}
case "edit (RESOURCE/NAME | -f FILENAME)":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetEditDocs().LongMD,
}
case "exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetExecDocs().LongMD,
}
case "explain TYPE [--recursive=FALSE|TRUE] [--api-version=api-version-group] [--output=plaintext|plaintext-openapiv2]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetExplainDocs().LongMD,
}
case "expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] " +
"[--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] " +
"[--type=type]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetExposeDocs().LongMD,
}
case "get [(-o|--output=)json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|" +
"jsonpath-as-json|jsonpath-file|custom-columns|custom-columns-file|wide] (TYPE[.VERSION][.GROUP] " +
"[NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetGetDocs().LongMD,
}
case "kustomize DIR":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetKustomizeDocs().LongMD,
}
case "label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetLabelDocs().LongMD,
}
case "logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetLogsDocs().LongMD,
}
case "options":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetOptionsDocs().LongMD,
}
case "patch (-f FILENAME | TYPE NAME) [-p PATCH|--patch-file FILE]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetPatchDocs().LongMD,
}
case "plugin [flags]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetPluginDocs().LongMD,
}
case "list":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetPluginListDocs().LongMD,
}
case "port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetPortForwardDocs().LongMD,
}
case "proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetProxyDocs().LongMD,
}
case "replace -f FILENAME":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetReplaceDocs().LongMD,
}
case "rollout SUBCOMMAND":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetRolloutDocs().LongMD,
}
case "history (TYPE NAME | TYPE/NAME) [flags]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetRolloutHistoryDocs().LongMD,
}
case "pause RESOURCE":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetRolloutPauseDocs().LongMD,
}
case "resume RESOURCE":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetRolloutResumeDocs().LongMD,
}
case "undo (TYPE NAME | TYPE/NAME) [flags]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetRolloutUndoDocs().LongMD,
}
case "status (TYPE NAME | TYPE/NAME) [flags]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetRolloutStatusDocs().LongMD,
}
case "restart RESOURCE":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetRolloutRestartDocs().LongMD,
}
case "run NAME --image=image [--env=\"key=value\"] [--port=port] [--dry-run=server|client] " +
"[--overrides=inline-json] [--command] -- [COMMAND] [args...]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetRunDocs().LongMD,
}
case "scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetScaleDocs().LongMD,
}
case "set SUBCOMMAND":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetSetDocs().LongMD,
}
case "image (-f FILENAME | TYPE NAME) CONTAINER_NAME_1=CONTAINER_IMAGE_1 ... CONTAINER_NAME_N=CONTAINER_IMAGE_N":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetSetImageDocs().LongMD,
}
case "resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetSetResourceDocs().LongMD,
}
case "selector (-f FILENAME | TYPE NAME) EXPRESSIONS [--resource-version=version]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetSetSelectorDocs().LongMD,
}
case "subject (-f FILENAME | TYPE NAME) [--user=username] [--group=groupname] [--serviceaccount=namespace:serviceaccountname] [--dry-run=server|client|none]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetSetSubjectDocs().LongMD,
}
case "serviceaccount (-f FILENAME | TYPE NAME) SERVICE_ACCOUNT":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetSetServiceAccountDocs().LongMD,
}
case "env RESOURCE/NAME KEY_1=VAL_1 ... KEY_N=VAL_N":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetSetEnvDocs().LongMD,
}
case "taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetTaintDocs().LongMD,
}
case "top":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetTopDocs().LongMD,
}
case "node [NAME | -l label]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetTopNodeDocs().LongMD,
}
case "pod [NAME | -l label]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetTopPodDocs().LongMD,
}
case "uncordon NODE":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetUncordonDocs().LongMD,
}
case "version":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetVersionDocs().LongMD,
}
case "wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available|--for=jsonpath='{}'[=value]]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetWaitDocs().LongMD,
}
case "events [(-o|--output=)json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|" +
"jsonpath-as-json|jsonpath-file] [--for TYPE/NAME] [--watch] [--types=Normal,Warning]":
cmd.Annotations = map[string]string{
common.DocsLongMD: GetEventsDocs().LongMD,
}
}
}