mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-13 18:10:59 +00:00
Merge pull request #5270 from MrFreezeex/helm-kube-api
helm: add support for kube-version and add cli args for both kube-version and api-versions
This commit is contained in:
@@ -53,6 +53,15 @@ func (p *HelmChartInflationGeneratorPlugin) Config(
|
|||||||
if h.GeneralConfig().HelmConfig.Command == "" {
|
if h.GeneralConfig().HelmConfig.Command == "" {
|
||||||
return fmt.Errorf("must specify --helm-command")
|
return fmt.Errorf("must specify --helm-command")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CLI args takes precedence
|
||||||
|
if h.GeneralConfig().HelmConfig.KubeVersion != "" {
|
||||||
|
p.HelmChart.KubeVersion = h.GeneralConfig().HelmConfig.KubeVersion
|
||||||
|
}
|
||||||
|
if len(h.GeneralConfig().HelmConfig.ApiVersions) != 0 {
|
||||||
|
p.HelmChart.ApiVersions = h.GeneralConfig().HelmConfig.ApiVersions
|
||||||
|
}
|
||||||
|
|
||||||
p.h = h
|
p.h = h
|
||||||
if err = yaml.Unmarshal(config, p); err != nil {
|
if err = yaml.Unmarshal(config, p); err != nil {
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -684,6 +684,208 @@ spec:
|
|||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestHelmChartInflationGeneratorForMultipleKubeVersions(t *testing.T) {
|
||||||
|
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
|
||||||
|
defer th.Reset()
|
||||||
|
if err := th.ErrIfNoHelm(); err != nil {
|
||||||
|
t.Skip("skipping: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
copyValuesFilesTestChartsIntoHarness(t, th)
|
||||||
|
|
||||||
|
th.WriteK(th.GetRoot(), `
|
||||||
|
namespace: default
|
||||||
|
helmCharts:
|
||||||
|
- name: minecraft
|
||||||
|
repo: https://itzg.github.io/minecraft-server-charts
|
||||||
|
version: 4.11.0
|
||||||
|
releaseName: test
|
||||||
|
kubeVersion: "1.16"
|
||||||
|
valuesInline:
|
||||||
|
minecraftServer:
|
||||||
|
extraPorts:
|
||||||
|
- name: map
|
||||||
|
containerPort: 8123
|
||||||
|
protocol: TCP
|
||||||
|
service:
|
||||||
|
enabled: false
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
`)
|
||||||
|
|
||||||
|
m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
|
||||||
|
th.AssertActualEqualsExpected(m, `
|
||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
rcon-password: Q0hBTkdFTUUh
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: test-minecraft
|
||||||
|
app.kubernetes.io/instance: test-minecraft
|
||||||
|
app.kubernetes.io/name: minecraft
|
||||||
|
app.kubernetes.io/version: 4.11.0
|
||||||
|
chart: minecraft-4.11.0
|
||||||
|
heritage: Helm
|
||||||
|
release: test
|
||||||
|
name: test-minecraft-rcon
|
||||||
|
namespace: default
|
||||||
|
type: Opaque
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
cf-api-key: Q0hBTkdFTUUh
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: test-minecraft
|
||||||
|
app.kubernetes.io/instance: test-minecraft
|
||||||
|
app.kubernetes.io/name: minecraft
|
||||||
|
app.kubernetes.io/version: 4.11.0
|
||||||
|
chart: minecraft-4.11.0
|
||||||
|
heritage: Helm
|
||||||
|
release: test
|
||||||
|
name: test-minecraft-curseforge
|
||||||
|
namespace: default
|
||||||
|
type: Opaque
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: test-minecraft
|
||||||
|
app.kubernetes.io/instance: test-minecraft
|
||||||
|
app.kubernetes.io/name: minecraft
|
||||||
|
app.kubernetes.io/version: 4.11.0
|
||||||
|
chart: minecraft-4.11.0
|
||||||
|
heritage: Helm
|
||||||
|
release: test
|
||||||
|
name: test-minecraft
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: minecraft
|
||||||
|
port: 25565
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: minecraft
|
||||||
|
selector:
|
||||||
|
app: test-minecraft
|
||||||
|
type: ClusterIP
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: test-minecraft-map
|
||||||
|
app.kubernetes.io/instance: test-minecraft
|
||||||
|
app.kubernetes.io/name: minecraft
|
||||||
|
app.kubernetes.io/version: 4.11.0
|
||||||
|
chart: minecraft-4.11.0
|
||||||
|
heritage: Helm
|
||||||
|
release: test
|
||||||
|
name: test-minecraft-map
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
rules: null
|
||||||
|
`)
|
||||||
|
|
||||||
|
th.WriteK(th.GetRoot(), `
|
||||||
|
namespace: default
|
||||||
|
helmCharts:
|
||||||
|
- name: minecraft
|
||||||
|
repo: https://itzg.github.io/minecraft-server-charts
|
||||||
|
version: 4.11.0
|
||||||
|
releaseName: test
|
||||||
|
kubeVersion: "1.27"
|
||||||
|
valuesInline:
|
||||||
|
minecraftServer:
|
||||||
|
extraPorts:
|
||||||
|
- name: map
|
||||||
|
containerPort: 8123
|
||||||
|
protocol: TCP
|
||||||
|
service:
|
||||||
|
enabled: false
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
`)
|
||||||
|
|
||||||
|
m = th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
|
||||||
|
th.AssertActualEqualsExpected(m, `
|
||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
rcon-password: Q0hBTkdFTUUh
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: test-minecraft
|
||||||
|
app.kubernetes.io/instance: test-minecraft
|
||||||
|
app.kubernetes.io/name: minecraft
|
||||||
|
app.kubernetes.io/version: 4.11.0
|
||||||
|
chart: minecraft-4.11.0
|
||||||
|
heritage: Helm
|
||||||
|
release: test
|
||||||
|
name: test-minecraft-rcon
|
||||||
|
namespace: default
|
||||||
|
type: Opaque
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
cf-api-key: Q0hBTkdFTUUh
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: test-minecraft
|
||||||
|
app.kubernetes.io/instance: test-minecraft
|
||||||
|
app.kubernetes.io/name: minecraft
|
||||||
|
app.kubernetes.io/version: 4.11.0
|
||||||
|
chart: minecraft-4.11.0
|
||||||
|
heritage: Helm
|
||||||
|
release: test
|
||||||
|
name: test-minecraft-curseforge
|
||||||
|
namespace: default
|
||||||
|
type: Opaque
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: test-minecraft
|
||||||
|
app.kubernetes.io/instance: test-minecraft
|
||||||
|
app.kubernetes.io/name: minecraft
|
||||||
|
app.kubernetes.io/version: 4.11.0
|
||||||
|
chart: minecraft-4.11.0
|
||||||
|
heritage: Helm
|
||||||
|
release: test
|
||||||
|
name: test-minecraft
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: minecraft
|
||||||
|
port: 25565
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: minecraft
|
||||||
|
selector:
|
||||||
|
app: test-minecraft
|
||||||
|
type: ClusterIP
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: test-minecraft-map
|
||||||
|
app.kubernetes.io/instance: test-minecraft
|
||||||
|
app.kubernetes.io/name: minecraft
|
||||||
|
app.kubernetes.io/version: 4.11.0
|
||||||
|
chart: minecraft-4.11.0
|
||||||
|
heritage: Helm
|
||||||
|
release: test
|
||||||
|
name: test-minecraft-map
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
rules: null
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
func copyValuesFilesTestChartsIntoHarness(t *testing.T, th *kusttest_test.HarnessEnhanced) {
|
func copyValuesFilesTestChartsIntoHarness(t *testing.T, th *kusttest_test.HarnessEnhanced) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
|
|||||||
@@ -88,6 +88,9 @@ type HelmChart struct {
|
|||||||
// ApiVersions is the kubernetes apiversions used for Capabilities.APIVersions
|
// ApiVersions is the kubernetes apiversions used for Capabilities.APIVersions
|
||||||
ApiVersions []string `json:"apiVersions,omitempty" yaml:"apiVersions,omitempty"`
|
ApiVersions []string `json:"apiVersions,omitempty" yaml:"apiVersions,omitempty"`
|
||||||
|
|
||||||
|
// KubeVersion is the kubernetes version used by Helm for Capabilities.KubeVersion"
|
||||||
|
KubeVersion string `json:"kubeVersion,omitempty" yaml:"kubeVersion,omitempty"`
|
||||||
|
|
||||||
// NameTemplate is for specifying the name template used to name the release.
|
// NameTemplate is for specifying the name template used to name the release.
|
||||||
NameTemplate string `json:"nameTemplate,omitempty" yaml:"nameTemplate,omitempty"`
|
NameTemplate string `json:"nameTemplate,omitempty" yaml:"nameTemplate,omitempty"`
|
||||||
|
|
||||||
@@ -172,6 +175,10 @@ func (h HelmChart) AsHelmArgs(absChartHome string) []string {
|
|||||||
for _, apiVer := range h.ApiVersions {
|
for _, apiVer := range h.ApiVersions {
|
||||||
args = append(args, "--api-versions", apiVer)
|
args = append(args, "--api-versions", apiVer)
|
||||||
}
|
}
|
||||||
|
if h.KubeVersion != "" {
|
||||||
|
args = append(args, "--kube-version", h.KubeVersion)
|
||||||
|
}
|
||||||
|
|
||||||
if h.IncludeCRDs {
|
if h.IncludeCRDs {
|
||||||
args = append(args, "--include-crds")
|
args = append(args, "--include-crds")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ func TestAsHelmArgs(t *testing.T) {
|
|||||||
Version: "1.0.0",
|
Version: "1.0.0",
|
||||||
Repo: "https://helm.releases.hashicorp.com",
|
Repo: "https://helm.releases.hashicorp.com",
|
||||||
ApiVersions: []string{"foo", "bar"},
|
ApiVersions: []string{"foo", "bar"},
|
||||||
|
KubeVersion: "1.27",
|
||||||
NameTemplate: "template",
|
NameTemplate: "template",
|
||||||
SkipTests: true,
|
SkipTests: true,
|
||||||
IncludeCRDs: true,
|
IncludeCRDs: true,
|
||||||
@@ -33,6 +34,7 @@ func TestAsHelmArgs(t *testing.T) {
|
|||||||
"-f", "values",
|
"-f", "values",
|
||||||
"-f", "values1", "-f", "values2",
|
"-f", "values1", "-f", "values2",
|
||||||
"--api-versions", "foo", "--api-versions", "bar",
|
"--api-versions", "foo", "--api-versions", "bar",
|
||||||
|
"--kube-version", "1.27",
|
||||||
"--include-crds",
|
"--include-crds",
|
||||||
"--skip-tests",
|
"--skip-tests",
|
||||||
"--no-hooks"})
|
"--no-hooks"})
|
||||||
|
|||||||
@@ -4,8 +4,10 @@
|
|||||||
package types
|
package types
|
||||||
|
|
||||||
type HelmConfig struct {
|
type HelmConfig struct {
|
||||||
Enabled bool
|
Enabled bool
|
||||||
Command string
|
Command string
|
||||||
|
ApiVersions []string
|
||||||
|
KubeVersion string
|
||||||
}
|
}
|
||||||
|
|
||||||
// PluginConfig holds plugin configuration.
|
// PluginConfig holds plugin configuration.
|
||||||
|
|||||||
@@ -27,10 +27,12 @@ var theFlags struct {
|
|||||||
managedByLabel bool
|
managedByLabel bool
|
||||||
helm bool
|
helm bool
|
||||||
}
|
}
|
||||||
helmCommand string
|
helmCommand string
|
||||||
loadRestrictor string
|
helmApiVersions []string
|
||||||
reorderOutput string
|
helmKubeVersion string
|
||||||
fnOptions types.FnPluginLoadingOptions
|
loadRestrictor string
|
||||||
|
reorderOutput string
|
||||||
|
fnOptions types.FnPluginLoadingOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
type Help struct {
|
type Help struct {
|
||||||
@@ -153,6 +155,8 @@ func HonorKustomizeFlags(kOpts *krusty.Options, flags *flag.FlagSet) *krusty.Opt
|
|||||||
kOpts.PluginConfig.HelmConfig.Enabled = theFlags.enable.helm
|
kOpts.PluginConfig.HelmConfig.Enabled = theFlags.enable.helm
|
||||||
}
|
}
|
||||||
kOpts.PluginConfig.HelmConfig.Command = theFlags.helmCommand
|
kOpts.PluginConfig.HelmConfig.Command = theFlags.helmCommand
|
||||||
|
kOpts.PluginConfig.HelmConfig.ApiVersions = theFlags.helmApiVersions
|
||||||
|
kOpts.PluginConfig.HelmConfig.KubeVersion = theFlags.helmKubeVersion
|
||||||
kOpts.AddManagedbyLabel = isManagedByLabelEnabled()
|
kOpts.AddManagedbyLabel = isManagedByLabelEnabled()
|
||||||
return kOpts
|
return kOpts
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,4 +21,14 @@ func AddFlagEnableHelm(set *pflag.FlagSet) {
|
|||||||
"helm-command",
|
"helm-command",
|
||||||
"helm", // default
|
"helm", // default
|
||||||
"helm command (path to executable)")
|
"helm command (path to executable)")
|
||||||
|
set.StringArrayVar(
|
||||||
|
&theFlags.helmApiVersions,
|
||||||
|
"helm-api-versions",
|
||||||
|
[]string{}, // default
|
||||||
|
"Kubernetes api versions used by Helm for Capabilities.APIVersions")
|
||||||
|
set.StringVar(
|
||||||
|
&theFlags.helmKubeVersion,
|
||||||
|
"helm-kube-version",
|
||||||
|
"", // default
|
||||||
|
"Kubernetes version used by Helm for Capabilities.KubeVersion")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,15 @@ func (p *plugin) Config(
|
|||||||
if h.GeneralConfig().HelmConfig.Command == "" {
|
if h.GeneralConfig().HelmConfig.Command == "" {
|
||||||
return fmt.Errorf("must specify --helm-command")
|
return fmt.Errorf("must specify --helm-command")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CLI args takes precedence
|
||||||
|
if h.GeneralConfig().HelmConfig.KubeVersion != "" {
|
||||||
|
p.HelmChart.KubeVersion = h.GeneralConfig().HelmConfig.KubeVersion
|
||||||
|
}
|
||||||
|
if len(h.GeneralConfig().HelmConfig.ApiVersions) != 0 {
|
||||||
|
p.HelmChart.ApiVersions = h.GeneralConfig().HelmConfig.ApiVersions
|
||||||
|
}
|
||||||
|
|
||||||
p.h = h
|
p.h = h
|
||||||
if err = yaml.Unmarshal(config, p); err != nil {
|
if err = yaml.Unmarshal(config, p); err != nil {
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user