76 lines
2.7 KiB
Plaintext
Raw Permalink Normal View History

"""
Deployment presets for {{ deployment.project.name }}
Predefined deployment configurations for different environments.
Each preset defines which services to run, infrastructure backend, and policies.
References: schemas.k, defaults.k, services.k
Used by: deployment.k
"""
import .schemas as s
import .defaults as d
# Assembled presets list based on user selection
presets = [
{%- if "local" in deployment.presets_to_generate %}
d.local_preset,
{%- endif %}
{%- if "dev" in deployment.presets_to_generate %}
d.dev_preset,
{%- endif %}
{%- if "staging" in deployment.presets_to_generate %}
d.staging_preset,
{%- endif %}
{%- if "production" in deployment.presets_to_generate %}
d.production_preset,
{%- endif %}
]
# Validation: ensure at least one preset is defined with error handling
try:
{literal}
# At least one deployment preset must be defined
assert len(presets) > 0, \
"Configuration error: At least one deployment preset must be defined"
# Validation: each preset's services must be valid
for preset in presets:
assert len(preset.services_enabled) > 0 or preset.name == "local", \
"Preset '${preset.name}' must have at least one service enabled (except 'local' which is CLI-only)"
for service_name in preset.services_enabled:
available_services = [svc.name for svc in d.services]
assert any svc in d.services if svc.name == service_name, \
"Preset '${preset.name}' references unknown service '${service_name}'. Available: ${available_services}"
# Validate manager selection
assert preset.manager in ["manual", "provctl", "provisioning"], \
"Preset '${preset.name}' has invalid manager '${preset.manager}'. Must be: manual, provctl, or provisioning"
# Validate database type
available_dbs = ["sqlite", "postgres", "mysql", "surrealdb"]
assert preset.database_type in available_dbs, \
"Preset '${preset.name}' requires database '${preset.database_type}' which is not valid"
{/literal}
catch err:
# Provide detailed error information and recommendations
print("❌ Preset validation error: ${err}")
print("💡 Please check presets.k for configuration issues")
# Default preset for development
default_preset = "{{ deployment.default_preset | default(value='dev') }}"
# Optional: Add custom presets or override existing ones
# Example custom preset:
# custom_preset = s.Preset {
# name = "custom"
# description = "Custom deployment configuration"
# services_enabled = ["cli", "api"]
# manager = "provctl"
# database_type = "sqlite"
# cache_enabled = false
# }
#
# presets = presets + [custom_preset]