From 2719426014734f982cff8559fe53ceca0a42b56a Mon Sep 17 00:00:00 2001 From: Mostafa Shorim Date: Fri, 16 Apr 2021 15:40:51 +0200 Subject: [PATCH] K3d further parameters (#856) * add further k3d args * modify k3s test * update docs * update k3d_mock * remove manual check for empty arg flags * add agent args flag * update docs * simplify loop * simplify appending for cmd args --- cmd/kyma/alpha/provision/k3s/cmd.go | 4 +++- cmd/kyma/alpha/provision/k3s/opts.go | 2 ++ docs/gen-docs/kyma_alpha_provision_k3s.md | 2 ++ internal/k3s/k3s.go | 16 ++++++++++------ internal/k3s/k3s_test.go | 2 +- internal/k3s/mock/k3d | 2 +- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/cmd/kyma/alpha/provision/k3s/cmd.go b/cmd/kyma/alpha/provision/k3s/cmd.go index 03d4c6bf0..64711a6b1 100644 --- a/cmd/kyma/alpha/provision/k3s/cmd.go +++ b/cmd/kyma/alpha/provision/k3s/cmd.go @@ -38,7 +38,9 @@ func NewCmd(o *Options) *cobra.Command { cmd.Flags().StringVar(&o.Name, "name", "kyma", `Name of the Kyma cluster (default: "kyma")`) cmd.Flags().IntVar(&o.Workers, "workers", 1, "Number of worker nodes (k3s agents), default: 1") cmd.Flags().StringSliceVarP(&o.ServerArgs, "server-arg", "s", []string{}, "One or more arguments passed to the Kubernetes API server (e.g. --server-arg='--alsologtostderr')") + cmd.Flags().StringSliceVarP(&o.AgentArgs, "agent-arg", "a", []string{}, "One or more arguments passed to the k3s agent command on agent nodes (e.g. --agent-arg='--alsologtostderr')") cmd.Flags().DurationVar(&o.Timeout, "timeout", 5*time.Minute, `Maximum time for the provisioning (default: 5m0s). If you want no timeout, enter "0".`) + cmd.Flags().StringSliceVarP(&o.K3dArgs, "k3d-arg", "", []string{}, "One or more arguments passed to the k3d provisioning command (e.g. --k3d-arg='--no-rollback')") return cmd } @@ -124,7 +126,7 @@ func (c *command) portAllocated(port int) bool { func (c *command) createK3sCluster() error { s := c.NewStep("Create K3s instance") s.Status("Start K3s cluster") - err := k3s.StartCluster(c.Verbose, c.opts.Timeout, c.opts.Name, c.opts.Workers, c.opts.ServerArgs) + err := k3s.StartCluster(c.Verbose, c.opts.Timeout, c.opts.Name, c.opts.Workers, c.opts.ServerArgs, c.opts.AgentArgs, c.opts.K3dArgs) if err != nil { s.Failuref("Could not start k3s cluster") return err diff --git a/cmd/kyma/alpha/provision/k3s/opts.go b/cmd/kyma/alpha/provision/k3s/opts.go index ec7bb0927..f56b1a193 100644 --- a/cmd/kyma/alpha/provision/k3s/opts.go +++ b/cmd/kyma/alpha/provision/k3s/opts.go @@ -14,6 +14,8 @@ type Options struct { Workers int Timeout time.Duration ServerArgs []string + AgentArgs []string + K3dArgs []string } //NewOptions creates options with default values diff --git a/docs/gen-docs/kyma_alpha_provision_k3s.md b/docs/gen-docs/kyma_alpha_provision_k3s.md index c99667c0b..9a870e0db 100644 --- a/docs/gen-docs/kyma_alpha_provision_k3s.md +++ b/docs/gen-docs/kyma_alpha_provision_k3s.md @@ -15,6 +15,8 @@ kyma alpha provision k3s [flags] ## Flags ```bash + -a, --agent-arg strings One or more arguments passed to the k3s agent command on agent nodes (e.g. --agent-arg='--alsologtostderr') + --k3d-arg strings One or more arguments passed to the k3d provisioning command (e.g. --k3d-arg='--no-rollback') --name string Name of the Kyma cluster (default: "kyma") (default "kyma") -s, --server-arg strings One or more arguments passed to the Kubernetes API server (e.g. --server-arg='--alsologtostderr') --timeout duration Maximum time for the provisioning (default: 5m0s). If you want no timeout, enter "0". (default 5m0s) diff --git a/internal/k3s/k3s.go b/internal/k3s/k3s.go index ce4f137ad..245469c98 100644 --- a/internal/k3s/k3s.go +++ b/internal/k3s/k3s.go @@ -127,7 +127,7 @@ func ClusterExists(verbose bool, clusterName string) (bool, error) { } //StartCluster starts a cluster -func StartCluster(verbose bool, timeout time.Duration, clusterName string, workers int, serverArgs []string) error { +func StartCluster(verbose bool, timeout time.Duration, clusterName string, workers int, serverArgs []string, agentArgs []string, k3dArgs []string) error { cmdArgs := []string{ "cluster", "create", clusterName, "--kubeconfig-update-default", @@ -141,13 +141,17 @@ func StartCluster(verbose bool, timeout time.Duration, clusterName string, worke //add further custom server args for _, srvArg := range serverArgs { - if srvArg == "" { - continue - } - cmdArgs = append(cmdArgs, "--k3s-server-arg") - cmdArgs = append(cmdArgs, srvArg) + cmdArgs = append(cmdArgs, "--k3s-server-arg", srvArg) + } + + //add agent args + for _, agentArg := range agentArgs { + cmdArgs = append(cmdArgs, "--k3s-agent-arg", agentArg) } + //add further k3d args which are not offered by the Kyma CLI flags + cmdArgs = append(cmdArgs, k3dArgs...) + _, err := RunCmd(verbose, timeout, cmdArgs...) return err diff --git a/internal/k3s/k3s_test.go b/internal/k3s/k3s_test.go index 0ae6975ec..5b84c180a 100644 --- a/internal/k3s/k3s_test.go +++ b/internal/k3s/k3s_test.go @@ -103,7 +103,7 @@ func TestInitializeFailed(t *testing.T) { } func TestStartCluster(t *testing.T) { - err := StartCluster(false, 5*time.Second, "kyma", 1, []string{}) + err := StartCluster(false, 5*time.Second, "kyma", 1, []string{"--alsologtostderr"}, []string{"--alsologtostderr"}, []string{"--no-rollback"}) require.NoError(t, err) } diff --git a/internal/k3s/mock/k3d b/internal/k3s/mock/k3d index c74aad401..32f4182d1 100755 --- a/internal/k3s/mock/k3d +++ b/internal/k3s/mock/k3d @@ -42,7 +42,7 @@ function cluster_list_-o_json { # # Mock for 'k3d cluster create kyma --kubeconfig-update-default --timeout 5s -p 80:80@loadbalancer -p 443:443@loadbalancer --agents 1 --k3s-server-arg --disable --k3s-server-arg traefik' command # -function cluster_create_kyma_--kubeconfig-update-default_--timeout_5s_-p_80:80@loadbalancer_-p_443:443@loadbalancer_--agents_1_--k3s-server-arg_--disable_--k3s-server-arg_traefik { +function cluster_create_kyma_--kubeconfig-update-default_--timeout_5s_-p_80:80@loadbalancer_-p_443:443@loadbalancer_--agents_1_--k3s-server-arg_--disable_--k3s-server-arg_traefik_--k3s-server-arg_--alsologtostderr_--k3s-agent-arg_--alsologtostderr_--no-rollback { dump_file cluster_create.txt }