Keyboard shortcuts

Press ← or β†’ to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

KCL Import Quick Reference

TL;DR: Use import provisioning.{submodule} - never re-export schemas!


🎯 Quick Start

# βœ… DO THIS
import provisioning.lib as lib
import provisioning.settings

_storage = lib.Storage { device = "/dev/sda" }

# ❌ NOT THIS
Settings = settings.Settings  # Causes ImmutableError!

πŸ“¦ Submodules Map

NeedImport
Settings, SecretProviderimport provisioning.settings
Storage, TaskServDef, ClusterDefimport provisioning.lib as lib
ServerDefaultsimport provisioning.defaults
Serverimport provisioning.server
Clusterimport provisioning.cluster
TaskservDependenciesimport provisioning.dependencies as deps
BatchWorkflow, BatchOperationimport provisioning.workflows as wf
BatchScheduler, BatchExecutorimport provisioning.batch
Version, TaskservVersionimport provisioning.version as v
K8s*import provisioning.k8s_deploy as k8s

πŸ”§ Common Patterns

Provider Extension

import provisioning.lib as lib
import provisioning.defaults

schema Storage_aws(lib.Storage):
    voltype: "gp2" | "gp3" = "gp2"

Taskserv Extension

import provisioning.dependencies as schema

_deps = schema.TaskservDependencies {
    name = "kubernetes"
    requires = ["containerd"]
}

Cluster Extension

import provisioning.cluster as cluster
import provisioning.lib as lib

schema MyCluster(cluster.Cluster):
    taskservs: [lib.TaskServDef]

⚠️ Anti-Patterns

❌ Don’tβœ… Do Instead
Settings = settings.Settingsimport provisioning.settings
import provisioning then provisioning.Settingsimport provisioning.settings then settings.Settings
Import everythingImport only what you need

πŸ› Troubleshooting

ImmutableError E1001 β†’ Remove re-exports, use direct imports

Schema not found β†’ Check submodule map above

Circular import β†’ Extract shared schemas to new module


πŸ“š Full Documentation

  • Complete Guide: docs/architecture/kcl-import-patterns.md
  • Summary: KCL_MODULE_ORGANIZATION_SUMMARY.md
  • Core Module: provisioning/kcl/main.k