fix: ensure plain http is supported across all helmfile commands (#1858)
fix: ensure plain http is supported across helmfile commands Signed-off-by: purpleclay <purpleclaygh@gmail.com>
This commit is contained in:
parent
22ad21c1ae
commit
2e21e2fa0b
|
|
@ -2665,26 +2665,46 @@ func (st *HelmState) kubeConnectionFlags(release *ReleaseSpec) []string {
|
|||
}
|
||||
|
||||
func (st *HelmState) appendChartDownloadFlags(flags []string, release *ReleaseSpec) []string {
|
||||
var repoSkipTLSVerify, repoPlainHttp bool
|
||||
repo, _ := st.GetRepositoryAndNameFromChartName(release.Chart)
|
||||
if repo != nil {
|
||||
repoPlainHttp = repo.PlainHttp
|
||||
repoSkipTLSVerify = repo.SkipTLSVerify
|
||||
}
|
||||
|
||||
if release.PlainHttp || st.HelmDefaults.PlainHttp || repoPlainHttp {
|
||||
if st.needsPlainHttp(release, repo) {
|
||||
flags = append(flags, "--plain-http")
|
||||
// --insecure-skip-tls-verify nullifies --plain-http in helm, omit it if PlainHttp is specified
|
||||
return flags
|
||||
}
|
||||
|
||||
if release.InsecureSkipTLSVerify || st.HelmDefaults.InsecureSkipTLSVerify || repoSkipTLSVerify {
|
||||
if st.needsInsecureSkipTLSVerify(release, repo) {
|
||||
flags = append(flags, "--insecure-skip-tls-verify")
|
||||
}
|
||||
|
||||
return flags
|
||||
}
|
||||
|
||||
func (st *HelmState) needsPlainHttp(release *ReleaseSpec, repo *RepositorySpec) bool {
|
||||
var repoPlainHttp, relPlainHttp bool
|
||||
if repo != nil {
|
||||
repoPlainHttp = repo.PlainHttp
|
||||
}
|
||||
|
||||
if release != nil {
|
||||
relPlainHttp = release.PlainHttp
|
||||
}
|
||||
|
||||
return relPlainHttp || st.HelmDefaults.PlainHttp || repoPlainHttp
|
||||
}
|
||||
|
||||
func (st *HelmState) needsInsecureSkipTLSVerify(release *ReleaseSpec, repo *RepositorySpec) bool {
|
||||
var repoSkipTLSVerify, relSkipTLSVerify bool
|
||||
if repo != nil {
|
||||
repoSkipTLSVerify = repo.SkipTLSVerify
|
||||
}
|
||||
|
||||
if release != nil {
|
||||
relSkipTLSVerify = release.InsecureSkipTLSVerify
|
||||
}
|
||||
|
||||
return relSkipTLSVerify || st.HelmDefaults.InsecureSkipTLSVerify || repoSkipTLSVerify
|
||||
}
|
||||
|
||||
func (st *HelmState) timeoutFlags(release *ReleaseSpec) []string {
|
||||
var flags []string
|
||||
|
||||
|
|
@ -2848,11 +2868,21 @@ func (st *HelmState) flagsForDiff(helm helmexec.Interface, release *ReleaseSpec,
|
|||
// `helm template --validate` and `helm upgrade --dry-run` ignore `--kube-version` flag.
|
||||
// For the moment, not specifying kubeVersion.
|
||||
flags = st.appendApiVersionsFlags(flags, release, "")
|
||||
|
||||
flags = st.appendConnectionFlags(flags, release)
|
||||
|
||||
flags = st.appendChartDownloadFlags(flags, release)
|
||||
|
||||
// `helm diff` does not support the `--plain-http` flag, this needs to be removed
|
||||
repo, _ := st.GetRepositoryAndNameFromChartName(release.Chart)
|
||||
if st.needsPlainHttp(release, repo) {
|
||||
var cleanFlags []string
|
||||
for _, flag := range flags {
|
||||
if flag != "--plain-http" {
|
||||
cleanFlags = append(cleanFlags, flag)
|
||||
}
|
||||
}
|
||||
flags = cleanFlags
|
||||
}
|
||||
|
||||
for _, flag := range flags {
|
||||
if flag == "--insecure-skip-tls-verify" {
|
||||
diffVersion, err := helmexec.GetPluginVersion("diff", settings.PluginsDirectory)
|
||||
|
|
@ -3847,10 +3877,9 @@ func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helm
|
|||
st.logger.Debugf("chart already exists at %s", chartPath)
|
||||
} else {
|
||||
flags := st.chartOCIFlags(release)
|
||||
|
||||
// apprnd flags about keyring and verify
|
||||
flags = st.appendVerifyFlags(flags, release)
|
||||
flags = st.appendKeyringFlags(flags, release)
|
||||
flags = st.appendChartDownloadFlags(flags, release)
|
||||
|
||||
err := helm.ChartPull(qualifiedChartName, chartPath, flags...)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -1871,6 +1871,19 @@ func TestHelmState_DiffFlags(t *testing.T) {
|
|||
helm: &exectest.Helm{},
|
||||
wantDiffFlags: []string{"--api-versions", "helmfile.test/v1", "--api-versions", "helmfile.test/v2", "--kube-version", "1.21"},
|
||||
},
|
||||
{
|
||||
name: "release with kubeversion and plain http which is ignored",
|
||||
releases: []ReleaseSpec{
|
||||
{
|
||||
Name: "releaseName",
|
||||
Chart: "foo",
|
||||
KubeVersion: "1.21",
|
||||
PlainHttp: true,
|
||||
},
|
||||
},
|
||||
helm: &exectest.Helm{},
|
||||
wantDiffFlags: []string{"--kube-version", "1.21"},
|
||||
},
|
||||
}
|
||||
for i := range tests {
|
||||
tt := tests[i]
|
||||
|
|
@ -3582,6 +3595,98 @@ func TestAppendChartDownloadFlags(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestNeedsPlainHttp(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
release *ReleaseSpec
|
||||
repo *RepositorySpec
|
||||
defaults HelmSpec
|
||||
expected bool
|
||||
}{
|
||||
{
|
||||
name: "PlainHttp in Release",
|
||||
release: &ReleaseSpec{
|
||||
PlainHttp: true,
|
||||
},
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "PlainHttp in Repository",
|
||||
repo: &RepositorySpec{
|
||||
PlainHttp: true,
|
||||
},
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "PlainHttp in HelmDefaults",
|
||||
defaults: HelmSpec{
|
||||
PlainHttp: true,
|
||||
},
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "PlainHttp not set",
|
||||
expected: false,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
st := &HelmState{
|
||||
ReleaseSetSpec: ReleaseSetSpec{
|
||||
HelmDefaults: tt.defaults,
|
||||
},
|
||||
}
|
||||
require.Equal(t, tt.expected, st.needsPlainHttp(tt.release, tt.repo))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestNeedsInsecureSkipTLSVerify(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
release *ReleaseSpec
|
||||
repo *RepositorySpec
|
||||
defaults HelmSpec
|
||||
expected bool
|
||||
}{
|
||||
{
|
||||
name: "InsecureSkipTLSVerify in Release",
|
||||
release: &ReleaseSpec{
|
||||
InsecureSkipTLSVerify: true,
|
||||
},
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "SkipTLSVerify in Repository",
|
||||
repo: &RepositorySpec{
|
||||
SkipTLSVerify: true,
|
||||
},
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "InsecureSkipTLSVerify in HelmDefaults",
|
||||
defaults: HelmSpec{
|
||||
InsecureSkipTLSVerify: true,
|
||||
},
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "InsecureSkipTLSVerify not set",
|
||||
expected: false,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
st := &HelmState{
|
||||
ReleaseSetSpec: ReleaseSetSpec{
|
||||
HelmDefaults: tt.defaults,
|
||||
},
|
||||
}
|
||||
require.Equal(t, tt.expected, st.needsInsecureSkipTLSVerify(tt.release, tt.repo))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestHideChartURL(t *testing.T) {
|
||||
tests := []struct {
|
||||
input string
|
||||
|
|
|
|||
Loading…
Reference in New Issue