DEV Community 👩‍💻👨‍💻

Cover image for How to create your first Helm plugin?
Suresh Kumar for Kubernetes Community Days Chennai

Posted on • Originally published at sureshdsk.dev

How to create your first Helm plugin?

Helm

Helm helps you manage Kubernetes applications using helm charts. Helm Charts help you define, install, and upgrade Kubernetes applications.

Example:

# add chart repository
helm repo add bitnami https://charts.bitnami.com/bitnami

# update charts
helm repo update

# install mysql using helm chart by bitnami
helm install bitnami/mysql --generate-name
Enter fullscreen mode Exit fullscreen mode

Helm plugins

Helm plugins provide a way to extend Helm features without modifying the helm core codebase.

Helm plugins have the following features:

  • They can be added and removed from a Helm installation without impacting the core Helm tool.
  • They can be written in any programming language.
  • They integrate with Helm, and will show up in helm help and other places.

Helm plugins are stored in $HELM_PLUGINS directory, you can change this using helm env command.

Install a helm plugin

A Helm plugin can be installed from a git repo, a tar release or from a local directory.

helm plugin install <path|url>
Enter fullscreen mode Exit fullscreen mode

Helm plugin anatomy

A helm plugin constists of a plugin.yaml file, which has the plugin definition and its associated commands.

─ fullenv
   ├── plugin.yaml
   └── run.sh
Enter fullscreen mode Exit fullscreen mode

plugin definition

plugin.yaml defines the name, usage, description and command to run when invoked.

  • The Command can point to your own script of any programming language.
  • The ignoreFlags switch tells Helm to not pass flags to the plugin.

So if a plugin is called with helm myplugin --foo and ignoreFlags: true, then --foo is silently discarded.

plugin.yaml

name: fullenv
usage: "show env vars"
description: "show all env vars"
command: "$HELM_PLUGIN_DIR/run.sh"
ignoreFlags: true
Enter fullscreen mode Exit fullscreen mode

run.sh - just prints helm environment variables.

#!/bin/sh
echo $HELM_PLUGIN_NAME
echo $HELM_PLUGIN_DIR
echo $HELM_PLUGINS
echo $HELM_REPOSITORY_CONFIG
echo $HELM_REPOSITORY_CACHE
echo $HELM_BIN
Enter fullscreen mode Exit fullscreen mode

Platform specific commands

Helm plugin commands can be configured to target a os platform and architecture.

name: fullenv
usage: "show env vars"
description: "show all env vars"
command: "$HELM_PLUGIN_DIR/run.sh"
platformCommand:
  - os: linux
    arch: i386
    command: "$HELM_PLUGIN_DIR/run.sh"
  - os: linux
    arch: amd64
    command: "$HELM_PLUGIN_DIR/run.sh"

Enter fullscreen mode Exit fullscreen mode

Helm follows the below rules to choose a command.

  • If platformCommand is present, it will be searched first.
  • If both os and arch match the current platform, search will stop and the command will be used.
  • If os matches and there is no more specific arch match, the command will be used.
  • If no platformCommand match is found, the default command will be used.
  • If no matches are found in platformCommand and no command is present, Helm will exit with an error.

Install the plugin

cd into the plugin directory and then run the command below

# install
helm plugin install .

# check if the installation is successful
helm plugin list
Enter fullscreen mode Exit fullscreen mode

Test the plugin

helm fullenv
Enter fullscreen mode Exit fullscreen mode

If you like this article, subscribe to the newsletter and Connect with me on twitter to get updates on my future articles. ✅

Top comments (0)

We are hiring! Do you want to be our Senior Platform Engineer? Forem is hiring a Senior Platform Engineer

If you're interested in ops and site reliability and capable of dipping in to our Linux stack, we'd love your help shoring up our systems!