diff --git a/internal/helm/config.go b/internal/helm/config.go index 9795cd2..a57c578 100644 --- a/internal/helm/config.go +++ b/internal/helm/config.go @@ -19,8 +19,7 @@ type Config struct { Prefix string `` // Prefix to use when looking up secret env vars // Global helm config - Debug bool `` // global helm flag (also applies to drone-helm itself) - KubeConfig string `split_words:"true" default:"/root/.kube/config"` // path to the kube config file + Debug bool `` // global helm flag (also applies to drone-helm itself) Values string `` StringValues string `split_words:"true"` ValuesFiles []string `split_words:"true"` diff --git a/internal/helm/plan.go b/internal/helm/plan.go index 1d4ced9..62083c9 100644 --- a/internal/helm/plan.go +++ b/internal/helm/plan.go @@ -6,7 +6,10 @@ import ( "os" ) -const kubeConfigTemplate = "/root/.kube/config.tpl" +const ( + kubeConfigTemplate = "/root/.kube/config.tpl" + kubeConfigFile = "/root/.kube/config" +) // A Step is one step in the plan. type Step interface { @@ -27,7 +30,6 @@ func NewPlan(cfg Config) (*Plan, error) { cfg: cfg, runCfg: run.Config{ Debug: cfg.Debug, - KubeConfig: cfg.KubeConfig, Values: cfg.Values, StringValues: cfg.StringValues, ValuesFiles: cfg.ValuesFiles, @@ -141,6 +143,7 @@ func initKube(cfg Config) []Step { ServiceAccount: cfg.ServiceAccount, Token: cfg.KubeToken, TemplateFile: kubeConfigTemplate, + ConfigFile: kubeConfigFile, }, } } diff --git a/internal/helm/plan_test.go b/internal/helm/plan_test.go index e5a1a96..48ee4cc 100644 --- a/internal/helm/plan_test.go +++ b/internal/helm/plan_test.go @@ -32,7 +32,6 @@ func (suite *PlanTestSuite) TestNewPlan() { cfg := Config{ Command: "help", Debug: false, - KubeConfig: "/branch/.sfere/profig", Values: "steadfastness,forthrightness", StringValues: "tensile_strength,flexibility", ValuesFiles: []string{"/root/price_inventory.yml"}, @@ -41,7 +40,6 @@ func (suite *PlanTestSuite) TestNewPlan() { runCfg := run.Config{ Debug: false, - KubeConfig: "/branch/.sfere/profig", Values: "steadfastness,forthrightness", StringValues: "tensile_strength,flexibility", ValuesFiles: []string{"/root/price_inventory.yml"}, @@ -142,6 +140,7 @@ func (suite *PlanTestSuite) TestDel() { ServiceAccount: "greathelm", Token: "b2YgbXkgYWZmZWN0aW9u", TemplateFile: kubeConfigTemplate, + ConfigFile: kubeConfigFile, } suite.Equal(expected, init) @@ -176,6 +175,7 @@ func (suite *PlanTestSuite) TestInitKube() { ServiceAccount: "helmet", Token: "cXVlZXIgY2hhcmFjdGVyCg==", TemplateFile: kubeConfigTemplate, + ConfigFile: kubeConfigFile, } suite.Equal(expected, init) } diff --git a/internal/run/config.go b/internal/run/config.go index 09b9642..4f9b99a 100644 --- a/internal/run/config.go +++ b/internal/run/config.go @@ -7,7 +7,6 @@ import ( // Config contains configuration applicable to all helm commands type Config struct { Debug bool - KubeConfig string Values string StringValues string ValuesFiles []string diff --git a/internal/run/initkube.go b/internal/run/initkube.go index 4af29af..c868890 100644 --- a/internal/run/initkube.go +++ b/internal/run/initkube.go @@ -16,6 +16,7 @@ type InitKube struct { ServiceAccount string Token string TemplateFile string + ConfigFile string template *template.Template configFile io.WriteCloser @@ -34,7 +35,7 @@ type kubeValues struct { // Execute generates a kubernetes config file from drone-helm3's template. func (i *InitKube) Execute(cfg Config) error { if cfg.Debug { - fmt.Fprintf(cfg.Stderr, "writing kubeconfig file to %s\n", cfg.KubeConfig) + fmt.Fprintf(cfg.Stderr, "writing kubeconfig file to %s\n", i.ConfigFile) } defer i.configFile.Close() return i.template.Execute(i.configFile, i.values) @@ -76,16 +77,16 @@ func (i *InitKube) Prepare(cfg Config) error { } if cfg.Debug { - if _, err := os.Stat(cfg.KubeConfig); err != nil { + if _, err := os.Stat(i.ConfigFile); err != nil { // non-nil err here isn't an actual error state; the kubeconfig just doesn't exist fmt.Fprint(cfg.Stderr, "creating ") } else { fmt.Fprint(cfg.Stderr, "truncating ") } - fmt.Fprintf(cfg.Stderr, "kubeconfig file at %s\n", cfg.KubeConfig) + fmt.Fprintf(cfg.Stderr, "kubeconfig file at %s\n", i.ConfigFile) } - i.configFile, err = os.Create(cfg.KubeConfig) + i.configFile, err = os.Create(i.ConfigFile) if err != nil { return fmt.Errorf("could not open kubeconfig file for writing: %w", err) } diff --git a/internal/run/initkube_test.go b/internal/run/initkube_test.go index fb32b15..74f6225 100644 --- a/internal/run/initkube_test.go +++ b/internal/run/initkube_test.go @@ -34,10 +34,10 @@ namespace: {{ .Namespace }} Certificate: "CCNA", Token: "Aspire virtual currency", TemplateFile: templateFile.Name(), + ConfigFile: configFile.Name(), } cfg := Config{ - Namespace: "Cisco", - KubeConfig: configFile.Name(), + Namespace: "Cisco", } err = init.Prepare(cfg) suite.Require().Nil(err) @@ -95,11 +95,10 @@ func (suite *InitKubeTestSuite) TestPrepareCannotOpenDestinationFile() { Certificate: "CCNA", Token: "Aspire virtual currency", TemplateFile: templateFile.Name(), + ConfigFile: "/usr/foreign/exclude/kubeprofig", } - cfg := Config{ - KubeConfig: "/usr/foreign/exclude/kubeprofig", - } + cfg := Config{} err = init.Prepare(cfg) suite.Error(err) suite.Regexp("could not open .* for writing: .* no such file or directory", err) @@ -120,11 +119,10 @@ func (suite *InitKubeTestSuite) TestPrepareRequiredConfig() { Certificate: "CCNA", Token: "Aspire virtual currency", TemplateFile: templateFile.Name(), + ConfigFile: configFile.Name(), } - cfg := Config{ - KubeConfig: configFile.Name(), - } + cfg := Config{} suite.NoError(init.Prepare(cfg)) // consistency check; we should be starting in a happy state @@ -157,11 +155,10 @@ func (suite *InitKubeTestSuite) TestPrepareDefaultsServiceAccount() { Certificate: "CCNA", Token: "Aspire virtual currency", TemplateFile: templateFile.Name(), + ConfigFile: configFile.Name(), } - cfg := Config{ - KubeConfig: configFile.Name(), - } + cfg := Config{} init.Prepare(cfg) suite.Equal("helm", init.ServiceAccount) diff --git a/internal/run/uninstall.go b/internal/run/uninstall.go index 1b9d0b2..e24daca 100644 --- a/internal/run/uninstall.go +++ b/internal/run/uninstall.go @@ -22,7 +22,7 @@ func (u *Uninstall) Prepare(cfg Config) error { return fmt.Errorf("release is required") } - args := []string{"--kubeconfig", cfg.KubeConfig} + args := make([]string, 0) if cfg.Namespace != "" { args = append(args, "--namespace", cfg.Namespace) diff --git a/internal/run/uninstall_test.go b/internal/run/uninstall_test.go index 9e826c9..fce7fee 100644 --- a/internal/run/uninstall_test.go +++ b/internal/run/uninstall_test.go @@ -58,11 +58,9 @@ func (suite *UninstallTestSuite) TestPrepareAndExecute() { Run(). Times(1) - cfg := Config{ - KubeConfig: "/root/.kube/config", - } + cfg := Config{} suite.NoError(u.Prepare(cfg)) - expected := []string{"--kubeconfig", "/root/.kube/config", "uninstall", "zayde_wølf_king"} + expected := []string{"uninstall", "zayde_wølf_king"} suite.Equal(expected, actual) u.Execute(cfg) @@ -73,15 +71,13 @@ func (suite *UninstallTestSuite) TestPrepareDryRunFlag() { Release: "firefox_ak_wildfire", DryRun: true, } - cfg := Config{ - KubeConfig: "/root/.kube/config", - } + cfg := Config{} suite.mockCmd.EXPECT().Stdout(gomock.Any()).AnyTimes() suite.mockCmd.EXPECT().Stderr(gomock.Any()).AnyTimes() suite.NoError(u.Prepare(cfg)) - expected := []string{"--kubeconfig", "/root/.kube/config", "uninstall", "--dry-run", "firefox_ak_wildfire"} + expected := []string{"uninstall", "--dry-run", "firefox_ak_wildfire"} suite.Equal(expected, suite.actualArgs) } @@ -90,16 +86,14 @@ func (suite *UninstallTestSuite) TestPrepareNamespaceFlag() { Release: "carly_simon_run_away_with_me", } cfg := Config{ - KubeConfig: "/root/.kube/config", - Namespace: "emotion", + Namespace: "emotion", } suite.mockCmd.EXPECT().Stdout(gomock.Any()).AnyTimes() suite.mockCmd.EXPECT().Stderr(gomock.Any()).AnyTimes() suite.NoError(u.Prepare(cfg)) - expected := []string{"--kubeconfig", "/root/.kube/config", - "--namespace", "emotion", "uninstall", "carly_simon_run_away_with_me"} + expected := []string{"--namespace", "emotion", "uninstall", "carly_simon_run_away_with_me"} suite.Equal(expected, suite.actualArgs) } @@ -109,9 +103,8 @@ func (suite *UninstallTestSuite) TestPrepareDebugFlag() { } stderr := strings.Builder{} cfg := Config{ - KubeConfig: "/root/.kube/config", - Debug: true, - Stderr: &stderr, + Debug: true, + Stderr: &stderr, } command = func(path string, args ...string) cmd { @@ -126,8 +119,8 @@ func (suite *UninstallTestSuite) TestPrepareDebugFlag() { suite.mockCmd.EXPECT().Stderr(&stderr).AnyTimes() suite.NoError(u.Prepare(cfg)) - suite.Equal(fmt.Sprintf("Generated command: '%s --kubeconfig /root/.kube/config "+ - "--debug uninstall just_a_band_huff_and_puff'\n", helmBin), stderr.String()) + suite.Equal(fmt.Sprintf("Generated command: '%s --debug "+ + "uninstall just_a_band_huff_and_puff'\n", helmBin), stderr.String()) } func (suite *UninstallTestSuite) TestPrepareRequiresRelease() { diff --git a/internal/run/upgrade.go b/internal/run/upgrade.go index cff2c70..dd50527 100644 --- a/internal/run/upgrade.go +++ b/internal/run/upgrade.go @@ -33,7 +33,7 @@ func (u *Upgrade) Prepare(cfg Config) error { return fmt.Errorf("release is required") } - args := []string{"--kubeconfig", cfg.KubeConfig} + args := make([]string, 0) if cfg.Namespace != "" { args = append(args, "--namespace", cfg.Namespace) diff --git a/internal/run/upgrade_test.go b/internal/run/upgrade_test.go index 13b2080..aae1af4 100644 --- a/internal/run/upgrade_test.go +++ b/internal/run/upgrade_test.go @@ -41,8 +41,7 @@ func (suite *UpgradeTestSuite) TestPrepareAndExecute() { command = func(path string, args ...string) cmd { suite.Equal(helmBin, path) - suite.Equal([]string{"--kubeconfig", "/root/.kube/config", "upgrade", "--install", - "jonas_brothers_only_human", "at40"}, args) + suite.Equal([]string{"upgrade", "--install", "jonas_brothers_only_human", "at40"}, args) return suite.mockCmd } @@ -55,9 +54,7 @@ func (suite *UpgradeTestSuite) TestPrepareAndExecute() { Run(). Times(1) - cfg := Config{ - KubeConfig: "/root/.kube/config", - } + cfg := Config{} err := u.Prepare(cfg) suite.Require().Nil(err) u.Execute(cfg) @@ -73,8 +70,7 @@ func (suite *UpgradeTestSuite) TestPrepareNamespaceFlag() { command = func(path string, args ...string) cmd { suite.Equal(helmBin, path) - suite.Equal([]string{"--kubeconfig", "/root/.kube/config", "--namespace", "melt", "upgrade", - "--install", "shaed_trampoline", "at40"}, args) + suite.Equal([]string{"--namespace", "melt", "upgrade", "--install", "shaed_trampoline", "at40"}, args) return suite.mockCmd } @@ -83,8 +79,7 @@ func (suite *UpgradeTestSuite) TestPrepareNamespaceFlag() { suite.mockCmd.EXPECT().Stderr(gomock.Any()) cfg := Config{ - Namespace: "melt", - KubeConfig: "/root/.kube/config", + Namespace: "melt", } err := u.Prepare(cfg) suite.Require().Nil(err) @@ -105,7 +100,6 @@ func (suite *UpgradeTestSuite) TestPrepareWithUpgradeFlags() { } cfg := Config{ - KubeConfig: "/root/.kube/config", Values: "age=35", StringValues: "height=5ft10in", ValuesFiles: []string{"/usr/local/stats", "/usr/local/grades"}, @@ -113,7 +107,7 @@ func (suite *UpgradeTestSuite) TestPrepareWithUpgradeFlags() { command = func(path string, args ...string) cmd { suite.Equal(helmBin, path) - suite.Equal([]string{"--kubeconfig", "/root/.kube/config", "upgrade", "--install", + suite.Equal([]string{"upgrade", "--install", "--version", "radio_edit", "--dry-run", "--wait", @@ -165,10 +159,9 @@ func (suite *UpgradeTestSuite) TestPrepareDebugFlag() { stdout := strings.Builder{} stderr := strings.Builder{} cfg := Config{ - Debug: true, - KubeConfig: "/root/.kube/config", - Stdout: &stdout, - Stderr: &stderr, + Debug: true, + Stdout: &stdout, + Stderr: &stderr, } command = func(path string, args ...string) cmd { @@ -186,7 +179,7 @@ func (suite *UpgradeTestSuite) TestPrepareDebugFlag() { u.Prepare(cfg) - want := fmt.Sprintf("Generated command: '%s --kubeconfig /root/.kube/config --debug upgrade "+ + want := fmt.Sprintf("Generated command: '%s --debug upgrade "+ "--install lewis_capaldi_someone_you_loved at40'\n", helmBin) suite.Equal(want, stderr.String()) suite.Equal("", stdout.String())