-
Notifications
You must be signed in to change notification settings - Fork 3.1k
/
retry.go
59 lines (52 loc) · 2.05 KB
/
retry.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package commands
import (
"log"
"github.com/argoproj/pkg/errors"
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/fields"
"github.com/argoproj/argo/cmd/argo/commands/client"
workflowpkg "github.com/argoproj/argo/pkg/apiclient/workflow"
)
type retryOps struct {
nodeFieldSelector string // --node-field-selector
restartSuccessful bool // --restart-successful
}
func NewRetryCommand() *cobra.Command {
var (
cliSubmitOpts cliSubmitOpts
retryOps retryOps
)
var command = &cobra.Command{
Use: "retry [WORKFLOW...]",
Short: "retry zero or more workflows",
Run: func(cmd *cobra.Command, args []string) {
ctx, apiClient := client.NewAPIClient()
serviceClient := apiClient.NewWorkflowServiceClient()
namespace := client.Namespace()
selector, err := fields.ParseSelector(retryOps.nodeFieldSelector)
if err != nil {
log.Fatalf("Unable to parse node field selector '%s': %s", retryOps.nodeFieldSelector, err)
}
for _, name := range args {
wf, err := serviceClient.RetryWorkflow(ctx, &workflowpkg.WorkflowRetryRequest{
Name: name,
Namespace: namespace,
RestartSuccesful: retryOps.restartSuccessful,
NodeFieldSelector: selector.String(),
})
if err != nil {
errors.CheckError(err)
return
}
printWorkflow(wf, cliSubmitOpts.output, DefaultStatus)
waitOrWatch([]string{name}, cliSubmitOpts)
}
},
}
command.Flags().StringVarP(&cliSubmitOpts.output, "output", "o", "", "Output format. One of: name|json|yaml|wide")
command.Flags().BoolVarP(&cliSubmitOpts.wait, "wait", "w", false, "wait for the workflow to complete")
command.Flags().BoolVar(&cliSubmitOpts.watch, "watch", false, "watch the workflow until it completes")
command.Flags().BoolVar(&retryOps.restartSuccessful, "restart-successful", false, "indicates to restart succesful nodes matching the --node-field-selector")
command.Flags().StringVar(&retryOps.nodeFieldSelector, "node-field-selector", "", "selector of nodes to reset, eg: --node-field-selector inputs.paramaters.myparam.value=abc")
return command
}