Split up Kustomize Output with yq
Kustomize is an incredibly powerful tool for integrating existing Kubernetes manifests in your own cluster. You can write a configuration file in YAML that references the manifest you want to install. That manifest can include local files as well as remote repositories.
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v0.6.2
This configuration will pull in the local deployment.yaml
as well as the
CustomResourceDefinitions
that are hosted in the Gateway API repository.
When you run kustomize build
the combined YAML to configure your cluster
will be sent to stdout
. This can be piped into a .yaml
file if you
would like to examine or save the configuration.
However, Kustomize will only output the config as a single YAML file with
multiple “documents” concatenated together. If you want to split this output
across multiple files, the yq
command line
utility provides a handy way of
doing just that.
kustomize build | yq --split-exp '.metadata.name + ".yaml"' --no-doc
Here, we pipe the output of kustomize build
to yq
. Passing the --split-exp
flag
tells yq
to split the input into separate documents. It takes an argument that
uses the yq
expression language (which is the same as
jq
) to name the files based on the value in the
YAML document’s metadata.name
field. The --no-doc
flag simply omits the ---
used
to separate YAML documents from the output.