Skip to content

Commit

Permalink
chore(cli): Migrate argo cron to use API client. Closes argoproj#2114
Browse files Browse the repository at this point in the history
  • Loading branch information
alexec committed Feb 24, 2020
1 parent 80b9b59 commit f69a6c5
Show file tree
Hide file tree
Showing 21 changed files with 766 additions and 369 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ api/argo-server/swagger.json: $(HOME)/go/bin/swagger $(SWAGGER_FILES)
# pre-push

.PHONY: pre-commit
pre-commit: test lint codegen manifests start pf-bg smoke test-api test-cli
pre-commit: test codegen manifests lint start pf-bg smoke test-api test-cli

# release

Expand Down
71 changes: 70 additions & 1 deletion api/argo-server/swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"info": {
"description": "Argo Server",
"title": "Argo Server",
"version": "issue2285"
"version": "latest"
},
"paths": {
"/api/v1/archived-workflows": {
Expand Down Expand Up @@ -234,6 +234,38 @@
}
}
},
"/api/v1/cron-workflows/{namespace}/lint": {
"post": {
"tags": [
"CronWorkflowService"
],
"operationId": "LintCronWorkflow",
"parameters": [
{
"type": "string",
"name": "namespace",
"in": "path",
"required": true
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/cronworkflowLintCronWorkflowRequest"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/v1alpha1CronWorkflow"
}
}
}
}
},
"/api/v1/cron-workflows/{namespace}/{name}": {
"get": {
"tags": [
Expand Down Expand Up @@ -1313,6 +1345,17 @@
"cronworkflowCronWorkflowDeletedResponse": {
"type": "object"
},
"cronworkflowLintCronWorkflowRequest": {
"type": "object",
"properties": {
"cronWorkflow": {
"$ref": "#/definitions/v1alpha1CronWorkflow"
},
"namespace": {
"type": "string"
}
}
},
"cronworkflowUpdateCronWorkflowRequest": {
"type": "object",
"properties": {
Expand Down Expand Up @@ -5516,5 +5559,31 @@
}
}
}
},
"x-stream-definitions": {
"workflowLogEntry": {
"properties": {
"error": {
"$ref": "#/definitions/runtimeStreamError"
},
"result": {
"$ref": "#/definitions/workflowLogEntry"
}
},
"title": "Stream result of workflowLogEntry",
"type": "object"
},
"workflowWorkflowWatchEvent": {
"properties": {
"error": {
"$ref": "#/definitions/runtimeStreamError"
},
"result": {
"$ref": "#/definitions/workflowWorkflowWatchEvent"
}
},
"title": "Stream result of workflowWorkflowWatchEvent",
"type": "object"
}
}
}
91 changes: 0 additions & 91 deletions cmd/argo/commands/cron/common.go

This file was deleted.

27 changes: 12 additions & 15 deletions cmd/argo/commands/cron/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ import (
"log"
"os"

"github.com/argoproj/argo/workflow/templateresolution"

"github.com/argoproj/pkg/json"
"github.com/spf13/cobra"

"github.com/argoproj/argo/cmd/argo/commands/client"
cronworkflowpkg "github.com/argoproj/argo/pkg/apiclient/cronworkflow"

wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1"
"github.com/argoproj/argo/workflow/common"
"github.com/argoproj/argo/workflow/util"
"github.com/argoproj/argo/workflow/validate"
)

type cliCreateOpts struct {
Expand Down Expand Up @@ -48,7 +48,10 @@ func NewCreateCommand() *cobra.Command {
}

func CreateCronWorkflows(filePaths []string, cliOpts *cliCreateOpts, submitOpts *cronWorkflowSubmitOpts) {
defaultCronWfClient := InitCronWorkflowClient()

ctx, apiClient := client.NewAPIClient()
serviceClient := apiClient.NewCronWorkflowServiceClient()
namespace := client.Namespace()

fileContents, err := util.ReadManifest(filePaths...)
if err != nil {
Expand All @@ -67,21 +70,15 @@ func CreateCronWorkflows(filePaths []string, cliOpts *cliCreateOpts, submitOpts
}

for _, cronWf := range cronWorkflows {
wftmplGetter := templateresolution.WrapWorkflowTemplateInterface(wftmplClient)
applySubmitOpts(&cronWf, submitOpts)
err := validate.ValidateCronWorkflow(wftmplGetter, &cronWf)
if err != nil {
log.Fatalf("Failed to validate cron workflow: %v", err)
}
cronWfClient := defaultCronWfClient
if cronWf.Namespace != "" {
cronWfClient = InitCronWorkflowClient(cronWf.Namespace)
}
created, err := cronWfClient.Create(&cronWf)
created, err := serviceClient.CreateCronWorkflow(ctx, &cronworkflowpkg.CreateCronWorkflowRequest{
Namespace: namespace,
CronWorkflow: &cronWf,
})
if err != nil {
log.Fatalf("Failed to create workflow template: %v", err)
}
printCronWorkflowTemplate(created, cliOpts.output)
printCronWorkflowTemplate(created)
}
}

Expand Down
53 changes: 19 additions & 34 deletions cmd/argo/commands/cron/delete.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
package cron

import (
"fmt"
"log"
"os"

"github.com/argoproj/pkg/errors"
"github.com/spf13/cobra"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

"github.com/argoproj/argo/pkg/client/clientset/versioned/typed/workflow/v1alpha1"
"github.com/argoproj/argo/cmd/argo/commands/client"
cronworkflowpkg "github.com/argoproj/argo/pkg/apiclient/cronworkflow"
)

// NewDeleteCommand returns a new instance of an `argo delete` command
Expand All @@ -18,42 +15,30 @@ func NewDeleteCommand() *cobra.Command {
)

var command = &cobra.Command{
Use: "delete CRON_WORKFLOW",
Use: "delete [CRON_WORKFLOW... | --all]",
Short: "delete a cron workflow",
Run: func(cmd *cobra.Command, args []string) {
cronWfClient := InitCronWorkflowClient()
ctx, apiClient := client.NewAPIClient()
serviceClient := apiClient.NewCronWorkflowServiceClient()
if all {
deleteCronWorkflows(cronWfClient, metav1.ListOptions{})
} else {
if len(args) == 0 {
cmd.HelpFunc()(cmd, args)
os.Exit(1)
}
for _, wftmplName := range args {
deleteCronWorkflow(cronWfClient, wftmplName)
cronWfList, err := serviceClient.ListCronWorkflows(ctx, &cronworkflowpkg.ListCronWorkflowsRequest{
Namespace: client.Namespace(),
})
errors.CheckError(err)
for _, cronWf := range cronWfList.Items {
args = append(args, cronWf.Name)
}
}
for _, name := range args {
_, err := serviceClient.DeleteCronWorkflow(ctx, &cronworkflowpkg.DeleteCronWorkflowRequest{
Name: name,
Namespace: client.Namespace(),
})
errors.CheckError(err)
}
},
}

command.Flags().BoolVar(&all, "all", false, "Delete all workflow templates")
return command
}

func deleteCronWorkflow(cronWfClient v1alpha1.CronWorkflowInterface, cronWf string) {
err := cronWfClient.Delete(cronWf, &metav1.DeleteOptions{})
if err != nil {
log.Fatal(err)
}
fmt.Printf("CronWorkflow '%s' deleted\n", cronWf)
}

func deleteCronWorkflows(cronWfClient v1alpha1.CronWorkflowInterface, options metav1.ListOptions) {
cronWfList, err := cronWfClient.List(options)
if err != nil {
log.Fatal(err)
}
for _, cronWf := range cronWfList.Items {
deleteCronWorkflow(cronWfClient, cronWf.ObjectMeta.Name)
}
}
27 changes: 17 additions & 10 deletions cmd/argo/commands/cron/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ import (
"os"
"strings"

"github.com/argoproj/pkg/errors"
"github.com/argoproj/pkg/humanize"
"github.com/spf13/cobra"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/yaml"

"github.com/argoproj/argo/cmd/argo/commands/client"
"github.com/argoproj/argo/pkg/apiclient/cronworkflow"
wfv1 "github.com/argoproj/argo/pkg/apis/workflow/v1alpha1"
)

Expand All @@ -21,20 +23,25 @@ func NewGetCommand() *cobra.Command {
)

var command = &cobra.Command{
Use: "get CRON_WORKFLOW",
Use: "get CRON_WORKFLOW...",
Short: "display details about a cron workflow",
Run: func(cmd *cobra.Command, args []string) {
if len(args) == 0 {
cmd.HelpFunc()(cmd, args)
os.Exit(1)
}
cronWfClient := InitCronWorkflowClient()

ctx, apiClient := client.NewAPIClient()
serviceClient := apiClient.NewCronWorkflowServiceClient()
namespace := client.Namespace()

for _, arg := range args {
wftmpl, err := cronWfClient.Get(arg, metav1.GetOptions{})
if err != nil {
log.Fatal(err)
}
printCronWorkflow(wftmpl, output)
cronWf, err := serviceClient.GetCronWorkflow(ctx, &cronworkflow.GetCronWorkflowRequest{
Name: arg,
Namespace: namespace,
})
errors.CheckError(err)
printCronWorkflow(cronWf, output)
}
},
}
Expand All @@ -54,13 +61,13 @@ func printCronWorkflow(wf *wfv1.CronWorkflow, outFmt string) {
outBytes, _ := yaml.Marshal(wf)
fmt.Print(string(outBytes))
case "wide", "":
printCronWorkflowTemplate(wf, outFmt)
printCronWorkflowTemplate(wf)
default:
log.Fatalf("Unknown output format: %s", outFmt)
}
}

func printCronWorkflowTemplate(wf *wfv1.CronWorkflow, outFmt string) {
func printCronWorkflowTemplate(wf *wfv1.CronWorkflow) {
const fmtStr = "%-30s %v\n"
fmt.Printf(fmtStr, "Name:", wf.ObjectMeta.Name)
fmt.Printf(fmtStr, "Namespace:", wf.ObjectMeta.Namespace)
Expand Down
Loading

0 comments on commit f69a6c5

Please sign in to comment.