@@ -33,13 +33,21 @@ type inputModel struct {
3333 NetworkId string
3434}
3535
36+ type ExecutableRequest interface {
37+ Execute () (* iaas.NICListResponse , error )
38+ }
39+
3640func NewCmd (params * types.CmdParams ) * cobra.Command {
3741 cmd := & cobra.Command {
3842 Use : "list" ,
3943 Short : "Lists all network interfaces of a network" ,
4044 Long : "Lists all network interfaces of a network." ,
4145 Args : args .NoArgs ,
4246 Example : examples .Build (
47+ examples .NewExample (
48+ `Lists all network interfaces in your current project` ,
49+ `$ stackit network-interface list` ,
50+ ),
4351 examples .NewExample (
4452 `Lists all network interfaces with network ID "xxx"` ,
4553 `$ stackit network-interface list --network-id xxx` ,
@@ -71,22 +79,26 @@ func NewCmd(params *types.CmdParams) *cobra.Command {
7179 }
7280
7381 // Call API
74- req := buildRequest (ctx , model , apiClient )
75- resp , err := req .Execute ()
76- if err != nil {
77- return fmt .Errorf ("list network interfaces: %w" , err )
78- }
79-
80- if resp .Items == nil || len (* resp .Items ) == 0 {
81- networkLabel , err := iaasUtils .GetNetworkName (ctx , apiClient , model .ProjectId , model .Region , model .NetworkId )
82+ var req ExecutableRequest
83+ var networkLabel = ""
84+ if model .NetworkId == "" {
85+ // Return all NICs in the Project
86+ req = buildProjectRequest (ctx , model , apiClient )
87+ } else {
88+ // Return the NICs for one Network
89+ req = buildRequest (ctx , model , apiClient )
90+
91+ networkLabel , err = iaasUtils .GetNetworkName (ctx , apiClient , model .ProjectId , model .Region , model .NetworkId )
8292 if err != nil {
8393 params .Printer .Debug (print .ErrorLevel , "get network name: %v" , err )
8494 networkLabel = model .NetworkId
8595 } else if networkLabel == "" {
8696 networkLabel = model .NetworkId
8797 }
88- params .Printer .Info ("No network interfaces found for network %q\n " , networkLabel )
89- return nil
98+ }
99+ resp , err := req .Execute ()
100+ if err != nil {
101+ return fmt .Errorf ("list network interfaces: %w" , err )
90102 }
91103
92104 // Truncate output
@@ -95,7 +107,7 @@ func NewCmd(params *types.CmdParams) *cobra.Command {
95107 items = items [:* model .Limit ]
96108 }
97109
98- return outputResult (params .Printer , model .OutputFormat , items )
110+ return outputResult (params .Printer , model .OutputFormat , items , networkLabel )
99111 },
100112 }
101113 configureFlags (cmd )
@@ -106,9 +118,6 @@ func configureFlags(cmd *cobra.Command) {
106118 cmd .Flags ().Var (flags .UUIDFlag (), networkIdFlag , "Network ID" )
107119 cmd .Flags ().Int64 (limitFlag , 0 , "Maximum number of entries to list" )
108120 cmd .Flags ().String (labelSelectorFlag , "" , "Filter by label" )
109-
110- err := flags .MarkFlagsRequired (cmd , networkIdFlag )
111- cobra .CheckErr (err )
112121}
113122
114123func parseInput (p * print.Printer , cmd * cobra.Command , _ []string ) (* inputModel , error ) {
@@ -136,7 +145,16 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel,
136145 return & model , nil
137146}
138147
139- func buildRequest (ctx context.Context , model * inputModel , apiClient * iaas.APIClient ) iaas.ApiListNicsRequest {
148+ func buildProjectRequest (ctx context.Context , model * inputModel , apiClient * iaas.APIClient ) ExecutableRequest {
149+ req := apiClient .ListProjectNICs (ctx , model .ProjectId , model .Region )
150+ if model .LabelSelector != nil {
151+ req = req .LabelSelector (* model .LabelSelector )
152+ }
153+
154+ return req
155+ }
156+
157+ func buildRequest (ctx context.Context , model * inputModel , apiClient * iaas.APIClient ) ExecutableRequest {
140158 req := apiClient .ListNics (ctx , model .ProjectId , model .Region , model .NetworkId )
141159 if model .LabelSelector != nil {
142160 req = req .LabelSelector (* model .LabelSelector )
@@ -145,8 +163,17 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli
145163 return req
146164}
147165
148- func outputResult (p * print.Printer , outputFormat string , nics []iaas.NIC ) error {
166+ func outputResult (p * print.Printer , outputFormat string , nics []iaas.NIC , networkLabel string ) error {
149167 return p .OutputResult (outputFormat , nics , func () error {
168+ if nics == nil || len (nics ) == 0 {
169+ if networkLabel == "" {
170+ p .Outputf ("No network interfaces found for your current project\n " )
171+ } else {
172+ p .Outputf ("No network interfaces found for network %q\n " , networkLabel )
173+ }
174+ return nil
175+ }
176+
150177 table := tables .NewTable ()
151178 table .SetHeader ("ID" , "NAME" , "NIC SECURITY" , "DEVICE ID" , "IPv4 ADDRESS" , "STATUS" , "TYPE" )
152179
0 commit comments