1 package modify
2
3 import (
4 "context"
5 "fmt"
6 "strconv"
7
8 "edge-infra.dev/pkg/edge/api/graph/model"
9 "edge-infra.dev/pkg/edge/edgecli"
10 "edge-infra.dev/pkg/edge/edgecli/constructors"
11 "edge-infra.dev/pkg/edge/edgecli/flagutil"
12 "edge-infra.dev/pkg/lib/cli/command"
13 "edge-infra.dev/pkg/lib/cli/rags"
14 )
15
16 func NewCmd(cfg *edgecli.Config) *command.Command {
17 var cmd *command.Command
18 flagsets := flagutil.GetConnectionFlags(cfg)
19
20 cmd = &command.Command{
21 ShortUsage: "edge terminal interface modify",
22 ShortHelp: "Modify an interface for a particular terminal",
23 Flags: append(
24 flagsets,
25 &rags.Rag{
26 Name: flagutil.StoreFlag,
27 Value: &rags.String{},
28 Usage: "Name of the Store - Must be unique",
29 Required: true,
30 },
31 &rags.Rag{
32 Name: flagutil.BannerFlag,
33 Value: &rags.String{},
34 Usage: "Banner name",
35 Required: true,
36 },
37 &rags.Rag{
38 Name: flagutil.TerminalInterfaceID,
39 Value: &rags.String{},
40 Usage: "Unique terminal interface ID",
41 Required: true,
42 },
43 &rags.Rag{
44 Name: flagutil.MacAddressFlag,
45 Value: &rags.String{},
46 Usage: "MAC address of the network interface you want to change",
47 Required: false,
48 },
49 &rags.Rag{
50 Name: flagutil.Gateway4Flag,
51 Value: &rags.String{},
52 Usage: "IPv4 address of interface's gateway",
53 Required: false,
54 },
55 &rags.Rag{
56 Name: flagutil.Gateway6Flag,
57 Value: &rags.String{},
58 Usage: "IPv6 address of interface's gateway",
59 Required: false,
60 },
61 &rags.Rag{
62 Name: flagutil.Dhcp4Flag,
63 Value: &rags.String{},
64 Usage: "Whether to enable DHCP4 for this interface",
65 Required: false,
66 },
67 &rags.Rag{
68 Name: flagutil.Dhcp6Flag,
69 Value: &rags.String{},
70 Usage: "Whether to enable DHCP6 for this interface",
71 Required: false,
72 },
73 ),
74 Exec: func(_ context.Context, _ []string) error {
75 if err := flagutil.ValidateRequiredFlags(cmd.Rags); err != nil {
76 return err
77 }
78
79 registrar, err := constructors.BuildRegistrar(cmd.Rags)
80 if err != nil {
81 return err
82 }
83
84 terminalInterfaceID := flagutil.GetStringFlag(cmd.Rags, flagutil.TerminalInterfaceID)
85
86 reqCtx, cancelReq := context.WithTimeout(context.Background(), flagutil.BffReqTimeout)
87 defer cancelReq()
88
89 dhcp4Str := flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.Dhcp4Flag)
90 var dhcp4Bool bool
91 if dhcp4Str != nil {
92 dhcp4Bool, err = strconv.ParseBool(*dhcp4Str)
93 if err != nil {
94 fmt.Println("unable to parse field dhcp4")
95 return err
96 }
97 }
98
99 dhcp6Str := flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.Dhcp6Flag)
100 var dhcp6Bool bool
101 if dhcp6Str != nil {
102 dhcp6Bool, err = strconv.ParseBool(*dhcp6Str)
103 if err != nil {
104 fmt.Println("unable to parse field dhcp6")
105 return err
106 }
107 }
108
109 updatedIface := model.TerminalInterfaceUpdateInput{
110 MacAddress: flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.MacAddressFlag),
111 Dhcp4: &dhcp4Bool,
112 Dhcp6: &dhcp6Bool,
113 Gateway4: flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.Gateway4Flag),
114 Gateway6: flagutil.GetOptionalFlagValue[string](cmd.Rags, flagutil.Gateway6Flag),
115 }
116
117 if _, err = registrar.ModifyTerminalInterface(reqCtx, terminalInterfaceID, &updatedIface); err != nil {
118 fmt.Println("unable to modify terminal interface")
119 return err
120 }
121
122 fmt.Println("successfully modified the terminal interface")
123
124 return nil
125 },
126 }
127 return cmd
128 }
129
View as plain text