Skip to content

Commit 781a5bc

Browse files
add vm name completion
Signed-off-by: Yaroslav Borbat <[email protected]>
1 parent c093944 commit 781a5bc

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
Copyright 2025 Flant JSC
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package comp
18+
19+
import (
20+
"strings"
21+
22+
"github.com/spf13/cobra"
23+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24+
25+
"github.com/deckhouse/virtualization/src/cli/internal/clientconfig"
26+
)
27+
28+
func VirtualMachineNameCompletionFunc(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
29+
directive := cobra.ShellCompDirectiveNoFileComp
30+
31+
if len(args) > 0 {
32+
return nil, directive
33+
}
34+
35+
client, namespace, _, err := clientconfig.ClientAndNamespaceFromContext(cmd.Context())
36+
if err != nil {
37+
return nil, directive
38+
}
39+
40+
vms, err := client.VirtualMachines(namespace).List(cmd.Context(), metav1.ListOptions{})
41+
if err != nil {
42+
return nil, directive
43+
}
44+
45+
var comps []string
46+
for _, vm := range vms.Items {
47+
if strings.HasPrefix(vm.Name, toComplete) {
48+
comps = append(comps, vm.Name)
49+
}
50+
}
51+
52+
return comps, directive
53+
}

src/cli/pkg/command/virtualization.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import (
3737
"github.com/deckhouse/virtualization/src/cli/internal/cmd/scp"
3838
"github.com/deckhouse/virtualization/src/cli/internal/cmd/ssh"
3939
"github.com/deckhouse/virtualization/src/cli/internal/cmd/vnc"
40+
"github.com/deckhouse/virtualization/src/cli/internal/comp"
4041
"github.com/deckhouse/virtualization/src/cli/internal/templates"
4142
)
4243

@@ -100,6 +101,7 @@ func NewCommand(programName string) *cobra.Command {
100101
virtCmd.SetContext(ctxWithClient)
101102
for _, cmd := range virtCmd.Commands() {
102103
cmd.SetContext(ctxWithClient)
104+
cmd.ValidArgsFunction = comp.VirtualMachineNameCompletionFunc
103105
}
104106

105107
return virtCmd

0 commit comments

Comments
 (0)