From e838c7ada62fc54f202b39fa29c9125ca9884644 Mon Sep 17 00:00:00 2001 From: spchortis Date: Mon, 2 Oct 2023 15:46:10 +0300 Subject: [PATCH 1/6] chore: update knative domain flag --- src/cli/init.go | 27 ++++++++++++++++++++++++++ src/services/k8s/knative.go | 38 +++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/src/cli/init.go b/src/cli/init.go index 7397bc0..7efdcbc 100644 --- a/src/cli/init.go +++ b/src/cli/init.go @@ -13,6 +13,8 @@ import ( "github.com/nearform/initium-cli/src/services/project" "github.com/nearform/initium-cli/src/utils/defaults" "github.com/urfave/cli/v2" + + knative "github.com/nearform/initium-cli/src/services/k8s" ) const ( @@ -101,6 +103,25 @@ func (c icli) InitServiceAccountCMD(ctx *cli.Context) error { return k8s.GetServiceAccount(c.Resources) } +func (c icli) InitKnativeCMD(cCtx *cli.Context) error { + config, err := knative.Config( + cCtx.String(endpointFlag), + cCtx.String(tokenFlag), + []byte(cCtx.String(caCRTFlag)), + ) + + if err != nil { + return err + } + + knativeDomain := cCtx.Args().Get(0) + fmt.Printf("Argument from subcommand: %s\n", knativeDomain) + os.Exit(1) + knative.DomainUpd(knativeDomain, config) + + return nil +} + func (c icli) InitCMD() *cli.Command { configFlags := c.CommandFlags([]FlagsType{Shared}) configFlags = append(configFlags, &cli.BoolFlag{ @@ -133,6 +154,12 @@ func (c icli) InitCMD() *cli.Command { Action: c.InitServiceAccountCMD, Before: c.baseBeforeFunc, }, + { + Name: "knative-domain", + Usage: "updates knative service default domain", + Action: c.InitKnativeCMD, + Before: c.baseBeforeFunc, + }, }, } } diff --git a/src/services/k8s/knative.go b/src/services/k8s/knative.go index 744dd6f..3049ea6 100644 --- a/src/services/k8s/knative.go +++ b/src/services/k8s/knative.go @@ -156,3 +156,41 @@ func Clean(namespace string, config *rest.Config, project *project.Project) erro log.Info("The Knative service was successfully deleted", "host", config.Host, "name", project.Name, "namespace", namespace) return nil } + +func DomainUpd(kn_domain string, config *rest.Config) error { + // Default Knative values + configMapName := "config-domain" + namespace := "knative-serving" + + log.Info("Updating Knative default domain name...", "new domain", kn_domain, "configMap", configMapName, "namespace", namespace) + ctx := context.Background() + + // Create a new Knative Serving client + //servingClient, err := servingv1client.NewForConfig(config) + //if err != nil { + // return fmt.Errorf("Error creating the knative client %v", err) + //} + + client, err := kubernetes.NewForConfig(config) + if err != nil { + return fmt.Errorf("Creating Kubernetes client %v", err) + } + + configMaps := client.CoreV1().ConfigMaps(namespace) + + configMap, err := configMaps.Get(ctx, configMapName, metav1.GetOptions{}) + if err != nil { + return err + } + + configMap.Data["domain"] = kn_domain + + _, err = configMaps.Update(ctx, configMap, metav1.UpdateOptions{}) + if err != nil { + return err + } + + log.Info("Knative default domain name was successfully updated!", "new domain", kn_domain, "configMap", configMapName, "namespace", namespace) + + return nil +} From ac552e71e72c47038bcb09e49b59ac92db275cde Mon Sep 17 00:00:00 2001 From: spchortis Date: Tue, 3 Oct 2023 16:43:28 +0300 Subject: [PATCH 2/6] chore: adding knative domain upd as init subcommand --- assets/k8s/serviceAccount/cluster-role.yaml | 1 + src/cli/init.go | 24 +++++++++++++++++---- src/services/k8s/knative.go | 22 +++++++++---------- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/assets/k8s/serviceAccount/cluster-role.yaml b/assets/k8s/serviceAccount/cluster-role.yaml index 7094f4a..61b793b 100644 --- a/assets/k8s/serviceAccount/cluster-role.yaml +++ b/assets/k8s/serviceAccount/cluster-role.yaml @@ -15,6 +15,7 @@ rules: - ingresses - services - secrets + - configmaps verbs: - create - delete diff --git a/src/cli/init.go b/src/cli/init.go index 7efdcbc..908f68a 100644 --- a/src/cli/init.go +++ b/src/cli/init.go @@ -114,10 +114,17 @@ func (c icli) InitKnativeCMD(cCtx *cli.Context) error { return err } + if cCtx.NArg() < 1 { + return fmt.Errorf("Knative domain argument is required!") + } + knativeDomain := cCtx.Args().Get(0) - fmt.Printf("Argument from subcommand: %s\n", knativeDomain) - os.Exit(1) - knative.DomainUpd(knativeDomain, config) + + err = knative.DomainUpd(knativeDomain, config) + + if err != nil { + return err + } return nil } @@ -157,8 +164,17 @@ func (c icli) InitCMD() *cli.Command { { Name: "knative-domain", Usage: "updates knative service default domain", + Flags: c.CommandFlags([]FlagsType{Kubernetes}), Action: c.InitKnativeCMD, - Before: c.baseBeforeFunc, + Before: func(ctx *cli.Context) error { + if err := c.loadFlagsFromConfig(ctx); err != nil { + return err + } + + ignoredFlags := []string{namespaceFlag} + + return c.checkRequiredFlags(ctx, ignoredFlags) + }, }, }, } diff --git a/src/services/k8s/knative.go b/src/services/k8s/knative.go index 0af9095..7990fb0 100644 --- a/src/services/k8s/knative.go +++ b/src/services/k8s/knative.go @@ -216,7 +216,10 @@ func Apply(namespace string, commitSha string, config *rest.Config, project *pro func Clean(namespace string, config *rest.Config, project *project.Project) error { log.Info("Deleting Knative service", "host", config.Host, "name", project.Name, "namespace", namespace) - ctx := context.Background() + //ctx := context.Background() + + ctx, cancel := context.WithTimeout(context.Background(), time.Minute*2) + defer cancel() // Create a new Knative Serving client servingClient, err := servingv1client.NewForConfig(config) @@ -241,27 +244,22 @@ func DomainUpd(kn_domain string, config *rest.Config) error { log.Info("Updating Knative default domain name...", "new domain", kn_domain, "configMap", configMapName, "namespace", namespace) ctx := context.Background() - // Create a new Knative Serving client - //servingClient, err := servingv1client.NewForConfig(config) - //if err != nil { - // return fmt.Errorf("Error creating the knative client %v", err) - //} - client, err := kubernetes.NewForConfig(config) if err != nil { return fmt.Errorf("Creating Kubernetes client %v", err) } - configMaps := client.CoreV1().ConfigMaps(namespace) + configMap, err := client.CoreV1().ConfigMaps(namespace).Get(ctx, configMapName, metav1.GetOptions{}) - configMap, err := configMaps.Get(ctx, configMapName, metav1.GetOptions{}) if err != nil { - return err + return fmt.Errorf("Getting ConfigMaps: %v", err) } - configMap.Data["domain"] = kn_domain + configMap.Data = make(map[string]string) + + configMap.Data[kn_domain] = "" - _, err = configMaps.Update(ctx, configMap, metav1.UpdateOptions{}) + _, err = client.CoreV1().ConfigMaps(namespace).Update(ctx, configMap, metav1.UpdateOptions{}) if err != nil { return err } From cdd146c4a7dd60da08a525c71421492db51d3b4a Mon Sep 17 00:00:00 2001 From: spchortis Date: Tue, 3 Oct 2023 17:02:34 +0300 Subject: [PATCH 3/6] chore: adding cli sub test case --- src/cli/init_test.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/cli/init_test.go b/src/cli/init_test.go index 333c2a5..8a27ba5 100644 --- a/src/cli/init_test.go +++ b/src/cli/init_test.go @@ -129,3 +129,14 @@ func TestAppName(t *testing.T) { t.Errorf("the error message should contain %s and %s", appNameFlag, repoNameFlag) } } + +func TestKnativeDomain(t *testing.T) { + cli := GeticliForTesting(os.DirFS("../..")) + + err := cli.Run([]string{"initium", "init", "knative-domain"}) + if err == nil { + t.Errorf("CLI should ask for an argument (knative new domain) if not detected") + } + + +} \ No newline at end of file From db9347a3148c4372e6e8ef27c69ec09256da7a2f Mon Sep 17 00:00:00 2001 From: spchortis Date: Tue, 3 Oct 2023 17:07:34 +0300 Subject: [PATCH 4/6] chore: upd knative domain cmd --- src/cli/init.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cli/init.go b/src/cli/init.go index 908f68a..c278c8a 100644 --- a/src/cli/init.go +++ b/src/cli/init.go @@ -103,7 +103,7 @@ func (c icli) InitServiceAccountCMD(ctx *cli.Context) error { return k8s.GetServiceAccount(c.Resources) } -func (c icli) InitKnativeCMD(cCtx *cli.Context) error { +func (c icli) InitKnativeDomainCMD(cCtx *cli.Context) error { config, err := knative.Config( cCtx.String(endpointFlag), cCtx.String(tokenFlag), @@ -165,7 +165,7 @@ func (c icli) InitCMD() *cli.Command { Name: "knative-domain", Usage: "updates knative service default domain", Flags: c.CommandFlags([]FlagsType{Kubernetes}), - Action: c.InitKnativeCMD, + Action: c.InitKnativeDomainCMD, Before: func(ctx *cli.Context) error { if err := c.loadFlagsFromConfig(ctx); err != nil { return err From 3ba173c5a2e3e7be3a45f330a457abfe086a7e16 Mon Sep 17 00:00:00 2001 From: spchortis Date: Tue, 3 Oct 2023 17:09:23 +0300 Subject: [PATCH 5/6] chore: remove testing coding part --- src/services/k8s/knative.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/services/k8s/knative.go b/src/services/k8s/knative.go index 7990fb0..ea00a56 100644 --- a/src/services/k8s/knative.go +++ b/src/services/k8s/knative.go @@ -216,10 +216,7 @@ func Apply(namespace string, commitSha string, config *rest.Config, project *pro func Clean(namespace string, config *rest.Config, project *project.Project) error { log.Info("Deleting Knative service", "host", config.Host, "name", project.Name, "namespace", namespace) - //ctx := context.Background() - - ctx, cancel := context.WithTimeout(context.Background(), time.Minute*2) - defer cancel() + ctx := context.Background() // Create a new Knative Serving client servingClient, err := servingv1client.NewForConfig(config) From b90ad1594c0bc2b86e7441f98e6006fe48572bb4 Mon Sep 17 00:00:00 2001 From: spchortis Date: Tue, 3 Oct 2023 17:10:37 +0300 Subject: [PATCH 6/6] chore: fmt --- src/cli/init.go | 4 ++-- src/cli/init_test.go | 3 +-- src/services/k8s/knative.go | 14 +++++++------- src/services/k8s/knative_test.go | 1 - 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/cli/init.go b/src/cli/init.go index c278c8a..602bc59 100644 --- a/src/cli/init.go +++ b/src/cli/init.go @@ -170,9 +170,9 @@ func (c icli) InitCMD() *cli.Command { if err := c.loadFlagsFromConfig(ctx); err != nil { return err } - + ignoredFlags := []string{namespaceFlag} - + return c.checkRequiredFlags(ctx, ignoredFlags) }, }, diff --git a/src/cli/init_test.go b/src/cli/init_test.go index 8a27ba5..bb453b4 100644 --- a/src/cli/init_test.go +++ b/src/cli/init_test.go @@ -138,5 +138,4 @@ func TestKnativeDomain(t *testing.T) { t.Errorf("CLI should ask for an argument (knative new domain) if not detected") } - -} \ No newline at end of file +} diff --git a/src/services/k8s/knative.go b/src/services/k8s/knative.go index ea00a56..53a9ca5 100644 --- a/src/services/k8s/knative.go +++ b/src/services/k8s/knative.go @@ -248,18 +248,18 @@ func DomainUpd(kn_domain string, config *rest.Config) error { configMap, err := client.CoreV1().ConfigMaps(namespace).Get(ctx, configMapName, metav1.GetOptions{}) - if err != nil { - return fmt.Errorf("Getting ConfigMaps: %v", err) - } + if err != nil { + return fmt.Errorf("Getting ConfigMaps: %v", err) + } configMap.Data = make(map[string]string) configMap.Data[kn_domain] = "" - _, err = client.CoreV1().ConfigMaps(namespace).Update(ctx, configMap, metav1.UpdateOptions{}) - if err != nil { - return err - } + _, err = client.CoreV1().ConfigMaps(namespace).Update(ctx, configMap, metav1.UpdateOptions{}) + if err != nil { + return err + } log.Info("Knative default domain name was successfully updated!", "new domain", kn_domain, "configMap", configMapName, "namespace", namespace) diff --git a/src/services/k8s/knative_test.go b/src/services/k8s/knative_test.go index 6f95106..2a122ae 100644 --- a/src/services/k8s/knative_test.go +++ b/src/services/k8s/knative_test.go @@ -80,4 +80,3 @@ func TestLoadManifest(t *testing.T) { assert.Assert(t, annotations[UpdateTimestampAnnotationName] != "", "Missing %s annotation", UpdateTimestampAnnotationName) assert.Assert(t, annotations[UpdateShaAnnotationName] == commitSha, "Expected %s SHA, got %s", commitSha, annotations[UpdateShaAnnotationName]) } -