/
option.go
139 lines (132 loc) · 3.29 KB
/
option.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package kube
import (
"strings"
prompt "github.com/c-bata/go-prompt"
)
func optionCompleter(args []string, long bool) []prompt.Suggest {
l := len(args)
if l <= 1 {
if long {
return prompt.FilterHasPrefix(optionHelp, "--", false)
}
return optionHelp
}
var suggests []prompt.Suggest
commandArgs, _ := excludeOptions(args)
switch commandArgs[0] {
case "get":
suggests = getOptions
case "describe":
suggests = describeOptions
case "create":
suggests = createOptions
case "replace":
suggests = replaceOptions
case "patch":
suggests = patchOptions
case "delete":
suggests = deleteOptions
case "edit":
suggests = editOptions
case "apply":
suggests = applyOptions
case "logs":
suggests = logsOptions
case "rolling-update":
suggests = rollingUpdateOptions
case "scale", "resize":
suggests = scaleOptions
case "attach":
suggests = attachOptions
case "exec":
suggests = execOptions
case "port-forward":
suggests = portForwardOptions
case "proxy":
suggests = proxyOptions
case "run", "run-container":
suggests = runOptions
case "expose":
suggests = exposeOptions
case "autoscale":
suggests = autoscaleOptions
case "rollout":
if len(commandArgs) == 2 {
switch commandArgs[1] {
case "history":
suggests = rolloutHistoryOptions
case "pause":
suggests = rolloutPauseOptions
case "resume":
suggests = rolloutResumeOptions
case "status":
suggests = rolloutStatusOptions
case "undo":
suggests = rolloutUndoOptions
}
}
case "label":
suggests = labelOptions
case "cluster-info":
suggests = clusterInfoOptions
case "explain":
suggests = explainOptions
case "cordon":
suggests = cordonOptions
case "drain":
suggests = drainOptions
case "uncordon":
suggests = uncordonOptions
case "annotate":
suggests = annotateOptions
case "convert":
suggests = convertOptions
case "top":
if len(commandArgs) >= 2 {
switch commandArgs[1] {
case "no", "node", "nodes":
suggests = topNodeOptions
case "po", "pod", "pods":
suggests = topPodOptions
}
}
case "config":
if len(commandArgs) == 2 {
switch commandArgs[1] {
case "get-contexts":
suggests = configGetContextsOptions
case "view":
suggests = configViewOptions
case "set-cluster":
suggests = configSetClusterOptions
case "set-credentials":
suggests = configSetCredentialsOptions
case "set":
suggests = configSetOptions
}
}
default:
suggests = optionHelp
}
suggests = append(suggests, globalOptions...)
if long {
return prompt.FilterContains(
prompt.FilterHasPrefix(suggests, "--", false),
strings.TrimLeft(args[l-1], "--"),
true,
)
}
return prompt.FilterContains(suggests, strings.TrimLeft(args[l-1], "-"), true)
}
var optionHelp = []prompt.Suggest{
{Text: "-h"},
{Text: "--help"},
}
var globalOptions = []prompt.Suggest{
{Text: "--namespace", Description: "temporarily set the namespace for a request"},
{Text: "-n", Description: "temporarily set the namespace for a request"},
{Text: "--server", Description: "specify the address and port of the Kubernetes API server"},
{Text: "-s", Description: "specify the address and port of the Kubernetes API server"},
{Text: "--user", Description: "take the user if this flag exists."},
{Text: "--cluster", Description: "take the cluster if this flag exists."},
}