Skip to content

Commit

Permalink
Merge master
Browse files Browse the repository at this point in the history
  • Loading branch information
majst01 committed Jul 11, 2024
2 parents 131fdc6 + 178be81 commit dfe9cef
Show file tree
Hide file tree
Showing 9 changed files with 97 additions and 36 deletions.
5 changes: 5 additions & 0 deletions cmd/completion/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package completion

import (
"github.com/metal-stack/metal-go/api/client/network"
"github.com/metal-stack/metal-go/api/models"

"github.com/spf13/cobra"
)

Expand All @@ -28,3 +30,6 @@ func (c *Completion) NetworkDestinationPrefixesCompletion(cmd *cobra.Command, ar
}
return prefixes, cobra.ShellCompDirectiveNoFileComp
}
func (c *Completion) AddressFamilyCompletion(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return []string{models.V1NetworkImmutableAddressfamilyIPV4, models.V1NetworkImmutableAddressfamilyIPV6}, cobra.ShellCompDirectiveNoFileComp
}
35 changes: 19 additions & 16 deletions cmd/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,10 @@ func newNetworkCmd(c *config) *cobra.Command {
cmd.Flags().Int64P("vrf", "", 0, "vrf to filter [optional]")
cmd.Flags().StringSlice("prefixes", []string{}, "prefixes to filter, use it like: --prefixes prefix1,prefix2.")
cmd.Flags().StringSlice("destination-prefixes", []string{}, "destination prefixes to filter, use it like: --destination-prefixes prefix1,prefix2.")
cmd.Flags().String("addressfamily", "", "addressfamily to filter, either ipv4 or ipv6 [optional]")
genericcli.Must(cmd.RegisterFlagCompletionFunc("project", c.comp.ProjectListCompletion))
genericcli.Must(cmd.RegisterFlagCompletionFunc("partition", c.comp.PartitionListCompletion))
genericcli.Must(cmd.RegisterFlagCompletionFunc("addressfamily", c.comp.AddressFamilyCompletion))
},
UpdateCmdMutateFn: func(cmd *cobra.Command) {
cmd.Flags().String("name", "", "the name of the network [optional]")
Expand Down Expand Up @@ -192,6 +194,7 @@ func (c networkCmd) List() ([]*models.V1NetworkResponse, error) {
Prefixes: viper.GetStringSlice("prefixes"),
Destinationprefixes: viper.GetStringSlice("destination-prefixes"),
Parentnetworkid: viper.GetString("parent"),
Addressfamily: viper.GetString("addressfamily"),
}), nil)
if err != nil {
return nil, err
Expand Down Expand Up @@ -240,22 +243,22 @@ func (c networkCmd) Convert(r *models.V1NetworkResponse) (string, *models.V1Netw

func networkResponseToCreate(r *models.V1NetworkResponse) *models.V1NetworkCreateRequest {
return &models.V1NetworkCreateRequest{
Description: r.Description,
Destinationprefixes: r.Destinationprefixes,
ID: r.ID,
Labels: r.Labels,
Name: r.Name,
Nat: r.Nat,
Parentnetworkid: r.Parentnetworkid,
Partitionid: r.Partitionid,
Childprefixlength: r.Childprefixlength,
Prefixes: r.Prefixes,
Privatesuper: r.Privatesuper,
Projectid: r.Projectid,
Shared: r.Shared,
Underlay: r.Underlay,
Vrf: r.Vrf,
Vrfshared: r.Vrfshared,
Description: r.Description,
Destinationprefixes: r.Destinationprefixes,
ID: r.ID,
Labels: r.Labels,
Name: r.Name,
Nat: r.Nat,
Parentnetworkid: r.Parentnetworkid,
Partitionid: r.Partitionid,
Defaultchildprefixlength: r.Defaultchildprefixlength,
Prefixes: r.Prefixes,
Privatesuper: r.Privatesuper,
Projectid: r.Projectid,
Shared: r.Shared,
Underlay: r.Underlay,
Vrf: r.Vrf,
Vrfshared: r.Vrfshared,
}
}

Expand Down
26 changes: 21 additions & 5 deletions cmd/size.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,16 @@ func newSizeCmd(c *config) *cobra.Command {
},
}

listReservationsCmd.Flags().String("size-id", "", "the size-id to filter")
listReservationsCmd.Flags().String("project", "", "the project to filter")
listReservationsCmd.Flags().String("tenant", "", "the tenant to filter")
listReservationsCmd.Flags().String("partition", "", "the partition to filter")

genericcli.Must(listReservationsCmd.RegisterFlagCompletionFunc("size-id", c.comp.SizeListCompletion))
genericcli.Must(listReservationsCmd.RegisterFlagCompletionFunc("project", c.comp.ProjectListCompletion))
genericcli.Must(listReservationsCmd.RegisterFlagCompletionFunc("tenant", c.comp.TenantListCompletion))
genericcli.Must(listReservationsCmd.RegisterFlagCompletionFunc("partition", c.comp.PartitionListCompletion))

genericcli.AddSortFlag(listReservationsCmd, sorters.SizeReservationsSorter())

reservationsCmd.AddCommand(listReservationsCmd)
Expand Down Expand Up @@ -168,10 +178,11 @@ func sizeResponseToCreate(r *models.V1SizeResponse) *models.V1SizeCreateRequest
})
}
return &models.V1SizeCreateRequest{
Constraints: constraints,
Description: r.Description,
ID: r.ID,
Name: r.Name,
Constraints: constraints,
Description: r.Description,
ID: r.ID,
Name: r.Name,
Reservations: r.Reservations,
}
}

Expand All @@ -198,7 +209,12 @@ func sizeResponseToUpdate(r *models.V1SizeResponse) *models.V1SizeUpdateRequest
// non-generic command handling

func (c sizeCmd) listReverations() error {
resp, err := c.client.Size().ListSizeReservations(size.NewListSizeReservationsParams().WithBody(emptyBody), nil)
resp, err := c.client.Size().ListSizeReservations(size.NewListSizeReservationsParams().WithBody(&models.V1SizeReservationListRequest{
Projectid: viper.GetString("project"),
Sizeid: viper.GetString("size-id"),
Tenant: viper.GetString("tenant"),
Partitionid: viper.GetString("partition"),
}), nil)
if err != nil {
return err
}
Expand Down
30 changes: 25 additions & 5 deletions cmd/size_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,18 @@ var (
Description: "for testing",
Partitionids: []string{*partition1.ID},
Projectid: pointer.Pointer(project1.Meta.ID),
Labels: map[string]string{
"size.metal-stack.io/reserved-by": "admin",
},
},
{
Amount: pointer.Pointer(int32(2)),
Description: "for testing",
Partitionids: []string{*partition2.ID},
Projectid: pointer.Pointer(project2.Meta.ID),
Labels: map[string]string{
"size.metal-stack.io/reserved-by": "admin",
},
},
},
Labels: map[string]string{
Expand Down Expand Up @@ -290,6 +296,7 @@ ID NAME DESCRIPTION RESERVATIONS CPU RANGE MEMORY RANGE STORAGE RA
Type: size1.Constraints[0].Type,
},
}
s.Reservations = nil
mock.On("CreateSize", testcommon.MatchIgnoreContext(t, size.NewCreateSizeParams().WithBody(sizeResponseToCreate(size1))), nil).Return(&size.CreateSizeCreated{
Payload: size1,
}, nil)
Expand Down Expand Up @@ -376,6 +383,9 @@ func Test_SizeReservationsCmd_MultiResult(t *testing.T) {
Sizeid: pointer.Pointer("size-1"),
Tenant: pointer.Pointer("tenant-1"),
Usedreservations: pointer.Pointer(int32(5)),
Labels: map[string]string{
"size.metal-stack.io/reserved-by": "admin",
},
},
{
Partitionid: pointer.Pointer("b"),
Expand All @@ -386,18 +396,28 @@ func Test_SizeReservationsCmd_MultiResult(t *testing.T) {
Sizeid: pointer.Pointer("size-2"),
Tenant: pointer.Pointer("tenant-2"),
Usedreservations: pointer.Pointer(int32(1)),
Labels: map[string]string{
"size.metal-stack.io/reserved-by": "admin",
},
},
}

tests := []*test[[]*models.V1SizeReservationResponse]{
{
name: "reservation list",
cmd: func(want []*models.V1SizeReservationResponse) []string {
return []string{"size", "reservations", "list"}
args := []string{"size", "reservations", "list", "--partition", "partition-1", "--project", "project-1", "--size-id", "size-1", "--tenant", "tenant-1"}
assertExhaustiveArgs(t, args, "sort-by")
return args
},
mocks: &client.MetalMockFns{
Size: func(mock *mock.Mock) {
mock.On("ListSizeReservations", testcommon.MatchIgnoreContext(t, size.NewListSizeReservationsParams().WithBody(emptyBody)), nil).Return(&size.ListSizeReservationsOK{Payload: reservations}, nil)
mock.On("ListSizeReservations", testcommon.MatchIgnoreContext(t, size.NewListSizeReservationsParams().WithBody(&models.V1SizeReservationListRequest{
Projectid: "project-1",
Sizeid: "size-1",
Tenant: "tenant-1",
Partitionid: "partition-1",
})), nil).Return(&size.ListSizeReservationsOK{Payload: reservations}, nil)
},
},
want: reservations,
Expand All @@ -407,9 +427,9 @@ a size-1 tenant-1 1 project-1 5/5 10
b size-2 tenant-2 2 project-2 1/3 1
`),
wantWideTable: pointer.Pointer(`
PARTITION SIZE TENANT PROJECT PROJECT NAME USED/AMOUNT PROJECT ALLOCATIONS
a size-1 tenant-1 1 project-1 5/5 10
b size-2 tenant-2 2 project-2 1/3 1
PARTITION SIZE TENANT PROJECT PROJECT NAME USED/AMOUNT PROJECT ALLOCATIONS LABELS
a size-1 tenant-1 1 project-1 5/5 10 size.metal-stack.io/reserved-by=admin
b size-2 tenant-2 2 project-2 1/3 1 size.metal-stack.io/reserved-by=admin
`),
wantMarkdown: pointer.Pointer(`
| PARTITION | SIZE | TENANT | PROJECT | PROJECT NAME | USED/AMOUNT | PROJECT ALLOCATIONS |
Expand Down
16 changes: 14 additions & 2 deletions cmd/tableprinters/size.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,18 +69,30 @@ func (t *TablePrinter) SizeReservationTable(data []*models.V1SizeReservationResp
rows [][]string
)

if wide {
header = append(header, "Labels")
}

for _, d := range data {
d := d

rows = append(rows, []string{
row := []string{
pointer.SafeDeref(d.Partitionid),
pointer.SafeDeref(d.Sizeid),
pointer.SafeDeref(d.Tenant),
pointer.SafeDeref(d.Projectid),
pointer.SafeDeref(d.Projectname),
fmt.Sprintf("%d/%d", pointer.SafeDeref(d.Usedreservations), pointer.SafeDeref(d.Reservations)),
strconv.Itoa(int(pointer.SafeDeref(d.Projectallocations))),
})
}

if wide {
labels := genericcli.MapToLabels(d.Labels)
sort.Strings(labels)
row = append(row, strings.Join(labels, "\n"))
}

rows = append(rows, row)
}

return header, rows, nil
Expand Down
1 change: 1 addition & 0 deletions docs/metalctl_network_list.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ metalctl network list [flags]
### Options

```
--addressfamily string addressfamily to filter, either ipv4 or ipv6 [optional]
--destination-prefixes strings destination prefixes to filter, use it like: --destination-prefixes prefix1,prefix2.
-h, --help help for list
--id string ID to filter [optional]
Expand Down
8 changes: 6 additions & 2 deletions docs/metalctl_size_reservations_list.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,12 @@ metalctl size reservations list [flags]
### Options

```
-h, --help help for list
--sort-by strings sort by (comma separated) column(s), sort direction can be changed by appending :asc or :desc behind the column identifier. possible values: partition|project|size|tenant
-h, --help help for list
--partition string the partition to filter
--project string the project to filter
--size-id string the size-id to filter
--sort-by strings sort by (comma separated) column(s), sort direction can be changed by appending :asc or :desc behind the column identifier. possible values: partition|project|size|tenant
--tenant string the tenant to filter
```

### Options inherited from parent commands
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ require (
github.com/go-openapi/strfmt v0.23.0
github.com/google/go-cmp v0.6.0
github.com/google/uuid v1.6.0
github.com/metal-stack/metal-go v0.32.2-0.20240708113740-de4ff9d667c2
github.com/metal-stack/metal-lib v0.17.0
github.com/metal-stack/metal-go v0.32.2-0.20240711103636-2b8da1b20985
github.com/metal-stack/metal-lib v0.17.1
github.com/metal-stack/updater v1.2.2
github.com/metal-stack/v v1.0.3
github.com/olekukonko/tablewriter v0.0.6-0.20230925090304-df64c4bbad77
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -235,10 +235,10 @@ github.com/mdlayher/sdnotify v1.0.0 h1:Ma9XeLVN/l0qpyx1tNeMSeTjCPH6NtuD6/N9XdTlQ
github.com/mdlayher/sdnotify v1.0.0/go.mod h1:HQUmpM4XgYkhDLtd+Uad8ZFK1T9D5+pNxnXQjCeJlGE=
github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos=
github.com/mdlayher/socket v0.5.1/go.mod h1:TjPLHI1UgwEv5J1B5q0zTZq12A/6H7nKmtTanQE37IQ=
github.com/metal-stack/metal-go v0.32.2-0.20240708113740-de4ff9d667c2 h1:EHp1tyIFj6L+VWjq1o87VR7D5Gsj1pH9fgw1ihEu+pA=
github.com/metal-stack/metal-go v0.32.2-0.20240708113740-de4ff9d667c2/go.mod h1:3MJTYCS4YJz8D8oteTKhjpaAKNMMjMKYDrIy9awHGtQ=
github.com/metal-stack/metal-lib v0.17.0 h1:0fCRUtYweJ5wbUwiEalFGiHkEz0mZwTWQUIIo3Npzkw=
github.com/metal-stack/metal-lib v0.17.0/go.mod h1:nyNGI4DZFOcWbSoq2Y6V3SHpFxuXBIqYBZHTb6cy//s=
github.com/metal-stack/metal-go v0.32.2-0.20240711103636-2b8da1b20985 h1:pUAez+Jc8XqJkaxBb6OPZeDECrvx8M6N89jgW7FjtYY=
github.com/metal-stack/metal-go v0.32.2-0.20240711103636-2b8da1b20985/go.mod h1:3MJTYCS4YJz8D8oteTKhjpaAKNMMjMKYDrIy9awHGtQ=
github.com/metal-stack/metal-lib v0.17.1 h1:JLa4wJ62dgxtY9UOLF+QDk10/i/W5vhzrv8RsundDUY=
github.com/metal-stack/metal-lib v0.17.1/go.mod h1:nyNGI4DZFOcWbSoq2Y6V3SHpFxuXBIqYBZHTb6cy//s=
github.com/metal-stack/security v0.8.0 h1:tVaSDB9m5clwYrnLyaXfPy7mQlJTnmeoHscG+RUy/xo=
github.com/metal-stack/security v0.8.0/go.mod h1:7GAcQb+pOgflW30ohJygxpqc3i0dQ2ahGJK1CU5tqa0=
github.com/metal-stack/updater v1.2.2 h1:gnUrnQgfT20QFMDtFBY89opKoBAkdeI/8T2iwMHNdxs=
Expand Down

0 comments on commit dfe9cef

Please sign in to comment.