...

Source file src/sigs.k8s.io/kustomize/api/krusty/extendedpatch_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  func makeCommonFileForExtendedPatchTest(th kusttest_test.Harness) {
    13  	th.WriteF("base/deployment.yaml", `
    14  apiVersion: apps/v1
    15  kind: Deployment
    16  metadata:
    17    name: nginx
    18    labels:
    19      app: nginx
    20  spec:
    21    template:
    22      metadata:
    23        labels:
    24          app: nginx
    25      spec:
    26        containers:
    27        - name: nginx
    28          image: nginx
    29          volumeMounts:
    30          - name: nginx-persistent-storage
    31            mountPath: /tmp/ps
    32        volumes:
    33        - name: nginx-persistent-storage
    34          emptyDir: {}
    35        - configMap:
    36            name: configmap-in-base
    37          name: configmap-in-base
    38  ---
    39  apiVersion: apps/v1
    40  kind: Deployment
    41  metadata:
    42    name: busybox
    43    labels:
    44      app: busybox
    45  spec:
    46    template:
    47      metadata:
    48        labels:
    49          app: busybox
    50      spec:
    51        containers:
    52        - name: busybox
    53          image: busybox
    54          volumeMounts:
    55          - name: busybox-persistent-storage
    56            mountPath: /tmp/ps
    57        volumes:
    58        - name: busybox-persistent-storage
    59          emptyDir: {}
    60        - configMap:
    61            name: configmap-in-base
    62          name: configmap-in-base
    63  `)
    64  	th.WriteF("base/service.yaml", `
    65  apiVersion: v1
    66  kind: Service
    67  metadata:
    68    name: nginx
    69    labels:
    70      app: nginx
    71  spec:
    72    ports:
    73      - port: 80
    74    selector:
    75      app: nginx
    76  ---
    77  apiVersion: v1
    78  kind: Service
    79  metadata:
    80    name: busybox
    81    labels:
    82      app: busybox
    83  spec:
    84    ports:
    85    - port: 8080
    86    selector:
    87      app: busybox
    88  `)
    89  }
    90  
    91  func TestExtendedPatchNameSelector(t *testing.T) {
    92  	th := kusttest_test.MakeHarness(t)
    93  	makeCommonFileForExtendedPatchTest(th)
    94  	th.WriteK("base", `
    95  resources:
    96  - deployment.yaml
    97  - service.yaml
    98  patches:
    99  - path: patch.yaml
   100    target:
   101      name: busybox
   102  `)
   103  	th.WriteF("base/patch.yaml", `
   104  apiVersion: apps/v1
   105  kind: Deployment
   106  metadata:
   107    name: busybox
   108    annotations:
   109      new-key: new-value
   110  `)
   111  	m := th.Run("base", th.MakeDefaultOptions())
   112  	th.AssertActualEqualsExpected(m, `
   113  apiVersion: apps/v1
   114  kind: Deployment
   115  metadata:
   116    labels:
   117      app: nginx
   118    name: nginx
   119  spec:
   120    template:
   121      metadata:
   122        labels:
   123          app: nginx
   124      spec:
   125        containers:
   126        - image: nginx
   127          name: nginx
   128          volumeMounts:
   129          - mountPath: /tmp/ps
   130            name: nginx-persistent-storage
   131        volumes:
   132        - emptyDir: {}
   133          name: nginx-persistent-storage
   134        - configMap:
   135            name: configmap-in-base
   136          name: configmap-in-base
   137  ---
   138  apiVersion: apps/v1
   139  kind: Deployment
   140  metadata:
   141    annotations:
   142      new-key: new-value
   143    labels:
   144      app: busybox
   145    name: busybox
   146  spec:
   147    template:
   148      metadata:
   149        labels:
   150          app: busybox
   151      spec:
   152        containers:
   153        - image: busybox
   154          name: busybox
   155          volumeMounts:
   156          - mountPath: /tmp/ps
   157            name: busybox-persistent-storage
   158        volumes:
   159        - emptyDir: {}
   160          name: busybox-persistent-storage
   161        - configMap:
   162            name: configmap-in-base
   163          name: configmap-in-base
   164  ---
   165  apiVersion: v1
   166  kind: Service
   167  metadata:
   168    labels:
   169      app: nginx
   170    name: nginx
   171  spec:
   172    ports:
   173    - port: 80
   174    selector:
   175      app: nginx
   176  ---
   177  apiVersion: v1
   178  kind: Service
   179  metadata:
   180    annotations:
   181      new-key: new-value
   182    labels:
   183      app: busybox
   184    name: busybox
   185  spec:
   186    ports:
   187    - port: 8080
   188    selector:
   189      app: busybox
   190  `)
   191  }
   192  
   193  func TestExtendedPatchGvkSelector(t *testing.T) {
   194  	th := kusttest_test.MakeHarness(t)
   195  	makeCommonFileForExtendedPatchTest(th)
   196  	th.WriteK("base", `
   197  resources:
   198  - deployment.yaml
   199  - service.yaml
   200  patches:
   201  - path: patch.yaml
   202    target:
   203      kind: Deployment
   204  `)
   205  	th.WriteF("base/patch.yaml", `
   206  apiVersion: apps/v1
   207  kind: Deployment
   208  metadata:
   209    name: busybox
   210    annotations:
   211      new-key: new-value
   212  `)
   213  	m := th.Run("base", th.MakeDefaultOptions())
   214  	th.AssertActualEqualsExpected(m, `
   215  apiVersion: apps/v1
   216  kind: Deployment
   217  metadata:
   218    annotations:
   219      new-key: new-value
   220    labels:
   221      app: nginx
   222    name: nginx
   223  spec:
   224    template:
   225      metadata:
   226        labels:
   227          app: nginx
   228      spec:
   229        containers:
   230        - image: nginx
   231          name: nginx
   232          volumeMounts:
   233          - mountPath: /tmp/ps
   234            name: nginx-persistent-storage
   235        volumes:
   236        - emptyDir: {}
   237          name: nginx-persistent-storage
   238        - configMap:
   239            name: configmap-in-base
   240          name: configmap-in-base
   241  ---
   242  apiVersion: apps/v1
   243  kind: Deployment
   244  metadata:
   245    annotations:
   246      new-key: new-value
   247    labels:
   248      app: busybox
   249    name: busybox
   250  spec:
   251    template:
   252      metadata:
   253        labels:
   254          app: busybox
   255      spec:
   256        containers:
   257        - image: busybox
   258          name: busybox
   259          volumeMounts:
   260          - mountPath: /tmp/ps
   261            name: busybox-persistent-storage
   262        volumes:
   263        - emptyDir: {}
   264          name: busybox-persistent-storage
   265        - configMap:
   266            name: configmap-in-base
   267          name: configmap-in-base
   268  ---
   269  apiVersion: v1
   270  kind: Service
   271  metadata:
   272    labels:
   273      app: nginx
   274    name: nginx
   275  spec:
   276    ports:
   277    - port: 80
   278    selector:
   279      app: nginx
   280  ---
   281  apiVersion: v1
   282  kind: Service
   283  metadata:
   284    labels:
   285      app: busybox
   286    name: busybox
   287  spec:
   288    ports:
   289    - port: 8080
   290    selector:
   291      app: busybox
   292  `)
   293  }
   294  
   295  func TestExtendedPatchLabelSelector(t *testing.T) {
   296  	th := kusttest_test.MakeHarness(t)
   297  	makeCommonFileForExtendedPatchTest(th)
   298  	th.WriteK("base", `
   299  resources:
   300  - deployment.yaml
   301  - service.yaml
   302  patches:
   303  - path: patch.yaml
   304    target:
   305      labelSelector: app=nginx
   306  `)
   307  	th.WriteF("base/patch.yaml", `
   308  apiVersion: apps/v1
   309  kind: Deployment
   310  metadata:
   311    name: nginx
   312    annotations:
   313      new-key: new-value
   314  `)
   315  	m := th.Run("base", th.MakeDefaultOptions())
   316  	th.AssertActualEqualsExpected(m, `
   317  apiVersion: apps/v1
   318  kind: Deployment
   319  metadata:
   320    annotations:
   321      new-key: new-value
   322    labels:
   323      app: nginx
   324    name: nginx
   325  spec:
   326    template:
   327      metadata:
   328        labels:
   329          app: nginx
   330      spec:
   331        containers:
   332        - image: nginx
   333          name: nginx
   334          volumeMounts:
   335          - mountPath: /tmp/ps
   336            name: nginx-persistent-storage
   337        volumes:
   338        - emptyDir: {}
   339          name: nginx-persistent-storage
   340        - configMap:
   341            name: configmap-in-base
   342          name: configmap-in-base
   343  ---
   344  apiVersion: apps/v1
   345  kind: Deployment
   346  metadata:
   347    labels:
   348      app: busybox
   349    name: busybox
   350  spec:
   351    template:
   352      metadata:
   353        labels:
   354          app: busybox
   355      spec:
   356        containers:
   357        - image: busybox
   358          name: busybox
   359          volumeMounts:
   360          - mountPath: /tmp/ps
   361            name: busybox-persistent-storage
   362        volumes:
   363        - emptyDir: {}
   364          name: busybox-persistent-storage
   365        - configMap:
   366            name: configmap-in-base
   367          name: configmap-in-base
   368  ---
   369  apiVersion: v1
   370  kind: Service
   371  metadata:
   372    annotations:
   373      new-key: new-value
   374    labels:
   375      app: nginx
   376    name: nginx
   377  spec:
   378    ports:
   379    - port: 80
   380    selector:
   381      app: nginx
   382  ---
   383  apiVersion: v1
   384  kind: Service
   385  metadata:
   386    labels:
   387      app: busybox
   388    name: busybox
   389  spec:
   390    ports:
   391    - port: 8080
   392    selector:
   393      app: busybox
   394  `)
   395  }
   396  
   397  func TestExtendedPatchNameGvkSelector(t *testing.T) {
   398  	th := kusttest_test.MakeHarness(t)
   399  	makeCommonFileForExtendedPatchTest(th)
   400  	th.WriteK("base", `
   401  resources:
   402  - deployment.yaml
   403  - service.yaml
   404  patches:
   405  - path: patch.yaml
   406    target:
   407      name: busybox
   408      kind: Deployment
   409  `)
   410  	th.WriteF("base/patch.yaml", `
   411  apiVersion: apps/v1
   412  kind: Deployment
   413  metadata:
   414    name: busybox
   415    annotations:
   416      new-key: new-value
   417  `)
   418  	m := th.Run("base", th.MakeDefaultOptions())
   419  	th.AssertActualEqualsExpected(m, `
   420  apiVersion: apps/v1
   421  kind: Deployment
   422  metadata:
   423    labels:
   424      app: nginx
   425    name: nginx
   426  spec:
   427    template:
   428      metadata:
   429        labels:
   430          app: nginx
   431      spec:
   432        containers:
   433        - image: nginx
   434          name: nginx
   435          volumeMounts:
   436          - mountPath: /tmp/ps
   437            name: nginx-persistent-storage
   438        volumes:
   439        - emptyDir: {}
   440          name: nginx-persistent-storage
   441        - configMap:
   442            name: configmap-in-base
   443          name: configmap-in-base
   444  ---
   445  apiVersion: apps/v1
   446  kind: Deployment
   447  metadata:
   448    annotations:
   449      new-key: new-value
   450    labels:
   451      app: busybox
   452    name: busybox
   453  spec:
   454    template:
   455      metadata:
   456        labels:
   457          app: busybox
   458      spec:
   459        containers:
   460        - image: busybox
   461          name: busybox
   462          volumeMounts:
   463          - mountPath: /tmp/ps
   464            name: busybox-persistent-storage
   465        volumes:
   466        - emptyDir: {}
   467          name: busybox-persistent-storage
   468        - configMap:
   469            name: configmap-in-base
   470          name: configmap-in-base
   471  ---
   472  apiVersion: v1
   473  kind: Service
   474  metadata:
   475    labels:
   476      app: nginx
   477    name: nginx
   478  spec:
   479    ports:
   480    - port: 80
   481    selector:
   482      app: nginx
   483  ---
   484  apiVersion: v1
   485  kind: Service
   486  metadata:
   487    labels:
   488      app: busybox
   489    name: busybox
   490  spec:
   491    ports:
   492    - port: 8080
   493    selector:
   494      app: busybox
   495  `)
   496  }
   497  
   498  func TestExtendedPatchNameLabelSelector(t *testing.T) {
   499  	th := kusttest_test.MakeHarness(t)
   500  	makeCommonFileForExtendedPatchTest(th)
   501  	th.WriteK("base", `
   502  resources:
   503  - deployment.yaml
   504  - service.yaml
   505  patches:
   506  - path: patch.yaml
   507    target:
   508      name: .*
   509      labelSelector: app=busybox
   510  `)
   511  	th.WriteF("base/patch.yaml", `
   512  apiVersion: apps/v1
   513  kind: Deployment
   514  metadata:
   515    name: busybox
   516    annotations:
   517      new-key: new-value
   518  `)
   519  	m := th.Run("base", th.MakeDefaultOptions())
   520  	th.AssertActualEqualsExpected(m, `
   521  apiVersion: apps/v1
   522  kind: Deployment
   523  metadata:
   524    labels:
   525      app: nginx
   526    name: nginx
   527  spec:
   528    template:
   529      metadata:
   530        labels:
   531          app: nginx
   532      spec:
   533        containers:
   534        - image: nginx
   535          name: nginx
   536          volumeMounts:
   537          - mountPath: /tmp/ps
   538            name: nginx-persistent-storage
   539        volumes:
   540        - emptyDir: {}
   541          name: nginx-persistent-storage
   542        - configMap:
   543            name: configmap-in-base
   544          name: configmap-in-base
   545  ---
   546  apiVersion: apps/v1
   547  kind: Deployment
   548  metadata:
   549    annotations:
   550      new-key: new-value
   551    labels:
   552      app: busybox
   553    name: busybox
   554  spec:
   555    template:
   556      metadata:
   557        labels:
   558          app: busybox
   559      spec:
   560        containers:
   561        - image: busybox
   562          name: busybox
   563          volumeMounts:
   564          - mountPath: /tmp/ps
   565            name: busybox-persistent-storage
   566        volumes:
   567        - emptyDir: {}
   568          name: busybox-persistent-storage
   569        - configMap:
   570            name: configmap-in-base
   571          name: configmap-in-base
   572  ---
   573  apiVersion: v1
   574  kind: Service
   575  metadata:
   576    labels:
   577      app: nginx
   578    name: nginx
   579  spec:
   580    ports:
   581    - port: 80
   582    selector:
   583      app: nginx
   584  ---
   585  apiVersion: v1
   586  kind: Service
   587  metadata:
   588    annotations:
   589      new-key: new-value
   590    labels:
   591      app: busybox
   592    name: busybox
   593  spec:
   594    ports:
   595    - port: 8080
   596    selector:
   597      app: busybox
   598  `)
   599  }
   600  
   601  func TestExtendedPatchGvkLabelSelector(t *testing.T) {
   602  	th := kusttest_test.MakeHarness(t)
   603  	makeCommonFileForExtendedPatchTest(th)
   604  	th.WriteK("base", `
   605  resources:
   606  - deployment.yaml
   607  - service.yaml
   608  patches:
   609  - path: patch.yaml
   610    target:
   611      kind: Deployment
   612      labelSelector: app=busybox
   613  `)
   614  	th.WriteF("base/patch.yaml", `
   615  apiVersion: apps/v1
   616  kind: Deployment
   617  metadata:
   618    name: busybox
   619    annotations:
   620      new-key: new-value
   621  `)
   622  	m := th.Run("base", th.MakeDefaultOptions())
   623  	th.AssertActualEqualsExpected(m, `
   624  apiVersion: apps/v1
   625  kind: Deployment
   626  metadata:
   627    labels:
   628      app: nginx
   629    name: nginx
   630  spec:
   631    template:
   632      metadata:
   633        labels:
   634          app: nginx
   635      spec:
   636        containers:
   637        - image: nginx
   638          name: nginx
   639          volumeMounts:
   640          - mountPath: /tmp/ps
   641            name: nginx-persistent-storage
   642        volumes:
   643        - emptyDir: {}
   644          name: nginx-persistent-storage
   645        - configMap:
   646            name: configmap-in-base
   647          name: configmap-in-base
   648  ---
   649  apiVersion: apps/v1
   650  kind: Deployment
   651  metadata:
   652    annotations:
   653      new-key: new-value
   654    labels:
   655      app: busybox
   656    name: busybox
   657  spec:
   658    template:
   659      metadata:
   660        labels:
   661          app: busybox
   662      spec:
   663        containers:
   664        - image: busybox
   665          name: busybox
   666          volumeMounts:
   667          - mountPath: /tmp/ps
   668            name: busybox-persistent-storage
   669        volumes:
   670        - emptyDir: {}
   671          name: busybox-persistent-storage
   672        - configMap:
   673            name: configmap-in-base
   674          name: configmap-in-base
   675  ---
   676  apiVersion: v1
   677  kind: Service
   678  metadata:
   679    labels:
   680      app: nginx
   681    name: nginx
   682  spec:
   683    ports:
   684    - port: 80
   685    selector:
   686      app: nginx
   687  ---
   688  apiVersion: v1
   689  kind: Service
   690  metadata:
   691    labels:
   692      app: busybox
   693    name: busybox
   694  spec:
   695    ports:
   696    - port: 8080
   697    selector:
   698      app: busybox
   699  `)
   700  }
   701  
   702  func TestExtendedPatchNameGvkLabelSelector(t *testing.T) {
   703  	th := kusttest_test.MakeHarness(t)
   704  	makeCommonFileForExtendedPatchTest(th)
   705  	th.WriteK("base", `
   706  resources:
   707  - deployment.yaml
   708  - service.yaml
   709  patches:
   710  - path: patch.yaml
   711    target:
   712      name: busybox
   713      kind: Deployment
   714      labelSelector: app=busybox
   715  `)
   716  	th.WriteF("base/patch.yaml", `
   717  apiVersion: apps/v1
   718  kind: Deployment
   719  metadata:
   720    name: busybox
   721    annotations:
   722      new-key: new-value
   723  `)
   724  	m := th.Run("base", th.MakeDefaultOptions())
   725  	th.AssertActualEqualsExpected(m, `
   726  apiVersion: apps/v1
   727  kind: Deployment
   728  metadata:
   729    labels:
   730      app: nginx
   731    name: nginx
   732  spec:
   733    template:
   734      metadata:
   735        labels:
   736          app: nginx
   737      spec:
   738        containers:
   739        - image: nginx
   740          name: nginx
   741          volumeMounts:
   742          - mountPath: /tmp/ps
   743            name: nginx-persistent-storage
   744        volumes:
   745        - emptyDir: {}
   746          name: nginx-persistent-storage
   747        - configMap:
   748            name: configmap-in-base
   749          name: configmap-in-base
   750  ---
   751  apiVersion: apps/v1
   752  kind: Deployment
   753  metadata:
   754    annotations:
   755      new-key: new-value
   756    labels:
   757      app: busybox
   758    name: busybox
   759  spec:
   760    template:
   761      metadata:
   762        labels:
   763          app: busybox
   764      spec:
   765        containers:
   766        - image: busybox
   767          name: busybox
   768          volumeMounts:
   769          - mountPath: /tmp/ps
   770            name: busybox-persistent-storage
   771        volumes:
   772        - emptyDir: {}
   773          name: busybox-persistent-storage
   774        - configMap:
   775            name: configmap-in-base
   776          name: configmap-in-base
   777  ---
   778  apiVersion: v1
   779  kind: Service
   780  metadata:
   781    labels:
   782      app: nginx
   783    name: nginx
   784  spec:
   785    ports:
   786    - port: 80
   787    selector:
   788      app: nginx
   789  ---
   790  apiVersion: v1
   791  kind: Service
   792  metadata:
   793    labels:
   794      app: busybox
   795    name: busybox
   796  spec:
   797    ports:
   798    - port: 8080
   799    selector:
   800      app: busybox
   801  `)
   802  }
   803  
   804  func TestExtendedPatchNoMatch(t *testing.T) {
   805  	th := kusttest_test.MakeHarness(t)
   806  	makeCommonFileForExtendedPatchTest(th)
   807  	th.WriteK("base", `
   808  resources:
   809  - deployment.yaml
   810  - service.yaml
   811  patches:
   812  - path: patch.yaml
   813    target:
   814      name: no-match
   815  `)
   816  	th.WriteF("base/patch.yaml", `
   817  apiVersion: apps/v1
   818  kind: Deployment
   819  metadata:
   820    name: busybox
   821    annotations:
   822      new-key: new-value
   823  `)
   824  	m := th.Run("base", th.MakeDefaultOptions())
   825  	th.AssertActualEqualsExpected(m, `
   826  apiVersion: apps/v1
   827  kind: Deployment
   828  metadata:
   829    labels:
   830      app: nginx
   831    name: nginx
   832  spec:
   833    template:
   834      metadata:
   835        labels:
   836          app: nginx
   837      spec:
   838        containers:
   839        - image: nginx
   840          name: nginx
   841          volumeMounts:
   842          - mountPath: /tmp/ps
   843            name: nginx-persistent-storage
   844        volumes:
   845        - emptyDir: {}
   846          name: nginx-persistent-storage
   847        - configMap:
   848            name: configmap-in-base
   849          name: configmap-in-base
   850  ---
   851  apiVersion: apps/v1
   852  kind: Deployment
   853  metadata:
   854    labels:
   855      app: busybox
   856    name: busybox
   857  spec:
   858    template:
   859      metadata:
   860        labels:
   861          app: busybox
   862      spec:
   863        containers:
   864        - image: busybox
   865          name: busybox
   866          volumeMounts:
   867          - mountPath: /tmp/ps
   868            name: busybox-persistent-storage
   869        volumes:
   870        - emptyDir: {}
   871          name: busybox-persistent-storage
   872        - configMap:
   873            name: configmap-in-base
   874          name: configmap-in-base
   875  ---
   876  apiVersion: v1
   877  kind: Service
   878  metadata:
   879    labels:
   880      app: nginx
   881    name: nginx
   882  spec:
   883    ports:
   884    - port: 80
   885    selector:
   886      app: nginx
   887  ---
   888  apiVersion: v1
   889  kind: Service
   890  metadata:
   891    labels:
   892      app: busybox
   893    name: busybox
   894  spec:
   895    ports:
   896    - port: 8080
   897    selector:
   898      app: busybox
   899  `)
   900  }
   901  
   902  func TestExtendedPatchWithoutTarget(t *testing.T) {
   903  	th := kusttest_test.MakeHarness(t)
   904  	makeCommonFileForExtendedPatchTest(th)
   905  	th.WriteK("base", `
   906  resources:
   907  - deployment.yaml
   908  - service.yaml
   909  patches:
   910  - path: patch.yaml
   911  `)
   912  	th.WriteF("base/patch.yaml", `
   913  apiVersion: apps/v1
   914  kind: Deployment
   915  metadata:
   916    name: busybox
   917    annotations:
   918      new-key: new-value
   919  `)
   920  	m := th.Run("base", th.MakeDefaultOptions())
   921  	th.AssertActualEqualsExpected(m, `
   922  apiVersion: apps/v1
   923  kind: Deployment
   924  metadata:
   925    labels:
   926      app: nginx
   927    name: nginx
   928  spec:
   929    template:
   930      metadata:
   931        labels:
   932          app: nginx
   933      spec:
   934        containers:
   935        - image: nginx
   936          name: nginx
   937          volumeMounts:
   938          - mountPath: /tmp/ps
   939            name: nginx-persistent-storage
   940        volumes:
   941        - emptyDir: {}
   942          name: nginx-persistent-storage
   943        - configMap:
   944            name: configmap-in-base
   945          name: configmap-in-base
   946  ---
   947  apiVersion: apps/v1
   948  kind: Deployment
   949  metadata:
   950    annotations:
   951      new-key: new-value
   952    labels:
   953      app: busybox
   954    name: busybox
   955  spec:
   956    template:
   957      metadata:
   958        labels:
   959          app: busybox
   960      spec:
   961        containers:
   962        - image: busybox
   963          name: busybox
   964          volumeMounts:
   965          - mountPath: /tmp/ps
   966            name: busybox-persistent-storage
   967        volumes:
   968        - emptyDir: {}
   969          name: busybox-persistent-storage
   970        - configMap:
   971            name: configmap-in-base
   972          name: configmap-in-base
   973  ---
   974  apiVersion: v1
   975  kind: Service
   976  metadata:
   977    labels:
   978      app: nginx
   979    name: nginx
   980  spec:
   981    ports:
   982    - port: 80
   983    selector:
   984      app: nginx
   985  ---
   986  apiVersion: v1
   987  kind: Service
   988  metadata:
   989    labels:
   990      app: busybox
   991    name: busybox
   992  spec:
   993    ports:
   994    - port: 8080
   995    selector:
   996      app: busybox
   997  `)
   998  }
   999  
  1000  func TestExtendedPatchNoMatchMultiplePatch(t *testing.T) {
  1001  	th := kusttest_test.MakeHarness(t)
  1002  	makeCommonFileForExtendedPatchTest(th)
  1003  	th.WriteK("base", `
  1004  resources:
  1005  - deployment.yaml
  1006  - service.yaml
  1007  patches:
  1008  - path: patch.yaml
  1009    target:
  1010      name: no-match
  1011  - path: patch.yaml
  1012    target:
  1013      name: busybox
  1014      kind: Job
  1015  `)
  1016  	th.WriteF("base/patch.yaml", `
  1017  apiVersion: apps/v1
  1018  kind: Deployment
  1019  metadata:
  1020    name: busybox
  1021    annotations:
  1022      new-key: new-value
  1023  `)
  1024  	m := th.Run("base", th.MakeDefaultOptions())
  1025  	th.AssertActualEqualsExpected(m, `
  1026  apiVersion: apps/v1
  1027  kind: Deployment
  1028  metadata:
  1029    labels:
  1030      app: nginx
  1031    name: nginx
  1032  spec:
  1033    template:
  1034      metadata:
  1035        labels:
  1036          app: nginx
  1037      spec:
  1038        containers:
  1039        - image: nginx
  1040          name: nginx
  1041          volumeMounts:
  1042          - mountPath: /tmp/ps
  1043            name: nginx-persistent-storage
  1044        volumes:
  1045        - emptyDir: {}
  1046          name: nginx-persistent-storage
  1047        - configMap:
  1048            name: configmap-in-base
  1049          name: configmap-in-base
  1050  ---
  1051  apiVersion: apps/v1
  1052  kind: Deployment
  1053  metadata:
  1054    labels:
  1055      app: busybox
  1056    name: busybox
  1057  spec:
  1058    template:
  1059      metadata:
  1060        labels:
  1061          app: busybox
  1062      spec:
  1063        containers:
  1064        - image: busybox
  1065          name: busybox
  1066          volumeMounts:
  1067          - mountPath: /tmp/ps
  1068            name: busybox-persistent-storage
  1069        volumes:
  1070        - emptyDir: {}
  1071          name: busybox-persistent-storage
  1072        - configMap:
  1073            name: configmap-in-base
  1074          name: configmap-in-base
  1075  ---
  1076  apiVersion: v1
  1077  kind: Service
  1078  metadata:
  1079    labels:
  1080      app: nginx
  1081    name: nginx
  1082  spec:
  1083    ports:
  1084    - port: 80
  1085    selector:
  1086      app: nginx
  1087  ---
  1088  apiVersion: v1
  1089  kind: Service
  1090  metadata:
  1091    labels:
  1092      app: busybox
  1093    name: busybox
  1094  spec:
  1095    ports:
  1096    - port: 8080
  1097    selector:
  1098      app: busybox
  1099  `)
  1100  }
  1101  
  1102  func TestExtendedPatchMultiplePatchOverlapping(t *testing.T) {
  1103  	th := kusttest_test.MakeHarness(t)
  1104  	makeCommonFileForExtendedPatchTest(th)
  1105  	th.WriteK("base", `
  1106  resources:
  1107  - deployment.yaml
  1108  - service.yaml
  1109  patches:
  1110  - path: patch1.yaml
  1111    target:
  1112      labelSelector: app=busybox
  1113  - path: patch2.yaml
  1114    target:
  1115      name: busybox
  1116      kind: Deployment
  1117  `)
  1118  	th.WriteF("base/patch1.yaml", `
  1119  apiVersion: apps/v1
  1120  kind: Deployment
  1121  metadata:
  1122    name: busybox
  1123    annotations:
  1124      new-key-from-patch1: new-value
  1125  `)
  1126  	th.WriteF("base/patch2.yaml", `
  1127  apiVersion: apps/v1
  1128  kind: Deployment
  1129  metadata:
  1130    name: busybox
  1131    annotations:
  1132      new-key-from-patch2: new-value
  1133  `)
  1134  	m := th.Run("base", th.MakeDefaultOptions())
  1135  	th.AssertActualEqualsExpected(m, `
  1136  apiVersion: apps/v1
  1137  kind: Deployment
  1138  metadata:
  1139    labels:
  1140      app: nginx
  1141    name: nginx
  1142  spec:
  1143    template:
  1144      metadata:
  1145        labels:
  1146          app: nginx
  1147      spec:
  1148        containers:
  1149        - image: nginx
  1150          name: nginx
  1151          volumeMounts:
  1152          - mountPath: /tmp/ps
  1153            name: nginx-persistent-storage
  1154        volumes:
  1155        - emptyDir: {}
  1156          name: nginx-persistent-storage
  1157        - configMap:
  1158            name: configmap-in-base
  1159          name: configmap-in-base
  1160  ---
  1161  apiVersion: apps/v1
  1162  kind: Deployment
  1163  metadata:
  1164    annotations:
  1165      new-key-from-patch1: new-value
  1166      new-key-from-patch2: new-value
  1167    labels:
  1168      app: busybox
  1169    name: busybox
  1170  spec:
  1171    template:
  1172      metadata:
  1173        labels:
  1174          app: busybox
  1175      spec:
  1176        containers:
  1177        - image: busybox
  1178          name: busybox
  1179          volumeMounts:
  1180          - mountPath: /tmp/ps
  1181            name: busybox-persistent-storage
  1182        volumes:
  1183        - emptyDir: {}
  1184          name: busybox-persistent-storage
  1185        - configMap:
  1186            name: configmap-in-base
  1187          name: configmap-in-base
  1188  ---
  1189  apiVersion: v1
  1190  kind: Service
  1191  metadata:
  1192    labels:
  1193      app: nginx
  1194    name: nginx
  1195  spec:
  1196    ports:
  1197    - port: 80
  1198    selector:
  1199      app: nginx
  1200  ---
  1201  apiVersion: v1
  1202  kind: Service
  1203  metadata:
  1204    annotations:
  1205      new-key-from-patch1: new-value
  1206    labels:
  1207      app: busybox
  1208    name: busybox
  1209  spec:
  1210    ports:
  1211    - port: 8080
  1212    selector:
  1213      app: busybox
  1214  `)
  1215  }
  1216  

View as plain text