Skip to content

Commit d07e899

Browse files
committed
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 table MaintenanceWindow with values: - status - details - startsAt - endsAt - `beta server list` - add values: - machineType - nicIPv4 - publicIPs
1 parent 388f37f commit d07e899

File tree

7 files changed

+180
-17
lines changed

7 files changed

+180
-17
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: 71 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7-
"strings"
8-
97
"github.com/goccy/go-yaml"
108
"github.com/spf13/cobra"
119
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
@@ -17,6 +15,7 @@ import (
1715
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"
1816
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
1917
"github.com/stackitcloud/stackit-sdk-go/services/iaas"
18+
"strings"
2019
)
2120

2221
type inputModel struct {
@@ -114,7 +113,11 @@ func outputResult(p *print.Printer, model *inputModel, resp *iaas.SecurityGroup)
114113

115114
return nil
116115
default:
116+
var content []tables.Table
117+
117118
table := tables.NewTable()
119+
table.SetTitle("SECURITY GROUP")
120+
118121
if id := resp.Id; id != nil {
119122
table.AddRow("ID", *id)
120123
}
@@ -130,16 +133,80 @@ func outputResult(p *print.Printer, model *inputModel, resp *iaas.SecurityGroup)
130133
table.AddSeparator()
131134
}
132135

136+
if stateful := resp.Stateful; stateful != nil {
137+
table.AddRow("STATEFUL", *stateful)
138+
table.AddSeparator()
139+
}
140+
133141
if resp.Labels != nil && len(*resp.Labels) > 0 {
134-
labels := []string{}
142+
var labels []string
135143
for key, value := range *resp.Labels {
136144
labels = append(labels, fmt.Sprintf("%s: %s", key, value))
137145
}
138146
table.AddRow("LABELS", strings.Join(labels, "\n"))
139147
table.AddSeparator()
140148
}
141149

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

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

Lines changed: 19 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,25 @@ 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+
144+
labelsString := ""
145+
if item.Labels != nil {
146+
var labels []string
147+
for key, value := range *item.Labels {
148+
labels = append(labels, fmt.Sprintf("%s: %s", key, value))
149+
}
150+
labelsString = strings.Join(labels, ", ")
151+
}
152+
153+
table.AddRow(
154+
utils.PtrString(item.Id),
155+
utils.PtrString(item.Name),
156+
utils.PtrString(item.Stateful),
157+
utils.PtrString(item.Description),
158+
labelsString,
159+
)
143160
}
144161
err := table.Display(p)
145162
if err != nil {

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7+
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
78

89
"github.com/goccy/go-yaml"
910
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
@@ -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: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7-
"strings"
8-
97
"github.com/goccy/go-yaml"
10-
118
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
129
"github.com/stackitcloud/stackit-cli/internal/pkg/errors"
1310
"github.com/stackitcloud/stackit-cli/internal/pkg/examples"
@@ -17,6 +14,7 @@ import (
1714
"github.com/stackitcloud/stackit-cli/internal/pkg/tables"
1815
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
1916
"github.com/stackitcloud/stackit-sdk-go/services/iaas"
17+
"strings"
2018

2119
"github.com/spf13/cobra"
2220
)
@@ -138,8 +136,10 @@ func outputResult(p *print.Printer, model *inputModel, server *iaas.Server) erro
138136
table.AddSeparator()
139137
table.AddRow("AVAILABILITY ZONE", *server.AvailabilityZone)
140138
table.AddSeparator()
141-
table.AddRow("BOOT VOLUME", *server.BootVolume.Id)
142-
table.AddSeparator()
139+
if server.BootVolume != nil && server.BootVolume.Id != nil {
140+
table.AddRow("BOOT VOLUME", *server.BootVolume.Id)
141+
table.AddSeparator()
142+
}
143143
table.AddRow("POWER STATUS", *server.PowerStatus)
144144
table.AddSeparator()
145145

@@ -203,6 +203,36 @@ func outputResult(p *print.Printer, model *inputModel, server *iaas.Server) erro
203203
content = append(content, nicsTable)
204204
}
205205

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

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

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7+
"github.com/stackitcloud/stackit-cli/internal/pkg/utils"
78

89
"github.com/goccy/go-yaml"
910
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
@@ -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 Types", "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/pkg/utils/utils.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"net/url"
66
"strings"
7+
"time"
78

89
"github.com/google/uuid"
910
"github.com/spf13/cobra"
@@ -79,3 +80,12 @@ func ValidateURLDomain(value string) error {
7980
}
8081
return nil
8182
}
83+
84+
// ConvertTimePToDateTimeString converts a time.Time pointer to a string represented as "2006-01-02 15:04:05"
85+
// This function will return an empty string if the input is nil
86+
func ConvertTimePToDateTimeString(t *time.Time) string {
87+
if t == nil {
88+
return ""
89+
}
90+
return (*t).Format(time.DateTime)
91+
}

0 commit comments

Comments
 (0)