From a09bbc2740eeab19179d696de7b5f7eb2aeb59ae Mon Sep 17 00:00:00 2001 From: Alejandro Ruiz Date: Fri, 17 Jan 2025 17:33:37 +0100 Subject: [PATCH] Add support for specifying arbitrary helm values for installing Rancher --- cmd/dartboard/subcommands/deploy.go | 28 +++++++++++++++++++++++++--- darts/aws_full.yaml | 4 ++++ darts/k3d_full.yaml | 4 ++++ internal/dart/recipe.go | 1 + internal/helm/helm.go | 3 ++- 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/cmd/dartboard/subcommands/deploy.go b/cmd/dartboard/subcommands/deploy.go index 6c1068d1..5cad1b13 100644 --- a/cmd/dartboard/subcommands/deploy.go +++ b/cmd/dartboard/subcommands/deploy.go @@ -114,7 +114,7 @@ func Deploy(cli *cli.Context) error { return GetAccess(cli) } -func chartInstall(kubeConf string, chart chart, vals map[string]any) error { +func chartInstall(kubeConf string, chart chart, vals map[string]any, extraArgs ...string) error { var err error name := chart.name @@ -126,7 +126,7 @@ func chartInstall(kubeConf string, chart chart, vals map[string]any) error { log.Printf("Installing chart %q (%s)\n", namespace+"/"+name, path) - if err = helm.Install(kubeConf, path, name, namespace, vals); err != nil { + if err = helm.Install(kubeConf, path, name, namespace, vals, extraArgs...); err != nil { return fmt.Errorf("chart %s: %w", name, err) } return nil @@ -190,7 +190,29 @@ func chartInstallRancher(r *dart.Dart, rancherImageTag string, cluster *tofu.Clu chartVals := getRancherValsJSON(r.ChartVariables.RancherImageOverride, rancherImageTag, r.ChartVariables.AdminPassword, rancherClusterName, rancherClusterURL, r.ChartVariables.RancherReplicas) - return chartInstall(cluster.Kubeconfig, chartRancher, chartVals) + var extraArgs []string + if r.ChartVariables.Values != "" { + p, err := writeValuesFile(r.ChartVariables.Values) + if err != nil { + return fmt.Errorf("writing extra values file: %w", err) + } + defer os.Remove(p) + + extraArgs = append(extraArgs, "-f", p) + } + + return chartInstall(cluster.Kubeconfig, chartRancher, chartVals, extraArgs...) +} + +func writeValuesFile(content string) (string, error) { + p, err := os.CreateTemp("", "values-*.yaml") + if err != nil { + return "", err + } + if _, err := io.WriteString(p, content); err != nil { + return "", err + } + return p.Name(), nil } func chartInstallRancherIngress(cluster *tofu.Cluster) error { diff --git a/darts/aws_full.yaml b/darts/aws_full.yaml index 261a97fe..f9c125e8 100644 --- a/darts/aws_full.yaml +++ b/darts/aws_full.yaml @@ -73,6 +73,10 @@ chart_variables: # rancher_image_override: rancher/rancher # rancher_image_tag_override: v2.8.6-debug-1 +# Set arbitrary helm values (in yaml format) for installing Rancher +# values: | +# features: "my-feature-flag=true" + test_variables: # test_config_maps: 2000 # test_secrets: 2000 diff --git a/darts/k3d_full.yaml b/darts/k3d_full.yaml index a8f779d0..788aaa63 100644 --- a/darts/k3d_full.yaml +++ b/darts/k3d_full.yaml @@ -39,6 +39,10 @@ chart_variables: # rancher_image_override: rancher/rancher # rancher_image_tag_override: v2.8.6-debug-1 +# Set arbitrary helm values (in yaml format) for installing Rancher +# values: | +# features: "my-feature-flag=true" + test_variables: # test_config_maps: 2000 # test_secrets: 2000 diff --git a/internal/dart/recipe.go b/internal/dart/recipe.go index aaa18f95..4637d989 100644 --- a/internal/dart/recipe.go +++ b/internal/dart/recipe.go @@ -32,6 +32,7 @@ type ChartVariables struct { RancherMonitoringVersion string `yaml:"rancher_monitoring_version"` CertManagerVersion string `yaml:"cert_manager_version"` TesterGrafanaVersion string `yaml:"tester_grafana_version"` + Values string `yaml:"values"` } type TestVariables struct { diff --git a/internal/helm/helm.go b/internal/helm/helm.go index 05537989..e79f2f9c 100644 --- a/internal/helm/helm.go +++ b/internal/helm/helm.go @@ -25,7 +25,7 @@ import ( "github.com/rancher/dartboard/internal/vendored" ) -func Install(kubecfg, chartLocation, releaseName, namespace string, vals map[string]any) error { +func Install(kubecfg, chartLocation, releaseName, namespace string, vals map[string]any, extraArgs ...string) error { args := []string{ "--kubeconfig=" + kubecfg, "upgrade", @@ -46,6 +46,7 @@ func Install(kubecfg, chartLocation, releaseName, namespace string, vals map[str } args = append(args, "--set-json="+valueString) } + args = append(args, extraArgs...) cmd := vendored.Command("helm", args...) var errStream strings.Builder