...

Source file src/sigs.k8s.io/kustomize/api/krusty/baseandoverlaysmall_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  	"strings"
     8  	"testing"
     9  
    10  	. "sigs.k8s.io/kustomize/api/krusty"
    11  	kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
    12  	"sigs.k8s.io/kustomize/api/types"
    13  )
    14  
    15  func TestOrderPreserved(t *testing.T) {
    16  	th := kusttest_test.MakeHarness(t)
    17  	th.WriteK("base", `
    18  namePrefix: b-
    19  resources:
    20  - namespace.yaml
    21  - role.yaml
    22  - service.yaml
    23  - deployment.yaml
    24  `)
    25  	th.WriteF("base/service.yaml", `
    26  apiVersion: v1
    27  kind: Service
    28  metadata:
    29    name: myService
    30  `)
    31  	th.WriteF("base/namespace.yaml", `
    32  apiVersion: v1
    33  kind: Namespace
    34  metadata:
    35    name: myNs
    36  `)
    37  	th.WriteF("base/role.yaml", `
    38  apiVersion: v1
    39  kind: Role
    40  metadata:
    41    name: myRole
    42  `)
    43  	th.WriteF("base/deployment.yaml", `
    44  apiVersion: v1
    45  kind: Deployment
    46  metadata:
    47    name: myDep
    48  `)
    49  	th.WriteK("prod", `
    50  namePrefix: p-
    51  resources:
    52  - ../base
    53  - service.yaml
    54  - namespace.yaml
    55  `)
    56  	th.WriteF("prod/service.yaml", `
    57  apiVersion: v1
    58  kind: Service
    59  metadata:
    60    name: myService2
    61  `)
    62  	th.WriteF("prod/namespace.yaml", `
    63  apiVersion: v1
    64  kind: Namespace
    65  metadata:
    66    name: myNs2
    67  `)
    68  	m := th.Run("prod", th.MakeDefaultOptions())
    69  	th.AssertActualEqualsExpected(m, `
    70  apiVersion: v1
    71  kind: Namespace
    72  metadata:
    73    name: myNs
    74  ---
    75  apiVersion: v1
    76  kind: Role
    77  metadata:
    78    name: p-b-myRole
    79  ---
    80  apiVersion: v1
    81  kind: Service
    82  metadata:
    83    name: p-b-myService
    84  ---
    85  apiVersion: v1
    86  kind: Deployment
    87  metadata:
    88    name: p-b-myDep
    89  ---
    90  apiVersion: v1
    91  kind: Service
    92  metadata:
    93    name: p-myService2
    94  ---
    95  apiVersion: v1
    96  kind: Namespace
    97  metadata:
    98    name: myNs2
    99  `)
   100  }
   101  
   102  func TestBaseInResourceList(t *testing.T) {
   103  	th := kusttest_test.MakeHarness(t)
   104  	th.WriteK("prod", `
   105  namePrefix: b-
   106  resources:
   107  - ../base
   108  `)
   109  	th.WriteK("base", `
   110  namePrefix: a-
   111  resources:
   112  - service.yaml
   113  `)
   114  	th.WriteF("base/service.yaml", `
   115  apiVersion: v1
   116  kind: Service
   117  metadata:
   118    name: myService
   119  spec:
   120    selector:
   121      backend: bungie
   122  `)
   123  	m := th.Run("prod", th.MakeDefaultOptions())
   124  	th.AssertActualEqualsExpected(m, `
   125  apiVersion: v1
   126  kind: Service
   127  metadata:
   128    name: b-a-myService
   129  spec:
   130    selector:
   131      backend: bungie
   132  `)
   133  }
   134  
   135  func TestTinyOverlay(t *testing.T) {
   136  	th := kusttest_test.MakeHarness(t)
   137  	th.WriteK("base", `
   138  namePrefix: a-
   139  resources:
   140  - deployment.yaml
   141  `)
   142  	th.WriteF("base/deployment.yaml", `
   143  apiVersion: apps/v1
   144  kind: Deployment
   145  metadata:
   146    name: myDeployment
   147  spec:
   148    template:
   149      spec:
   150        containers:
   151        - image: whatever
   152  `)
   153  	th.WriteK("overlay", `
   154  namePrefix: b-
   155  resources:
   156  - ../base
   157  patchesStrategicMerge:
   158  - depPatch.yaml
   159  `)
   160  	th.WriteF("overlay/depPatch.yaml", `
   161  apiVersion: apps/v1
   162  kind: Deployment
   163  metadata:
   164    name: myDeployment
   165  spec:
   166    replicas: 999
   167  `)
   168  	m := th.Run("overlay", th.MakeDefaultOptions())
   169  	th.AssertActualEqualsExpected(m, `
   170  apiVersion: apps/v1
   171  kind: Deployment
   172  metadata:
   173    name: b-a-myDeployment
   174  spec:
   175    replicas: 999
   176    template:
   177      spec:
   178        containers:
   179        - image: whatever
   180  `)
   181  }
   182  
   183  func writeSmallBase(th kusttest_test.Harness) {
   184  	th.WriteK("base", `
   185  namePrefix: a-
   186  commonLabels:
   187    app: myApp
   188  resources:
   189  - deployment.yaml
   190  - service.yaml
   191  `)
   192  	th.WriteF("base/service.yaml", `
   193  apiVersion: v1
   194  kind: Service
   195  metadata:
   196    name: myService
   197  spec:
   198    selector:
   199      backend: bungie
   200    ports:
   201      - port: 7002
   202  `)
   203  	th.WriteF("base/deployment.yaml", `
   204  apiVersion: apps/v1
   205  kind: Deployment
   206  metadata:
   207    name: myDeployment
   208  spec:
   209    template:
   210      metadata:
   211        labels:
   212          backend: awesome
   213      spec:
   214        containers:
   215        - name: whatever
   216          image: whatever
   217  `)
   218  }
   219  
   220  func TestSmallBase(t *testing.T) {
   221  	th := kusttest_test.MakeHarness(t)
   222  	writeSmallBase(th)
   223  	m := th.Run("base", th.MakeDefaultOptions())
   224  	th.AssertActualEqualsExpected(m, `
   225  apiVersion: apps/v1
   226  kind: Deployment
   227  metadata:
   228    labels:
   229      app: myApp
   230    name: a-myDeployment
   231  spec:
   232    selector:
   233      matchLabels:
   234        app: myApp
   235    template:
   236      metadata:
   237        labels:
   238          app: myApp
   239          backend: awesome
   240      spec:
   241        containers:
   242        - image: whatever
   243          name: whatever
   244  ---
   245  apiVersion: v1
   246  kind: Service
   247  metadata:
   248    labels:
   249      app: myApp
   250    name: a-myService
   251  spec:
   252    ports:
   253    - port: 7002
   254    selector:
   255      app: myApp
   256      backend: bungie
   257  `)
   258  }
   259  
   260  func TestSmallOverlay(t *testing.T) {
   261  	th := kusttest_test.MakeHarness(t)
   262  	writeSmallBase(th)
   263  	th.WriteK("overlay", `
   264  namePrefix: b-
   265  commonLabels:
   266    env: prod
   267    quotedFruit: "peach"
   268    quotedBoolean: "true"
   269  resources:
   270  - ../base
   271  patchesStrategicMerge:
   272  - deployment/deployment.yaml
   273  images:
   274  - name: whatever
   275    newTag: 1.8.0
   276  `)
   277  
   278  	th.WriteF("overlay/configmap/app.env", `
   279  DB_USERNAME=admin
   280  DB_PASSWORD=somepw
   281  `)
   282  	th.WriteF("overlay/configmap/app-init.ini", `
   283  FOO=bar
   284  BAR=baz
   285  `)
   286  	th.WriteF("overlay/deployment/deployment.yaml", `
   287  apiVersion: apps/v1
   288  kind: Deployment
   289  metadata:
   290    name: myDeployment
   291  spec:
   292    replicas: 1000
   293  `)
   294  	m := th.Run("overlay", th.MakeDefaultOptions())
   295  	th.AssertActualEqualsExpected(m, `
   296  apiVersion: apps/v1
   297  kind: Deployment
   298  metadata:
   299    labels:
   300      app: myApp
   301      env: prod
   302      quotedBoolean: "true"
   303      quotedFruit: peach
   304    name: b-a-myDeployment
   305  spec:
   306    replicas: 1000
   307    selector:
   308      matchLabels:
   309        app: myApp
   310        env: prod
   311        quotedBoolean: "true"
   312        quotedFruit: peach
   313    template:
   314      metadata:
   315        labels:
   316          app: myApp
   317          backend: awesome
   318          env: prod
   319          quotedBoolean: "true"
   320          quotedFruit: peach
   321      spec:
   322        containers:
   323        - image: whatever:1.8.0
   324          name: whatever
   325  ---
   326  apiVersion: v1
   327  kind: Service
   328  metadata:
   329    labels:
   330      app: myApp
   331      env: prod
   332      quotedBoolean: "true"
   333      quotedFruit: peach
   334    name: b-a-myService
   335  spec:
   336    ports:
   337    - port: 7002
   338    selector:
   339      app: myApp
   340      backend: bungie
   341      env: prod
   342      quotedBoolean: "true"
   343      quotedFruit: peach
   344  `)
   345  }
   346  
   347  func TestSharedPatchDisAllowed(t *testing.T) {
   348  	th := kusttest_test.MakeHarness(t)
   349  	writeSmallBase(th)
   350  	th.WriteK("overlay", `
   351  commonLabels:
   352    env: prod
   353  resources:
   354  - ../base
   355  patchesStrategicMerge:
   356  - ../shared/deployment-patch.yaml
   357  `)
   358  	th.WriteF("shared/deployment-patch.yaml", `
   359  apiVersion: apps/v1
   360  kind: Deployment
   361  metadata:
   362    name: myDeployment
   363  spec:
   364    replicas: 1000
   365  `)
   366  	err := th.RunWithErr("overlay", func() Options {
   367  		o := th.MakeDefaultOptions()
   368  		o.LoadRestrictions = types.LoadRestrictionsRootOnly
   369  		return o
   370  	}())
   371  	if !strings.Contains(
   372  		err.Error(),
   373  		"security; file '/shared/deployment-patch.yaml' is not in or below '/overlay'") {
   374  		t.Fatalf("unexpected error: %s", err)
   375  	}
   376  }
   377  
   378  func TestSharedPatchAllowed(t *testing.T) {
   379  	th := kusttest_test.MakeHarness(t)
   380  	writeSmallBase(th)
   381  	th.WriteK("overlay", `
   382  commonLabels:
   383    env: prod
   384  resources:
   385  - ../base
   386  patchesStrategicMerge:
   387  - ../shared/deployment-patch.yaml
   388  `)
   389  	th.WriteF("shared/deployment-patch.yaml", `
   390  apiVersion: apps/v1
   391  kind: Deployment
   392  metadata:
   393    name: myDeployment
   394  spec:
   395    replicas: 1000
   396  `)
   397  	m := th.Run("overlay", func() Options {
   398  		o := th.MakeDefaultOptions()
   399  		o.LoadRestrictions = types.LoadRestrictionsNone
   400  		return o
   401  	}())
   402  	th.AssertActualEqualsExpected(m, `
   403  apiVersion: apps/v1
   404  kind: Deployment
   405  metadata:
   406    labels:
   407      app: myApp
   408      env: prod
   409    name: a-myDeployment
   410  spec:
   411    replicas: 1000
   412    selector:
   413      matchLabels:
   414        app: myApp
   415        env: prod
   416    template:
   417      metadata:
   418        labels:
   419          app: myApp
   420          backend: awesome
   421          env: prod
   422      spec:
   423        containers:
   424        - image: whatever
   425          name: whatever
   426  ---
   427  apiVersion: v1
   428  kind: Service
   429  metadata:
   430    labels:
   431      app: myApp
   432      env: prod
   433    name: a-myService
   434  spec:
   435    ports:
   436    - port: 7002
   437    selector:
   438      app: myApp
   439      backend: bungie
   440      env: prod
   441  `)
   442  }
   443  
   444  func TestSmallOverlayJSONPatch(t *testing.T) {
   445  	th := kusttest_test.MakeHarness(t)
   446  	writeSmallBase(th)
   447  	th.WriteK("overlay", `
   448  resources:
   449  - ../base
   450  patchesJson6902:
   451  - target:
   452      version: v1
   453      kind: Service
   454      name: a-myService
   455    path: service-patch.yaml
   456  `)
   457  
   458  	th.WriteF("overlay/service-patch.yaml", `
   459  - op: add
   460    path: /spec/selector/backend
   461    value: beagle
   462  `)
   463  	m := th.Run("overlay", th.MakeDefaultOptions())
   464  	th.AssertActualEqualsExpected(m, `
   465  apiVersion: apps/v1
   466  kind: Deployment
   467  metadata:
   468    labels:
   469      app: myApp
   470    name: a-myDeployment
   471  spec:
   472    selector:
   473      matchLabels:
   474        app: myApp
   475    template:
   476      metadata:
   477        labels:
   478          app: myApp
   479          backend: awesome
   480      spec:
   481        containers:
   482        - image: whatever
   483          name: whatever
   484  ---
   485  apiVersion: v1
   486  kind: Service
   487  metadata:
   488    labels:
   489      app: myApp
   490    name: a-myService
   491  spec:
   492    ports:
   493    - port: 7002
   494    selector:
   495      app: myApp
   496      backend: beagle
   497  `)
   498  }
   499  

View as plain text