Genifest¶
Alpha Software
This is alpha software under active development. APIs and configuration formats may change without notice.
Genifest is a Kubernetes manifest generation tool that creates deployment manifests from templates for GitOps workflows. It processes configuration files to generate Kubernetes resources with dynamic value substitution, designed for use with GitOps continuous deployment processes like ArgoCD.
Key Features¶
- π Metadata-Driven Discovery: Automatically discovers configurations through directory structures
- π― Dynamic Value Generation: Multiple ways to generate values (functions, templates, scripts, files)
- π·οΈ Tag-Based Filtering: Apply different sets of changes based on environment or type tags
- π Hierarchical Configuration: Distributed configs that keep changes close to files
- ποΈ Advanced Path Expressions: yq-style keySelectors with grammar-based parsing
- π Security & Safety: Path validation, isolated execution, scoped changes, GitOps-ready
- π CLI-First Design: Subcommand-based architecture with enhanced progress reporting
How It Works¶
Genifest uses a metadata-driven approach to discover and process YAML configuration files. It applies dynamic changes to Kubernetes manifests and related configuration files based on configurable rules, allowing you to maintain a single set of manifests that evolve over time.
graph TD
A[genifest.yaml] --> B[Metadata Discovery]
B --> C[Load Configurations]
C --> D[Apply Changes]
D --> E[Generate Manifests]
E --> F[GitOps Deployment]
G[Functions] --> D
H[Templates] --> D
I[Scripts] --> D
J[Files] --> D Use Cases¶
- Environment-Specific Deployments: Generate different configurations for dev, staging, production
- Secret Management: Embed secrets and sensitive data dynamically
- Image Tag Management: Update container image tags based on business rules
- Configuration Variations: Manage variations in configuration files across environments
- GitOps Workflows: Single source of truth that works seamlessly with ArgoCD, Flux, etc.
Quick Start¶
metadata:
cloudHome: "."
paths:
- path: "k8s"
files: true
depth: 0
- path: "scripts"
scripts: true
depth: 0
functions:
- name: "get-replicas"
params:
- name: "environment"
required: true
valueFrom:
script:
exec: "get-replicas.sh"
args:
- name: "environment"
valueFrom:
argRef:
name: environment
changes:
- tag: "production"
fileSelector: "*-deployment.yaml"
keySelector: ".spec.replicas"
valueFrom:
call:
function: "get-replicas"
args:
- name: "environment"
valueFrom:
default:
value: "production"
Architecture Overview¶
Configuration Structure¶
Genifest uses a hierarchical configuration approach:
- Root Configuration: A
genifest.yamlfile in your project root defines metadata paths and global settings - Distributed Configurations: Additional
genifest.yamlfiles in subdirectories provide scoped configurations - Automatic Discovery: Directories without explicit configurations get synthetic configs containing all YAML files
Value Generation System¶
Multiple ways to generate dynamic values:
- DefaultValue: Literal string values
- ArgumentRef: References to variables from evaluation context
- BasicTemplate: Template strings with
${variable}substitution - FunctionCall: Calls to named functions with arguments
- ScriptExec: Executes scripts from scripts directory
- FileInclusion: Includes content from files directory
- CallPipeline: Chains multiple operations together
Next Steps¶
-
Quick Start
Get up and running with Genifest in minutes
-
User Guide
Learn core concepts and advanced features
-
Examples
Follow along with real-world examples
-
Reference
Complete API and configuration reference
Community¶
- GitHub: zostay/genifest
- Issues: Bug Reports & Feature Requests
- Discussions: Community Forum
License¶
Genifest is open source software licensed under the MIT License.
Copyright Β© 2025 Qubling LLC