222 lines
5.5 KiB
Plaintext
222 lines
5.5 KiB
Plaintext
|
|
# Infrastructure - OCI Registry Schema
|
||
|
|
# Defines type-safe OCI Registry configuration for Zot, Distribution, and Harbor
|
||
|
|
# Validates access policies, storage configuration, and TLS settings
|
||
|
|
|
||
|
|
{
|
||
|
|
# Supported registry backends
|
||
|
|
RegistryBackend = [| 'Zot, 'Distribution, 'Harbor |],
|
||
|
|
|
||
|
|
# TLS configuration
|
||
|
|
TLSConfig = {
|
||
|
|
enabled | Bool | default = false,
|
||
|
|
cert_path | String | optional,
|
||
|
|
key_path | String | optional,
|
||
|
|
},
|
||
|
|
|
||
|
|
# Authentication configuration
|
||
|
|
AuthConfig = {
|
||
|
|
method | [| 'none, 'basic, 'bearer, 'oidc |] | default = 'none,
|
||
|
|
htpasswd_path | String | optional,
|
||
|
|
issuer | String | optional,
|
||
|
|
client_id | String | optional,
|
||
|
|
},
|
||
|
|
|
||
|
|
# Storage configuration
|
||
|
|
StorageConfig = {
|
||
|
|
path | String,
|
||
|
|
backend | [| 'filesystem, 's3', 'azure' |] | default = 'filesystem,
|
||
|
|
dedupe | Bool | default = true,
|
||
|
|
gc_enabled | Bool | default = true,
|
||
|
|
gc_interval | String | default = "24h",
|
||
|
|
},
|
||
|
|
|
||
|
|
# Registry metrics configuration
|
||
|
|
MetricsConfig = {
|
||
|
|
enabled | Bool | default = true,
|
||
|
|
listen_address | String | default = ":5001",
|
||
|
|
prometheus_path | String | default = "/metrics",
|
||
|
|
},
|
||
|
|
|
||
|
|
# Access control policy for namespaces
|
||
|
|
AccessPolicy = {
|
||
|
|
namespace | String,
|
||
|
|
public | Bool | default = false,
|
||
|
|
users | Array String | default = [],
|
||
|
|
actions | Array ([| 'read, 'create, 'update, 'delete |]) | default = ['read'],
|
||
|
|
},
|
||
|
|
|
||
|
|
# Webhook notification
|
||
|
|
Webhook = {
|
||
|
|
url | String,
|
||
|
|
events | Array ([| 'pull, 'push, 'delete |]) | default = ['push'],
|
||
|
|
},
|
||
|
|
|
||
|
|
# Zot-specific configuration
|
||
|
|
ZotConfig = {
|
||
|
|
storage | StorageConfig,
|
||
|
|
http = {
|
||
|
|
address | String | default = "0.0.0.0",
|
||
|
|
port | Number | default = 5000 | {
|
||
|
|
predicate = fun n => n > 0 && n < 65536,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
tls | TLSConfig | default = {enabled = false},
|
||
|
|
auth | AuthConfig | default = {method = 'none'},
|
||
|
|
metrics | MetricsConfig | default = {
|
||
|
|
enabled = true,
|
||
|
|
listen_address = ":5001",
|
||
|
|
prometheus_path = "/metrics",
|
||
|
|
},
|
||
|
|
access_control | Array AccessPolicy | default = [],
|
||
|
|
webhooks | Array Webhook | default = [],
|
||
|
|
},
|
||
|
|
|
||
|
|
# Docker Distribution-specific configuration
|
||
|
|
DistributionConfig = {
|
||
|
|
storage | StorageConfig,
|
||
|
|
http = {
|
||
|
|
address | String | default = "0.0.0.0",
|
||
|
|
port | Number | default = 5000,
|
||
|
|
tls | TLSConfig | default = {enabled = false},
|
||
|
|
},
|
||
|
|
auth | AuthConfig | default = {method = 'basic'},
|
||
|
|
notifications | Array Webhook | default = [],
|
||
|
|
},
|
||
|
|
|
||
|
|
# Harbor-specific configuration
|
||
|
|
HarborConfig = {
|
||
|
|
storage | StorageConfig,
|
||
|
|
database = {
|
||
|
|
host | String | default = "postgres",
|
||
|
|
port | Number | default = 5432,
|
||
|
|
name | String | default = "harbor",
|
||
|
|
username | String | doc "Database user",
|
||
|
|
},
|
||
|
|
http = {
|
||
|
|
address | String | default = "0.0.0.0",
|
||
|
|
port | Number | default = 80,
|
||
|
|
},
|
||
|
|
https = {
|
||
|
|
enabled | Bool | default = true,
|
||
|
|
port | Number | default = 443,
|
||
|
|
cert_path | String | optional,
|
||
|
|
key_path | String | optional,
|
||
|
|
},
|
||
|
|
admin = {
|
||
|
|
username | String | default = "admin",
|
||
|
|
password | String | doc "Admin password (should use secrets)",
|
||
|
|
},
|
||
|
|
projects | Array {
|
||
|
|
name | String,
|
||
|
|
public | Bool | default = false,
|
||
|
|
storage_quota | Number | optional,
|
||
|
|
} | default = [],
|
||
|
|
},
|
||
|
|
|
||
|
|
# Complete OCI Registry configuration
|
||
|
|
RegistryConfig = {
|
||
|
|
backend | RegistryBackend | default = 'Zot,
|
||
|
|
zot | ZotConfig | optional,
|
||
|
|
distribution | DistributionConfig | optional,
|
||
|
|
harbor | HarborConfig | optional,
|
||
|
|
},
|
||
|
|
|
||
|
|
# Common registry presets by mode
|
||
|
|
soloRegistryPreset = {
|
||
|
|
backend = 'Zot',
|
||
|
|
zot = {
|
||
|
|
storage = {
|
||
|
|
path = "/tmp/zot-storage",
|
||
|
|
backend = 'filesystem',
|
||
|
|
dedupe = true,
|
||
|
|
gc_enabled = true,
|
||
|
|
gc_interval = "24h",
|
||
|
|
},
|
||
|
|
http = {
|
||
|
|
address = "0.0.0.0",
|
||
|
|
port = 5000,
|
||
|
|
},
|
||
|
|
tls = {
|
||
|
|
enabled = false,
|
||
|
|
},
|
||
|
|
auth = {
|
||
|
|
method = 'none',
|
||
|
|
},
|
||
|
|
metrics = {
|
||
|
|
enabled = true,
|
||
|
|
listen_address = ":5001",
|
||
|
|
prometheus_path = "/metrics",
|
||
|
|
},
|
||
|
|
access_control = [],
|
||
|
|
webhooks = [],
|
||
|
|
},
|
||
|
|
},
|
||
|
|
|
||
|
|
multiuserRegistryPreset = {
|
||
|
|
backend = 'Zot',
|
||
|
|
zot = {
|
||
|
|
storage = {
|
||
|
|
path = "/var/lib/zot-storage",
|
||
|
|
backend = 'filesystem',
|
||
|
|
dedupe = true,
|
||
|
|
gc_enabled = true,
|
||
|
|
gc_interval = "12h",
|
||
|
|
},
|
||
|
|
http = {
|
||
|
|
address = "0.0.0.0",
|
||
|
|
port = 5000,
|
||
|
|
},
|
||
|
|
tls = {
|
||
|
|
enabled = true,
|
||
|
|
cert_path = "/etc/zot/tls/cert.pem",
|
||
|
|
key_path = "/etc/zot/tls/key.pem",
|
||
|
|
},
|
||
|
|
auth = {
|
||
|
|
method = 'basic',
|
||
|
|
htpasswd_path = "/etc/zot/auth/htpasswd",
|
||
|
|
},
|
||
|
|
metrics = {
|
||
|
|
enabled = true,
|
||
|
|
listen_address = ":5001",
|
||
|
|
prometheus_path = "/metrics",
|
||
|
|
},
|
||
|
|
access_control = [],
|
||
|
|
webhooks = [],
|
||
|
|
},
|
||
|
|
},
|
||
|
|
|
||
|
|
enterpriseRegistryPreset = {
|
||
|
|
backend = 'Harbor',
|
||
|
|
harbor = {
|
||
|
|
storage = {
|
||
|
|
path = "/var/lib/harbor-storage",
|
||
|
|
backend = 's3',
|
||
|
|
dedupe = true,
|
||
|
|
gc_enabled = true,
|
||
|
|
gc_interval = "6h",
|
||
|
|
},
|
||
|
|
database = {
|
||
|
|
host = "postgres",
|
||
|
|
port = 5432,
|
||
|
|
name = "harbor",
|
||
|
|
username = "harbor",
|
||
|
|
},
|
||
|
|
http = {
|
||
|
|
address = "0.0.0.0",
|
||
|
|
port = 80,
|
||
|
|
},
|
||
|
|
https = {
|
||
|
|
enabled = true,
|
||
|
|
port = 443,
|
||
|
|
cert_path = "/etc/harbor/tls/cert.pem",
|
||
|
|
key_path = "/etc/harbor/tls/key.pem",
|
||
|
|
},
|
||
|
|
admin = {
|
||
|
|
username = "admin",
|
||
|
|
password = "changeme",
|
||
|
|
},
|
||
|
|
projects = [],
|
||
|
|
},
|
||
|
|
},
|
||
|
|
}
|