...

Source file src/sigs.k8s.io/kustomize/api/krusty/helmchartinflationgenerator_test.go

Documentation: sigs.k8s.io/kustomize/api/krusty

     1  // Copyright 2020 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package krusty_test
     5  
     6  import (
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  	kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
    12  	"sigs.k8s.io/kustomize/kyaml/copyutil"
    13  )
    14  
    15  const (
    16  	expectedHelm = `
    17  apiVersion: v1
    18  data:
    19    rcon-password: Q0hBTkdFTUUh
    20  kind: Secret
    21  metadata:
    22    labels:
    23      app: test-minecraft
    24      chart: minecraft-3.1.3
    25      heritage: Helm
    26      release: test
    27    name: test-minecraft
    28  type: Opaque
    29  ---
    30  apiVersion: v1
    31  kind: Service
    32  metadata:
    33    labels:
    34      app: test-minecraft
    35      chart: minecraft-3.1.3
    36      heritage: Helm
    37      release: test
    38    name: test-minecraft
    39  spec:
    40    ports:
    41    - name: minecraft
    42      port: 25565
    43      protocol: TCP
    44      targetPort: minecraft
    45    selector:
    46      app: test-minecraft
    47    type: ClusterIP
    48  `
    49  
    50  	expectedHelmExternalDNS = `
    51  apiVersion: apps/v1
    52  kind: Deployment
    53  metadata:
    54    labels:
    55      app.kubernetes.io/instance: test
    56      app.kubernetes.io/managed-by: Helm
    57      app.kubernetes.io/name: external-dns
    58      helm.sh/chart: external-dns-6.19.2
    59    name: test-external-dns
    60    namespace: default
    61  spec:
    62    replicas: 1
    63    selector:
    64      matchLabels:
    65        app.kubernetes.io/instance: test
    66        app.kubernetes.io/name: external-dns
    67    template:
    68      metadata:
    69        annotations: null
    70        labels:
    71          app.kubernetes.io/instance: test
    72          app.kubernetes.io/managed-by: Helm
    73          app.kubernetes.io/name: external-dns
    74          helm.sh/chart: external-dns-6.19.2
    75      spec:
    76        affinity:
    77          nodeAffinity: null
    78          podAffinity: null
    79          podAntiAffinity:
    80            preferredDuringSchedulingIgnoredDuringExecution:
    81            - podAffinityTerm:
    82                labelSelector:
    83                  matchLabels:
    84                    app.kubernetes.io/instance: test
    85                    app.kubernetes.io/name: external-dns
    86                topologyKey: kubernetes.io/hostname
    87              weight: 1
    88        containers:
    89        - args:
    90          - --metrics-address=:7979
    91          - --log-level=info
    92          - --log-format=text
    93          - --policy=upsert-only
    94          - --provider=aws
    95          - --registry=txt
    96          - --interval=1m
    97          - --source=service
    98          - --source=ingress
    99          - --aws-api-retries=3
   100          - --aws-zone-type=
   101          - --aws-batch-change-size=1000
   102          env:
   103          - name: AWS_DEFAULT_REGION
   104            value: us-east-1
   105          envFrom: null
   106          image: docker.io/bitnami/external-dns:0.13.4-debian-11-r14
   107          imagePullPolicy: IfNotPresent
   108          livenessProbe:
   109            failureThreshold: 2
   110            httpGet:
   111              path: /healthz
   112              port: http
   113            initialDelaySeconds: 10
   114            periodSeconds: 10
   115            successThreshold: 1
   116            timeoutSeconds: 5
   117          name: external-dns
   118          ports:
   119          - containerPort: 7979
   120            name: http
   121          readinessProbe:
   122            failureThreshold: 6
   123            httpGet:
   124              path: /healthz
   125              port: http
   126            initialDelaySeconds: 5
   127            periodSeconds: 10
   128            successThreshold: 1
   129            timeoutSeconds: 5
   130          resources:
   131            limits: {}
   132            requests: {}
   133          volumeMounts: null
   134        securityContext:
   135          fsGroup: 1001
   136          runAsUser: 1001
   137        serviceAccountName: default
   138        volumes: null
   139  `
   140  )
   141  
   142  func TestHelmChartInflationGeneratorOld(t *testing.T) {
   143  	th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
   144  	defer th.Reset()
   145  	if err := th.ErrIfNoHelm(); err != nil {
   146  		t.Skip("skipping: " + err.Error())
   147  	}
   148  
   149  	th.WriteK(th.GetRoot(), `
   150  helmChartInflationGenerator:
   151  - chartName: minecraft
   152    chartRepoUrl: https://itzg.github.io/minecraft-server-charts
   153    chartVersion: 3.1.3
   154    releaseName: test
   155  `)
   156  
   157  	m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
   158  	th.AssertActualEqualsExpected(m, expectedHelm)
   159  }
   160  
   161  func TestHelmChartInflationGenerator(t *testing.T) {
   162  	th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
   163  	defer th.Reset()
   164  	if err := th.ErrIfNoHelm(); err != nil {
   165  		t.Skip("skipping: " + err.Error())
   166  	}
   167  
   168  	th.WriteK(th.GetRoot(), `
   169  helmCharts:
   170  - name: minecraft
   171    repo: https://itzg.github.io/minecraft-server-charts
   172    version: 3.1.3
   173    releaseName: test
   174  `)
   175  
   176  	m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
   177  	th.AssertActualEqualsExpected(m, expectedHelm)
   178  }
   179  
   180  func TestHelmChartInflationGeneratorWithOciRepository(t *testing.T) {
   181  	th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
   182  	defer th.Reset()
   183  	if err := th.ErrIfNoHelm(); err != nil {
   184  		t.Skip("skipping: " + err.Error())
   185  	}
   186  
   187  	th.WriteK(th.GetRoot(), `
   188  helmCharts:
   189  - name: external-dns
   190    repo: oci://registry-1.docker.io/bitnamicharts
   191    version: 6.19.2
   192    releaseName: test
   193    valuesInline:
   194      crd:
   195        create: false
   196      rbac:
   197        create: false
   198      serviceAccount:
   199        create: false
   200      service:
   201        enabled: false
   202  
   203  `)
   204  
   205  	m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
   206  	th.AssertActualEqualsExpected(m, expectedHelmExternalDNS)
   207  }
   208  
   209  func TestHelmChartInflationGeneratorWithOciRepositoryWithAppendSlash(t *testing.T) {
   210  	th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
   211  	defer th.Reset()
   212  	if err := th.ErrIfNoHelm(); err != nil {
   213  		t.Skip("skipping: " + err.Error())
   214  	}
   215  
   216  	th.WriteK(th.GetRoot(), `
   217  helmCharts:
   218  - name: external-dns
   219    repo: oci://registry-1.docker.io/bitnamicharts/
   220    version: 6.19.2
   221    releaseName: test
   222    valuesInline:
   223      crd:
   224        create: false
   225      rbac:
   226        create: false
   227      serviceAccount:
   228        create: false
   229      service:
   230        enabled: false
   231  
   232  `)
   233  
   234  	m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
   235  	th.AssertActualEqualsExpected(m, expectedHelmExternalDNS)
   236  }
   237  
   238  // Last mile helm - show how kustomize puts helm charts into different
   239  // namespaces with different customizations.
   240  func TestHelmChartProdVsDev(t *testing.T) {
   241  	th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
   242  	defer th.Reset()
   243  	if err := th.ErrIfNoHelm(); err != nil {
   244  		t.Skip("skipping: " + err.Error())
   245  	}
   246  	dirBase := th.MkDir("base")
   247  	dirProd := th.MkDir("prod")
   248  	dirDev := th.MkDir("dev")
   249  	dirBoth := th.MkDir("both")
   250  
   251  	th.WriteK(dirBase, `
   252  helmCharts:
   253  - name: minecraft
   254    repo: https://itzg.github.io/minecraft-server-charts
   255    version: 3.1.3
   256    releaseName: test
   257  `)
   258  	th.WriteK(dirProd, `
   259  namespace: prod
   260  namePrefix: myProd-
   261  resources:
   262  - ../base
   263  `)
   264  	th.WriteK(dirDev, `
   265  namespace: dev
   266  namePrefix: myDev-
   267  resources:
   268  - ../base
   269  `)
   270  	th.WriteK(dirBoth, `
   271  resources:
   272  - ../dev
   273  - ../prod
   274  `)
   275  
   276  	// Base unchanged
   277  	m := th.Run(dirBase, th.MakeOptionsPluginsEnabled())
   278  	th.AssertActualEqualsExpected(m, expectedHelm)
   279  
   280  	// Prod has a "prod" namespace and a prefix.
   281  	m = th.Run(dirProd, th.MakeOptionsPluginsEnabled())
   282  	th.AssertActualEqualsExpected(m, `
   283  apiVersion: v1
   284  data:
   285    rcon-password: Q0hBTkdFTUUh
   286  kind: Secret
   287  metadata:
   288    labels:
   289      app: test-minecraft
   290      chart: minecraft-3.1.3
   291      heritage: Helm
   292      release: test
   293    name: myProd-test-minecraft
   294    namespace: prod
   295  type: Opaque
   296  ---
   297  apiVersion: v1
   298  kind: Service
   299  metadata:
   300    labels:
   301      app: test-minecraft
   302      chart: minecraft-3.1.3
   303      heritage: Helm
   304      release: test
   305    name: myProd-test-minecraft
   306    namespace: prod
   307  spec:
   308    ports:
   309    - name: minecraft
   310      port: 25565
   311      protocol: TCP
   312      targetPort: minecraft
   313    selector:
   314      app: test-minecraft
   315    type: ClusterIP
   316  `)
   317  
   318  	// Both has two namespaces.
   319  	m = th.Run(dirBoth, th.MakeOptionsPluginsEnabled())
   320  	th.AssertActualEqualsExpected(m, `
   321  apiVersion: v1
   322  data:
   323    rcon-password: Q0hBTkdFTUUh
   324  kind: Secret
   325  metadata:
   326    labels:
   327      app: test-minecraft
   328      chart: minecraft-3.1.3
   329      heritage: Helm
   330      release: test
   331    name: myDev-test-minecraft
   332    namespace: dev
   333  type: Opaque
   334  ---
   335  apiVersion: v1
   336  kind: Service
   337  metadata:
   338    labels:
   339      app: test-minecraft
   340      chart: minecraft-3.1.3
   341      heritage: Helm
   342      release: test
   343    name: myDev-test-minecraft
   344    namespace: dev
   345  spec:
   346    ports:
   347    - name: minecraft
   348      port: 25565
   349      protocol: TCP
   350      targetPort: minecraft
   351    selector:
   352      app: test-minecraft
   353    type: ClusterIP
   354  ---
   355  apiVersion: v1
   356  data:
   357    rcon-password: Q0hBTkdFTUUh
   358  kind: Secret
   359  metadata:
   360    labels:
   361      app: test-minecraft
   362      chart: minecraft-3.1.3
   363      heritage: Helm
   364      release: test
   365    name: myProd-test-minecraft
   366    namespace: prod
   367  type: Opaque
   368  ---
   369  apiVersion: v1
   370  kind: Service
   371  metadata:
   372    labels:
   373      app: test-minecraft
   374      chart: minecraft-3.1.3
   375      heritage: Helm
   376      release: test
   377    name: myProd-test-minecraft
   378    namespace: prod
   379  spec:
   380    ports:
   381    - name: minecraft
   382      port: 25565
   383      protocol: TCP
   384      targetPort: minecraft
   385    selector:
   386      app: test-minecraft
   387    type: ClusterIP
   388  `)
   389  }
   390  
   391  func TestHelmChartInflationGeneratorMultipleValuesFiles(t *testing.T) {
   392  	th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
   393  	defer th.Reset()
   394  	if err := th.ErrIfNoHelm(); err != nil {
   395  		t.Skip("skipping: " + err.Error())
   396  	}
   397  
   398  	copyValuesFilesTestChartsIntoHarness(t, th)
   399  
   400  	th.WriteK(th.GetRoot(), `
   401  helmCharts:
   402    - name: test-chart
   403      releaseName: test-chart
   404      additionalValuesFiles:
   405      - charts/valuesFiles/file1.yaml
   406      - charts/valuesFiles/file2.yaml
   407  `)
   408  
   409  	m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
   410  	asYaml, err := m.AsYaml()
   411  	require.NoError(t, err)
   412  	require.Equal(t, string(asYaml), `apiVersion: apps/v1
   413  kind: Deployment
   414  metadata:
   415    labels:
   416      chart: test-1.0.0
   417    name: my-deploy
   418    namespace: file-2
   419  spec:
   420    replicas: 1
   421    selector:
   422      matchLabels:
   423        app: test
   424    template:
   425      spec:
   426        containers:
   427        - image: test-image-file1:file1
   428          imagePullPolicy: Never
   429  ---
   430  apiVersion: apps/v1
   431  kind: Pod
   432  metadata:
   433    annotations:
   434      helm.sh/hook: test
   435    name: test-chart
   436  `)
   437  }
   438  
   439  func TestHelmChartInflationGeneratorApiVersions(t *testing.T) {
   440  	th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
   441  	defer th.Reset()
   442  	if err := th.ErrIfNoHelm(); err != nil {
   443  		t.Skip("skipping: " + err.Error())
   444  	}
   445  
   446  	copyValuesFilesTestChartsIntoHarness(t, th)
   447  
   448  	th.WriteK(th.GetRoot(), `
   449  helmCharts:
   450    - name: test-chart
   451      releaseName: test-chart
   452      apiVersions:
   453      - foo/v1
   454  `)
   455  
   456  	m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
   457  	asYaml, err := m.AsYaml()
   458  	require.NoError(t, err)
   459  	require.Equal(t, string(asYaml), `apiVersion: foo/v1
   460  kind: Deployment
   461  metadata:
   462    labels:
   463      chart: test-1.0.0
   464    name: my-deploy
   465    namespace: default
   466  spec:
   467    replicas: 1
   468    selector:
   469      matchLabels:
   470        app: test
   471    template:
   472      spec:
   473        containers:
   474        - image: test-image:v1.0.0
   475          imagePullPolicy: Always
   476  ---
   477  apiVersion: foo/v1
   478  kind: Pod
   479  metadata:
   480    annotations:
   481      helm.sh/hook: test
   482    name: test-chart
   483  `)
   484  }
   485  
   486  func TestHelmChartInflationGeneratorSkipTests(t *testing.T) {
   487  	th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
   488  	defer th.Reset()
   489  	if err := th.ErrIfNoHelm(); err != nil {
   490  		t.Skip("skipping: " + err.Error())
   491  	}
   492  
   493  	copyValuesFilesTestChartsIntoHarness(t, th)
   494  
   495  	th.WriteK(th.GetRoot(), `
   496  helmCharts:
   497    - name: test-chart
   498      releaseName: test-chart
   499      skipTests: true
   500  `)
   501  
   502  	m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
   503  	asYaml, err := m.AsYaml()
   504  	require.NoError(t, err)
   505  	require.Equal(t, string(asYaml), `apiVersion: apps/v1
   506  kind: Deployment
   507  metadata:
   508    labels:
   509      chart: test-1.0.0
   510    name: my-deploy
   511    namespace: default
   512  spec:
   513    replicas: 1
   514    selector:
   515      matchLabels:
   516        app: test
   517    template:
   518      spec:
   519        containers:
   520        - image: test-image:v1.0.0
   521          imagePullPolicy: Always
   522  `)
   523  }
   524  
   525  func TestHelmChartInflationGeneratorNameTemplate(t *testing.T) {
   526  	th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
   527  	defer th.Reset()
   528  	if err := th.ErrIfNoHelm(); err != nil {
   529  		t.Skip("skipping: " + err.Error())
   530  	}
   531  
   532  	copyValuesFilesTestChartsIntoHarness(t, th)
   533  
   534  	th.WriteK(th.GetRoot(), `
   535  helmCharts:
   536    - name: test-chart
   537      nameTemplate: name-template
   538  `)
   539  
   540  	m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
   541  	asYaml, err := m.AsYaml()
   542  	require.NoError(t, err)
   543  	require.Equal(t, string(asYaml), `apiVersion: apps/v1
   544  kind: Deployment
   545  metadata:
   546    labels:
   547      chart: test-1.0.0
   548    name: my-deploy
   549    namespace: default
   550  spec:
   551    replicas: 1
   552    selector:
   553      matchLabels:
   554        app: test
   555    template:
   556      spec:
   557        containers:
   558        - image: test-image:v1.0.0
   559          imagePullPolicy: Always
   560  ---
   561  apiVersion: apps/v1
   562  kind: Pod
   563  metadata:
   564    annotations:
   565      helm.sh/hook: test
   566    name: name-template
   567  `)
   568  }
   569  
   570  // Reference: https://github.com/kubernetes-sigs/kustomize/issues/5163
   571  func TestHelmChartInflationGeneratorForMultipleChartsDifferentVersion(t *testing.T) {
   572  	th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
   573  	defer th.Reset()
   574  	if err := th.ErrIfNoHelm(); err != nil {
   575  		t.Skip("skipping: " + err.Error())
   576  	}
   577  
   578  	copyValuesFilesTestChartsIntoHarness(t, th)
   579  
   580  	th.WriteK(th.GetRoot(), `
   581  namespace: default
   582  helmCharts:
   583    - name: test-chart
   584      releaseName: test
   585      version: 1.0.0
   586      skipTests: true
   587    - name: minecraft
   588      repo: https://itzg.github.io/minecraft-server-charts
   589      version: 3.1.3
   590      releaseName: test-1
   591    - name: minecraft
   592      repo: https://itzg.github.io/minecraft-server-charts
   593      version: 3.1.4
   594      releaseName: test-2
   595  `)
   596  
   597  	m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
   598  	th.AssertActualEqualsExpected(m, `
   599  apiVersion: apps/v1
   600  kind: Deployment
   601  metadata:
   602    labels:
   603      chart: test-1.0.0
   604    name: my-deploy
   605    namespace: default
   606  spec:
   607    replicas: 1
   608    selector:
   609      matchLabels:
   610        app: test
   611    template:
   612      spec:
   613        containers:
   614        - image: test-image:v1.0.0
   615          imagePullPolicy: Always
   616  ---
   617  apiVersion: v1
   618  data:
   619    rcon-password: Q0hBTkdFTUUh
   620  kind: Secret
   621  metadata:
   622    labels:
   623      app: test-1-minecraft
   624      chart: minecraft-3.1.3
   625      heritage: Helm
   626      release: test-1
   627    name: test-1-minecraft
   628    namespace: default
   629  type: Opaque
   630  ---
   631  apiVersion: v1
   632  kind: Service
   633  metadata:
   634    labels:
   635      app: test-1-minecraft
   636      chart: minecraft-3.1.3
   637      heritage: Helm
   638      release: test-1
   639    name: test-1-minecraft
   640    namespace: default
   641  spec:
   642    ports:
   643    - name: minecraft
   644      port: 25565
   645      protocol: TCP
   646      targetPort: minecraft
   647    selector:
   648      app: test-1-minecraft
   649    type: ClusterIP
   650  ---
   651  apiVersion: v1
   652  data:
   653    rcon-password: Q0hBTkdFTUUh
   654  kind: Secret
   655  metadata:
   656    labels:
   657      app: test-2-minecraft
   658      chart: minecraft-3.1.4
   659      heritage: Helm
   660      release: test-2
   661    name: test-2-minecraft
   662    namespace: default
   663  type: Opaque
   664  ---
   665  apiVersion: v1
   666  kind: Service
   667  metadata:
   668    labels:
   669      app: test-2-minecraft
   670      chart: minecraft-3.1.4
   671      heritage: Helm
   672      release: test-2
   673    name: test-2-minecraft
   674    namespace: default
   675  spec:
   676    ports:
   677    - name: minecraft
   678      port: 25565
   679      protocol: TCP
   680      targetPort: minecraft
   681    selector:
   682      app: test-2-minecraft
   683    type: ClusterIP
   684  `)
   685  }
   686  
   687  func TestHelmChartInflationGeneratorForMultipleKubeVersions(t *testing.T) {
   688  	th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
   689  	defer th.Reset()
   690  	if err := th.ErrIfNoHelm(); err != nil {
   691  		t.Skip("skipping: " + err.Error())
   692  	}
   693  
   694  	copyValuesFilesTestChartsIntoHarness(t, th)
   695  
   696  	th.WriteK(th.GetRoot(), `
   697  namespace: default
   698  helmCharts:
   699    - name: minecraft
   700      repo: https://itzg.github.io/minecraft-server-charts
   701      version: 4.11.0
   702      releaseName: test
   703      kubeVersion: "1.16"
   704      valuesInline:
   705        minecraftServer:
   706          extraPorts:
   707            - name: map
   708              containerPort: 8123
   709              protocol: TCP
   710              service:
   711                enabled: false
   712              ingress:
   713                enabled: true
   714  `)
   715  
   716  	m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
   717  	th.AssertActualEqualsExpected(m, `
   718  apiVersion: v1
   719  data:
   720    rcon-password: Q0hBTkdFTUUh
   721  kind: Secret
   722  metadata:
   723    labels:
   724      app: test-minecraft
   725      app.kubernetes.io/instance: test-minecraft
   726      app.kubernetes.io/name: minecraft
   727      app.kubernetes.io/version: 4.11.0
   728      chart: minecraft-4.11.0
   729      heritage: Helm
   730      release: test
   731    name: test-minecraft-rcon
   732    namespace: default
   733  type: Opaque
   734  ---
   735  apiVersion: v1
   736  data:
   737    cf-api-key: Q0hBTkdFTUUh
   738  kind: Secret
   739  metadata:
   740    labels:
   741      app: test-minecraft
   742      app.kubernetes.io/instance: test-minecraft
   743      app.kubernetes.io/name: minecraft
   744      app.kubernetes.io/version: 4.11.0
   745      chart: minecraft-4.11.0
   746      heritage: Helm
   747      release: test
   748    name: test-minecraft-curseforge
   749    namespace: default
   750  type: Opaque
   751  ---
   752  apiVersion: v1
   753  kind: Service
   754  metadata:
   755    labels:
   756      app: test-minecraft
   757      app.kubernetes.io/instance: test-minecraft
   758      app.kubernetes.io/name: minecraft
   759      app.kubernetes.io/version: 4.11.0
   760      chart: minecraft-4.11.0
   761      heritage: Helm
   762      release: test
   763    name: test-minecraft
   764    namespace: default
   765  spec:
   766    ports:
   767    - name: minecraft
   768      port: 25565
   769      protocol: TCP
   770      targetPort: minecraft
   771    selector:
   772      app: test-minecraft
   773    type: ClusterIP
   774  ---
   775  apiVersion: networking.k8s.io/v1beta1
   776  kind: Ingress
   777  metadata:
   778    labels:
   779      app: test-minecraft-map
   780      app.kubernetes.io/instance: test-minecraft
   781      app.kubernetes.io/name: minecraft
   782      app.kubernetes.io/version: 4.11.0
   783      chart: minecraft-4.11.0
   784      heritage: Helm
   785      release: test
   786    name: test-minecraft-map
   787    namespace: default
   788  spec:
   789    rules: null
   790  `)
   791  
   792  	th.WriteK(th.GetRoot(), `
   793  namespace: default
   794  helmCharts:
   795    - name: minecraft
   796      repo: https://itzg.github.io/minecraft-server-charts
   797      version: 4.11.0
   798      releaseName: test
   799      kubeVersion: "1.27"
   800      valuesInline:
   801        minecraftServer:
   802          extraPorts:
   803            - name: map
   804              containerPort: 8123
   805              protocol: TCP
   806              service:
   807                enabled: false
   808              ingress:
   809                enabled: true
   810  `)
   811  
   812  	m = th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
   813  	th.AssertActualEqualsExpected(m, `
   814  apiVersion: v1
   815  data:
   816    rcon-password: Q0hBTkdFTUUh
   817  kind: Secret
   818  metadata:
   819    labels:
   820      app: test-minecraft
   821      app.kubernetes.io/instance: test-minecraft
   822      app.kubernetes.io/name: minecraft
   823      app.kubernetes.io/version: 4.11.0
   824      chart: minecraft-4.11.0
   825      heritage: Helm
   826      release: test
   827    name: test-minecraft-rcon
   828    namespace: default
   829  type: Opaque
   830  ---
   831  apiVersion: v1
   832  data:
   833    cf-api-key: Q0hBTkdFTUUh
   834  kind: Secret
   835  metadata:
   836    labels:
   837      app: test-minecraft
   838      app.kubernetes.io/instance: test-minecraft
   839      app.kubernetes.io/name: minecraft
   840      app.kubernetes.io/version: 4.11.0
   841      chart: minecraft-4.11.0
   842      heritage: Helm
   843      release: test
   844    name: test-minecraft-curseforge
   845    namespace: default
   846  type: Opaque
   847  ---
   848  apiVersion: v1
   849  kind: Service
   850  metadata:
   851    labels:
   852      app: test-minecraft
   853      app.kubernetes.io/instance: test-minecraft
   854      app.kubernetes.io/name: minecraft
   855      app.kubernetes.io/version: 4.11.0
   856      chart: minecraft-4.11.0
   857      heritage: Helm
   858      release: test
   859    name: test-minecraft
   860    namespace: default
   861  spec:
   862    ports:
   863    - name: minecraft
   864      port: 25565
   865      protocol: TCP
   866      targetPort: minecraft
   867    selector:
   868      app: test-minecraft
   869    type: ClusterIP
   870  ---
   871  apiVersion: networking.k8s.io/v1
   872  kind: Ingress
   873  metadata:
   874    labels:
   875      app: test-minecraft-map
   876      app.kubernetes.io/instance: test-minecraft
   877      app.kubernetes.io/name: minecraft
   878      app.kubernetes.io/version: 4.11.0
   879      chart: minecraft-4.11.0
   880      heritage: Helm
   881      release: test
   882    name: test-minecraft-map
   883    namespace: default
   884  spec:
   885    rules: null
   886  `)
   887  }
   888  
   889  func copyValuesFilesTestChartsIntoHarness(t *testing.T, th *kusttest_test.HarnessEnhanced) {
   890  	t.Helper()
   891  
   892  	thDir := filepath.Join(th.GetRoot(), "charts")
   893  	chartDir := "testdata/helmcharts"
   894  
   895  	fs := th.GetFSys()
   896  	require.NoError(t, fs.MkdirAll(filepath.Join(thDir, "templates")))
   897  	require.NoError(t, copyutil.CopyDir(th.GetFSys(), chartDir, thDir))
   898  }
   899  

View as plain text