Skip to content

Commit bdf28fc

Browse files
authored
Fix/network area and network missing label selector (#627)
* Onboard: Labels for network-area Signed-off-by: Alexander Dahmen <alexander.dahmen@inovex.de> * Onboard: Labels for network Signed-off-by: Alexander Dahmen <alexander.dahmen@inovex.de> * generate-docs Signed-off-by: Alexander Dahmen <alexander.dahmen@inovex.de> --------- Signed-off-by: Alexander Dahmen <alexander.dahmen@inovex.de>
1 parent bda75fc commit bdf28fc

20 files changed

+232
-12
lines changed

docs/stackit_beta_network-area_create.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ stackit beta network-area create [flags]
2121
2222
Create a network area with name "network-area-3" in organization with ID "xxx" with network ranges, transfer network and additional options
2323
$ stackit beta network-area create --name network-area-3 --organization-id xxx --network-ranges "1.1.1.0/24,192.123.1.0/24" --transfer-network "192.160.0.0/24" --default-prefix-length 25 --max-prefix-length 29 --min-prefix-length 24
24+
25+
Create a network area with name "network-area-1" in organization with ID "xxx" with network ranges and a transfer network and labels "key=value,key1=value1"
26+
$ stackit beta network-area create --name network-area-1 --organization-id xxx --network-ranges "1.1.1.0/24,192.123.1.0/24" --transfer-network "192.160.0.0/24" --labels key=value,key1=value1
2427
```
2528

2629
### Options
@@ -29,6 +32,7 @@ stackit beta network-area create [flags]
2932
--default-prefix-length int The default prefix length for networks in the network area
3033
--dns-name-servers strings List of DNS name server IPs
3134
-h, --help Help for "stackit beta network-area create"
35+
--labels stringToString Labels are key-value string pairs which can be attached to a network-area. E.g. '--labels key1=value1,key2=value2,...' (default [])
3236
--max-prefix-length int The maximum prefix length for networks in the network area
3337
--min-prefix-length int The minimum prefix length for networks in the network area
3438
-n, --name string Network area name

docs/stackit_beta_network-area_list.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,16 @@ stackit beta network-area list [flags]
2121
2222
Lists up to 10 network areas of organization "xxx"
2323
$ stackit beta network-area list --organization-id xxx --limit 10
24+
25+
Lists all network areas of organization "xxx" which contains the label yyy
26+
$ stackit beta network-area list --organization-id xxx --label-selector yyy
2427
```
2528

2629
### Options
2730

2831
```
2932
-h, --help Help for "stackit beta network-area list"
33+
--label-selector string Filter by label
3034
--limit int Maximum number of entries to list
3135
--organization-id string Organization ID
3236
```

docs/stackit_beta_network-area_update.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ stackit beta network-area update AREA_ID [flags]
2323
--default-prefix-length int The default prefix length for networks in the network area
2424
--dns-name-servers strings List of DNS name server IPs
2525
-h, --help Help for "stackit beta network-area update"
26+
--labels stringToString Labels are key-value string pairs which can be attached to a network-area. E.g. '--labels key1=value1,key2=value2,...' (default [])
2627
--max-prefix-length int The maximum prefix length for networks in the network area
2728
--min-prefix-length int The minimum prefix length for networks in the network area
2829
-n, --name string Network area name

docs/stackit_beta_network_create.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ stackit beta network create [flags]
2222
Create a network with name "network-1" and no gateway
2323
$ stackit beta network create --name network-1 --no-ipv4-gateway
2424
25+
Create a network with name "network-1" and labels "key=value,key1=value1"
26+
$ stackit beta network create --name network-1 --labels key=value,key1=value1
27+
2528
Create an IPv4 network with name "network-1" with DNS name servers, a prefix and a gateway
2629
$ stackit beta network create --name network-1 --ipv4-dns-name-servers "1.1.1.1,8.8.8.8,9.9.9.9" --ipv4-prefix "10.1.2.0/24" --ipv4-gateway "10.1.2.3"
2730
@@ -41,6 +44,7 @@ stackit beta network create [flags]
4144
--ipv6-gateway string The IPv6 gateway of a network. If not specified, the first IP of the network will be assigned as the gateway
4245
--ipv6-prefix string The IPv6 prefix of the network (CIDR)
4346
--ipv6-prefix-length int The prefix length of the IPv6 network
47+
--labels stringToString Labels are key-value string pairs which can be attached to a network. E.g. '--labels key1=value1,key2=value2,...' (default [])
4448
-n, --name string Network name
4549
--no-ipv4-gateway If set to true, the network doesn't have an IPv4 gateway
4650
--no-ipv6-gateway If set to true, the network doesn't have an IPv6 gateway

docs/stackit_beta_network_list.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,17 @@ stackit beta network list [flags]
2121
2222
Lists up to 10 networks
2323
$ stackit beta network list --limit 10
24+
25+
Lists all networks which contains the label xxx
26+
$ tackit beta network list --label-selector xxx
2427
```
2528

2629
### Options
2730

2831
```
29-
-h, --help Help for "stackit beta network list"
30-
--limit int Maximum number of entries to list
32+
-h, --help Help for "stackit beta network list"
33+
--label-selector string Filter by label
34+
--limit int Maximum number of entries to list
3135
```
3236

3337
### Options inherited from parent commands

docs/stackit_beta_network_update.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ stackit beta network update NETWORK_ID [flags]
3434
--ipv4-gateway string The IPv4 gateway of a network. If not specified, the first IP of the network will be assigned as the gateway
3535
--ipv6-dns-name-servers strings List of DNS name servers for IPv6. Nameservers cannot be defined for routed networks
3636
--ipv6-gateway string The IPv6 gateway of a network. If not specified, the first IP of the network will be assigned as the gateway
37+
--labels stringToString Labels are key-value string pairs which can be attached to a network. E.g. '--labels key1=value1,key2=value2,...' (default [])
3738
-n, --name string Network name
3839
--no-ipv4-gateway If set to true, the network doesn't have an IPv4 gateway
3940
--no-ipv6-gateway If set to true, the network doesn't have an IPv6 gateway

internal/cmd/beta/network-area/create/create.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const (
2929
defaultPrefixLengthFlag = "default-prefix-length"
3030
maxPrefixLengthFlag = "max-prefix-length"
3131
minPrefixLengthFlag = "min-prefix-length"
32+
labelFlag = "labels"
3233
)
3334

3435
type inputModel struct {
@@ -41,6 +42,7 @@ type inputModel struct {
4142
DefaultPrefixLength *int64
4243
MaxPrefixLength *int64
4344
MinPrefixLength *int64
45+
Labels *map[string]string
4446
}
4547

4648
func NewCmd(p *print.Printer) *cobra.Command {
@@ -62,6 +64,10 @@ func NewCmd(p *print.Printer) *cobra.Command {
6264
`Create a network area with name "network-area-3" in organization with ID "xxx" with network ranges, transfer network and additional options`,
6365
`$ stackit beta network-area create --name network-area-3 --organization-id xxx --network-ranges "1.1.1.0/24,192.123.1.0/24" --transfer-network "192.160.0.0/24" --default-prefix-length 25 --max-prefix-length 29 --min-prefix-length 24`,
6466
),
67+
examples.NewExample(
68+
`Create a network area with name "network-area-1" in organization with ID "xxx" with network ranges and a transfer network and labels "key=value,key1=value1"`,
69+
`$ stackit beta network-area create --name network-area-1 --organization-id xxx --network-ranges "1.1.1.0/24,192.123.1.0/24" --transfer-network "192.160.0.0/24" --labels key=value,key1=value1`,
70+
),
6571
),
6672
RunE: func(cmd *cobra.Command, _ []string) error {
6773
ctx := context.Background()
@@ -121,6 +127,7 @@ func configureFlags(cmd *cobra.Command) {
121127
cmd.Flags().Int64(defaultPrefixLengthFlag, 0, "The default prefix length for networks in the network area")
122128
cmd.Flags().Int64(maxPrefixLengthFlag, 0, "The maximum prefix length for networks in the network area")
123129
cmd.Flags().Int64(minPrefixLengthFlag, 0, "The minimum prefix length for networks in the network area")
130+
cmd.Flags().StringToString(labelFlag, nil, "Labels are key-value string pairs which can be attached to a network-area. E.g. '--labels key1=value1,key2=value2,...'")
124131

125132
err := flags.MarkFlagsRequired(cmd, nameFlag, organizationIdFlag, networkRangesFlag, transferNetworkFlag)
126133
cobra.CheckErr(err)
@@ -139,6 +146,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command) (*inputModel, error) {
139146
DefaultPrefixLength: flags.FlagToInt64Pointer(p, cmd, defaultPrefixLengthFlag),
140147
MaxPrefixLength: flags.FlagToInt64Pointer(p, cmd, maxPrefixLengthFlag),
141148
MinPrefixLength: flags.FlagToInt64Pointer(p, cmd, minPrefixLengthFlag),
149+
Labels: flags.FlagToStringToStringPointer(p, cmd, labelFlag),
142150
}
143151

144152
if p.IsVerbosityDebug() {
@@ -163,8 +171,18 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APICli
163171
}
164172
}
165173

174+
var labelsMap *map[string]interface{}
175+
if model.Labels != nil && len(*model.Labels) > 0 {
176+
// convert map[string]string to map[string]interface{}
177+
labelsMap = utils.Ptr(map[string]interface{}{})
178+
for k, v := range *model.Labels {
179+
(*labelsMap)[k] = v
180+
}
181+
}
182+
166183
payload := iaas.CreateNetworkAreaPayload{
167-
Name: model.Name,
184+
Name: model.Name,
185+
Labels: labelsMap,
168186
AddressFamily: &iaas.CreateAreaAddressFamily{
169187
Ipv4: &iaas.CreateAreaIPv4{
170188
DefaultNameservers: model.DnsNameServers,

internal/cmd/beta/network-area/create/create_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]st
3131
defaultPrefixLengthFlag: "24",
3232
maxPrefixLengthFlag: "24",
3333
minPrefixLengthFlag: "24",
34+
labelFlag: "key=value",
3435
}
3536
for _, mod := range mods {
3637
mod(flagValues)
@@ -51,6 +52,9 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel {
5152
DefaultPrefixLength: utils.Ptr(int64(24)),
5253
MaxPrefixLength: utils.Ptr(int64(24)),
5354
MinPrefixLength: utils.Ptr(int64(24)),
55+
Labels: utils.Ptr(map[string]string{
56+
"key": "value",
57+
}),
5458
}
5559
for _, mod := range mods {
5660
mod(model)
@@ -70,6 +74,9 @@ func fixtureRequest(mods ...func(request *iaas.ApiCreateNetworkAreaRequest)) iaa
7074
func fixturePayload(mods ...func(payload *iaas.CreateNetworkAreaPayload)) iaas.CreateNetworkAreaPayload {
7175
payload := iaas.CreateNetworkAreaPayload{
7276
Name: utils.Ptr("example-network-area-name"),
77+
Labels: utils.Ptr(map[string]interface{}{
78+
"key": "value",
79+
}),
7380
AddressFamily: &iaas.CreateAreaAddressFamily{
7481
Ipv4: &iaas.CreateAreaIPv4{
7582
DefaultNameservers: utils.Ptr([]string{"1.1.1.0", "1.1.2.0"}),
@@ -171,6 +178,16 @@ func TestParseInput(t *testing.T) {
171178
}),
172179
isValid: false,
173180
},
181+
{
182+
description: "labels missing",
183+
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
184+
delete(flagValues, labelFlag)
185+
}),
186+
expectedModel: fixtureInputModel(func(model *inputModel) {
187+
model.Labels = nil
188+
}),
189+
isValid: true,
190+
},
174191
}
175192

176193
for _, tt := range tests {

internal/cmd/beta/network-area/describe/describe.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,14 @@ func outputResult(p *print.Printer, outputFormat string, networkArea *iaas.Netwo
202202
table.AddSeparator()
203203
}
204204
}
205+
if networkArea.Labels != nil && len(*networkArea.Labels) > 0 {
206+
var labels []string
207+
for key, value := range *networkArea.Labels {
208+
labels = append(labels, fmt.Sprintf("%s: %s", key, value))
209+
}
210+
table.AddRow("LABELS", strings.Join(labels, "\n"))
211+
table.AddSeparator()
212+
}
205213
if len(attachedProjects) > 0 {
206214
table.AddRow("ATTACHED PROJECTS IDS", strings.Join(attachedProjects, "\n"))
207215
table.AddSeparator()

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,14 @@ import (
2424
const (
2525
limitFlag = "limit"
2626
organizationIdFlag = "organization-id"
27+
labelSelectorFlag = "label-selector"
2728
)
2829

2930
type inputModel struct {
3031
*globalflags.GlobalFlagModel
3132
Limit *int64
3233
OrganizationId *string
34+
LabelSelector *string
3335
}
3436

3537
func NewCmd(p *print.Printer) *cobra.Command {
@@ -51,6 +53,10 @@ func NewCmd(p *print.Printer) *cobra.Command {
5153
`Lists up to 10 network areas of organization "xxx"`,
5254
"$ stackit beta network-area list --organization-id xxx --limit 10",
5355
),
56+
examples.NewExample(
57+
`Lists all network areas of organization "xxx" which contains the label yyy`,
58+
"$ stackit beta network-area list --organization-id xxx --label-selector yyy",
59+
),
5460
),
5561
RunE: func(cmd *cobra.Command, _ []string) error {
5662
ctx := context.Background()
@@ -106,6 +112,7 @@ func NewCmd(p *print.Printer) *cobra.Command {
106112
func configureFlags(cmd *cobra.Command) {
107113
cmd.Flags().Int64(limitFlag, 0, "Maximum number of entries to list")
108114
cmd.Flags().Var(flags.UUIDFlag(), organizationIdFlag, "Organization ID")
115+
cmd.Flags().String(labelSelectorFlag, "", "Filter by label")
109116

110117
err := flags.MarkFlagsRequired(cmd, organizationIdFlag)
111118
cobra.CheckErr(err)
@@ -125,6 +132,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command) (*inputModel, error) {
125132
GlobalFlagModel: globalFlags,
126133
Limit: limit,
127134
OrganizationId: flags.FlagToStringPointer(p, cmd, organizationIdFlag),
135+
LabelSelector: flags.FlagToStringPointer(p, cmd, labelSelectorFlag),
128136
}
129137

130138
if p.IsVerbosityDebug() {
@@ -140,7 +148,11 @@ func parseInput(p *print.Printer, cmd *cobra.Command) (*inputModel, error) {
140148
}
141149

142150
func buildRequest(ctx context.Context, model *inputModel, apiClient *iaas.APIClient) iaas.ApiListNetworkAreasRequest {
143-
return apiClient.ListNetworkAreas(ctx, *model.OrganizationId)
151+
req := apiClient.ListNetworkAreas(ctx, *model.OrganizationId)
152+
if model.LabelSelector != nil {
153+
req = req.LabelSelector(*model.LabelSelector)
154+
}
155+
return req
144156
}
145157

146158
func outputResult(p *print.Printer, outputFormat string, networkAreas []iaas.NetworkArea) error {

0 commit comments

Comments
 (0)