diff --git a/cmd/dartboard/subcommands/deploy.go b/cmd/dartboard/subcommands/deploy.go index 95f669e..236b6c9 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.RancherValues != "" { + p, err := writeValuesFile(r.ChartVariables.RancherValues) + 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.yaml b/darts/aws.yaml index f8ae591..c151ca4 100644 --- a/darts/aws.yaml +++ b/darts/aws.yaml @@ -77,6 +77,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 +# rancher_values: | +# features: "my-feature-flag=true" + test_variables: test_config_maps: 2000 test_secrets: 2000 diff --git a/darts/azure.yaml b/darts/azure.yaml index 69a3d23..17a419a 100644 --- a/darts/azure.yaml +++ b/darts/azure.yaml @@ -103,6 +103,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 +# rancher_values: | +# features: "my-feature-flag=true" + test_variables: test_config_maps: 2000 test_secrets: 2000 diff --git a/darts/k3d.yaml b/darts/k3d.yaml index 451b63c..1819145 100644 --- a/darts/k3d.yaml +++ b/darts/k3d.yaml @@ -59,6 +59,11 @@ 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 +# 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 aaa18f9..3471339 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"` + RancherValues string `yaml:"rancher_values"` } type TestVariables struct { diff --git a/internal/helm/helm.go b/internal/helm/helm.go index 0553798..e79f2f9 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