1 package modify
2
3 import (
4 "context"
5 "fmt"
6
7 "edge-infra.dev/pkg/edge/api/graph/model"
8 "edge-infra.dev/pkg/edge/edgecli"
9 "edge-infra.dev/pkg/edge/edgecli/constructors"
10 "edge-infra.dev/pkg/edge/edgecli/flagutil"
11 "edge-infra.dev/pkg/lib/cli/command"
12 "edge-infra.dev/pkg/lib/cli/rags"
13 )
14
15 func NewCmd(cfg *edgecli.Config) *command.Command {
16 var cmd *command.Command
17 flagsets := flagutil.GetConnectionFlags(cfg)
18
19 cmd = &command.Command{
20 ShortUsage: "edge terminal modify",
21 ShortHelp: "Modify a Terminal belonging to a Cluster",
22 Flags: append(
23 flagsets,
24 &rags.Rag{
25 Name: flagutil.StoreFlag,
26 Value: &rags.String{},
27 Usage: "Name of the Store - Must be unique",
28 Required: true,
29 },
30 &rags.Rag{
31 Name: flagutil.BannerFlag,
32 Value: &rags.String{},
33 Usage: "Banner name",
34 Required: true,
35 },
36
37
38
39 &rags.Rag{
40 Name: flagutil.TerminalID,
41 Value: &rags.String{},
42 Usage: "ID of Terminal",
43 Required: true,
44 },
45
46
47 &rags.Rag{
48 Name: flagutil.LaneFlag,
49 Usage: "Lane number",
50 Value: &rags.String{},
51 Required: false,
52 },
53 &rags.Rag{
54 Name: flagutil.RoleFlag,
55 Usage: "Role of the Terminal, e.g. worker",
56 Value: &rags.String{},
57 Required: false,
58 },
59 &rags.Rag{
60 Name: flagutil.ClassFlag,
61 Usage: "Class of the Terminal: 'server' or 'touchpoint'",
62 Value: &rags.String{},
63 Required: false,
64 },
65 &rags.Rag{
66 Name: flagutil.DiscoverDisksFlag,
67 Usage: "Disk discovery option",
68 Value: &rags.String{},
69 Required: false,
70 },
71 &rags.Rag{
72 Name: flagutil.BootDiskFlag,
73 Usage: "Boot disk option",
74 Value: &rags.String{},
75 Required: false,
76 },
77 &rags.Rag{
78 Name: flagutil.PrimaryInterfaceFlag,
79 Usage: "UUID of existing interface on terminal",
80 Value: &rags.String{},
81 Required: false,
82 },
83 &rags.Rag{
84 Name: flagutil.ExistingEfiFlag,
85 Usage: "Disk path of existing EFI partition on terminal",
86 Value: &rags.String{},
87 Required: false,
88 },
89 ),
90 Exec: func(_ context.Context, _ []string) error {
91 if err := flagutil.ValidateRequiredFlags(cmd.Rags); err != nil {
92 return err
93 }
94
95 registrar, err := constructors.BuildRegistrar(cmd.Rags)
96 if err != nil {
97 return err
98 }
99
100 terminalID := flagutil.GetStringFlag(cmd.Rags, flagutil.TerminalID)
101
102 role := flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.RoleFlag)
103 class := flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.ClassFlag)
104 discoverDisks := flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.DiscoverDisksFlag)
105 updatedTerminal := model.TerminalUpdateInput{
106 Lane: flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.LaneFlag),
107 Role: (*model.TerminalRoleType)(role),
108 Class: (*model.TerminalClassType)(class),
109 DiscoverDisks: (*model.TerminalDiscoverDisksType)(discoverDisks),
110 BootDisk: flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.BootDiskFlag),
111 ExistingEfiPart: flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.ExistingEfiFlag),
112 PrimaryInterface: flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.PrimaryInterfaceFlag),
113 }
114
115 reqCtx, cancelReq := context.WithTimeout(context.Background(), flagutil.BffReqTimeout)
116 defer cancelReq()
117
118 if _, err := registrar.ModifyTerminal(reqCtx, terminalID, &updatedTerminal); err != nil {
119 fmt.Println("an error occurred whilst modifying the terminal")
120 return err
121 }
122
123 fmt.Println("Terminal modified successfully!")
124
125 return nil
126 },
127 }
128 return cmd
129 }
130
View as plain text