Skip to content

Latest commit

 

History

History
 
 

mixin

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

Mixin with Kustomize using Patches and Vars.

Demonstrate how to leverage kustomize transformers, patches and vars to achieve mixin.

Layout

. ├── app │   ├── base │   │   ├── kustomization.yaml │   │   └── values.yaml │   ├── dev │   │   ├── base │   │   │   ├── kustomization.yaml │   │   │   ├── overlayvalues.yaml │   │   │   └── values.yaml │   │   └── clienta │   │   ├── kustomization.yaml │   │   └── overlayvalues.yaml │   └── prod │   ├── base │   │   ├── kustomization.yaml │   │   ├── overlayvalues.yaml │   │   └── values.yaml │   ├── clienta │   │   ├── kustomization.yaml │   │   └── overlayvalues.yaml │   └── clientb │   ├── kustomization.yaml │   └── overlayvalues.yaml └── components ├── appdeployment │   ├── kustomization.yaml │   ├── service.yaml │   └── values.yaml ├── mysql │   ├── kustomization.yaml │   ├── service.yaml │   └── values.yaml ├── persistencelayer │   ├── kustomization.yaml │   ├── service.yaml │   └── values.yaml ├── rediscache │   ├── kustomization.yaml │   ├── service.yaml │   └── values.yaml ├── redissession │   ├── kustomization.yaml │   ├── service.yaml │   └── values.yaml └── varnish ├── kustomization.yaml ├── service.yaml └── values.yaml

Setup the workspace

First, define a place to work:

DEMO_HOME=$(mktemp -d)

Preparation

mkdir -p ${DEMO_HOME}/app
mkdir -p ${DEMO_HOME}/app/base
mkdir -p ${DEMO_HOME}/app/dev
mkdir -p ${DEMO_HOME}/app/dev/base
mkdir -p ${DEMO_HOME}/app/dev/clienta
mkdir -p ${DEMO_HOME}/app/prod
mkdir -p ${DEMO_HOME}/app/prod/base
mkdir -p ${DEMO_HOME}/app/prod/clienta
mkdir -p ${DEMO_HOME}/app/prod/clientb
mkdir -p ${DEMO_HOME}/components
mkdir -p ${DEMO_HOME}/components/appdeployment
mkdir -p ${DEMO_HOME}/components/mysql
mkdir -p ${DEMO_HOME}/components/persistencelayer
mkdir -p ${DEMO_HOME}/components/rediscache
mkdir -p ${DEMO_HOME}/components/redissession
mkdir -p ${DEMO_HOME}/components/varnish

Preparation Step KustomizationFile0

cat <<'EOF' >${DEMO_HOME}/app/base/kustomization.yaml
---
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

resources:
- ../../components/appdeployment
- ../../components/mysql
- ../../components/persistencelayer
- ../../components/rediscache
- ../../components/redissession
- ../../components/varnish
EOF

Preparation Step KustomizationFile1

cat <<'EOF' >${DEMO_HOME}/app/dev/base/kustomization.yaml
---
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

resources:
- ../../base
- values.yaml

patchesStrategicMerge:
- overlayvalues.yaml
EOF

Preparation Step KustomizationFile2

cat <<'EOF' >${DEMO_HOME}/app/dev/clienta/kustomization.yaml
---
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

resources:
- ../base

patchesStrategicMerge:
- overlayvalues.yaml
EOF

Preparation Step KustomizationFile3

cat <<'EOF' >${DEMO_HOME}/app/prod/base/kustomization.yaml
---
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

resources:
- ../../base
- values.yaml

patchesStrategicMerge:
- overlayvalues.yaml
EOF

Preparation Step KustomizationFile4

cat <<'EOF' >${DEMO_HOME}/app/prod/clienta/kustomization.yaml
---
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

resources:
- ../base

patchesStrategicMerge:
- overlayvalues.yaml
EOF

Preparation Step KustomizationFile5

cat <<'EOF' >${DEMO_HOME}/app/prod/clientb/kustomization.yaml
---
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

resources:
- ../base

patchesStrategicMerge:
- overlayvalues.yaml
EOF

Preparation Step KustomizationFile6

cat <<'EOF' >${DEMO_HOME}/components/appdeployment/kustomization.yaml
---
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

resources:
- ./service.yaml
- ./values.yaml
EOF

Preparation Step KustomizationFile7

cat <<'EOF' >${DEMO_HOME}/components/mysql/kustomization.yaml
---
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

resources:
- ./service.yaml
- ./values.yaml
EOF

Preparation Step KustomizationFile8

cat <<'EOF' >${DEMO_HOME}/components/persistencelayer/kustomization.yaml
---
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

resources:
- ./service.yaml
- ./values.yaml
EOF

Preparation Step KustomizationFile9

cat <<'EOF' >${DEMO_HOME}/components/rediscache/kustomization.yaml
---
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

resources:
- ./service.yaml
- ./values.yaml
EOF

Preparation Step KustomizationFile10

cat <<'EOF' >${DEMO_HOME}/components/redissession/kustomization.yaml
---
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

resources:
- ./service.yaml
- ./values.yaml
EOF

Preparation Step KustomizationFile11

cat <<'EOF' >${DEMO_HOME}/components/varnish/kustomization.yaml
---
kind: Kustomization
apiVersion: kustomize.config.k8s.io/v1beta1

resources:
- ./service.yaml
- ./values.yaml
EOF

Preparation Step Resource0

cat <<'EOF' >${DEMO_HOME}/app/base/values.yaml
apiVersion: v1
kind: Values
metadata:
  name: app-base
  namespace: build
spec:
  field1: value1
EOF

Preparation Step Resource1

cat <<'EOF' >${DEMO_HOME}/app/dev/base/overlayvalues.yaml
apiVersion: v1
kind: Values
metadata:
  name: appdeployment
  namespace: build
spec:
  port: 8501
---
apiVersion: v1
kind: Values
metadata:
  name: mysql
  namespace: build
spec:
  targetPort: 9502
EOF

Preparation Step Resource2

cat <<'EOF' >${DEMO_HOME}/app/dev/base/values.yaml
apiVersion: v1
kind: Values
metadata:
  name: app-dev-base
  namespace: build
spec:
  field1: value1
EOF

Preparation Step Resource3

cat <<'EOF' >${DEMO_HOME}/app/dev/clienta/overlayvalues.yaml
apiVersion: v1
kind: Values
metadata:
  name: mysql
  namespace: build
spec:
  targetPort: 12502
EOF

Preparation Step Resource4

cat <<'EOF' >${DEMO_HOME}/app/prod/base/overlayvalues.yaml
apiVersion: v1
kind: Values
metadata:
  name: rediscache
  namespace: build
spec:
  port: 8704
---
apiVersion: v1
kind: Values
metadata:
  name: redissession
  namespace: build
spec:
  targetPort: 9705
EOF

Preparation Step Resource5

cat <<'EOF' >${DEMO_HOME}/app/prod/base/values.yaml
apiVersion: v1
kind: Values
metadata:
  name: app-prod-base
  namespace: build
spec:
  field1: value1
EOF

Preparation Step Resource6

cat <<'EOF' >${DEMO_HOME}/app/prod/clienta/overlayvalues.yaml
apiVersion: v1
kind: Values
metadata:
  name: persistencelayer
  namespace: build
spec:
  port: 28903
  targetPort: 29903
EOF

Preparation Step Resource7

cat <<'EOF' >${DEMO_HOME}/app/prod/clientb/overlayvalues.yaml
apiVersion: v1
kind: Values
metadata:
  name: redissession
  namespace: build
spec:
  port: 18203
  targetPort: 19203
EOF

Preparation Step Resource8

cat <<'EOF' >${DEMO_HOME}/components/appdeployment/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: appdeployment
spec:
  selector:
    app: appdeployment
  ports:
  - name: web
    port: $(Values.appdeployment.spec.port)
    targetPort: $(Values.appdeployment.spec.targetPort)
EOF

Preparation Step Resource9

cat <<'EOF' >${DEMO_HOME}/components/appdeployment/values.yaml
apiVersion: v1
kind: Values
metadata:
  name: appdeployment
  namespace: build
spec:
  port: 8001
  targetPort: 9001
EOF

Preparation Step Resource10

cat <<'EOF' >${DEMO_HOME}/components/mysql/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
  - name: web
    port: $(Values.mysql.spec.port)
    targetPort: $(Values.mysql.spec.targetPort)
EOF

Preparation Step Resource11

cat <<'EOF' >${DEMO_HOME}/components/mysql/values.yaml
apiVersion: v1
kind: Values
metadata:
  name: mysql
  namespace: build
spec:
  port: 8002
  targetPort: 9002
EOF

Preparation Step Resource12

cat <<'EOF' >${DEMO_HOME}/components/persistencelayer/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: persistencelayer
spec:
  selector:
    app: persistencelayer
  ports:
  - name: web
    port: $(Values.persistencelayer.spec.port)
    targetPort: $(Values.persistencelayer.spec.targetPort)
EOF

Preparation Step Resource13

cat <<'EOF' >${DEMO_HOME}/components/persistencelayer/values.yaml
apiVersion: v1
kind: Values
metadata:
  name: persistencelayer
  namespace: build
spec:
  port: 8003
  targetPort: 9003
EOF

Preparation Step Resource14

cat <<'EOF' >${DEMO_HOME}/components/rediscache/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: rediscache
spec:
  selector:
    app: rediscache
  ports:
  - name: web
    port: $(Values.rediscache.spec.port)
    targetPort: $(Values.rediscache.spec.targetPort)
EOF

Preparation Step Resource15

cat <<'EOF' >${DEMO_HOME}/components/rediscache/values.yaml
apiVersion: v1
kind: Values
metadata:
  name: rediscache
  namespace: build
spec:
  port: 8004
  targetPort: 9004
EOF

Preparation Step Resource16

cat <<'EOF' >${DEMO_HOME}/components/redissession/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: redissession
spec:
  selector:
    app: redissession
  ports:
  - name: web
    port: $(Values.redissession.spec.port)
    targetPort: $(Values.redissession.spec.targetPort)
EOF

Preparation Step Resource17

cat <<'EOF' >${DEMO_HOME}/components/redissession/values.yaml
apiVersion: v1
kind: Values
metadata:
  name: redissession
  namespace: build
spec:
  port: 8005
  targetPort: 9005
EOF

Preparation Step Resource18

cat <<'EOF' >${DEMO_HOME}/components/varnish/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: varnish
spec:
  selector:
    app: varnish
  ports:
  - name: web
    port: $(Values.varnish.spec.port)
    targetPort: $(Values.varnish.spec.targetPort)
EOF

Preparation Step Resource19

cat <<'EOF' >${DEMO_HOME}/components/varnish/values.yaml
apiVersion: v1
kind: Values
metadata:
  name: varnish
  namespace: build
spec:
  port: 8006
  targetPort: 9006
EOF

Execution

app-dev-clienta

mkdir -p ${DEMO_HOME}/actual/dev-clienta
kustomize build ${DEMO_HOME}/app/dev/clienta -o ${DEMO_HOME}/actual/dev-clienta

app-prod-clienta

mkdir -p ${DEMO_HOME}/actual/prod-clienta
kustomize build ${DEMO_HOME}/app/prod/clienta -o ${DEMO_HOME}/actual/prod-clienta

app-prod-clientb

mkdir -p ${DEMO_HOME}/actual/prod-clientb
kustomize build ${DEMO_HOME}/app/prod/clientb -o ${DEMO_HOME}/actual/prod-clientb

Verification

mkdir -p ${DEMO_HOME}/expected
mkdir -p ${DEMO_HOME}/expected/dev-clienta
mkdir -p ${DEMO_HOME}/expected/prod-clienta
mkdir -p ${DEMO_HOME}/expected/prod-clientb

Verification Step Expected0

cat <<'EOF' >${DEMO_HOME}/expected/dev-clienta/default_~g_v1_service_appdeployment.yaml
apiVersion: v1
kind: Service
metadata:
  name: appdeployment
spec:
  ports:
  - name: web
    port: 8501
    targetPort: 9001
  selector:
    app: appdeployment
EOF

Verification Step Expected1

cat <<'EOF' >${DEMO_HOME}/expected/dev-clienta/default_~g_v1_service_mysql.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - name: web
    port: 8002
    targetPort: 12502
  selector:
    app: mysql
EOF

Verification Step Expected2

cat <<'EOF' >${DEMO_HOME}/expected/dev-clienta/default_~g_v1_service_persistencelayer.yaml
apiVersion: v1
kind: Service
metadata:
  name: persistencelayer
spec:
  ports:
  - name: web
    port: 8003
    targetPort: 9003
  selector:
    app: persistencelayer
EOF

Verification Step Expected3

cat <<'EOF' >${DEMO_HOME}/expected/dev-clienta/default_~g_v1_service_rediscache.yaml
apiVersion: v1
kind: Service
metadata:
  name: rediscache
spec:
  ports:
  - name: web
    port: 8004
    targetPort: 9004
  selector:
    app: rediscache
EOF

Verification Step Expected4

cat <<'EOF' >${DEMO_HOME}/expected/dev-clienta/default_~g_v1_service_redissession.yaml
apiVersion: v1
kind: Service
metadata:
  name: redissession
spec:
  ports:
  - name: web
    port: 8005
    targetPort: 9005
  selector:
    app: redissession
EOF

Verification Step Expected5

cat <<'EOF' >${DEMO_HOME}/expected/dev-clienta/default_~g_v1_service_varnish.yaml
apiVersion: v1
kind: Service
metadata:
  name: varnish
spec:
  ports:
  - name: web
    port: 8006
    targetPort: 9006
  selector:
    app: varnish
EOF

Verification Step Expected6

cat <<'EOF' >${DEMO_HOME}/expected/prod-clienta/default_~g_v1_service_appdeployment.yaml
apiVersion: v1
kind: Service
metadata:
  name: appdeployment
spec:
  ports:
  - name: web
    port: 8001
    targetPort: 9001
  selector:
    app: appdeployment
EOF

Verification Step Expected7

cat <<'EOF' >${DEMO_HOME}/expected/prod-clienta/default_~g_v1_service_mysql.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - name: web
    port: 8002
    targetPort: 9002
  selector:
    app: mysql
EOF

Verification Step Expected8

cat <<'EOF' >${DEMO_HOME}/expected/prod-clienta/default_~g_v1_service_persistencelayer.yaml
apiVersion: v1
kind: Service
metadata:
  name: persistencelayer
spec:
  ports:
  - name: web
    port: 28903
    targetPort: 29903
  selector:
    app: persistencelayer
EOF

Verification Step Expected9

cat <<'EOF' >${DEMO_HOME}/expected/prod-clienta/default_~g_v1_service_rediscache.yaml
apiVersion: v1
kind: Service
metadata:
  name: rediscache
spec:
  ports:
  - name: web
    port: 8704
    targetPort: 9004
  selector:
    app: rediscache
EOF

Verification Step Expected10

cat <<'EOF' >${DEMO_HOME}/expected/prod-clienta/default_~g_v1_service_redissession.yaml
apiVersion: v1
kind: Service
metadata:
  name: redissession
spec:
  ports:
  - name: web
    port: 8005
    targetPort: 9705
  selector:
    app: redissession
EOF

Verification Step Expected11

cat <<'EOF' >${DEMO_HOME}/expected/prod-clienta/default_~g_v1_service_varnish.yaml
apiVersion: v1
kind: Service
metadata:
  name: varnish
spec:
  ports:
  - name: web
    port: 8006
    targetPort: 9006
  selector:
    app: varnish
EOF

Verification Step Expected12

cat <<'EOF' >${DEMO_HOME}/expected/prod-clientb/default_~g_v1_service_appdeployment.yaml
apiVersion: v1
kind: Service
metadata:
  name: appdeployment
spec:
  ports:
  - name: web
    port: 8001
    targetPort: 9001
  selector:
    app: appdeployment
EOF

Verification Step Expected13

cat <<'EOF' >${DEMO_HOME}/expected/prod-clientb/default_~g_v1_service_mysql.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - name: web
    port: 8002
    targetPort: 9002
  selector:
    app: mysql
EOF

Verification Step Expected14

cat <<'EOF' >${DEMO_HOME}/expected/prod-clientb/default_~g_v1_service_persistencelayer.yaml
apiVersion: v1
kind: Service
metadata:
  name: persistencelayer
spec:
  ports:
  - name: web
    port: 8003
    targetPort: 9003
  selector:
    app: persistencelayer
EOF

Verification Step Expected15

cat <<'EOF' >${DEMO_HOME}/expected/prod-clientb/default_~g_v1_service_rediscache.yaml
apiVersion: v1
kind: Service
metadata:
  name: rediscache
spec:
  ports:
  - name: web
    port: 8704
    targetPort: 9004
  selector:
    app: rediscache
EOF

Verification Step Expected16

cat <<'EOF' >${DEMO_HOME}/expected/prod-clientb/default_~g_v1_service_redissession.yaml
apiVersion: v1
kind: Service
metadata:
  name: redissession
spec:
  ports:
  - name: web
    port: 18203
    targetPort: 19203
  selector:
    app: redissession
EOF

Verification Step Expected17

cat <<'EOF' >${DEMO_HOME}/expected/prod-clientb/default_~g_v1_service_varnish.yaml
apiVersion: v1
kind: Service
metadata:
  name: varnish
spec:
  ports:
  - name: web
    port: 8006
    targetPort: 9006
  selector:
    app: varnish
EOF
rm -f $DEMO_HOME/actual/dev-clienta/build_*.yaml
test 0 == \
$(diff -r $DEMO_HOME/actual/dev-clienta $DEMO_HOME/expected/dev-clienta | wc -l); \
echo $?
rm -f $DEMO_HOME/actual/prod-clienta/build_*.yaml
test 0 == \
$(diff -r $DEMO_HOME/actual/prod-clienta $DEMO_HOME/expected/prod-clienta | wc -l); \
echo $?
rm -f $DEMO_HOME/actual/prod-clientb/build_*.yaml
test 0 == \
$(diff -r $DEMO_HOME/actual/prod-clientb $DEMO_HOME/expected/prod-clientb | wc -l); \
echo $?