Skip to content
Open
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
21 changes: 10 additions & 11 deletions cmd/yoke/cmd_atc.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,18 @@ type ATCParams struct {
Debug string
}

func GetAtcParams(settings GlobalSettings, args []string) ATCParams {
var CmdATC = NewCommand("atc", []string{}, func(ctx context.Context) (*flag.FlagSet, CmdRunner) {
flagset := flag.NewFlagSet("atc", flag.ExitOnError)

params := ATCParams{GlobalSettings: settings}

RegisterGlobalFlags(flagset, &params.GlobalSettings)

params := ATCParams{}
flagset.StringVar(&params.Debug, "debug-file", "", "debug file")

flagset.Parse(args)

return params
}
return flagset, func(ctx context.Context, settings GlobalSettings, args []string) error {
params.GlobalSettings = settings
RegisterGlobalFlags(flagset, &params.GlobalSettings)
flagset.Parse(args)
ATC(ctx, params)
return nil
}
})

func ATC(ctx context.Context, params ATCParams) error {
client, err := k8s.NewClientFromConfigFlags(params.Kube)
Expand Down
54 changes: 24 additions & 30 deletions cmd/yoke/cmd_blackbox.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,45 +32,39 @@ type BlackboxParams struct {
//go:embed cmd_blackbox_help.txt
var blackboxHelp string

func init() {
blackboxHelp = strings.TrimSpace(internal.Colorize(blackboxHelp))
}

func GetBlackBoxParams(settings GlobalSettings, args []string) (*BlackboxParams, error) {
var CmdBlackbox = NewCommand("blackbox", []string{"inspect"}, func(ctx context.Context) (*flag.FlagSet, CmdRunner) {
params := BlackboxParams{}
flagset := flag.NewFlagSet("blackbox", flag.ExitOnError)

flagset.IntVar(&params.Context, "context", 4, "number of lines of context in diff (ignored if not comparing revisions)")
flagset.StringVar(&params.Namespace, "namespace", "", "namespace of release to inspect")
flagset.Usage = func() {
blackboxHelp = strings.TrimSpace(internal.Colorize(blackboxHelp))
fmt.Fprintln(flagset.Output(), blackboxHelp)
flagset.PrintDefaults()
}

params := BlackboxParams{GlobalSettings: settings}

RegisterGlobalFlags(flagset, &params.GlobalSettings)
flagset.IntVar(&params.Context, "context", 4, "number of lines of context in diff (ignored if not comparing revisions)")
flagset.StringVar(&params.Namespace, "namespace", "", "namespace of release to inspect")
flagset.Parse(args)

params.Release = flagset.Arg(0)

if revision := flagset.Arg(1); revision != "" {
revisionID, err := strconv.Atoi(flagset.Arg(1))
if err != nil {
return nil, fmt.Errorf("revision must be an integer ID: %w", err)
return flagset, func(ctx context.Context, settings GlobalSettings, args []string) error {
params.GlobalSettings = settings
RegisterGlobalFlags(flagset, &params.GlobalSettings)
flagset.Parse(args)
params.Release = flagset.Arg(0)
if revision := flagset.Arg(1); revision != "" {
revisionID, err := strconv.Atoi(flagset.Arg(1))
if err != nil {
return fmt.Errorf("revision must be an integer ID: %w", err)
}
params.RevisionID = revisionID
}
params.RevisionID = revisionID
}

if revision := flagset.Arg(2); revision != "" {
revisionID, err := strconv.Atoi(flagset.Arg(2))
if err != nil {
return nil, fmt.Errorf("revision to diff must be an integer ID: %w", err)
if revision := flagset.Arg(2); revision != "" {
revisionID, err := strconv.Atoi(flagset.Arg(2))
if err != nil {
return fmt.Errorf("revision to diff must be an integer ID: %w", err)
}
params.DiffRevisionID = revisionID
}
params.DiffRevisionID = revisionID
return Blackbox(ctx, params)
}

return &params, nil
}
})

func Blackbox(ctx context.Context, params BlackboxParams) error {
client, err := k8s.NewClientFromConfigFlags(params.Kube)
Expand Down
72 changes: 31 additions & 41 deletions cmd/yoke/cmd_descent.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,64 +16,54 @@ import (
//go:embed cmd_descent_help.txt
var descentHelp string

func init() {
descentHelp = strings.TrimSpace(internal.Colorize(descentHelp))
}

type DescentParams struct {
GlobalSettings
yoke.DescentParams
}

func GetDescentfParams(settings GlobalSettings, args []string) (*DescentParams, error) {
var CmdDescent = NewCommand("descent", []string{"down", "restore"}, func(ctx context.Context) (*flag.FlagSet, CmdRunner) {
params := DescentParams{}
var removeAll bool
flagset := flag.NewFlagSet("descent", flag.ExitOnError)

flagset.Usage = func() {
fmt.Fprintln(flagset.Output(), descentHelp)
flagset.PrintDefaults()
}

params := DescentParams{
GlobalSettings: settings,
}

RegisterGlobalFlags(flagset, &params.GlobalSettings)

flagset.StringVar(&params.Namespace, "namespace", "", "release target namespace, defaults to context namespace if not provided")
flagset.DurationVar(&params.Wait, "wait", 0, "time to wait for release to become ready")
flagset.DurationVar(&params.Poll, "poll", 5*time.Second, "interval to poll resource state at. Used with --wait")
flagset.BoolVar(&params.Lock, "lock", false, "if enabled does locks release before deploying revision (only prevents other locked runs from running).")

var removeAll bool
flagset.BoolVar(&removeAll, "remove-all", false, "enables pruning of crds and namespaces owned by the release if a new revision would orphan them.\nDestructive and dangerous use with caution.")
flagset.BoolVar(&params.RemoveCRDs, "remove-crds", false, "enables pruning of crds owned by the release.\nDestructive and dangerous use with caution.")
flagset.BoolVar(&params.RemoveNamespaces, "remove-namespaces", false, "enables pruning of namespaces owned by the release.\nDestructive and dangerous use with caution.")

flagset.Parse(args)

if removeAll {
params.RemoveCRDs = true
params.RemoveNamespaces = true
}

params.Release = flagset.Arg(0)
if params.Release == "" {
return nil, fmt.Errorf("release is required as first positional arg")
}

if len(flagset.Args()) < 2 {
return nil, fmt.Errorf("revision is required as second positional arg")
descentHelp = strings.TrimSpace(internal.Colorize(descentHelp))
flagset.Usage = func() {
fmt.Fprintln(flagset.Output(), descentHelp)
flagset.PrintDefaults()
}

revisionID, err := strconv.Atoi(flagset.Arg(1))
if err != nil {
return nil, fmt.Errorf("revision must be an integer ID: %w", err)
return flagset, func(ctx context.Context, settings GlobalSettings, args []string) error {
params.GlobalSettings = settings
RegisterGlobalFlags(flagset, &params.GlobalSettings)
flagset.Parse(args)
if removeAll {
params.RemoveCRDs = true
params.RemoveNamespaces = true
}
params.Release = flagset.Arg(0)
if params.Release == "" {
return fmt.Errorf("release is required as first positional arg")
}

if len(flagset.Args()) < 2 {
return fmt.Errorf("revision is required as second positional arg")
}

revisionID, err := strconv.Atoi(flagset.Arg(1))
if err != nil {
return fmt.Errorf("revision must be an integer ID: %w", err)
}
params.RevisionID = revisionID
return Descent(ctx, params)
}

params.RevisionID = revisionID

return &params, nil
}
})

func Descent(ctx context.Context, params DescentParams) error {
commander, err := yoke.FromKubeConfigFlags(params.Kube)
Expand Down
1 change: 1 addition & 0 deletions cmd/yoke/cmd_help.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ atc
sign
verify
version
complete

!cyan Global Flags:
51 changes: 22 additions & 29 deletions cmd/yoke/cmd_mayday.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,43 +19,36 @@ type MaydayParams struct {
//go:embed cmd_mayday_help.txt
var maydayHelp string

func init() {
maydayHelp = strings.TrimSpace(internal.Colorize(maydayHelp))
}

func GetMaydayParams(settings GlobalSettings, args []string) (*MaydayParams, error) {
var CmdMayday = NewCommand("mayday", []string{"delete"}, func(ctx context.Context) (*flag.FlagSet, CmdRunner) {
flagset := flag.NewFlagSet("mayday", flag.ExitOnError)

flagset.Usage = func() {
fmt.Fprintln(flagset.Output(), maydayHelp)
flagset.PrintDefaults()
}

params := MaydayParams{GlobalSettings: settings}

RegisterGlobalFlags(flagset, &params.GlobalSettings)

flagset.StringVar(&params.Namespace, "namespace", "", "release target namespace, defaults to context namespace if not provided")

var removeAll bool
params := MaydayParams{}
flagset.StringVar(&params.Namespace, "namespace", "", "release target namespace, defaults to context namespace if not provided")
flagset.BoolVar(&removeAll, "remove-all", false, "deletes crds and namespaces owned by the release. Destructive and dangerous use with caution.")
flagset.BoolVar(&params.RemoveCRDs, "remove-crds", false, "deletes crds owned by the release. Destructive and dangerous use with caution.")
flagset.BoolVar(&params.RemoveNamespaces, "remove-namespaces", false, "deletes namespaces owned by the release. Destructive and dangerous use with caution.")

flagset.Parse(args)

if removeAll {
params.RemoveCRDs = true
params.RemoveNamespaces = true
flagset.Usage = func() {
maydayHelp = strings.TrimSpace(internal.Colorize(maydayHelp))
fmt.Fprintln(flagset.Output(), maydayHelp)
flagset.PrintDefaults()
}

params.Release = flagset.Arg(0)
if params.Release == "" {
return nil, fmt.Errorf("release is required")
return flagset, func(ctx context.Context, settings GlobalSettings, args []string) error {
params.GlobalSettings = settings
RegisterGlobalFlags(flagset, &params.GlobalSettings)

flagset.Parse(args)
if removeAll {
params.RemoveCRDs = true
params.RemoveNamespaces = true
}
params.Release = flagset.Arg(0)
if params.Release == "" {
return fmt.Errorf("release is required")
}
return Mayday(ctx, params)
}

return &params, nil
}
})

func Mayday(ctx context.Context, params MaydayParams) error {
commander, err := yoke.FromKubeConfigFlags(params.Kube)
Expand Down
Loading