diff --git a/examples/transformerconfigs/README.md b/examples/transformerconfigs/README.md index e7cd7d3ef..fec0dc6ec 100644 --- a/examples/transformerconfigs/README.md +++ b/examples/transformerconfigs/README.md @@ -90,7 +90,7 @@ nameReference: ## cusotmizing transformer configurations Kustomize has a default set of configurations. They can be saved to local directory through `kustomize config save -d`. Kustomize allows modifying those configuration files and using them in kustomization.yaml file. This tutorial shows how to customize those configurations to -- support a crd type +- [support a CRD type](crd/README.md) - disabling adding commonLabels to fields in some kind of resources - add extra fields for variable substitution - add extra fields for name reference diff --git a/examples/transformerconfigs/crd/README.md b/examples/transformerconfigs/crd/README.md new file mode 100644 index 000000000..faf903f84 --- /dev/null +++ b/examples/transformerconfigs/crd/README.md @@ -0,0 +1,176 @@ +## Supporting Custom Resources (defined by a CRD) + +This tutorial shows how to add transformer configurations to support a custom resource. + +Create a workspace by + +``` +DEMO_HOME=$(mktemp -d) +``` + +### Get the native config as a starting point + +Get the default transformer configurations using this command: + + +``` +kustomize config save -d $DEMO_HOME/kustomizeconfig +``` +The default configurations are saved +in the directory `$DEMO_HOME/kusotmizeconfig` as several files + +> ``` +> commonannotations.yaml +> commonlabels.yaml +> nameprefix.yaml +> namereference.yaml +> namespace.yaml +> varreference.yaml +> ``` + +These files contain the field specifications for native resources +that transformation directives like `namePrefix`, `commonLabels`, etc. +need to do their work. + +These default configurations already include some common +field specifictions for all types: + +- nameprefix is added to `.metadata.name` +- namespace is added to `.metadata.namespace` +- labels is added to `.metadata.labels` +- annotations is added to `.metadata.annotations` + +### Adding a custom resource + +Consider a CRD of kind `MyKind` with fields +- `.spec.secretRef.name` reference a Secret +- `.spec.beeRef.name` reference an instance of CRD `Bee` +- `.spec.containers.command` as the list of container commands +- `.spec.selectors` as the label selectors + +Add the following file to configure the transformers for the above fields + +``` +cat > $DEMO_HOME/kustomizeconfig/mykind.yaml << EOF + +commonLabels: +- path: spec/selectors + create: true + kind: MyKind + +nameReference: +- kind: Bee + fieldSpecs: + - path: spec/beeRef/name + kind: MyKind +- kind: Secret + fieldSpecs: + - path: spec/secretRef/name + kind: MyKind + +varReference: +- path: spec/containers/command + kind: MyKind +- path: spec/beeRef/action + kind: MyKind + +EOF +``` + +### Apply config + +Create a file with some resources that +includes an instance of `MyKind`: + + +``` +cat > $DEMO_HOME/resources.yaml << EOF +apiVersion: v1 +kind: Secret +metadata: + name: crdsecret +data: + PATH: YmJiYmJiYmIK +--- +apiVersion: v1beta1 +kind: Bee +metadata: + name: bee +spec: + action: fly +--- +apiVersion: jingfang.example.com/v1beta1 +kind: MyKind +metadata: + name: mykind +spec: + secretRef: + name: crdsecret + beeRef: + name: bee + action: \$(BEE_ACTION) + containers: + - command: + - "echo" + - "\$(BEE_ACTION)" + image: myapp +EOF +``` + +Create a kustomization referring to it: + + +``` +cat > $DEMO_HOME/kustomization.yaml << EOF +resources: +- resources.yaml + +namePrefix: test- + +commonLabels: + foo: bar + +vars: +- name: BEE_ACTION + objref: + kind: Bee + name: bee + apiVersion: v1beta1 + fieldref: + fieldpath: spec.action +EOF +``` + +Use the customized transformer configurations by specifying them +in the kustomization file: + +``` +cat >> $DEMO_HOME/kustomization.yaml << EOF +configurations: +- kustomizeconfig/mykind.yaml +- kustomizeconfig/commonannotations.yaml +- kustomizeconfig/commonlabels.yaml +- kustomizeconfig/nameprefix.yaml +- kustomizeconfig/namereference.yaml +- kustomizeconfig/namespace.yaml +- kustomizeconfig/varreference.yaml +EOF +``` + +Run `kustomize build` and verify that the namereference is correctly resolved. + + +``` +test 2 == \ +$(kustomize build $DEMO_HOME | grep -A 2 ".*Ref" | grep "test-" | wc -l); \ +echo $? +``` + +Run `kustomize build` and verify that the vars correctly resolved. + + +``` +test 0 == \ +$(kustomize build $DEMO_HOME | grep "BEE_ACTION" | wc -l); \ +echo $? +```