# Cluster Configurations

This directory contains cluster configuration definitions for the provisioning system. Clusters represent complete deployments that combine multiple task services and infrastructure components.

## Available Clusters

### Web Cluster (`web/`)
**Purpose**: Basic web service cluster deployment
- **Configuration**: Simple web service with configurable name validation
- **Dependencies**: None (self-contained)
- **Use Case**: Basic web applications and static sites

### OCI Registry (`oci-reg/`)
**Purpose**: Full OCI-compliant container registry deployment
- **Configuration**: Comprehensive container registry with storage, security, and networking
- **Features**:
  - Multiple storage drivers with deduplication and garbage collection
  - Authentication via htpasswd and TLS support
  - UI interface and search capabilities
  - Registry synchronization and CVE scanning
  - Structured logging and monitoring
- **Dependencies**: Requires provisioning module base schemas
- **Use Case**: Private container registries for Kubernetes clusters

### Planned Clusters
- **buildkit**: Container build infrastructure
- **cdci-argocd**: GitOps CD pipeline with ArgoCD
- **cdci-tekton**: CI/CD with Tekton pipelines
- **git**: Git repository hosting
- **pod_repo**: Pod repository management
- **postgresql**: Database cluster
- **repository**: General repository services

## Usage

### Creating a Cluster

```bash
# Using the main CLI
provisioning/core/cli/provisioning cluster create <cluster-name> <infra-name>

# Using workflow system
nu -c "use core/nulib/workflows/cluster.nu *; cluster create '<cluster-name>' '<infra-name>' --check"
```

### Listing Clusters

```bash
provisioning/core/cli/provisioning cluster list
```

### Deleting a Cluster

```bash
nu -c "use core/nulib/workflows/cluster.nu *; cluster delete '<cluster-name>' '<infra-name>' --check"
```

## Configuration Structure

Cluster configurations are defined using KCL schemas:

```kcl
schema ClusterName:
    name: str = "cluster-name"
    # Cluster-specific configuration
    check:
        len(name) > 0, "Cluster name cannot be empty"
```

## Integration

Clusters integrate with:
- **Providers**: AWS, UpCloud, Local for infrastructure provisioning
- **Task Services**: Container runtimes, networking, storage, monitoring
- **Orchestrator**: Workflow management and coordination
- **Configuration System**: KCL schema validation and type safety

## Development

### Adding a New Cluster

1. Create cluster directory: `mkdir <cluster-name>`
2. Create KCL directory: `mkdir <cluster-name>/kcl`
3. Define cluster schema: `<cluster-name>/kcl/<cluster-name>.k`
4. Add module definition: `<cluster-name>/kcl/kcl.mod`
5. Update cluster registry in main provisioning module

### KCL Module Structure

```toml
[package]
name = "cluster-name"
edition = "v0.11.2"
version = "0.0.1"

[dependencies]
provisioning = { path = "../../../kcl", version = "0.0.1" }
```

For more information, see the main [provisioning documentation](../../../docs/).