Initial upload with full project structure

This commit is contained in:
2026-02-01 20:48:57 +00:00
parent 857f5f4cf5
commit b66bf359dc

300
app/README.md Normal file
View File

@@ -0,0 +1,300 @@
# Confgen
A CLI tool that generates, validates, and manages environment-specific configuration files from templates with schema validation, secrets interpolation, diff preview, and interactive editing.
## Features
- **Template-based config generation**: Define templates with Jinja2-style variable placeholders
- **Multi-environment support**: Generate configs for dev, staging, and prod environments
- **Schema validation**: Validate generated configs against JSON Schema definitions
- **Secrets interpolation**: Replace secret placeholders with values from env vars or vault backends
- **Diff preview**: Show colored diff between current and generated config before applying
- **Interactive TUI editor**: Edit config values interactively in the terminal
- **Output with secret masking**: Mask secret values in output with *** pattern
## Installation
### From Source
```bash
pip install -e .
```
### Using pip
```bash
pip install confgen
```
## Quick Start
1. Create a template file (e.g., `config.yaml.j2`):
```yaml
app_name: {{APP_NAME}}
database:
host: {{DB_HOST}}
port: {{DB_PORT}}
password: {{env.SECRET_DB_PASSWORD}}
```
2. Create a `confgen.yaml` configuration:
```yaml
templates:
config:
path: config.yaml.j2
format: yaml
environments:
dev:
variables:
APP_NAME: myapp-dev
DB_HOST: localhost
DB_PORT: 5432
prod:
variables:
APP_NAME: myapp
DB_HOST: db.example.com
DB_PORT: 5432
```
3. Generate a config:
```bash
confgen generate --template config --environment dev --output config.dev.yaml
```
## Configuration
### Environment Variables
| Variable | Description | Default |
|----------|-------------|---------|
| `CONFGEN_TEMPLATES_DIR` | Directory containing template files | `~/.confgen/templates` |
| `CONFGEN_CONFIG_DIR` | Directory for generated configs | `~/.confgen/output` |
| `CONFGEN_ENV` | Default environment (dev/staging/prod) | `dev` |
| `CONFGEN_VAULT_URL` | Vault backend URL (optional) | `` |
| `CONFGEN_VAULT_TOKEN` | Vault authentication token (optional) | `` |
### confgen.yaml
The main configuration file defining templates, environments, and schema:
```yaml
templates:
my_config:
path: templates/config.yaml.j2
format: yaml
schema: schemas/config.json
environments:
dev:
variables:
VAR1: value1
staging:
variables:
VAR1: value2
prod:
variables:
VAR1: value3
```
## Commands
### generate
Generate a configuration file from a template.
```bash
confgen generate [OPTIONS]
```
| Option | Description |
|--------|-------------|
| `--template, -t` | Template name (required) |
| `--environment, -e` | Environment name (default: dev) |
| `--output, -o` | Output file path |
| `--format, -f` | Output format (json/yaml/toml) |
| `--validate` | Validate generated config against schema |
| `--diff` | Show diff before applying |
| `--edit` | Open interactive editor |
### list
List available templates and environments.
```bash
confgen list [OPTIONS]
```
| Option | Description |
|--------|-------------|
| `--templates` | List available templates |
| `--environments` | List available environments |
| `--env` | Show variables for specific environment |
### validate
Validate a configuration file against a schema.
```bash
confgen validate [OPTIONS]
```
| Option | Description |
|--------|-------------|
| `--config, -c` | Config file to validate |
| `--schema, -s` | Schema file path |
| `--template, -t` | Template name to use its schema |
### edit
Open interactive editor for editing config values.
```bash
confgen edit [OPTIONS]
```
| Option | Description |
|--------|-------------|
| `--template, -t` | Template name (required) |
| `--environment, -e` | Environment name |
| `--output, -o` | Output file path |
## Template Syntax
### Variables
Use Jinja2-style syntax for variable substitution:
```yaml
app_name: {{APP_NAME}}
port: {{PORT}}
debug: {{DEBUG_MODE}}
```
### Environment Variables
Access environment variables with `env.` prefix:
```yaml
password: {{env.SECRET_PASSWORD}}
database_url: {{env.DATABASE_URL}}
```
### Secrets (with masking)
Secrets are automatically masked in output:
```yaml
api_key: {{vault.SECRET_API_KEY}}
db_password: {{env.SECRET_DB_PASSWORD}}
```
### Conditionals
Use Jinja2 conditionals:
```yaml
{% if USE_CACHE %}
cache:
enabled: true
ttl: {{CACHE_TTL}}
{% endif %}
```
### Loops
Use Jinja2 loops:
```yaml
services:
{% for service in SERVICES %}
- name: {{service.name}}
port: {{service.port}}
{% endfor %}
```
## Secrets Management
### Environment Variables
Secrets from environment variables:
```yaml
password: {{env.SECRET_PASSWORD}}
```
### Vault Backend
Secrets from a vault backend:
```yaml
api_key: {{vault.SECRET_API_KEY}}
```
Configure vault with environment variables:
- `CONFGEN_VAULT_URL`: Vault server URL
- `CONFGEN_VAULT_TOKEN`: Authentication token
## Schema Validation
Validate your configurations against JSON Schema:
```json
{
"type": "object",
"properties": {
"app_name": {"type": "string"},
"port": {"type": "integer", "minimum": 1, "maximum": 65535},
"debug": {"type": "boolean"}
},
"required": ["app_name", "port"]
}
```
## Interactive Editor
Launch an interactive terminal UI to edit config values:
```bash
confgen edit --template my_config --environment dev
```
The editor provides:
- Type-aware input validation
- Default values from template
- Secret field masking
- Environment-specific editing
## Development
```bash
# Install development dependencies
pip install -e .[dev]
# Run tests
pytest tests/ -v
# Run with coverage
pytest tests/ --cov=src/confgen --cov-report=term-missing
# Format code
black src/confgen tests/
# Lint code
ruff check src/confgen tests/
```
## Examples
See the `examples/` directory for complete examples:
- `simple.yaml`: Basic template example
- `complex.yaml`: Template with secrets and conditionals
- `schema.json`: JSON Schema for validation
- `confgen.yaml`: Complete configuration example
## License
MIT