How-to guide Author packages and clusters
Declare package roles and metadata
Describe package ownership and lifecycle, and claim a registered infrastructure role when the package provides one.
Add meta beside a package’s options and build attributes:
meta = { version = "1.0.0"; description = "Configuration owned by an application team"; owner = "platform"; lifecycle = "stateless"; scope = "namespace"; };Use these fields to describe the package:
versionidentifies the package version shown by inspection commands and in PackageInstance records.descriptiongives the package a short human-readable purpose.owneridentifies the team responsible for it and supports governance scorecard rules.lifecycleclassifies its state asstateless,stateful,durable, orephemeral. Kix records it in thekix.run/lifecycleannotation. Replacing a package markedstatefultriggers the deployment migration gate.scopeconstrains dependencies. Withscope = "namespace", instances in other namespaces cannot depend on the package: automatic resolution skips it for consumers in other namespaces, and an explicitdeps.<x> = ref.<ns>.<instance>to it fails. The default iscluster.
version, description, and owner describe the package. lifecycle and
scope affect evaluation and deployment behavior, so choose them carefully.
Claim an infrastructure role
Section titled “Claim an infrastructure role”Add meta.roles only when the package provides one of Kix’s registered
cluster infrastructure roles. This minimal provider claims the
storageClasses role:
meta = { version = "1.0.0"; description = "Default StorageClass for the composition example"; owner = "platform"; roles = [ "storageClasses" ]; };Registered roles are also dependency-resolution aliases. Kix validates role
names, prevents conflicting providers, and checks any required out
attributes when a consumer resolves the role.
The storageClasses role requires an exported storageClassName, so the
package root supplies it:
root = { resource = self.storageClass; out.storageClassName = self.storageClass.out.name; };Do not use roles as general package tags. Ordinary application dependencies
are resolved through instance names, aliases, or explicit deps wiring.
Check the declarations
Section titled “Check the declarations”Run the normal checks after adding or changing metadata:
❱ kix check how-to-composition
TOOL RESULT DETAILS
eval pass 16 manifests evaluated
scorecard pass 0 errors, 0 warnings, 0 info Evaluation fails if a role name is unknown, two managed packages claim the same role, or a resolved provider does not satisfy the role’s output contract.