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
| Need | Import |
|---|---|
| Settings, SecretProvider | import provisioning.settings |
| Storage, TaskServDef, ClusterDef | import provisioning.lib as lib |
| ServerDefaults | import provisioning.defaults |
| Server | import provisioning.server |
| Cluster | import provisioning.cluster |
| TaskservDependencies | import provisioning.dependencies as deps |
| BatchWorkflow, BatchOperation | import provisioning.workflows as wf |
| BatchScheduler, BatchExecutor | import provisioning.batch |
| Version, TaskservVersion | import 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.Settings | import provisioning.settings |
import provisioning then provisioning.Settings | import provisioning.settings then settings.Settings |
| Import everything | Import 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