Node
Node custom resource schema.
The Node CRD represents a single containerlab node realized as one launcher pod. Together
with Link, Nodes are the primary c9s API. The object name is the containerlab node name; the
namespace is the topology boundary.
Node
SPEC
NodeSpec is the spec for a Node resource. It is a flat containerlab node definition -- containerlab vocabulary, no wrapper -- plus clabernetes-side per-node payload fields and an optional LauncherProfile reference. The definition must be self-contained: expanding topology defaults/kinds into the node is the emitter's job (the Topology compiler and clabverter do this for you). Anything that is deployment policy rather than node payload -- expose behavior, image pull config, launcher resources, scheduling, privileges -- lives on LauncherProfile objects explicitly referenced by Nodes. The containerlab vocabulary here is a curated subset (see NodeDefinition): fields a launcher pod cannot realize are absent, and unknown fields are rejected rather than silently ignored.
-
Binds is a list of bind (mount) compatible strings.
-
CapAdd is a list of linux capabilities to add to the node's container.
-
Certificate holds the TLS certificate configuration for the node.
-
Issue indicates if the node should have a certificate issued -- when unset the node does not use TLS.
-
KeySize is the size of the certificate key in bits.
-
SANs is the list of subject alternative names to add to the node's certificate.
-
ValidityDuration is how long the issued certificate is valid for, as a Go duration -- i.e. 8760h for a year.
-
-
Cmd overrides the container command.
-
Components holds the hardware component (i.e. SR-OS card/mda) configuration for the node.
-
Component holds a hardware component configuration (i.e. an SR-OS card or mda).
-
SFM is the SFM (switch fabric module) of the component.
-
Slot is the slot identifier of the component.
-
Type is the type of the component.
-
XIOM holds the xiom configuration of the component.
-
XIOM holds a single xiom configuration of a hardware component.
-
Slot is the slot of the xiom.
-
Type is the type of the xiom.
-
-
-
Devices is a list of host devices to map into the node's container.
-
EnforceStartupConfig makes the node boot from StartupConfig even when it already has a saved (persisted) configuration.
-
Entrypoint overrides the container entrypoint.
-
EnvFiles is a list of external files containing environment variables for the node.
-
Exec is a list of commands to run in the node's container once it is started.
-
FilesFromConfigMap holds files mounted from ConfigMaps into the launcher responsible for this Node.
-
FileFromConfigMap represents a file that you would like to mount (from a configmap) in the launcher pod for a given node.
-
ConfigMapName is the name of the configmap to mount.
-
ConfigMapPath is the path/key in the configmap to mount, if not specified the configmap will be mounted without a sub-path.
-
FilePath is the path to mount the file.
-
Mode sets the file permissions when mounting the configmap. Since the configmap will be read only filesystem anyway, we basically just want to expose if the file should be mounted as executable or not. So, default permissions would be 0o444 (read) and execute would be 0o555.
default: "read"enum: "read", "execute"
-
-
-
FilesFromURL holds any files that the launcher for this node should fetch from a URL prior to launching the node.
-
FileFromURL represents a file that you would like to mount from a URL in the launcher pod for a given node.
-
FilePath is the path to mount the file.
-
URL is the url to fetch and mount at the provided FilePath. This URL must be a url that can be simply downloaded and dumped to disk -- meaning a normal file server type endpoint or if using GitHub or similar a "raw" path.
-
-
-
Image is the container image for the node.
-
Kind is the containerlab kind of the node -- i.e. nokia_srlinux.
-
LauncherProfileRef optionally names the same-namespace LauncherProfile supplying launcher policy. When omitted, global Config defaults are used.
-
Name of the referent. This field is effectively required, but due to backwards compatibility is allowed to be empty. Instances of this type with an empty value here are almost certainly wrong. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
default: ""
-
-
License is the path to the license file for the node.
-
MgmtIPv4 is the user-defined IPv4 address of the node in the management network.
-
MgmtIPv6 is the user-defined IPv6 address of the node in the management network.
-
NetworkMode declares that this node shares the network namespace -- and therefore the launcher pod -- of the named primary node.
container:<primary node name>is the only accepted value: clabernetes derives node "grouping" (nodes co-located in one launcher pod, i.e. the cards of a distributed chassis) from exactly this containerlab-native field, and the other containerlab network modes have no meaning inside a launcher pod. -
Ports lists additional ports to expose on this node. Each entry is a destination port between 1 and 65535 with an optional protocol -- "8080" or "5201/udp" -- meaning the port the node itself listens on. clabernetes allocates the pod side port that carries it and records both in the Node status, so docker style "host:container" bindings are rejected here. Unless auto expose is disabled, the default set of management ports is exposed in addition to these.
-
Privileged runs the node's container in privileged mode.
-
SecurityOpts is a list of security options (i.e. seccomp or apparmor settings) to apply to the node's container.
-
ShmSize is the shared memory size allocated to the node's container -- i.e. 256m.
-
StartupConfig is the startup configuration for the node -- either a path or an inline (multiline string) config.
-
SuppressStartupConfig boots the node with its factory configuration -- containerlab generates and mounts no startup config at all.
-
Type is the type of the node -- i.e. ixrd2.
-
User is the linux user to use in the node's container.
STATUS
NodeStatus is the status for a Node resource. Everything in here is an allocation or an observation made by the controller -- user intent never lives in the status.
-
AppliedLauncherProfile identifies the LauncherProfile successfully applied to the launcher workload. It is nil when the Node uses only global Config defaults.
-
Generation is the applied LauncherProfile generation.
format: int64 -
Name is the LauncherProfile name.
-
UID distinguishes replacement profiles that reuse a name.
-
-
Conditions contains the current conditions for this Node.
-
Condition contains details for one aspect of the current state of this API Resource.
-
lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
format: date-time -
message is a human readable message indicating details about the transition. This may be an empty string.
-
observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
format: int64range: >= 0 -
reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
-
status of the condition, one of True, False, Unknown.
enum: "True", "False", "Unknown" -
type of condition in CamelCase or in foo.example.com/CamelCase.
-
-
-
ExposedPorts holds the expose port allocations for this node -- the controller assigns an expose port for every (spec or auto-expose default) port and programs the node's expose service from this very field; the launcher reads it to publish the ports on the pod.
-
LoadBalancerAddress is the address of the load balancer exposing the node's ports (if the expose service is of the LoadBalancer flavor).
-
Ports holds the individual port allocations for the node.
-
NodeExposedPort holds a single expose port allocation for a Node.
-
DestinationPort is the port on the (containerlab) node itself -- this is the port the expose service listens on.
-
ExposePort is the allocated (or user provided) port published on the launcher pod (and targeted by the expose service).
-
Protocol is the protocol of the port -- TCP or UDP.
enum: "TCP", "UDP"
-
-
-
-
ProbeStatuses holds the per-probe status information for this node.
-
LivenessProbe is the status of the node's liveness probe.
enum: "passing", "failing", "unknown", "disabled" -
ReadinessProbe is the status of the node's readiness probe.
enum: "passing", "failing", "unknown", "disabled" -
StartupProbe is the status of the node's startup probe.
enum: "passing", "failing", "unknown", "disabled"
-
-
Readiness is the readiness of this node as reported by its launcher deployment -- one of "ready", "notready" or "unknown".
enum: "ready", "notready", "unknown"