Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .codegraph/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# CodeGraph data files — local to each machine, not for committing.
# Ignore everything in .codegraph/ except this file itself, so transient
# files (the database, daemon.pid, sockets, logs) never show up in git.
*
!.gitignore
9 changes: 9 additions & 0 deletions cmd/admin/v2/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@ func AddCmds(cmd *cobra.Command, c *config.Config) {
Hidden: true,
}

adminCmd.AddCommand(newAdminFilesystemLayoutCmd(c))
adminCmd.AddCommand(newAdminImageUsageCmd(c))
adminCmd.AddCommand(newAdminMachineCmd(c))
adminCmd.AddCommand(newAdminNetworkCmd(c))
adminCmd.AddCommand(newAdminPartitionCmd(c))
adminCmd.AddCommand(newAdminSizeImageConstraintCmd(c))
adminCmd.AddCommand(newAdminSizeReservationCmd(c))
adminCmd.AddCommand(newAdminTokenCreateCmd(c))
adminCmd.AddCommand(newAdminVPNCmd(c))
adminCmd.AddCommand(newAuditCmd(c))
adminCmd.AddCommand(newComponentCmd(c))
adminCmd.AddCommand(newImageCmd(c))
Expand Down
101 changes: 101 additions & 0 deletions cmd/admin/v2/filesystem.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package v2

import (
"fmt"

adminv2 "github.com/metal-stack/api/go/metalstack/admin/v2"
apiv2 "github.com/metal-stack/api/go/metalstack/api/v2"
"github.com/metal-stack/cli/cmd/config"
"github.com/metal-stack/metal-lib/pkg/genericcli"
"github.com/metal-stack/metal-lib/pkg/genericcli/printers"
"github.com/spf13/cobra"
)

type adminFilesystemLayout struct {
c *config.Config
}

func newAdminFilesystemLayoutCmd(c *config.Config) *cobra.Command {
w := &adminFilesystemLayout{
c: c,
}

cmdsConfig := &genericcli.CmdsConfig[any, *adminv2.FilesystemServiceUpdateRequest, *apiv2.FilesystemLayout]{
BinaryName: config.BinaryName,
GenericCLI: genericcli.NewGenericCLI(w).WithFS(c.Fs),
Singular: "filesystem-layout",
Plural: "filesystem-layouts",
Description: "manage filesystem layouts",
DescribePrinter: func() printers.Printer { return c.DescribePrinter },
ListPrinter: func() printers.Printer { return c.ListPrinter },
OnlyCmds: genericcli.OnlyCmds(genericcli.DescribeCmd, genericcli.ListCmd, genericcli.DeleteCmd),
}

return genericcli.NewCmds(cmdsConfig)
}

func (c *adminFilesystemLayout) Get(id string) (*apiv2.FilesystemLayout, error) {
ctx, cancel := c.c.NewRequestContext()
defer cancel()

req := &apiv2.FilesystemServiceGetRequest{Id: id}

resp, err := c.c.Client.Apiv2().Filesystem().Get(ctx, req)
if err != nil {
return nil, fmt.Errorf("failed to get filesystem layout: %w", err)
}

return resp.FilesystemLayout, nil
}

func (c *adminFilesystemLayout) List() ([]*apiv2.FilesystemLayout, error) {
ctx, cancel := c.c.NewRequestContext()
defer cancel()

req := &apiv2.FilesystemServiceListRequest{}

resp, err := c.c.Client.Apiv2().Filesystem().List(ctx, req)
if err != nil {
return nil, fmt.Errorf("failed to list filesystem layouts: %w", err)
}

return resp.FilesystemLayouts, nil
}

func (c *adminFilesystemLayout) Create(rq any) (*apiv2.FilesystemLayout, error) {
panic("unimplemented")
}

func (c *adminFilesystemLayout) Delete(id string) (*apiv2.FilesystemLayout, error) {
ctx, cancel := c.c.NewRequestContext()
defer cancel()

resp, err := c.c.Client.Adminv2().Filesystem().Delete(ctx, &adminv2.FilesystemServiceDeleteRequest{Id: id})
if err != nil {
return nil, fmt.Errorf("failed to delete filesystem layout: %w", err)
}

return resp.FilesystemLayout, nil
}

func (c *adminFilesystemLayout) Convert(r *apiv2.FilesystemLayout) (string, any, *adminv2.FilesystemServiceUpdateRequest, error) {
return r.Id, nil, &adminv2.FilesystemServiceUpdateRequest{
Id: r.Id,
Name: r.Name,
Description: r.Description,
Disks: r.Disks,
Constraints: r.Constraints,
}, nil
}

func (c *adminFilesystemLayout) Update(rq *adminv2.FilesystemServiceUpdateRequest) (*apiv2.FilesystemLayout, error) {
ctx, cancel := c.c.NewRequestContext()
defer cancel()

resp, err := c.c.Client.Adminv2().Filesystem().Update(ctx, rq)
if err != nil {
return nil, fmt.Errorf("failed to update filesystem layout: %w", err)
}

return resp.FilesystemLayout, nil
}
54 changes: 54 additions & 0 deletions cmd/admin/v2/image_usage.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package v2

import (
"fmt"

adminv2 "github.com/metal-stack/api/go/metalstack/admin/v2"
apiv2 "github.com/metal-stack/api/go/metalstack/api/v2"
"github.com/metal-stack/cli/cmd/config"
"github.com/metal-stack/metal-lib/pkg/pointer"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)

type adminImageUsage struct {
c *config.Config
}

func newAdminImageUsageCmd(c *config.Config) *cobra.Command {
w := &adminImageUsage{
c: c,
}

usageCmd := &cobra.Command{
Use: "image-usage",
Short: "show image usage information",
RunE: func(cmd *cobra.Command, args []string) error {
return w.imageUsage()
},
}

usageCmd.Flags().String("id", "", "image id to query usage for")

return usageCmd
}

func (c *adminImageUsage) imageUsage() error {
ctx, cancel := c.c.NewRequestContext()
defer cancel()

req := &adminv2.ImageServiceUsageRequest{
Query: &apiv2.ImageQuery{},
}

if viper.IsSet("id") {
req.Query.Id = pointer.PointerOrNil(viper.GetString("id"))
}

resp, err := c.c.Client.Adminv2().Image().Usage(ctx, req)
if err != nil {
return fmt.Errorf("failed to get image usage: %w", err)
}

return c.c.ListPrinter.Print(resp.ImageUsage)
}
Loading
Loading