# Infrastructure Setup Quick Reference

**Complete guide to provisioning infrastructure with Nickel + ConfigLoader + TypeDialog**

---

## Quick Start

### 1. Generate Infrastructure Configs (Solo Mode)

```bash
cd project-provisioning

# Generate solo deployment (Docker Compose, Nginx, Prometheus, OCI Registry)
nickel export --format json provisioning/schemas/infrastructure/examples-solo-deployment.ncl > /tmp/solo-infra.json

# Verify JSON structure
jq . /tmp/solo-infra.json
```

### 2. Validate Generated Configs

```bash
# Solo deployment validation
bash provisioning/platform/scripts/validate-infrastructure.nu --config-dir provisioning/platform/infrastructure

# Output shows validation status for Docker, K8s, Nginx, Prometheus
```

### 3. Compare Solo vs Enterprise

```bash
# Export both examples
nickel export --format json provisioning/schemas/infrastructure/examples-solo-deployment.ncl > /tmp/solo.json
nickel export --format json provisioning/schemas/infrastructure/examples-enterprise-deployment.ncl > /tmp/enterprise.json

# Compare orchestrator resources
echo "=== Solo Resources ===" && jq '.docker_compose_services.orchestrator.deploy.resources.limits' /tmp/solo.json
echo "=== Enterprise Resources ===" && jq '.docker_compose_services.orchestrator.deploy.resources.limits' /tmp/enterprise.json

# Compare prometheus monitoring
echo "=== Solo Prometheus Jobs ===" && jq '.prometheus_config.scrape_configs | length' /tmp/solo.json
echo "=== Enterprise Prometheus Jobs ===" && jq '.prometheus_config.scrape_configs | length' /tmp/enterprise.json
```

---

## Infrastructure Components

### Available Schemas (6)

| Schema | Purpose | Mode Presets |
|--------|---------|--------------|
| `docker-compose.ncl` | Container orchestration | solo, multiuser, enterprise |
| `kubernetes.ncl` | K8s manifest generation | solo, enterprise |
| `nginx.ncl` | Reverse proxy & load balancer | solo, enterprise |
| `prometheus.ncl` | Metrics & monitoring | solo, multiuser, enterprise |
| `systemd.ncl` | System service units | solo, enterprise |
| `oci-registry.ncl` | Container registry (Zot/Harbor) | solo, multiuser, enterprise |

### Configuration Examples (2)

| Example | Type | Services | CPU | Memory |
|---------|------|----------|-----|--------|
| `examples-solo-deployment.ncl` | Dev/Testing | 5 | 1.0 | 1024M |
| `examples-enterprise-deployment.ncl` | Production | 6 | 4.0 | 4096M |

### Automation Scripts (3)

| Script | Purpose | Usage |
|--------|---------|-------|
| `generate-infrastructure-configs.nu` | Generate all configs | `--mode solo --format yaml` |
| `validate-infrastructure.nu` | Validate configs | `--config-dir /path` |
| `setup-with-forms.sh` | Interactive setup | Auto-detects TypeDialog |

---

## Workflow: Platform Config + Infrastructure Config

### Two-Tier Configuration System

**Platform Config Layer** (Service-Internal):
```bash
Orchestrator port, database host, logging level
    ↓
ConfigLoader (Rust)
    ↓
Service reads TOML from runtime/generated/
```

**Infrastructure Config Layer** (Deployment-External):
```bash
Docker Compose services, Nginx routing, Prometheus scrape jobs
    ↓
nickel export → YAML/JSON
    ↓
Docker/Kubernetes/Nginx deploys infrastructure
```

### Complete Deployment Workflow

```bash
1. Choose platform config mode
   provisioning/platform/config/examples/orchestrator.solo.example.ncl
                                        ↓
2. Generate platform config TOML
   nickel export --format toml → runtime/generated/orchestrator.solo.toml
                                        ↓
3. Choose infrastructure mode
   provisioning/schemas/infrastructure/examples-solo-deployment.ncl
                                        ↓
4. Generate infrastructure JSON/YAML
   nickel export --format json → docker-compose-solo.json
                                        ↓
5. Deploy infrastructure
   docker-compose -f docker-compose-solo.yaml up
                                        ↓
6. Services start with configs
   ConfigLoader reads platform config TOML
   Docker/Nginx read infrastructure configs
```

---

## Resource Allocation Reference

### Solo Mode (Development)

```bash
Orchestrator:      1.0 CPU, 1024M RAM (1 replica)
Control Center:    0.5 CPU,  512M RAM
CoreDNS:           0.25 CPU, 256M RAM
KMS:               0.5 CPU,  512M RAM
OCI Registry:      0.5 CPU,  512M RAM (Zot - filesystem)
─────────────────────────────────────
Total:             2.75 CPU, 2624M RAM
Use Case:          Development, testing, PoCs
```

### Enterprise Mode (Production)

```bash
Orchestrator:      4.0 CPU, 4096M RAM (3 replicas)
Control Center:    2.0 CPU, 2048M RAM (HA)
CoreDNS:           1.0 CPU, 1024M RAM
KMS:               2.0 CPU, 2048M RAM
OCI Registry:      2.0 CPU, 2048M RAM (Harbor - S3)
─────────────────────────────────────
Total:            11.0 CPU, 10240M RAM (+ replicas)
Use Case:          Production deployments, high availability
```

---

## Common Tasks

### Generate Solo Infrastructure

```bash
nickel export --format json provisioning/schemas/infrastructure/examples-solo-deployment.ncl
```

### Generate Enterprise Infrastructure

```bash
nickel export --format json provisioning/schemas/infrastructure/examples-enterprise-deployment.ncl
```

### Validate JSON Structure

```bash
jq '.docker_compose_services | keys' /tmp/infra.json
jq '.prometheus_config.scrape_configs | length' /tmp/infra.json
jq '.oci_registry_config.backend' /tmp/infra.json
```

### Check Resource Limits

```bash
# All services in solo mode
jq '.docker_compose_services[] | {name: .name, cpu: .deploy.resources.limits.cpus, memory: .deploy.resources.limits.memory}' /tmp/solo.json

# Just orchestrator
jq '.docker_compose_services.orchestrator.deploy.resources.limits' /tmp/solo.json
```

### Compare Modes

```bash
# Services count
jq '.docker_compose_services | length' /tmp/solo.json      # 5 services
jq '.docker_compose_services | length' /tmp/enterprise.json # 6 services

# Prometheus jobs
jq '.prometheus_config.scrape_configs | length' /tmp/solo.json      # 4 jobs
jq '.prometheus_config.scrape_configs | length' /tmp/enterprise.json # 7 jobs

# Registry backend
jq -r '.oci_registry_config.backend' /tmp/solo.json      # Zot
jq -r '.oci_registry_config.backend' /tmp/enterprise.json # Harbor
```

---

## Validation Commands

### Type Check Schemas

```bash
nickel typecheck provisioning/schemas/infrastructure/docker-compose.ncl
nickel typecheck provisioning/schemas/infrastructure/kubernetes.ncl
nickel typecheck provisioning/schemas/infrastructure/nginx.ncl
nickel typecheck provisioning/schemas/infrastructure/prometheus.ncl
nickel typecheck provisioning/schemas/infrastructure/systemd.ncl
nickel typecheck provisioning/schemas/infrastructure/oci-registry.ncl
```

### Validate Examples

```bash
nickel typecheck provisioning/schemas/infrastructure/examples-solo-deployment.ncl
nickel typecheck provisioning/schemas/infrastructure/examples-enterprise-deployment.ncl
```

### Test Export

```bash
nickel export --format json provisioning/schemas/infrastructure/examples-solo-deployment.ncl | jq .
```

---

## Platform Config Examples

### Solo Platform Config

```bash
nickel export --format toml provisioning/platform/config/examples/orchestrator.solo.example.ncl
# Output: TOML with [database], [logging], [monitoring], [workspace] sections
```

### Enterprise Platform Config

```bash
nickel export --format toml provisioning/platform/config/examples/orchestrator.enterprise.example.ncl
# Output: TOML with HA, S3, Redis, tracing configuration
```

---

## Configuration Files Reference

### Platform Configs (services internally)

```bash
provisioning/platform/config/
├── runtime/generated/*.toml          # Auto-generated by ConfigLoader
├── examples/                         # Reference implementations
│   ├── orchestrator.solo.example.ncl
│   ├── orchestrator.multiuser.example.ncl
│   └── orchestrator.enterprise.example.ncl
└── README.md
```

### Infrastructure Schemas

```bash
provisioning/schemas/infrastructure/
├── docker-compose.ncl                # 232 lines
├── kubernetes.ncl                    # 376 lines
├── nginx.ncl                         # 233 lines
├── prometheus.ncl                    # 280 lines
├── systemd.ncl                       # 235 lines
├── oci-registry.ncl                  # 221 lines
├── examples-solo-deployment.ncl      # 27 lines
├── examples-enterprise-deployment.ncl # 27 lines
└── README.md
```

### TypeDialog Integration

```bash
provisioning/platform/.typedialog/provisioning/platform/
├── forms/                            # Ready for auto-generated forms
├── templates/service-form.template.j2
├── schemas/ → ../../schemas          # Symlink
├── constraints/constraints.toml       # Validation rules
└── README.md
```

### Automation Scripts

```bash
provisioning/platform/scripts/
├── generate-infrastructure-configs.nu  # Generate all configs
├── validate-infrastructure.nu          # Validate with tools
└── setup-with-forms.sh                # Interactive wizard
```

---

## Integration Status

| Component | Status | Details |
|-----------|--------|---------|
| **Infrastructure Schemas** | ✅ Complete | 6 schemas, 1,577 lines, all validated |
| **Deployment Examples** | ✅ Complete | 2 examples (solo + enterprise), tested |
| **Generation Scripts** | ✅ Complete | Auto-generate configs for all modes |
| **Validation Scripts** | ✅ Complete | Validate Docker, K8s, Nginx, Prometheus |
| **Platform Config** | ✅ Complete | 36 TOML files in runtime/generated/ |
| **TypeDialog Forms** | ✅ Ready | Forms + bash wrappers created, awaiting binary |
| **Setup Wizard** | ✅ Active | Basic prompts as fallback |
| **Documentation** | ✅ Complete | All guides updated with examples |

---

## Next Steps

### Now Available
- Generate infrastructure configs for solo/enterprise modes
- Validate generated configs with format-specific tools
- Use interactive setup wizard with basic Nushell prompts
- TypeDialog forms created and ready (awaiting binary install)
- Deploy with Docker/Kubernetes using generated configs

### When TypeDialog Binary Becomes Available
- Install TypeDialog binary
- TypeDialog forms already created (setup, auth, MFA)
- Bash wrappers handle TTY input (no Nushell stack issues)
- Full nickel-roundtrip workflow will be enabled

---

## Key Files

**Schemas**:
- `provisioning/schemas/infrastructure/` - All infrastructure schemas

**Examples**:
- `provisioning/schemas/infrastructure/examples-solo-deployment.ncl`
- `provisioning/schemas/infrastructure/examples-enterprise-deployment.ncl`

**Platform Configs**:
- `provisioning/platform/config/examples/` - Platform config examples
- `provisioning/platform/config/runtime/generated/` - Generated TOML files

**Scripts**:
- `provisioning/platform/scripts/generate-infrastructure-configs.nu`
- `provisioning/platform/scripts/validate-infrastructure.nu`
- `provisioning/platform/scripts/setup-with-forms.sh`

**Documentation**:
- `provisioning/docs/src/guides/infrastructure-setup.md` - This guide
- `provisioning/schemas/infrastructure/README.md` - Infrastructure schema reference
- `provisioning/platform/config/examples/README.md` - Platform config guide
- `provisioning/platform/.typedialog/README.md` - TypeDialog integration guide

---

**Version**: 1.0.0
**Last Updated**: 2025-01-06
**Status**: Production Ready
