...

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

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

     1  // Copyright 2019 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package krusty_test
     5  
     6  import (
     7  	"testing"
     8  
     9  	kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
    10  )
    11  
    12  const resources string = `apiVersion: apps/v1
    13  kind: Deployment
    14  metadata:
    15    name: my-deployment
    16  spec:
    17    template:
    18      spec:
    19        containers:
    20        - name: my-deployment
    21          livenessProbe:
    22            httpGet:
    23              path: /healthz
    24              port: 8080
    25  ---
    26  apiVersion: example.dev/v1
    27  kind: MyCRD
    28  metadata:
    29    name: crd
    30  `
    31  
    32  func TestKustomizationLabels(t *testing.T) {
    33  	th := kusttest_test.MakeHarness(t)
    34  	makeResourcesForPatchTest(th)
    35  	th.WriteK("/app", `
    36  resources:
    37  - deployment.yaml
    38  
    39  labels:
    40  - pairs:
    41      foo: bar
    42  - pairs:
    43      a: b
    44    includeSelectors: true
    45  - pairs:
    46      c: d
    47    fields:
    48    - path: spec/selector
    49      group: example.dev
    50      version: v1
    51      kind: MyCRD
    52      create: true
    53  `)
    54  	th.WriteF("/app/deployment.yaml", resources)
    55  	m := th.Run("/app", th.MakeDefaultOptions())
    56  	th.AssertActualEqualsExpected(m, `
    57  apiVersion: apps/v1
    58  kind: Deployment
    59  metadata:
    60    labels:
    61      a: b
    62      c: d
    63      foo: bar
    64    name: my-deployment
    65  spec:
    66    selector:
    67      matchLabels:
    68        a: b
    69    template:
    70      metadata:
    71        labels:
    72          a: b
    73      spec:
    74        containers:
    75        - livenessProbe:
    76            httpGet:
    77              path: /healthz
    78              port: 8080
    79          name: my-deployment
    80  ---
    81  apiVersion: example.dev/v1
    82  kind: MyCRD
    83  metadata:
    84    labels:
    85      a: b
    86      c: d
    87      foo: bar
    88    name: crd
    89  spec:
    90    selector:
    91      c: d
    92  `)
    93  }
    94  
    95  func TestKustomizationLabelsInDeploymentTemplate(t *testing.T) {
    96  	th := kusttest_test.MakeHarness(t)
    97  	th.WriteF("app/deployment.yaml", `
    98  apiVersion: apps/v1
    99  kind: Deployment
   100  metadata:
   101    labels:
   102      app.kubernetes.io/component: a
   103      app.kubernetes.io/instance: b
   104      app.kubernetes.io/name: c
   105      app.kubernetes.io/part-of: d
   106    name: deployment
   107  spec:
   108    replicas: 1
   109    selector:
   110      matchLabels:
   111        app.kubernetes.io/component: a
   112        app.kubernetes.io/instance: b
   113        app.kubernetes.io/name: c
   114        app.kubernetes.io/part-of: d
   115    template:
   116      metadata:
   117        labels:
   118          app.kubernetes.io/component: a
   119          app.kubernetes.io/instance: b
   120          app.kubernetes.io/name: c
   121          app.kubernetes.io/part-of: d
   122  `)
   123  	th.WriteK("/app", `
   124  resources:
   125  - deployment.yaml
   126  
   127  labels:
   128  - pairs:
   129      foo: bar
   130    includeSelectors: false
   131    includeTemplates: true
   132  `)
   133  	m := th.Run("/app", th.MakeDefaultOptions())
   134  	th.AssertActualEqualsExpected(m, `
   135  apiVersion: apps/v1
   136  kind: Deployment
   137  metadata:
   138    labels:
   139      app.kubernetes.io/component: a
   140      app.kubernetes.io/instance: b
   141      app.kubernetes.io/name: c
   142      app.kubernetes.io/part-of: d
   143      foo: bar
   144    name: deployment
   145  spec:
   146    replicas: 1
   147    selector:
   148      matchLabels:
   149        app.kubernetes.io/component: a
   150        app.kubernetes.io/instance: b
   151        app.kubernetes.io/name: c
   152        app.kubernetes.io/part-of: d
   153    template:
   154      metadata:
   155        labels:
   156          app.kubernetes.io/component: a
   157          app.kubernetes.io/instance: b
   158          app.kubernetes.io/name: c
   159          app.kubernetes.io/part-of: d
   160          foo: bar
   161  `)
   162  }
   163  
   164  func TestKustomizationLabelsInTemplateWhenLabelsIsNil(t *testing.T) {
   165  	th := kusttest_test.MakeHarness(t)
   166  	th.WriteF("app/deployment.yaml", `
   167  apiVersion: apps/v1
   168  kind: Deployment
   169  metadata:
   170    name: deployment
   171  spec:
   172    replicas: 1
   173    template:
   174      spec:
   175        containers:
   176        - name: test-server
   177          image: test-server
   178  `)
   179  	th.WriteK("/app", `
   180  resources:
   181  - deployment.yaml
   182  
   183  commonLabels:
   184    app: test-server
   185  
   186  labels:
   187  - pairs:
   188      app.kubernetes.io/component: a
   189      app.kubernetes.io/instance: b
   190      app.kubernetes.io/name: c
   191      app.kubernetes.io/part-of: d
   192    includeSelectors: false
   193    includeTemplates: true
   194  `)
   195  	m := th.Run("/app", th.MakeDefaultOptions())
   196  	th.AssertActualEqualsExpected(m, `
   197  apiVersion: apps/v1
   198  kind: Deployment
   199  metadata:
   200    labels:
   201      app: test-server
   202      app.kubernetes.io/component: a
   203      app.kubernetes.io/instance: b
   204      app.kubernetes.io/name: c
   205      app.kubernetes.io/part-of: d
   206    name: deployment
   207  spec:
   208    replicas: 1
   209    selector:
   210      matchLabels:
   211        app: test-server
   212    template:
   213      metadata:
   214        labels:
   215          app: test-server
   216          app.kubernetes.io/component: a
   217          app.kubernetes.io/instance: b
   218          app.kubernetes.io/name: c
   219          app.kubernetes.io/part-of: d
   220      spec:
   221        containers:
   222        - image: test-server
   223          name: test-server
   224  `)
   225  }
   226  
   227  func TestKustomizationLabelsDoesNotCreateInvalidTemplatePaths(t *testing.T) {
   228  	th := kusttest_test.MakeHarness(t)
   229  	th.WriteF("app/deployment.yaml", `
   230  apiVersion: apps/v1
   231  kind: Deployment
   232  metadata:
   233    name: deployment
   234  spec:
   235    replicas: 1
   236    template:
   237      spec:
   238        containers:
   239        - name: test-server
   240          image: test-server
   241  `)
   242  	th.WriteF("app/service.yaml", `
   243  apiVersion: v1
   244  kind: Service
   245  metadata:
   246    name: service
   247  spec:
   248    ports:
   249    - port: 80
   250      protocol: TCP
   251      targetPort: 9376
   252  `)
   253  	th.WriteK("/app", `
   254  resources:
   255  - deployment.yaml
   256  - service.yaml
   257  
   258  commonLabels:
   259    app: test-server
   260  
   261  labels:
   262  - pairs:
   263      app.kubernetes.io/component: a
   264      app.kubernetes.io/instance: b
   265      app.kubernetes.io/name: c
   266      app.kubernetes.io/part-of: d
   267    includeSelectors: false
   268    includeTemplates: true
   269  `)
   270  	m := th.Run("/app", th.MakeDefaultOptions())
   271  	th.AssertActualEqualsExpected(m, `
   272  apiVersion: apps/v1
   273  kind: Deployment
   274  metadata:
   275    labels:
   276      app: test-server
   277      app.kubernetes.io/component: a
   278      app.kubernetes.io/instance: b
   279      app.kubernetes.io/name: c
   280      app.kubernetes.io/part-of: d
   281    name: deployment
   282  spec:
   283    replicas: 1
   284    selector:
   285      matchLabels:
   286        app: test-server
   287    template:
   288      metadata:
   289        labels:
   290          app: test-server
   291          app.kubernetes.io/component: a
   292          app.kubernetes.io/instance: b
   293          app.kubernetes.io/name: c
   294          app.kubernetes.io/part-of: d
   295      spec:
   296        containers:
   297        - image: test-server
   298          name: test-server
   299  ---
   300  apiVersion: v1
   301  kind: Service
   302  metadata:
   303    labels:
   304      app: test-server
   305      app.kubernetes.io/component: a
   306      app.kubernetes.io/instance: b
   307      app.kubernetes.io/name: c
   308      app.kubernetes.io/part-of: d
   309    name: service
   310  spec:
   311    ports:
   312    - port: 80
   313      protocol: TCP
   314      targetPort: 9376
   315    selector:
   316      app: test-server
   317  `)
   318  }
   319  
   320  func TestKustomizationLabelsInDaemonSetTemplate(t *testing.T) {
   321  	th := kusttest_test.MakeHarness(t)
   322  	th.WriteF("app/ds.yaml", `
   323  apiVersion: apps/v1
   324  kind: DaemonSet
   325  metadata:
   326    labels:
   327      app.kubernetes.io/name: daemon
   328    name: daemon
   329  spec:
   330    selector:
   331      matchLabels:
   332        app.kubernetes.io/name: daemon
   333    template:
   334      metadata:
   335        labels:
   336          app.kubernetes.io/name: daemon
   337  `)
   338  	th.WriteK("/app", `
   339  resources:
   340  - ds.yaml
   341  
   342  labels:
   343  - pairs:
   344      foo: bar
   345    includeSelectors: false
   346    includeTemplates: true
   347  `)
   348  	m := th.Run("/app", th.MakeDefaultOptions())
   349  	th.AssertActualEqualsExpected(m, `
   350  apiVersion: apps/v1
   351  kind: DaemonSet
   352  metadata:
   353    labels:
   354      app.kubernetes.io/name: daemon
   355      foo: bar
   356    name: daemon
   357  spec:
   358    selector:
   359      matchLabels:
   360        app.kubernetes.io/name: daemon
   361    template:
   362      metadata:
   363        labels:
   364          app.kubernetes.io/name: daemon
   365          foo: bar
   366  `)
   367  }
   368  
   369  func TestKustomizationLabelsInStatefulSetTemplate(t *testing.T) {
   370  	th := kusttest_test.MakeHarness(t)
   371  	th.WriteF("app/sts.yaml", `
   372  apiVersion: apps/v1
   373  kind: StatefulSet
   374  metadata:
   375    labels:
   376      app.kubernetes.io/name: set
   377    name: set
   378  spec:
   379    replicas: 3
   380    selector:
   381      matchLabels:
   382        app.kubernetes.io/name: set
   383    serviceName: set
   384    template:
   385      metadata:
   386        labels:
   387          app.kubernetes.io/name: set
   388  `)
   389  	th.WriteK("/app", `
   390  resources:
   391  - sts.yaml
   392  
   393  labels:
   394  - pairs:
   395      foo: bar
   396    includeSelectors: false
   397    includeTemplates: true
   398  `)
   399  	m := th.Run("/app", th.MakeDefaultOptions())
   400  	th.AssertActualEqualsExpected(m, `
   401  apiVersion: apps/v1
   402  kind: StatefulSet
   403  metadata:
   404    labels:
   405      app.kubernetes.io/name: set
   406      foo: bar
   407    name: set
   408  spec:
   409    replicas: 3
   410    selector:
   411      matchLabels:
   412        app.kubernetes.io/name: set
   413    serviceName: set
   414    template:
   415      metadata:
   416        labels:
   417          app.kubernetes.io/name: set
   418          foo: bar
   419  `)
   420  }
   421  
   422  func TestKustomizationLabelsInCronJobTemplate(t *testing.T) {
   423  	th := kusttest_test.MakeHarness(t)
   424  	th.WriteF("app/cjob.yaml", `
   425  apiVersion: batch/v1
   426  kind: CronJob
   427  metadata:
   428    labels:
   429      app.kubernetes.io/name: job
   430    name: job
   431  spec:
   432    jobTemplate:
   433      spec:
   434        backoffLimit: 4
   435        template:
   436          metadata:
   437            labels:
   438              app.kubernetes.io/name: job
   439          spec:
   440            restartPolicy: Never
   441    schedule: '* * * * *'
   442  `)
   443  	th.WriteK("/app", `
   444  resources:
   445  - cjob.yaml
   446  
   447  labels:
   448  - pairs:
   449      foo: bar
   450    includeSelectors: false
   451    includeTemplates: true
   452  `)
   453  	m := th.Run("/app", th.MakeDefaultOptions())
   454  	th.AssertActualEqualsExpected(m, `
   455  apiVersion: batch/v1
   456  kind: CronJob
   457  metadata:
   458    labels:
   459      app.kubernetes.io/name: job
   460      foo: bar
   461    name: job
   462  spec:
   463    jobTemplate:
   464      metadata:
   465        labels:
   466          foo: bar
   467      spec:
   468        backoffLimit: 4
   469        template:
   470          metadata:
   471            labels:
   472              app.kubernetes.io/name: job
   473              foo: bar
   474          spec:
   475            restartPolicy: Never
   476    schedule: '* * * * *'
   477  `)
   478  }
   479  
   480  func TestKustomizationLabelsInJobTemplate(t *testing.T) {
   481  	th := kusttest_test.MakeHarness(t)
   482  	th.WriteF("app/job.yaml", `
   483  apiVersion: batch/v1
   484  kind: Job
   485  metadata:
   486    labels:
   487      app.kubernetes.io/name: job
   488    name: job
   489  spec:
   490    backoffLimit: 4
   491    template:
   492      metadata:
   493        labels:
   494          app.kubernetes.io/name: job
   495      spec:
   496        restartPolicy: Never
   497  `)
   498  	th.WriteK("/app", `
   499  resources:
   500  - job.yaml
   501  
   502  labels:
   503  - pairs:
   504      foo: bar
   505    includeSelectors: false
   506    includeTemplates: true
   507  `)
   508  	m := th.Run("/app", th.MakeDefaultOptions())
   509  	th.AssertActualEqualsExpected(m, `
   510  apiVersion: batch/v1
   511  kind: Job
   512  metadata:
   513    labels:
   514      app.kubernetes.io/name: job
   515      foo: bar
   516    name: job
   517  spec:
   518    backoffLimit: 4
   519    template:
   520      metadata:
   521        labels:
   522          app.kubernetes.io/name: job
   523          foo: bar
   524      spec:
   525        restartPolicy: Never
   526  `)
   527  }
   528  

View as plain text