kubeconform: Mount Schema Example #
Overview #
If you want to use your own schema instead of the built-in schema, you can follow this example.
This example demonstrates how to mount a local schema directory and then use it
with
kubeconform function to validate KRM resources.
Fetch the example package #
Get the example package by running the following commands:
$ kpt pkg get https://github.com/kptdev/krm-functions-catalog/tree/master/examples/kubeconform-mount-schema
We have a ReplicationController in replicationcontroller.yaml that has a
schema violation:
spec.replicasmust not be a string.
We have a jsonschema directory that contains some json schema files that will
be used with kubeval function.
Schema #
The json schema used in this example are converted from an openapi schema file
using
openapi2jsonschema.
We run the following command to do it:
$ openapi2jsonschema --stand-alone --expanded --kubernetes -o jsonschema path/to/openapi.json
Function invocation #
We can invoke function with the following command:
$ kpt fn eval kubeconform-mount-schema -i ghcr.io/kptdev/krm-functions-catalog/kubeconform:latest --results-dir /tmp \
--mount type=bind,src="$(pwd)/kubeval-mount-schema/jsonschema",dst=/schema-dir/master-standalone \
-- schema_location=file:///schema-dir
We mount the local schema directory into the container with path
/schema-dir/master-standalone. And then we tell the function the location of
the schema by specifying schema_location=file:///schema-dir. The function will
by default look for the master-standalone directory in the specified
schema_location.
Expected Results #
Let’s look at the structured results in /tmp/results.yaml:
apiVersion: kpt.dev/v1
kind: FunctionResultList
metadata:
name: fnresults
exitCode: 1
items:
- image: ghcr.io/kptdev/krm-functions-catalog/kubeconform:latest
stderr: 'failed to evaluate function: error: function failure'
exitCode: 1
results:
- message: got string, want null or integer
severity: error
resourceRef:
apiVersion: v1
kind: ReplicationController
name: bob
field:
path: spec.replicas
file:
path: replicationcontroller.yaml
To fix the violation, replace the value of spec.replicas with an integer
Rerun the command, and it should succeed.