thebushidocollective/han/kustomize-generators

Claude Code and agent skill by thebushidocollective/han

Trust tier 2
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Use when generating ConfigMaps and Secrets with Kustomize for Kubernetes configuration management.

Install

npx vskill@latest install thebushidocollective/han/kustomize-generators

SKILL.md

Kustomize Generators

Master ConfigMap and Secret generation using Kustomize generators for managing application configuration, credentials, and environment-specific settings without manual YAML creation.

Overview

Kustomize generators automatically create ConfigMaps and Secrets from literals, files, and environment files. Generated resources include content hashes in their names, enabling automatic rollouts when configuration changes.

ConfigMap Generator Basics

Literal Values
yaml
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: app-config
literals:
- DATABASE_URL=postgresql://localhost:5432/mydb
- LOG_LEVEL=info
- CACHE_ENABLED=true
- MAX_CONNECTIONS=100
- TIMEOUT_SECONDS=30

Generated ConfigMap:

yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config-8g2h5m9k7t
data:
DATABASE_URL: postgresql://localhost:5432/mydb
LOG_LEVEL: info
CACHE_ENABLED: "true"
MAX_CONNECTIONS: "100"
TIMEOUT_SECONDS: "30"
File-Based Generation
yaml
# kustomization.yaml
configMapGenerator:
- name: app-config
files:
- application.properties
- config/database.conf
- config/logging.yml

With files:

properties
# application.properties
server.port=8080
server.host=0.0.0.0
app.name=MyApplication
app.version=1.0.0
conf
# config/database.conf
max_connections = 100
shared_buffers = 256MB
effective_cache_size = 1GB
yaml
# config/logging.yml
level: info
format: json
outputs:
- stdout
- file: /var/log/app.log
Named Files
yaml
configMapGenerator:
- name: app-config
files:
- config.properties=application.properties
- db.conf=config/database.conf
- log.yml=config/logging.yml

Generated ConfigMap:

yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config-9m4k8h2f6d
data:
config.properties: |
server.port=8080
server.host=0.0.0.0
app.name=MyApplication
app.version=1.0.0
db.conf: |
max_connections = 100
shared_buffers = 256MB
effective_cache_size = 1GB
log.yml: |
level: info
format: json
outputs:
- stdout
- file: /var/log/app.log
Environment Files
yaml
configMapGenerator:
- name: app-config
envs:
- .env
- config/.env.production

With files:

bash
# .env
DATABASE_URL=postgresql://localhost:5432/mydb
REDIS_URL=redis://localhost:6379
LOG_LEVEL=info
bash
# config/.env.production
DATABASE_URL=postgresql://prod-db:5432/mydb
REDIS_URL=redis://prod-redis:6379
LOG_LEVEL=warn
MONITORING_ENABLED=true
Mixed Sources
yaml
configMapGenerator:
- name: app-config
literals:
- APP_NAME=MyApp
- APP_VERSION=1.0.0
files:
- application.properties
envs:
- .env

Secret Generator Basics

Literal Values
yaml
secretGenerator:
- name: app-secrets
type: Opaque
literals:
- database-password=super-secret-password
- api-key=1234567890abcdef
- jwt-secret=my-jwt-secret-key

Generated Secret:

yaml
apiVersion: v1
kind: Secret
metadata:
name: app-secrets-2f6h8k9m4t
type: Opaque
data:
database-password: c3VwZXItc2VjcmV0LXBhc3N3b3Jk
api-key: MTIzNDU2Nzg5MGFiY2RlZg==
jwt-secret: bXktand0LXNlY3JldC1rZXk=
File-Based Secrets
yaml
secretGenerator:
- name: tls-secret
type: kubernetes.io/tls
files:
- tls.crt=certs/server.crt
- tls.key=certs/server.key
Docker Registry Secret
yaml
secretGenerator:
- name: docker-registry
type: kubernetes.io/dockerconfigjson
files:
- .dockerconfigjson=docker-config.json

With docker-config.json:

json
{
"auths": {
"registry.example.com": {
"username": "myuser",
"password": "mypassword",
"email": "myemail@example.com",
"auth": "bXl1c2VyOm15cGFzc3dvcmQ="
}
}
}
SSH Key Secret
yaml
secretGenerator:
- name: ssh-keys
type: Opaque
files:
- id_rsa=keys/id_rsa
- id_rsa.pub=keys/id_rsa.pub

Generator Behaviors

Create Behavior (Default)
yaml
configMapGenerator:
- name: app-config
behavior: create
literals:
- KEY=value

Creates a new ConfigMap. Fails if one already exists.

Replace Behavior
yaml
configMapGenerator:
- name: app-config
behavior: replace
literals:
- KEY=new-value

Replaces existing ConfigMap entirely. Fails if it doesn't exist.

Merge Behavior
yaml
# base/kustomization.yaml
configMapGenerator:
- name: app-config
literals:
- LOG_LEVEL=info
- CACHE_ENABLED=true
- DATABASE_URL=localhost
# overlays/production/kustomization.yaml
configMapGenerator:
- name: app-config
behavior: merge
literals:
- LOG_LEVEL=warn
- DATABASE_URL=prod-db.example.com

Resulting ConfigMap merges values:

yaml
data:
LOG_LEVEL: warn # Overridden
CACHE_ENABLED: "true" # From base
DATABASE_URL: prod-db.example.com # Overridden

Advanced Generator Patterns

Multi-Environment Configuration
yaml
# base/kustomization.yaml
configMapGenerator:
- name: app-config
literals:
- APP_NAME=MyApp
- CACHE_ENABLED=true
- TIMEOUT=30
files:
- application.properties
# overlays/development/kustomization.yaml
configMapGenerator:
- name: app-config
behavior: merge
literals:
- LOG_LEVEL=debug
- DEBUG_MODE=true
- DATABASE_URL=postgresql://dev-db:5432/mydb
# overlays/production/kustomization.yaml
configMapGenerator:
- name: app-config
behavior: merge
literals:
- LOG_LEVEL=error
- DEBUG_MODE=false
- DATABASE_URL=postgresql://prod-db:5432/mydb
- RATE_LIMIT_ENABLED=true
Configuration with Multiple Files
yaml
configMapGenerator:
- name: nginx-config
files:
- nginx.conf
- mime.types
- conf.d/default.conf
- conf.d/ssl.conf
- conf.d/upstream.conf
Application Configuration Bundle
yaml
configMapGenerator:
- name: app-bundle
literals:
- APP_NAME=MyApp
- APP_VERSION=1.0.0
files:
- app-config.json
- feature-flags.yml
- rate-limits.json
envs:
- .env.production

With files:

json
// app-config.json
{
"server": {
"port": 8080,
"host": "0.0.0.0"
},
"database": {
"pool_size": 20,
"timeout": 5000
}
}
yaml
# feature-flags.yml
features:
new_ui: true
beta_features: false
metrics: true
json
// rate-limits.json
{
"global": 1000,
"per_user": 100,
"burst": 50
}
Secrets from External Files
yaml
secretGenerator:
- name: database-credentials
files:
- username=secrets/db-username.txt
- password=secrets/db-password.txt
- name: api-keys
files:
- stripe-key=secrets/stripe-api-key.txt
- sendgrid-key=secrets/sendgrid-api-key.txt
- twilio-key=secrets/twilio-api-key.txt
TLS Certificate Bundle
yaml
secretGenerator:
- name: tls-certificates
type: kubernetes.io/tls
files:
- tls.crt=certs/server.crt
- tls.key=certs/server.key
- ca.crt=certs/ca-bundle.crt

Generator Options

Disable Name Suffix Hash
yaml
configMapGenerator:
- name: app-config
options:
disableNameSuffixHash: true
literals:
- KEY=value

Generated ConfigMap name: app-config (no hash)

Use cases:

  • Static references that shouldn't trigger rollouts
  • Resources referenced by external systems
  • Stable endpoints for debugging
Immutable ConfigMaps
yaml
configMapGenerator:
- name: app-config
options:
immutable: true
literals:
- KEY=value

Generated ConfigMap:

yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config-8g2h5m9k7t
immutable: true
data:
KEY: value
Labels and Annotations
yaml
configMapGenerator:
- name: app-config
options:
labels:
app: myapp
environment: production
version: v1.0.0
annotations:
config.kubernetes.io/description: "Application configuration"
config.kubernetes.io/owner: "platform-team"
literals:
- KEY=value

Consuming Generated Resources

Environment Variables from ConfigMap
yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
template:
spec:
containers:
- name: myapp
envFrom:
- configMapRef:
name: app-config
Specific Keys as Environment Variables
yaml
env:
- name: DATABASE_URL
valueFrom:
configMapKeyRef:
name: app-config
key: DATABASE_URL
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: app-config
key: LOG_LEVEL
Volume Mounts from ConfigMap
yaml
volumes:
- name: config
configMap:
name: app-config
items:
- key: application.properties
path: app.properties
- key: logging.yml
path: logging.yml
containers:
- name: myapp
volumeMounts:
- name: config
mountPath: /etc/config
readOnly: true
Secrets as Environment Variables
yaml
envFrom:
- secretRef:
name: app-secrets
env:
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: app-secrets
key: database-password
Secrets as Volume Mounts
yaml
volumes:
- name: secrets
secret:
secretName: app-secrets
items:
- key: database-password
path: db-password
mode: 0400
containers:
- name: myapp
volumeMounts:
- name: secrets
mountPath: /etc/secrets
readOnly: true

Real-World Examples

Web Application Configuration
yaml
# base/kustomization.yaml
configMapGenerator:
- name: webapp-config
literals:
- SESSION_TIMEOUT=3600
- CSRF_ENABLED=true
- CORS_ENABLED=false
files:
- nginx.conf
- app.properties
secretGenerator:
- name: webapp-secrets
literals:
- session-secret=changeme
- csrf-token-secret=changeme
resources:
- deployment.yaml
- service.yaml
yaml
# overlays/production/kustomization.yaml
resources:
- ../../base
configMapGenerator:
- name: webapp-config
behavior: merge
literals:
- SESSION_TIMEOUT=7200
- CORS_ENABLED=true
- CORS_ORIGINS=https://example.com,https://www.example.com
- RATE_LIMIT_ENABLED=true
- RATE_LIMIT_REQUESTS=1000
files:
- nginx.conf=nginx-production.conf
secretGenerator:
- name: webapp-secrets
behavior: replace
files:
- session-secret=secrets/session-secret.txt
- csrf-token-secret=secrets/csrf-secret.txt
Microservices Configuration
yaml
configMapGenerator:
# User Service Config
- name: user-service-config
literals:
- SERVICE_NAME=user-service
- PORT=8080
- METRICS_PORT=9090
files:
- config/user-service.yml
# Order Service Config
- name: order-service-config
literals:
- SERVICE_NAME=order-service
- PORT=8081
- METRICS_PORT=9091
files:
- config/order-service.yml
# Payment Service Config
- name: payment-service-config
literals:
- SERVICE_NAME=payment-service
- PORT=8082
- METRICS_PORT=9092
files:
- config/payment-service.yml
secretGenerator:
- name: user-service-secrets
literals:
- jwt-secret=user-jwt-secret
- database-password=user-db-password
- name: payment-service-secrets
literals:
- stripe-api-key=sk_test_123
- webhook-secret=whsec_123
Database Configuration
yaml
configMapGenerator:
- name: postgres-config
files:
- postgresql.conf
- pg_hba.conf
literals:
- POSTGRES_DB=myapp
- POSTGRES_MAX_CONNECTIONS=200
- POSTGRES_SHARED_BUFFERS=256MB

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
152
Repository forks
16
7-day trend score
25

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 14 May 2026, 5 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/thebushidocollective/han/kustomize-generators/badge)](https://verified-skill.com/skills/thebushidocollective/han/kustomize-generators)

Something wrong with this skill or its page? Tell us.