百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
H

helmify

> 云原生
开源

从 Kubernetes yaml 生成 Helm 图表

1.7K stars0 点赞0 次浏览
访问官网GitHub

工具介绍

从 Kubernetes yaml 生成 Helm 图表

Helmify

CLI that creates Helm charts from kubernetes manifests.

Helmify reads a list of supported k8s objects from stdin and converts it to a helm chart. Designed to generate charts for k8s operators but not limited to. See examples of charts generated by helmify.

Supports Helm >=v3.6.0

Submit issue if some features missing for your use-case.

Usage

  1. As pipe:

    cat my-app.yaml | helmify mychart
    

    Will create 'mychart' directory with Helm chart from yaml file with k8s objects.

    awk 'FNR==1 && NR!=1  {print "---"}{print}' /<my_directory>/*.yaml | helmify mychart
    

    Will create 'mychart' directory with Helm chart from all yaml files in <my_directory> directory.

  2. From filesystem:

    helmify -f /my_directory/my-app.yaml mychart
    

    Will create 'mychart' directory with Helm chart from my_directory/my-app.yaml.

    helmify -f /my_directory mychart
    

    Will create 'mychart' directory with Helm chart from all yaml files in <my_directory> directory.

    helmify -f /my_directory -r mychart
    

    Will create 'mychart' directory with Helm chart from all yaml files in <my_directory> directory recursively.

    helmify -f ./first_dir -f ./second_dir/my_deployment.yaml -f ./third_dir  mychart
    

    Will create 'mychart' directory with Helm chart from multiple directories and files.

  3. From kustomize output:

    kustomize build <kustomize_dir> | helmify mychart
    

    Will create 'mychart' directory with Helm chart from kustomize output.

Integrate to your Operator-SDK/Kubebuilder project

  1. Open Makefile in your operator project generated by Operator-SDK or Kubebuilder.
  2. Add these lines to Makefile:
  • With operator-sdk version < v1.23.0
    HELMIFY = $(shell pwd)/bin/helmify
    helmify:
        $(call go-get-tool,$(HELMIFY),github.com/arttor/helmify/cmd/[email protected])
    
    helm: manifests kustomize helmify
        $(KUSTOMIZE) build config/default | $(HELMIFY)
    
  • With operator-sdk version >= v1.23.0
    HELMIFY ?= $(LOCALBIN)/helmify
    
    .PHONY: helmify
    helmify: $(HELMIFY) ## Download helmify locally if necessary.
    $(HELMIFY): $(LOCALBIN)
        test -s $(LOCALBIN)/helmify || GOBIN=$(LOCALBIN) go install github.com/arttor/helmify/cmd/helmify@latest
        
    helm: manifests kustomize helmify
        $(KUSTOMIZE) build config/default | $(HELMIFY)
    
  1. Run make helm in project root. It will generate helm chart with name 'chart' in 'chart' directory.

Install

With Homebrew (for MacOS or Linux): brew install arttor/tap/helmify

Or download suitable for your system binary from the Releases page. Unpack the helmify binary and add it to your PATH and you are good to go!

Available options

Helmify takes a chart name for an argument. Usage:

helmify [flags] CHART_NAME - CHART_NAME is optional. Default is 'chart'. Can be a directory, e.g. 'deploy/charts/mychart'.

flag description sample -h -help Prints help helmify -h -f File source for k8s manifests (directory or file), multiple sources supported helmify -f ./test_data -r Scan file directory recursively. Used only if -f provided helmify -f ./test_data -r -v Enable verbose output. Prints WARN and INFO. helmify -v -vv Enable very verbose output. Also prints DEBUG. helmify -vv -version Print helmify version. helmify -version -crd-dir Place crds in their own folder per Helm 3 docs. Caveat: CRDs templating is not supported by Helm. helmify -crd-dir -image-pull-secrets Allows the user to use existing secrets as imagePullSecrets helmify -image-pull-secrets -original-name Use the object's original name instead of adding the chart's release name as the common prefix. helmify -original-name -cert-manager-as-subchart Allows the user to install cert-manager as a subchart helmify -cert-manager-as-subchart -cert-manager-version Allows the user to specify cert-manager subchart version. Only useful with cert-manager-as-subchart. (default "v1.12.2") helmify -cert-manager-version=v1.12.2 -cert-manager-install-crd Allows the user to install cert-manager CRD as part of the cert-manager subchart.(default "true") helmify -cert-manager-install-crd -preserve-ns Allows users to use the object's original namespace instead of adding all the resources to a common namespace. (default "false") helmify -preserve-ns -add-webhook-option Adds an option to enable/disable webhook installation helmify -add-webhook-option -optional-crds Enable optional CRD installation through values. helmify -optional-crds

Status

Supported k8s resources:

  • Deployment, DaemonSet, StatefulSet
  • Job, CronJob
  • Service, Ingress
  • PersistentVolumeClaim
  • RBAC (ServiceAccount, (cluster-)role, (cluster-)roleBinding)
  • configs (ConfigMap, Secret)
  • webhooks (cert, issuer, ValidatingWebhookConfiguration)
  • custom resource definitions (CRD)

Known issues

  • Helmify will not overwrite Chart.yaml file if presented. Done on purpose.
  • Helmify will not delete existing template files, only overwrite.
  • Helmify overwrites templates and values files on every run. This means that all your manual changes in helm template files will be lost on the next run.
  • if switching between the using the -crd-dir flag it is better to delete and regenerate the from scratch to ensure crds are not accidentally spliced/formatted into the same chart. Bear in mind you will want to update your Chart.yaml thereafter.

Develop

To support a new type of k8s object template:

  1. Implement helmify.Processor interface. Place implementation in pkg/processor. The package contains examples for most k8s objects.
  2. Register your processor in the pkg/app/app.go
  3. Add relevant input sample to test_data/kustomize.output.

Run

Clone repo and execute command:

cat test_data/k8s-operator-kustomize.output | go run ./cmd/helmify mychart

Will generate mychart Helm chart form file test_data/k8s-operator-kustomize.output representing typical operator kustomize output.

Test

For manual testing, run program with debug output:

cat test_data/k8s-operator-kustomize.output | go run ./cmd/helmify -vv mychart

Then inspect logs and generated chart in ./mychart directory.

To execute tests, run:

go test ./...

Beside unit-tests, project contains e2e test pkg/app/app_e2e_test.go. It's a go test, which uses test_data/* to generate a chart in temporary directory. Then runs helm lint --strict to check if generated chart is valid.

Contribute

Following rules will help changes to be accepted faster:

  • For more than one-line bugfixes consider creating an issue with bug description or feature request
  • For feature request try to think about and cover following topics (when applicable):
    • Motivation: why feature is needed? Which problem does it solve? What is current workaround?
    • Backward-compatibility: existing users expect that after upgrading helmify version their existing generated charts wont be changed without consent.
  • For bugfix PR consider adding example to /test_data source yamls reproducing bug.

Contribution flow

Check list before submitting PR:

  1. Run go fmt ./...
  2. Run tests go test ./...
  3. Update chart examples:
    cat test_data/sample-app.yaml | go run ./cmd/helmify examples/app
    
    cat test_data/k8s-operator-kustomize.output | go run ./cmd/helmify examples/operator
    
  4. In case of long commit history (more than 3) squash local commits into one

GitHub Issues· 0 开放

在 GitHub 查看全部

暂无开放 Issues,或尚未同步最近议题。

核心特点

  • •With operator-sdk version < v1.23.0
  • •With operator-sdk version >= v1.23.0
  • •Deployment, DaemonSet, StatefulSet
  • •Job, CronJob
  • •Service, Ingress
  • •PersistentVolumeClaim
  • •RBAC (ServiceAccount, (cluster-)role, (cluster-)roleBinding)
  • •configs (ConfigMap, Secret)
  • •webhooks (cert, issuer, ValidatingWebhookConfiguration)
  • •custom resource definitions (CRD)

> 标签

Gogolanghelmk8skubebuilder

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类云原生
定价开源

> 相关工具

K
Kubernetes
容器编排事实标准
H
Helm
Kubernetes 包管理器
S
seaweedfs
SeaweedFS is a distributed storage system for object storage (S3), file systems, and Iceberg tables,