Skip to main content
Version: 0.10

Helm KCL Plugin

Introduction

Helm is a tool for managing Charts. Charts are packages of pre-configured Kubernetes resources. You can use the Helm-KCL-Plugin to

  • Edit the helm charts in a hook way to separate data and logic for the Kubernetes manifests management.
  • For multi-environment and multi-tenant scenarios, you can maintain these configurations gracefully rather than simply copy and paste.
  • Validate all KRM resources using the KCL schema.

Prerequisites

Quick Start

Let’s write a KCL function which add annotation managed-by=helm-kcl-plugin only to Deployment resources in the helm chart.

1. Get the Example

git clone https://github.com/kcl-lang/helm-kcl.git/
cd ./helm-kcl/examples/workload-charts-with-kcl

2. Test and Run

Run the KCL code via the Helm KCL Plugin.

helm kcl template --file ./kcl-run.yaml

The output yaml is

apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/instance: workload
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: workload
app.kubernetes.io/version: 0.1.0
helm.sh/chart: workload-0.1.0
name: workload
spec:
ports:
- name: www
port: 80
protocol: TCP
targetPort: 80
selector:
app.kubernetes.io/instance: workload
app.kubernetes.io/name: workload
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/instance: workload
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: workload
app.kubernetes.io/version: 0.1.0
helm.sh/chart: workload-0.1.0
name: workload
annotations:
managed-by: helm-kcl-plugin
spec:
selector:
matchLabels:
app.kubernetes.io/instance: workload
app.kubernetes.io/name: workload
template:
metadata:
labels:
app.kubernetes.io/instance: workload
app.kubernetes.io/name: workload
spec:
containers:
- image: nginx:alpine
name: frontend

Guides for Developing KCL

Here's what you can do in the KCL code:

  • Read resources from option("items"). The option("items") complies with the KRM Functions Specification.
  • Return a KRM list for output resources.
  • Return an error using assert {condition}, {error_message}.
  • Read the PATH variables. e.g. option("PATH").
  • Read the environment variables. e.g. option("env").

More Documents and Examples