Skip to content

Commit eae49a0

Browse files
authored
Extend output of IaaS commands (#569)
* Extend output of IaaS commands - `beta network list` - add value: prefixes - `beta security-groups describe` - add values - stateful - createdAt - updatedAt - add rules table with values: - ID - description - protocol - direction - etherType - portRange - ipRange - icmpParameters - remoteSecurityGroupId - `beta security-groups list` - add values: - description - labels - `beta security-group rule list` - add value: remoteSecurityGroupId - `beta server describe` - add value: ip address - add table MaintenanceWindow with values: - status - details - startsAt - endsAt - `beta server list` - add values: - machineType - nicIPv4 - publicIPs
1 parent 388f37f commit eae49a0

File tree

8 files changed

+195
-27
lines changed

8 files changed

+195
-27
lines changed

internal/cmd/beta/network/list/list.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7+
"strings"
78

89
"github.com/goccy/go-yaml"
910
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
@@ -151,7 +152,7 @@ func outputResult(p *print.Printer, outputFormat string, networks []iaas.Network
151152
return nil
152153
default:
153154
table := tables.NewTable()
154-
table.SetHeader("ID", "NAME", "STATUS", "PUBLIC IP", "ROUTED")
155+
table.SetHeader("ID", "NAME", "STATUS", "PUBLIC IP", "PREFIXES", "ROUTED")
155156

156157
for _, network := range networks {
157158
publicIp := ""
@@ -163,8 +164,12 @@ func outputResult(p *print.Printer, outputFormat string, networks []iaas.Network
163164
if network.Routed != nil {
164165
routed = *network.Routed
165166
}
167+
prefixes := ""
168+
if network.Prefixes != nil && len(*network.Prefixes) > 0 {
169+
prefixes = strings.Join(*network.Prefixes, ", ")
170+
}
166171

167-
table.AddRow(*network.NetworkId, *network.Name, *network.State, publicIp, routed)
172+
table.AddRow(*network.NetworkId, *network.Name, *network.State, publicIp, prefixes, routed)
168173
table.AddSeparator()
169174
}
170175

internal/cmd/beta/security-group/describe/describe.go

Lines changed: 73 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import (
66
"fmt"
77
"strings"
88

9-
"github.com/goccy/go-yaml"
10-
"github.com/spf13/cobra"
119
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
1210
"github.com/stackitcloud/stackit-cli/internal/pkg/errors"
1311
"github.com/stackitcloud/stackit-cli/internal/pkg/examples"
@@ -16,6 +14,9 @@ import (
1614
"github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/client"
1715
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"
1816
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
17+
18+
"github.com/goccy/go-yaml"
19+
"github.com/spf13/cobra"
1920
"github.com/stackitcloud/stackit-sdk-go/services/iaas"
2021
)
2122

@@ -114,7 +115,11 @@ func outputResult(p *print.Printer, model *inputModel, resp *iaas.SecurityGroup)
114115

115116
return nil
116117
default:
118+
var content []tables.Table
119+
117120
table := tables.NewTable()
121+
table.SetTitle("SECURITY GROUP")
122+
118123
if id := resp.Id; id != nil {
119124
table.AddRow("ID", *id)
120125
}
@@ -130,16 +135,80 @@ func outputResult(p *print.Printer, model *inputModel, resp *iaas.SecurityGroup)
130135
table.AddSeparator()
131136
}
132137

138+
if stateful := resp.Stateful; stateful != nil {
139+
table.AddRow("STATEFUL", *stateful)
140+
table.AddSeparator()
141+
}
142+
133143
if resp.Labels != nil && len(*resp.Labels) > 0 {
134-
labels := []string{}
144+
var labels []string
135145
for key, value := range *resp.Labels {
136146
labels = append(labels, fmt.Sprintf("%s: %s", key, value))
137147
}
138148
table.AddRow("LABELS", strings.Join(labels, "\n"))
139149
table.AddSeparator()
140150
}
141151

142-
if err := table.Display(p); err != nil {
152+
if resp.CreatedAt != nil {
153+
table.AddRow("CREATED AT", utils.ConvertTimePToDateTimeString(resp.CreatedAt))
154+
table.AddSeparator()
155+
}
156+
157+
if resp.UpdatedAt != nil {
158+
table.AddRow("UPDATED AT", utils.ConvertTimePToDateTimeString(resp.UpdatedAt))
159+
table.AddSeparator()
160+
}
161+
162+
content = append(content, table)
163+
164+
if resp.Rules != nil && len(*resp.Rules) > 0 {
165+
rulesTable := tables.NewTable()
166+
rulesTable.SetTitle("RULES")
167+
rulesTable.SetHeader(
168+
"ID",
169+
"DESCRIPTION",
170+
"PROTOCOL",
171+
"DIRECTION",
172+
"ETHER TYPE",
173+
"PORT RANGE",
174+
"IP RANGE",
175+
"ICMP PARAMETERS",
176+
"REMOTE SECURITY GROUP ID",
177+
)
178+
179+
for _, rule := range *resp.Rules {
180+
var portRange string
181+
if rule.PortRange != nil {
182+
portRange = fmt.Sprintf("%s-%s", utils.PtrString(rule.PortRange.Min), utils.PtrString(rule.PortRange.Max))
183+
}
184+
185+
var protocol string
186+
if rule.Protocol != nil {
187+
protocol = utils.PtrString(rule.Protocol.Name)
188+
}
189+
190+
var icmpParameter string
191+
if rule.IcmpParameters != nil {
192+
icmpParameter = fmt.Sprintf("type: %s, code: %s", utils.PtrString(rule.IcmpParameters.Type), utils.PtrString(rule.IcmpParameters.Code))
193+
}
194+
195+
rulesTable.AddRow(
196+
utils.PtrString(rule.Id),
197+
utils.PtrString(rule.Description),
198+
protocol,
199+
utils.PtrString(rule.Direction),
200+
utils.PtrString(rule.Ethertype),
201+
portRange,
202+
utils.PtrString(rule.IpRange),
203+
icmpParameter,
204+
utils.PtrString(rule.RemoteSecurityGroupId),
205+
)
206+
}
207+
208+
content = append(content, rulesTable)
209+
}
210+
211+
if err := tables.DisplayTables(p, content); err != nil {
143212
return fmt.Errorf("render table: %w", err)
144213
}
145214

internal/cmd/beta/security-group/list/list.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7+
"strings"
78

89
"github.com/goccy/go-yaml"
910
"github.com/spf13/cobra"
@@ -137,9 +138,24 @@ func outputResult(p *print.Printer, outputFormat string, items []iaas.SecurityGr
137138
return nil
138139
default:
139140
table := tables.NewTable()
140-
table.SetHeader("ID", "NAME", "STATEFUL")
141+
table.SetHeader("ID", "NAME", "STATEFUL", "DESCRIPTION", "LABELS")
141142
for _, item := range items {
142-
table.AddRow(utils.PtrString(item.Id), utils.PtrString(item.Name), utils.PtrString(item.Stateful))
143+
var labelsString string
144+
if item.Labels != nil {
145+
var labels []string
146+
for key, value := range *item.Labels {
147+
labels = append(labels, fmt.Sprintf("%s: %s", key, value))
148+
}
149+
labelsString = strings.Join(labels, ", ")
150+
}
151+
152+
table.AddRow(
153+
utils.PtrString(item.Id),
154+
utils.PtrString(item.Name),
155+
utils.PtrString(item.Stateful),
156+
utils.PtrString(item.Description),
157+
labelsString,
158+
)
143159
}
144160
err := table.Display(p)
145161
if err != nil {

internal/cmd/beta/security-group/rule/list/list.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"encoding/json"
66
"fmt"
77

8-
"github.com/goccy/go-yaml"
98
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
109
"github.com/stackitcloud/stackit-cli/internal/pkg/errors"
1110
"github.com/stackitcloud/stackit-cli/internal/pkg/examples"
@@ -16,9 +15,11 @@ import (
1615
"github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/client"
1716
iaasUtils "github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/utils"
1817
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"
19-
"github.com/stackitcloud/stackit-sdk-go/services/iaas"
18+
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
2019

20+
"github.com/goccy/go-yaml"
2121
"github.com/spf13/cobra"
22+
"github.com/stackitcloud/stackit-sdk-go/services/iaas"
2223
)
2324

2425
const (
@@ -166,7 +167,7 @@ func outputResult(p *print.Printer, outputFormat string, securityGroupRules []ia
166167
return nil
167168
default:
168169
table := tables.NewTable()
169-
table.SetHeader("ID", "ETHER TYPE", "DIRECTION", "PROTOCOL")
170+
table.SetHeader("ID", "ETHER TYPE", "DIRECTION", "PROTOCOL", "REMOTE SECURITY GROUP ID")
170171

171172
for _, securityGroupRule := range securityGroupRules {
172173
etherType := ""
@@ -181,7 +182,13 @@ func outputResult(p *print.Printer, outputFormat string, securityGroupRules []ia
181182
}
182183
}
183184

184-
table.AddRow(*securityGroupRule.Id, etherType, *securityGroupRule.Direction, protocolName)
185+
table.AddRow(
186+
utils.PtrString(securityGroupRule.Id),
187+
etherType,
188+
utils.PtrString(securityGroupRule.Direction),
189+
protocolName,
190+
utils.PtrString(securityGroupRule.RemoteSecurityGroupId),
191+
)
185192
table.AddSeparator()
186193
}
187194

internal/cmd/beta/server/describe/describe.go

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import (
66
"fmt"
77
"strings"
88

9-
"github.com/goccy/go-yaml"
10-
119
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
1210
"github.com/stackitcloud/stackit-cli/internal/pkg/errors"
1311
"github.com/stackitcloud/stackit-cli/internal/pkg/examples"
@@ -16,9 +14,10 @@ import (
1614
"github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/client"
1715
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"
1816
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
19-
"github.com/stackitcloud/stackit-sdk-go/services/iaas"
2017

18+
"github.com/goccy/go-yaml"
2119
"github.com/spf13/cobra"
20+
"github.com/stackitcloud/stackit-sdk-go/services/iaas"
2221
)
2322

2423
const (
@@ -138,8 +137,10 @@ func outputResult(p *print.Printer, model *inputModel, server *iaas.Server) erro
138137
table.AddSeparator()
139138
table.AddRow("AVAILABILITY ZONE", *server.AvailabilityZone)
140139
table.AddSeparator()
141-
table.AddRow("BOOT VOLUME", *server.BootVolume.Id)
142-
table.AddSeparator()
140+
if server.BootVolume != nil && server.BootVolume.Id != nil {
141+
table.AddRow("BOOT VOLUME", *server.BootVolume.Id)
142+
table.AddSeparator()
143+
}
143144
table.AddRow("POWER STATUS", *server.PowerStatus)
144145
table.AddSeparator()
145146

@@ -189,20 +190,52 @@ func outputResult(p *print.Printer, model *inputModel, server *iaas.Server) erro
189190
if server.Nics != nil && len(*server.Nics) > 0 {
190191
nicsTable := tables.NewTable()
191192
nicsTable.SetTitle("Attached Network Interfaces")
192-
nicsTable.SetHeader("ID", "NETWORK ID", "NETWORK NAME", "PUBLIC IP")
193+
nicsTable.SetHeader("ID", "NETWORK ID", "NETWORK NAME", "IPv4", "PUBLIC IP")
193194

194195
for _, nic := range *server.Nics {
195-
publicIp := ""
196-
if nic.PublicIp != nil {
197-
publicIp = *nic.PublicIp
198-
}
199-
nicsTable.AddRow(*nic.NicId, *nic.NetworkId, *nic.NetworkName, publicIp)
196+
nicsTable.AddRow(
197+
utils.PtrString(nic.NicId),
198+
utils.PtrString(nic.NetworkId),
199+
utils.PtrString(nic.NetworkName),
200+
utils.PtrString(nic.Ipv4),
201+
utils.PtrString(nic.PublicIp),
202+
)
200203
nicsTable.AddSeparator()
201204
}
202205

203206
content = append(content, nicsTable)
204207
}
205208

209+
if server.MaintenanceWindow != nil {
210+
maintenanceWindow := tables.NewTable()
211+
maintenanceWindow.SetTitle("Maintenance Window")
212+
213+
if server.MaintenanceWindow.Status != nil {
214+
maintenanceWindow.AddRow("STATUS", *server.MaintenanceWindow.Status)
215+
maintenanceWindow.AddSeparator()
216+
}
217+
if server.MaintenanceWindow.Details != nil {
218+
maintenanceWindow.AddRow("DETAILS", *server.MaintenanceWindow.Details)
219+
maintenanceWindow.AddSeparator()
220+
}
221+
if server.MaintenanceWindow.StartsAt != nil {
222+
maintenanceWindow.AddRow(
223+
"STARTS AT",
224+
utils.ConvertTimePToDateTimeString(server.MaintenanceWindow.StartsAt),
225+
)
226+
maintenanceWindow.AddSeparator()
227+
}
228+
if server.MaintenanceWindow.EndsAt != nil {
229+
maintenanceWindow.AddRow(
230+
"ENDS AT",
231+
utils.ConvertTimePToDateTimeString(server.MaintenanceWindow.EndsAt),
232+
)
233+
maintenanceWindow.AddSeparator()
234+
}
235+
236+
content = append(content, maintenanceWindow)
237+
}
238+
206239
err := tables.DisplayTables(p, content)
207240
if err != nil {
208241
return fmt.Errorf("render table: %w", err)

internal/cmd/beta/server/list/list.go

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"encoding/json"
66
"fmt"
77

8-
"github.com/goccy/go-yaml"
98
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
109
"github.com/stackitcloud/stackit-cli/internal/pkg/errors"
1110
"github.com/stackitcloud/stackit-cli/internal/pkg/examples"
@@ -15,9 +14,11 @@ import (
1514
"github.com/stackitcloud/stackit-cli/internal/pkg/projectname"
1615
"github.com/stackitcloud/stackit-cli/internal/pkg/services/iaas/client"
1716
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"
18-
"github.com/stackitcloud/stackit-sdk-go/services/iaas"
17+
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
1918

19+
"github.com/goccy/go-yaml"
2020
"github.com/spf13/cobra"
21+
"github.com/stackitcloud/stackit-sdk-go/services/iaas"
2122
)
2223

2324
const (
@@ -140,6 +141,7 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli
140141
if model.LabelSelector != nil {
141142
req = req.LabelSelector(*model.LabelSelector)
142143
}
144+
req = req.Details(true)
143145

144146
return req
145147
}
@@ -164,11 +166,36 @@ func outputResult(p *print.Printer, outputFormat string, servers []iaas.Server)
164166
return nil
165167
default:
166168
table := tables.NewTable()
167-
table.SetHeader("ID", "Name", "Status", "Availability Zones")
169+
table.SetHeader("ID", "Name", "Status", "Machine Type", "Availability Zones", "Nic IPv4", "Public IPs")
168170

169171
for i := range servers {
170172
server := servers[i]
171-
table.AddRow(*server.Id, *server.Name, *server.Status, *server.AvailabilityZone)
173+
174+
nicIPv4 := ""
175+
publicIPs := ""
176+
if server.Nics != nil && len(*server.Nics) > 0 {
177+
for i, nic := range *server.Nics {
178+
if nic.Ipv4 != nil || nic.PublicIp != nil {
179+
nicIPv4 += utils.PtrString(nic.Ipv4)
180+
publicIPs += utils.PtrString(nic.PublicIp)
181+
182+
if i != len(*server.Nics)-1 {
183+
publicIPs += "\n"
184+
nicIPv4 += "\n"
185+
}
186+
}
187+
}
188+
}
189+
190+
table.AddRow(
191+
utils.PtrString(server.Id),
192+
utils.PtrString(server.Name),
193+
utils.PtrString(server.Status),
194+
utils.PtrString(server.MachineType),
195+
utils.PtrString(server.AvailabilityZone),
196+
nicIPv4,
197+
publicIPs,
198+
)
172199
}
173200

174201
p.Outputln(table.Render())

internal/cmd/beta/server/list/list_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel {
5353
func fixtureRequest(mods ...func(request *iaas.ApiListServersRequest)) iaas.ApiListServersRequest {
5454
request := testClient.ListServers(testCtx, testProjectId)
5555
request = request.LabelSelector(testLabelSelector)
56+
request = request.Details(true)
5657
for _, mod := range mods {
5758
mod(&request)
5859
}

0 commit comments

Comments
 (0)