feat keyring supportting (#984)

* feat keyring supportting

Signed-off-by: yxxhero <aiopsclub@163.com>
This commit is contained in:
yxxhero 2023-08-23 10:00:45 +08:00 committed by GitHub
parent c3292f141c
commit 803ff8d0ab
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 7 deletions

View File

@ -149,6 +149,7 @@ type HelmSpec struct {
KubeContext string `yaml:"kubeContext,omitempty"` KubeContext string `yaml:"kubeContext,omitempty"`
Args []string `yaml:"args,omitempty"` Args []string `yaml:"args,omitempty"`
Verify bool `yaml:"verify"` Verify bool `yaml:"verify"`
Keyring string `yaml:"keyring,omitempty"`
// EnableDNS, when set to true, enable DNS lookups when rendering templates // EnableDNS, when set to true, enable DNS lookups when rendering templates
EnableDNS bool `yaml:"enableDNS"` EnableDNS bool `yaml:"enableDNS"`
// Devel, when set to true, use development versions, too. Equivalent to version '>0.0.0-0' // Devel, when set to true, use development versions, too. Equivalent to version '>0.0.0-0'
@ -199,6 +200,8 @@ type RepositorySpec struct {
Password string `yaml:"password,omitempty"` Password string `yaml:"password,omitempty"`
Managed string `yaml:"managed,omitempty"` Managed string `yaml:"managed,omitempty"`
OCI bool `yaml:"oci,omitempty"` OCI bool `yaml:"oci,omitempty"`
Verify bool `yaml:"verify,omitempty"`
Keyring string `yaml:"keyring,omitempty"`
PassCredentials bool `yaml:"passCredentials,omitempty"` PassCredentials bool `yaml:"passCredentials,omitempty"`
SkipTLSVerify bool `yaml:"skipTLSVerify,omitempty"` SkipTLSVerify bool `yaml:"skipTLSVerify,omitempty"`
} }
@ -226,7 +229,8 @@ type ReleaseSpec struct {
Version string `yaml:"version,omitempty"` Version string `yaml:"version,omitempty"`
// Verify enables signature verification on fetched chart. // Verify enables signature verification on fetched chart.
// Beware some (or many?) chart repositories and charts don't seem to support it. // Beware some (or many?) chart repositories and charts don't seem to support it.
Verify *bool `yaml:"verify,omitempty"` Verify *bool `yaml:"verify,omitempty"`
Keyring string `yaml:"keyring,omitempty"`
// EnableDNS, when set to true, enable DNS lookups when rendering templates // EnableDNS, when set to true, enable DNS lookups when rendering templates
EnableDNS *bool `yaml:"enableDNS,omitempty"` EnableDNS *bool `yaml:"enableDNS,omitempty"`
// Devel, when set to true, use development versions, too. Equivalent to version '>0.0.0-0' // Devel, when set to true, use development versions, too. Equivalent to version '>0.0.0-0'
@ -2447,6 +2451,18 @@ func (st *HelmState) appendConnectionFlags(flags []string, release *ReleaseSpec)
return flags return flags
} }
// appendKeyringFlags append all the helm command-line flags related to keyring
func (st *HelmState) appendKeyringFlags(flags []string, release *ReleaseSpec) []string {
switch {
case release.Keyring != "":
flags = append(flags, "--keyring", release.Keyring)
case st.HelmDefaults.Keyring != "":
flags = append(flags, "--keyring", st.HelmDefaults.Keyring)
}
return flags
}
func (st *HelmState) kubeConnectionFlags(release *ReleaseSpec) []string { func (st *HelmState) kubeConnectionFlags(release *ReleaseSpec) []string {
flags := []string{} flags := []string{}
if release.KubeContext != "" { if release.KubeContext != "" {
@ -2492,6 +2508,8 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp
flags = append(flags, "--verify") flags = append(flags, "--verify")
} }
flags = st.appendKeyringFlags(flags, release)
if release.EnableDNS != nil && *release.EnableDNS || release.EnableDNS == nil && st.HelmDefaults.EnableDNS { if release.EnableDNS != nil && *release.EnableDNS || release.EnableDNS == nil && st.HelmDefaults.EnableDNS {
flags = append(flags, "--enable-dns") flags = append(flags, "--enable-dns")
} }
@ -3483,6 +3501,12 @@ func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helm
if repo.SkipTLSVerify { if repo.SkipTLSVerify {
flags = append(flags, "--insecure-skip-tls-verify") flags = append(flags, "--insecure-skip-tls-verify")
} }
if repo.Verify {
flags = append(flags, "--verify")
}
if repo.Keyring != "" {
flags = append(flags, "--keyring", repo.Keyring)
}
} }
err := helm.ChartPull(qualifiedChartName, chartPath, flags...) err := helm.ChartPull(qualifiedChartName, chartPath, flags...)

View File

@ -38,39 +38,39 @@ func TestGenerateID(t *testing.T) {
run(testcase{ run(testcase{
subject: "baseline", subject: "baseline",
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
want: "foo-values-7884dc8d7c", want: "foo-values-6749dfb776",
}) })
run(testcase{ run(testcase{
subject: "different bytes content", subject: "different bytes content",
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
data: []byte(`{"k":"v"}`), data: []byte(`{"k":"v"}`),
want: "foo-values-67d6bbf498", want: "foo-values-84f9645959",
}) })
run(testcase{ run(testcase{
subject: "different map content", subject: "different map content",
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"}, release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
data: map[string]any{"k": "v"}, data: map[string]any{"k": "v"},
want: "foo-values-5d86d867b", want: "foo-values-7774fccb4f",
}) })
run(testcase{ run(testcase{
subject: "different chart", subject: "different chart",
release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"}, release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"},
want: "foo-values-5c47fc4b6d", want: "foo-values-5cdf68c495",
}) })
run(testcase{ run(testcase{
subject: "different name", subject: "different name",
release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"}, release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"},
want: "bar-values-7c87d9b8b", want: "bar-values-758d78db87",
}) })
run(testcase{ run(testcase{
subject: "specific ns", subject: "specific ns",
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"}, release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"},
want: "myns-foo-values-7fbc456bb4", want: "myns-foo-values-6888c4f5bf",
}) })
for id, n := range ids { for id, n := range ids {