From 5c7408639d262bf1f683e62998147b16388f99cf Mon Sep 17 00:00:00 2001 From: Danny Qiu Date: Mon, 29 Oct 2018 23:06:32 -0400 Subject: [PATCH 1/6] Remove old binaries from before trigger controller refactor --- script/binary | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/script/binary b/script/binary index 2e37b4c34..708d7010e 100755 --- a/script/binary +++ b/script/binary @@ -23,9 +23,7 @@ BUILD_FLAGS=(-ldflags="-w -X github.com/kubeless/kubeless/pkg/version.Version=${ # Get rid of existing binary echo "Removing Old Kubeless binaries" rm -f ${GOPATH%%:*}/bin/kubeless -rm -f ${GOPATH%%:*}/bin/kafka-trigger-controller -rm -f ${GOPATH%%:*}/bin/kubeless-controller-manager -rm -f ${GOPATH%%:*}/bin/nats-trigger-controller +rm -f ${GOPATH%%:*}/bin/function-controller echo "Build Kubeless Components binaries" # Build binary From 30070eadd6fa22ef29a4707a0dca6a31f49e72dd Mon Sep 17 00:00:00 2001 From: Danny Qiu Date: Mon, 29 Oct 2018 23:06:52 -0400 Subject: [PATCH 2/6] Recompile kubeless.yaml when kubeless-non-rbac.jsonnet changes --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 8c74d5e35..66cb9cb9f 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ binary-cross: all-yaml: kubeless.yaml kubeless-non-rbac.yaml kubeless-openshift.yaml kafka-zookeeper.yaml -kubeless.yaml: kubeless.jsonnet +kubeless.yaml: kubeless.jsonnet kubeless-non-rbac.jsonnet kubeless-non-rbac.yaml: kubeless-non-rbac.jsonnet From d87903c04b7e42b28813d4c5347d39accbc907b8 Mon Sep 17 00:00:00 2001 From: Danny Qiu Date: Mon, 29 Oct 2018 23:12:03 -0400 Subject: [PATCH 3/6] Put time in RFC3339 format --- cmd/kubeless/function/call.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/kubeless/function/call.go b/cmd/kubeless/function/call.go index 1e6f30051..bbeda0a7b 100644 --- a/cmd/kubeless/function/call.go +++ b/cmd/kubeless/function/call.go @@ -97,7 +97,7 @@ var callCmd = &cobra.Command{ logrus.Fatalf("Unable to generate ID %v", err) } req.SetHeader("event-id", eventID) - req.SetHeader("event-time", timestamp.String()) + req.SetHeader("event-time", timestamp.Format(time.RFC3339)) req.SetHeader("event-namespace", "cli.kubeless.io") res, err := req.Do().Raw() if err != nil { From 57721f589c1107937a133a922580c6788fd08cbd Mon Sep 17 00:00:00 2001 From: Danny Qiu Date: Mon, 29 Oct 2018 23:12:20 -0400 Subject: [PATCH 4/6] Fix typos in documentation --- cmd/kubeless/trigger/kafka/create.go | 2 +- cmd/kubeless/trigger/kafka/update.go | 2 +- cmd/kubeless/trigger/nats/create.go | 2 +- cmd/kubeless/trigger/nats/update.go | 2 +- docs/advanced-function-deployment.md | 3 +++ pkg/controller/function_controller.go | 2 +- pkg/utils/kubelessutil.go | 2 ++ 7 files changed, 10 insertions(+), 5 deletions(-) diff --git a/cmd/kubeless/trigger/kafka/create.go b/cmd/kubeless/trigger/kafka/create.go index 035c3c534..6860555f4 100644 --- a/cmd/kubeless/trigger/kafka/create.go +++ b/cmd/kubeless/trigger/kafka/create.go @@ -113,7 +113,7 @@ var createCmd = &cobra.Command{ func init() { createCmd.Flags().StringP("namespace", "n", "", "Specify namespace for the kafka trigger") createCmd.Flags().StringP("trigger-topic", "", "", "Specify topic to listen to in Kafka broker") - createCmd.Flags().StringP("function-selector", "", "", "Selector (label query) to select function on (e.g. -function-selector key1=value1,key2=value2)") + createCmd.Flags().StringP("function-selector", "", "", "Selector (label query) to select function on (e.g. --function-selector key1=value1,key2=value2)") createCmd.MarkFlagRequired("trigger-topic") createCmd.MarkFlagRequired("function-selector") createCmd.Flags().Bool("dryrun", false, "Output JSON manifest of the function without creating it") diff --git a/cmd/kubeless/trigger/kafka/update.go b/cmd/kubeless/trigger/kafka/update.go index 24e047c3f..959a0e064 100644 --- a/cmd/kubeless/trigger/kafka/update.go +++ b/cmd/kubeless/trigger/kafka/update.go @@ -107,7 +107,7 @@ var updateCmd = &cobra.Command{ func init() { updateCmd.Flags().StringP("namespace", "n", "", "Specify namespace for the function") updateCmd.Flags().StringP("trigger-topic", "", "", "Specify topic to listen to in Kafka broker") - updateCmd.Flags().StringP("function-selector", "", "", "Selector (label query) to select function on (e.g. -function-selector key1=value1,key2=value2)") + updateCmd.Flags().StringP("function-selector", "", "", "Selector (label query) to select function on (e.g. --function-selector key1=value1,key2=value2)") updateCmd.Flags().Bool("dryrun", false, "Output JSON manifest of the function without creating it") updateCmd.Flags().StringP("output", "o", "yaml", "Output format") } diff --git a/cmd/kubeless/trigger/nats/create.go b/cmd/kubeless/trigger/nats/create.go index 7004915b1..e07ea5151 100644 --- a/cmd/kubeless/trigger/nats/create.go +++ b/cmd/kubeless/trigger/nats/create.go @@ -114,7 +114,7 @@ var createCmd = &cobra.Command{ func init() { createCmd.Flags().StringP("namespace", "n", "", "Specify namespace for the NATS trigger") createCmd.Flags().StringP("trigger-topic", "", "", "Specify topic to listen to in NATS") - createCmd.Flags().StringP("function-selector", "", "", "Selector (label query) to select function on (e.g. -function-selector key1=value1,key2=value2)") + createCmd.Flags().StringP("function-selector", "", "", "Selector (label query) to select function on (e.g. --function-selector key1=value1,key2=value2)") createCmd.MarkFlagRequired("trigger-topic") createCmd.MarkFlagRequired("function-selector") createCmd.Flags().Bool("dryrun", false, "Output JSON manifest of the function without creating it") diff --git a/cmd/kubeless/trigger/nats/update.go b/cmd/kubeless/trigger/nats/update.go index 08719a586..befe8be54 100644 --- a/cmd/kubeless/trigger/nats/update.go +++ b/cmd/kubeless/trigger/nats/update.go @@ -107,7 +107,7 @@ var updateCmd = &cobra.Command{ func init() { updateCmd.Flags().StringP("namespace", "n", "", "Specify namespace for the NATS trigger") updateCmd.Flags().StringP("trigger-topic", "", "", "Specify topic to listen to in NATS") - updateCmd.Flags().StringP("function-selector", "", "", "Selector (label query) to select function on (e.g. -function-selector key1=value1,key2=value2)") + updateCmd.Flags().StringP("function-selector", "", "", "Selector (label query) to select function on (e.g. --function-selector key1=value1,key2=value2)") updateCmd.Flags().Bool("dryrun", false, "Output JSON manifest of the function without creating it") updateCmd.Flags().StringP("output", "o", "yaml", "Output format") } diff --git a/docs/advanced-function-deployment.md b/docs/advanced-function-deployment.md index 80806c941..30edf9690 100644 --- a/docs/advanced-function-deployment.md +++ b/docs/advanced-function-deployment.md @@ -8,6 +8,9 @@ kind: Function metadata: name: get-python namespace: default + label: + created-by: kubeless + function: get-python spec: runtime: python2.7 timeout: "180" diff --git a/pkg/controller/function_controller.go b/pkg/controller/function_controller.go index b756716eb..dc3fe2a09 100644 --- a/pkg/controller/function_controller.go +++ b/pkg/controller/function_controller.go @@ -230,7 +230,7 @@ func (c *FunctionController) processItem(key string) error { c.logger.Errorf("Failed to remove function controller as finalizer to Function Obj: %s object due to: %v: ", key, err) return err } - c.logger.Infof("Function object %s has been successfully processed and marked for deleteion", key) + c.logger.Infof("Function object %s has been successfully processed and marked for deletion", key) return nil } diff --git a/pkg/utils/kubelessutil.go b/pkg/utils/kubelessutil.go index 0a34b508b..865d7ad1b 100644 --- a/pkg/utils/kubelessutil.go +++ b/pkg/utils/kubelessutil.go @@ -641,6 +641,8 @@ func EnsureFuncDeployment(client kubernetes.Interface, funcObj *kubelessApi.Func Value: dpm.Spec.Template.Spec.Containers[0].Resources.Limits.Memory().String(), }, ) + } else { + return fmt.Errorf("Expected non-empty handler and non-empty function content") } dpm.Spec.Template.Spec.Containers[0].Env = append(dpm.Spec.Template.Spec.Containers[0].Env, From 366318ecd3a85e3acd21d46351ef084ff0cf6595 Mon Sep 17 00:00:00 2001 From: Danny Qiu Date: Tue, 30 Oct 2018 18:52:24 -0400 Subject: [PATCH 5/6] Warn instead of returning an error for empty handler and body --- pkg/utils/kubelessutil.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/utils/kubelessutil.go b/pkg/utils/kubelessutil.go index 865d7ad1b..e4c789ed6 100644 --- a/pkg/utils/kubelessutil.go +++ b/pkg/utils/kubelessutil.go @@ -642,7 +642,7 @@ func EnsureFuncDeployment(client kubernetes.Interface, funcObj *kubelessApi.Func }, ) } else { - return fmt.Errorf("Expected non-empty handler and non-empty function content") + logrus.Warn("Expected non-empty handler and non-empty function content") } dpm.Spec.Template.Spec.Containers[0].Env = append(dpm.Spec.Template.Spec.Containers[0].Env, From a73e0ed7e00d8b18f38dc4e2438902b8a2a4f81c Mon Sep 17 00:00:00 2001 From: Danny Qiu Date: Wed, 31 Oct 2018 11:42:41 -0400 Subject: [PATCH 6/6] Test for RFC3339 timestamp --- examples/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/Makefile b/examples/Makefile index 474005277..c0aef134d 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -173,7 +173,7 @@ post-go-verify: # Verify event context logs=`kubectl logs -l function=post-go`; \ echo $$logs | grep -q "it.*alive" && \ - echo $$logs | grep -q "UTC" && \ + echo $$logs | grep -q "Z" && \ echo $$logs | grep -q "application/json" && \ echo $$logs | grep -q "cli.kubeless.io" @@ -305,7 +305,7 @@ post-python-verify: # Verify event context logs=`kubectl logs -l function=post-python`; \ echo $$logs | grep -q "it.*alive" && \ - echo $$logs | grep -q "event-time.*UTC" && \ + echo $$logs | grep -q "event-time.*Z" && \ echo $$logs | grep -q "event-type.*application/json" && \ echo $$logs | grep -q "event-namespace.*cli.kubeless.io" && \ echo $$logs | grep -q "event-id.*" @@ -325,7 +325,7 @@ post-nodejs-verify: # Verify event context logs=`kubectl logs -l function=post-nodejs`; \ echo $$logs | grep -q "it.*alive" && \ - echo $$logs | grep -q "event-time.*UTC" && \ + echo $$logs | grep -q "event-time.*Z" && \ echo $$logs | grep -q "event-type.*application/json" && \ echo $$logs | grep -q "event-namespace.*cli.kubeless.io" && \ echo $$logs | grep -q "event-id.*" @@ -338,7 +338,7 @@ post-ruby-verify: # Verify event context logs=`kubectl logs -l function=post-ruby`; \ echo $$logs | grep -q "it.*alive" && \ - echo $$logs | grep -q "event-time.*UTC" && \ + echo $$logs | grep -q "event-time.*Z" && \ echo $$logs | grep -q "event-type.*application/json" && \ echo $$logs | grep -q "event-namespace.*cli.kubeless.io" && \ echo $$logs | grep -q "event-id.*"