provisioning/workspace/tools/template-utils.nu
2025-10-07 11:12:02 +01:00

144 lines
4.5 KiB
Plaintext

# Template Utilities for Enhanced Module Loader
# Supporting functions for template management
# Apply template to infrastructure
export def apply_template_to_infra [
template_info: record,
target_infra: string,
provider: string
] {
print $"🔧 Applying template to ($target_infra) with provider ($provider)"
let target_dir = $"workspace/infra/($target_infra)"
mkdir ($"($target_dir)/taskservs")
mkdir ($"($target_dir)/defs")
# Create basic template-based configuration
let template_content = create_template_usage $template_info.name $target_infra $provider
# Save template-based configuration
$template_content | save $"($target_dir)/taskservs/($template_info.name).k"
print $"✅ Template applied: ($template_info.name) -> ($target_infra)"
}
# Create template usage content
def create_template_usage [
template_name: string,
infra_name: string,
provider: string
]: nothing -> string {
$"# ($template_name | str title-case) Configuration for ($infra_name)
# Generated from workspace template
import provisioning.workspace.registry.imports as reg
import provisioning.workspace.templates.lib.override as ovr
# Apply template with infrastructure-specific overrides
_taskserv = ovr.infrastructure_overrides.taskserv_override(
reg.templates.($template_name).base,
\"($infra_name)\",
\"($template_name)\",
{
cluster_name: \"($infra_name)\"
# Add custom overrides here
}
)
_taskserv"
}
# Copy template as override
export def copy_template_as_override [
template_path: string,
override_dir: string,
module_name: string
] {
if ($template_path | path exists) {
cp $template_path $"($override_dir)/($module_name).k"
print $"📋 Template copied as override: ($module_name)"
} else {
print $"⚠️ Template not found: ($template_path)"
}
}
# Load taskservs with layer support
export def load_taskservs_with_layer [
workspace: string,
modules: list<string>,
layer: string,
force: bool,
with_overrides: bool
] {
print $"🔄 Loading taskservs from ($layer) layer"
for module in $modules {
let source_path = match $layer {
"core" => $"provisioning/extensions/taskservs/($module)"
"workspace" => $"provisioning/workspace/templates/taskservs/($module)"
"templates" => $"provisioning/workspace/templates/taskservs/($module)"
_ => $"workspace/infra/($workspace)/taskservs/($module).k"
}
if ($source_path | path exists) {
print $" ✅ Loading ($module) from ($layer)"
# Implementation would copy or link the module
} else {
print $" ❌ Module ($module) not found in ($layer) layer"
}
}
}
# Load providers with layer support
export def load_providers_with_layer [
workspace: string,
modules: list<string>,
layer: string,
force: bool,
with_overrides: bool
] {
print $"🔄 Loading providers from ($layer) layer"
for module in $modules {
let source_path = match $layer {
"core" => $"provisioning/extensions/providers/($module)"
"workspace" => $"provisioning/workspace/templates/providers/($module)"
"templates" => $"provisioning/workspace/templates/providers/($module)"
_ => $"workspace/infra/($workspace)/defs/($module)_defaults.k"
}
if ($source_path | path exists) {
print $" ✅ Loading ($module) from ($layer)"
# Implementation would copy or link the module
} else {
print $" ❌ Provider ($module) not found in ($layer) layer"
}
}
}
# Load clusters with layer support
export def load_clusters_with_layer [
workspace: string,
modules: list<string>,
layer: string,
force: bool,
with_overrides: bool
] {
print $"🔄 Loading clusters from ($layer) layer"
for module in $modules {
let source_path = match $layer {
"core" => $"provisioning/extensions/clusters/($module)"
"workspace" => $"provisioning/workspace/templates/clusters/($module)"
"templates" => $"provisioning/workspace/templates/clusters/($module)"
_ => $"workspace/infra/($workspace)/clusters/($module).k"
}
if ($source_path | path exists) {
print $" ✅ Loading ($module) from ($layer)"
# Implementation would copy or link the module
} else {
print $" ❌ Cluster ($module) not found in ($layer) layer"
}
}
}