Skip to content

Commit 7f7b621

Browse files
committed
Added Readme, initial design document and ADR
1 parent cdec411 commit 7f7b621

File tree

3 files changed

+217
-2
lines changed

3 files changed

+217
-2
lines changed

README.md

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,80 @@
1-
# helm-values-manager
2-
Helm Values Manager is a Helm plugin designed to simplify configuration and secret management across multiple Kubernetes deployments. It provides an intuitive CLI to define, validate, and securely store configuration values for Helm-based applications.
1+
# **🚧 This is a work in progress not yet released for usage**
2+
3+
4+
# **Helm Values Manager 🚀**
5+
🔐 **Secure & Manage Helm Configurations and Secrets Easily!**
6+
7+
Helm Values Manager is a **Helm plugin** designed to simplify **configuration and secret management** across multiple **Kubernetes deployments**. It provides an intuitive **CLI** to define, validate, and securely store configuration values for Helm-based applications.
8+
9+
---
10+
11+
## **✨ Features**
12+
- 🔴 **Deployment-Aware Configuration Management** – Define **global and per-environment configurations**.
13+
- 🔴 **Secure Secret Storage** – Integrates with
14+
- 🔴 **Google Secret Manager**
15+
- 🔴 **AWS Secrets Manager**
16+
- 🔴 **Azure Key Vault**
17+
- 🔴 **HashiCorp Vault**
18+
- 🔴 **Git-Secrets**
19+
- 🔧 **Easily Extendable** – Implement your own backend using the **SecretManager API**.
20+
- 🔴 **Autocompletion Support** – Smooth CLI experience with **Typer-based interactive commands**.
21+
- 🔴 **Validation & Missing Keys Detection** – Avoid misconfigurations with **automated checks**.
22+
- 🔴 **Extensible Secret Manager** – Easily add new **custom backends** for secret storage.
23+
- 🔴 **Seamless ArgoCD & Helm Integration** – Works **out-of-the-box** with Helm-based GitOps workflows.
24+
25+
---
26+
27+
## **🚀 Quick Start**
28+
1️⃣ **Install the Helm Plugin**
29+
```sh
30+
helm plugin install https://github.com/your-org/helm-values-manager.git
31+
```
32+
33+
2️⃣ **Initialize a New Configuration**
34+
```sh
35+
helm values-manager init my-release
36+
```
37+
38+
3️⃣ **Define a Deployment & Add Keys**
39+
```sh
40+
helm values-manager add-deployment dev --secrets-backend=aws_secrets_manager
41+
helm values-manager add-key DATABASE_URL --required --sensitive --path=global.database.url
42+
```
43+
44+
4️⃣ **Set & Retrieve Secret Values**
45+
```sh
46+
helm values-manager add-secret DATABASE_URL=mydb://connection --deployment=dev
47+
helm values-manager get-secret DATABASE_URL --deployment=dev
48+
```
49+
50+
5️⃣ **Validate Configurations**
51+
```sh
52+
helm values-manager validate
53+
```
54+
55+
6️⃣ **Generate the Final `values.yaml`**
56+
```sh
57+
helm values-manager generate --deployment=dev
58+
```
59+
60+
---
61+
62+
## **📜 Documentation**
63+
📖 **[Read the Full Documentation](https://github.com/your-org/helm-values-manager/wiki)**
64+
💡 **[View the Architecture Decision Record (ADR)](https://github.com/your-org/helm-values-manager/wiki/ADRs/001-helm-values-manager.md)**
65+
🛠 **[Contribute to the Project](https://github.com/your-org/helm-values-manager/wiki/Contribution/contributing.md)**
66+
67+
---
68+
69+
## **🤝 Contributing**
70+
Want to help? Check out our **[contribution guidelines](https://github.com/your-org/helm-values-manager/wiki/Contribution/contributing.md)**! We welcome issues, PRs, and feature suggestions. 🎉
71+
72+
---
73+
74+
## **📌 License**
75+
🔓 Open-source under the **MIT License**.
76+
77+
---
78+
79+
### **🌟 Star this repo if you find it useful! 🌟**
80+
🙌 PRs and contributions are welcome! Let's build a better **Helm secret & config manager** together. 🚀
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# ADR-001: Decision to Implement Helm Values Manager as a Helm Plugin
2+
3+
## Status
4+
Accepted
5+
6+
## Context
7+
Managing configurations and secrets across multiple Kubernetes deployments is a complex task. Helm provides a standardized way to manage Kubernetes applications, but it lacks a structured approach for managing per-environment configurations and securely storing secrets.
8+
9+
Key challenges include:
10+
- Ensuring configurations remain consistent across different environments (e.g., dev, staging, production).
11+
- Managing sensitive values securely using external secret management systems.
12+
- Automating the generation of `values.yaml` while integrating with GitOps tools like ArgoCD.
13+
- Providing a user-friendly CLI that integrates well with Helm workflows.
14+
15+
## Decision
16+
We have decided to implement the **Helm Values Manager** as a **Helm plugin written in Python**.
17+
18+
### Justification:
19+
1. **Seamless Helm Integration:** A Helm plugin ensures configurations are managed within the Helm ecosystem without requiring additional tools.
20+
2. **Python for Implementation:** Libraries like `Typer` enable robust CLI development with autocomplete capabilities.
21+
3. **Global and Deployment-Specific Configuration Management:** Ensuring consistency across deployments.
22+
4. **Secret Storage Abstraction:** Securely manages sensitive values by integrating with AWS Secrets Manager, Azure Key Vault, and HashiCorp Vault.
23+
5. **CLI-Based Approach:** Interactive commands for managing configurations and secrets.
24+
6. **Autocomplete Support:** Smooth CLI experience.
25+
7. **ArgoCD Compatibility:** Generates `values.yaml` dynamically for GitOps workflows.
26+
27+
## YAML Structure
28+
29+
```yaml
30+
release: my-release
31+
32+
deployments:
33+
dev:
34+
secrets_backend: aws_secrets_manager
35+
prod:
36+
secrets_backend: azure_key_vault
37+
38+
config:
39+
- key: DATABASE_URL
40+
path: global.database.url
41+
required: true
42+
sensitive: true
43+
values:
44+
dev: "mydb://dev-connection"
45+
prod: "mydb://prod-connection"
46+
- key: LOG_LEVEL
47+
path: global.logging.level
48+
required: false
49+
sensitive: false
50+
values:
51+
dev: "debug"
52+
prod: "warn"
53+
```
54+
55+
## Consequences
56+
- The project will be built as a Helm plugin with Python as the core language.
57+
- Secret backends must be configured separately for security compliance.
58+
- Future extensions can include a UI for easier configuration management.
59+
60+
## Decision Outcome
61+
✅ **Accepted** - Implementation will proceed as a Helm plugin using Python, with structured configuration management, secret integration, and ArgoCD compatibility.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Helm Values Manager - Design Document
2+
3+
## Background
4+
Helm Values Manager simplifies **configuration and secret management** across multiple Kubernetes deployments. It ensures **secure storage**, **validation**, and **automation** in Helm-based workflows.
5+
6+
## Architecture Overview
7+
8+
The Helm plugin consists of:
9+
- **CLI Command Interface (Python Typer-based)**: Handles command execution.
10+
- **Validation Engine**: Ensures required keys have values for each deployment.
11+
- **Secret Manager Integration**: Supports AWS Secrets Manager, Azure Key Vault, HashiCorp Vault, and Git-Secrets.
12+
- **values.yaml Generator**: Produces the final Helm-compatible values file.
13+
- **Helm Plugin System**: Integrates seamlessly with Helm commands.
14+
15+
## Configuration YAML Structure
16+
17+
```yaml
18+
release: my-release
19+
20+
deployments:
21+
dev:
22+
secrets_backend: aws_secrets_manager
23+
prod:
24+
secrets_backend: azure_key_vault
25+
26+
config:
27+
- key: DATABASE_URL
28+
path: global.database.url
29+
required: true
30+
sensitive: true
31+
values:
32+
dev: "mydb://dev-connection"
33+
prod: "mydb://prod-connection"
34+
- key: LOG_LEVEL
35+
path: global.logging.level
36+
required: false
37+
sensitive: false
38+
values:
39+
dev: "debug"
40+
prod: "warn"
41+
```
42+
43+
## Secret Manager Extensibility
44+
Implemented using **Abstract Base Class (ABC)**:
45+
46+
```python
47+
from abc import ABC, abstractmethod
48+
49+
class SecretManager(ABC):
50+
@abstractmethod
51+
def get_secret(self, secret_name: str) -> str:
52+
pass
53+
54+
@abstractmethod
55+
def store_secret(self, secret_name: str, secret_value: str):
56+
pass
57+
```
58+
59+
## CLI Workflow
60+
61+
### Example Commands
62+
```sh
63+
helm values-manager init my-release
64+
helm values-manager add-key DATABASE_URL --required --sensitive --path=global.database.url
65+
helm values-manager add-secret DATABASE_URL=mydb://connection --deployment=dev
66+
helm values-manager validate
67+
helm values-manager generate --deployment=dev
68+
```
69+
70+
## Testing Strategy
71+
- **Unit Tests:** CLI commands, validation logic, storage handling.
72+
- **Integration Tests:** Secret manager interactions.
73+
- **E2E Tests:** Full workflow validation.
74+
75+
## Conclusion
76+
Helm Values Manager is a **secure, scalable, and extensible solution** for Helm-based deployments.

0 commit comments

Comments
 (0)