package cli import ( "github.com/spf13/cobra" ) func SnapshotCmd() *cobra.Command { cmd := &cobra.Command{ Use: "snapshot", Short: "Manage snapshots", Long: "Commands for listing, removing, and querying snapshots", } cmd.AddCommand(snapshotListCmd()) cmd.AddCommand(snapshotRmCmd()) cmd.AddCommand(snapshotLatestCmd()) return cmd } func snapshotListCmd() *cobra.Command { var ( bucket string prefix string limit int ) cmd := &cobra.Command{ Use: "list", Short: "List snapshots", Long: "List all snapshots in the bucket, sorted by timestamp", RunE: func(cmd *cobra.Command, args []string) error { panic("unimplemented") }, } cmd.Flags().StringVar(&bucket, "bucket", "", "S3 bucket name") cmd.Flags().StringVar(&prefix, "prefix", "", "S3 prefix") cmd.Flags().IntVar(&limit, "limit", 10, "Maximum number of snapshots to list") cmd.MarkFlagRequired("bucket") return cmd } func snapshotRmCmd() *cobra.Command { var ( bucket string prefix string snapshot string ) cmd := &cobra.Command{ Use: "rm", Short: "Remove a snapshot", Long: "Remove a snapshot and optionally its associated blobs", RunE: func(cmd *cobra.Command, args []string) error { panic("unimplemented") }, } cmd.Flags().StringVar(&bucket, "bucket", "", "S3 bucket name") cmd.Flags().StringVar(&prefix, "prefix", "", "S3 prefix") cmd.Flags().StringVar(&snapshot, "snapshot", "", "Snapshot ID to remove") cmd.MarkFlagRequired("bucket") cmd.MarkFlagRequired("snapshot") return cmd } func snapshotLatestCmd() *cobra.Command { var ( bucket string prefix string ) cmd := &cobra.Command{ Use: "latest", Short: "Get the latest snapshot ID", Long: "Display the ID of the most recent snapshot", RunE: func(cmd *cobra.Command, args []string) error { panic("unimplemented") }, } cmd.Flags().StringVar(&bucket, "bucket", "", "S3 bucket name") cmd.Flags().StringVar(&prefix, "prefix", "", "S3 prefix") cmd.MarkFlagRequired("bucket") return cmd }