9.9 KiB
11. Provisioning Generator
Complete provisioning infrastructure generation from multiple input sources
Demonstrates the typedialog-provisioning-gen tool that generates a complete 7-layer validation architecture for configuration management, supporting multiple input modes and producing TypeDialog forms, Nickel schemas, validators, and orchestration scripts.
Quick Start
Pick Your Input Mode
Mode A: Analyze Cargo.toml (Automatic Detection)
# Auto-detect features from dependencies
typedialog-provisioning-gen cargo \
--input mode-a-cargo/Cargo.toml \
--output /tmp/my-provisioning
→ See mode-a-cargo/README.md for details
Mode B: Config File (Explicit Specification)
# Define all features in TOML config
typedialog-provisioning-gen config \
--input mode-b-config/project-spec.toml \
--output /tmp/my-provisioning
→ See mode-b-config/README.md for details
Mode C: Interactive Wizard (Conversational)
# Step-by-step guidance with AI suggestions
typedialog-provisioning-gen wizard \
--project my-service \
--output /tmp/my-provisioning
→ See mode-c-wizard/README.md for details
Mode D: Nickel Schema (Migration)
# Convert existing Nickel schema
typedialog-provisioning-gen nickel \
--input mode-d-nickel/existing-config.ncl \
--output /tmp/my-provisioning
→ See mode-d-nickel/README.md for details
What Gets Generated
All modes produce the same 7-layer structure:
provisioning/
├── constraints.toml # Layer 1: Validation bounds (single source of truth)
├── schemas/ # Layer 2: Type contracts (Nickel)
├── validators/ # Layer 3: Validation logic
├── defaults/ # Layer 4: Default values
├── fragments/ # Layer 5: TypeDialog forms
├── scripts/ # Layer 6: Orchestration scripts
└── config.ncl # Layer 7: Master configuration
→ See output-example/README.md for detailed structure explanation
Key Features
✅ 4 Input Modes
- Cargo.toml Analysis: Automatic feature detection from dependencies
- Config File: Explicit specification with full control
- Interactive Wizard: Conversational guidance with AI suggestions
- Nickel Schema: Convert existing Nickel to provisioning structure
✅ 7-Layer Validation
- Constraints (single source of truth)
- Schemas (Nickel type contracts)
- Validators (validation logic)
- Defaults (sensible defaults)
- Fragments (TypeDialog forms)
- Scripts (orchestration)
- Master Config (integration point)
✅ Domain Features
Each mode discovers or defines domain features:
| Feature | Fields | Example |
|---|---|---|
| http_server | bind_address, timeout_seconds | REST API |
| database | host, port, username, password | PostgreSQL, MySQL |
| authentication | jwt_secret, expiry | JWT tokens |
| caching | cache_enabled, ttl | Redis layer |
| monitoring | prometheus_url, retention | Observability |
✅ Multiple Field Types
- Text, Number, Password, Confirm
- Select, MultiSelect
- Editor, Date
- RepeatingGroup (arrays)
✅ Sensitive Data Handling
Automatic encryption for sensitive fields:
age(modern encryption)sops(Mozilla SOPS)secretumvault(integration ready)aws-kms,gcp-kms,azure-kms
✅ Constraint Interpolation
Single source of truth - define constraints once, use everywhere:
- In validators (Nickel)
- In forms (TypeDialog)
- In documentation
- In validation scripts
Complete Workflow
1. Generate from Cargo.toml
cd my-rust-service
typedialog-provisioning-gen cargo --output ./provisioning
2. Test Form Interactively
typedialog provisioning/fragments/http_server-section.toml --backend cli
3. Validate Configuration
./provisioning/scripts/validate-nickel.sh < config.ncl
4. Use in Application
let config = nickel::eval_file("provisioning/config.ncl")?;
Directory Guide
| Path | Purpose |
|---|---|
mode-a-cargo/ |
Cargo.toml introspection example |
mode-b-config/ |
Config file specification example |
mode-c-wizard/ |
Interactive wizard example |
mode-d-nickel/ |
Nickel schema conversion example |
output-example/ |
Complete generated output structure |
Examples by Scenario
Scenario 1: Existing Rust Project
# You have a Cargo.toml with dependencies
typedialog-provisioning-gen cargo --output ./infra
# Auto-detects:
# - axum → HTTP server config
# - sqlx → database config
# - redis → caching config
# - prometheus → monitoring
Best for: Rust projects, quick setup
Scenario 2: New Multi-Service Architecture
# You have a detailed specification
typedialog-provisioning-gen config --input architecture.toml --output ./platform
# Supports:
# - Multiple database types
# - Event streaming setup
# - Monitoring configuration
# - Cloud provider selection
Best for: Complex systems, cross-team coordination
Scenario 3: Interactive Setup
# You want guidance through the process
typedialog-provisioning-gen wizard --project my-service
# Walks through:
# - Project type selection
# - Infrastructure requirements
# - Feature selection
# - Field configuration
# - AI-powered suggestions
Best for: First-time users, exploring options
Scenario 4: Legacy System Migration
# You have existing Nickel schemas
typedialog-provisioning-gen nickel --input config.ncl --output ./new-provisioning
# Converts:
# - Type definitions → schemas
# - Records → domain features
# - Fields → form fragments
Best for: System modernization, adding forms to existing configs
Using Generated Artifacts
TypeDialog Forms
# Display configuration form
typedialog provisioning/fragments/database-section.toml --backend cli
# Web interface
typedialog-web provisioning/fragments/*.toml --port 3000
Nickel Validation
# Validate syntax
./provisioning/scripts/validate-nickel.sh
# Use in config
nickel eval provisioning/config.ncl
Scripts
# Master orchestrator
./provisioning/scripts/config.sh
# Format conversion
./provisioning/scripts/json-to-nickel.sh < input.json
./provisioning/scripts/nickel-to-json.sh < config.ncl
Application Integration
// Load provisioning config
let config = provisioning::load("provisioning/config.ncl")?;
What This Demonstrates
Core Concepts
✅ Multi-mode input pipeline normalization ✅ 7-layer validation architecture ✅ Constraint interpolation (single source of truth) ✅ Template-based code generation ✅ Domain-driven feature extraction
Integration Points
✅ TypeDialog forms generation ✅ Nickel schema contracts ✅ Sensitive data encryption ✅ Cross-format conversion (JSON ↔ Nickel) ✅ Orchestration scripts (bash + nushell)
Advanced Features
✅ Cargo.toml dependency analysis ✅ Project type inference ✅ Infrastructure requirement detection ✅ AI-powered wizard with RAG retrieval ✅ Reusable template library ✅ Custom field types and validation
Next Steps
Try Each Mode
- Start with Mode A:
cd mode-a-cargo && cat README.md - Explore Mode B:
cd mode-b-config && cat README.md - Test Mode C:
cd mode-c-wizard && cat README.md - Learn Mode D:
cd mode-d-nickel && cat README.md
Understand the Output
- View Structure:
cd output-example && cat README.md - Study Layers: Examine each generated directory (schemas/, validators/, etc.)
- Test Interactively: Run TypeDialog on generated fragments
Build Your Own
- Pick a mode based on your needs
- Generate from your input
- Customize the generated structure
- Deploy using generated scripts
- Iterate as your requirements evolve
More Information
- TypeDialog Docs: Form UI and integration
- Nickel Docs: Type-safe configuration language
- Encryption: Secrets management with age, sops, KMS
- Scripts: Bash and Nushell orchestration
Testing All Examples
# Run Mode A
cargo run -p typedialog-provisioning-gen -- cargo \
--input examples/11-provisioning-generation/mode-a-cargo/Cargo.toml \
--output /tmp/mode-a-output
# Run Mode B
cargo run -p typedialog-provisioning-gen -- config \
--input examples/11-provisioning-generation/mode-b-config/project-spec.toml \
--output /tmp/mode-b-output
# Run Mode D
cargo run -p typedialog-provisioning-gen -- nickel \
--input examples/11-provisioning-generation/mode-d-nickel/existing-config.ncl \
--output /tmp/mode-d-output
# Run Mode C (interactive)
cargo run -p typedialog-provisioning-gen -- wizard \
--project test-service \
--output /tmp/mode-c-output
Key Files
Example Inputs
mode-a-cargo/Cargo.toml- Real Cargo.toml with dependenciesmode-b-config/project-spec.toml- Complete feature specificationmode-d-nickel/existing-config.ncl- Nickel schema example
Documentation
mode-a-cargo/README.md- Cargo.toml analysis detailsmode-b-config/README.md- Config specification formatmode-c-wizard/README.md- Wizard interaction flowmode-d-nickel/README.md- Nickel schema conversionoutput-example/README.md- Generated structure explanation
Summary
The Provisioning Generator provides a complete solution for infrastructure-as-code configuration:
- Flexible Input: 4 modes for different scenarios
- Type-Safe Output: Nickel schemas with validation
- User-Friendly Forms: TypeDialog for interactive setup
- Production-Ready: Scripts for deployment and orchestration
- Extensible: Template library and custom domain features
Perfect for:
- Microservice configuration
- Infrastructure setup automation
- Configuration management at scale
- DevOps tooling
- SaaS platform provisioning