package storage import ( "fmt" "git.yoresee.cc/nightstar/ry/internal/output" "git.yoresee.cc/nightstar/ry/internal/provider" "github.com/spf13/cobra" ) func Cmd(prov *provider.Provider, out **output.Printer) *cobra.Command { storageCmd := &cobra.Command{ Use: "storage", Short: "Manage object storage", } storageListCmd := &cobra.Command{ Use: "list", Short: "List storage instances", RunE: func(cmd *cobra.Command, args []string) error { svc := (*prov).Storage() if svc == nil { return fmt.Errorf("storage management not supported by current provider") } instances, err := svc.List(cmd.Context()) if err != nil { return err } return (*out).Print(instances) }, } bucketCmd := &cobra.Command{ Use: "bucket ", Short: "Manage buckets", Args: cobra.ExactArgs(1), } bucketListCmd := &cobra.Command{ Use: "list", Short: "List buckets", RunE: func(cmd *cobra.Command, args []string) error { svc := (*prov).Storage() if svc == nil { return fmt.Errorf("storage management not supported") } buckets, err := svc.BucketList(cmd.Context(), args[0]) if err != nil { return err } return (*out).Print(buckets) }, } bucketCreateCmd := &cobra.Command{ Use: "create ", Short: "Create a bucket", Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { svc := (*prov).Storage() if svc == nil { return fmt.Errorf("storage management not supported") } if err := svc.BucketCreate(cmd.Context(), args[0], args[1]); err != nil { return err } fmt.Printf("Bucket %q created\n", args[1]) return nil }, } bucketCmd.AddCommand(bucketListCmd) bucketCmd.AddCommand(bucketCreateCmd) storageCmd.AddCommand(storageListCmd) storageCmd.AddCommand(bucketCmd) return storageCmd }