Documentation
¶
Overview ¶
Package config handles parsing and validation of sind cluster configuration.
Index ¶
Constants ¶
const ( DefaultClusterName = "default" DefaultImage = "ghcr.io/gsi-hpc/sind-node:latest" DefaultCPUs = 1 DefaultMemory = "512m" DefaultTmpSize = "256m" )
Default resource values for cluster nodes.
Variables ¶
This section is empty.
Functions ¶
func CheckCapabilities ¶ added in v0.10.0
CheckCapabilities reports the first name in caps that is not a recognized Linux capability; field names the setting in the error, e.g. "capAdd".
func CheckDevices ¶ added in v0.10.0
CheckDevices reports the first device whose host path is not absolute. A device is HOST_PATH[:CONTAINER_PATH[:PERMISSIONS]].
func CheckName ¶ added in v0.10.0
CheckName reports whether name may be used as a cluster or realm name; kind ("cluster" or "realm") names it in the error.
Both names become part of Docker resource names (<realm>-<cluster>-net), of DNS names (<node>.<cluster>.<realm>.sind) and of paths ($XDG_STATE_HOME/sind/<realm>), so each has to be one DNS label: lowercase ASCII letters, digits and hyphens, 1 to 63 characters, not beginning or ending with a hyphen. A "." would add a DNS label and split node arguments such as worker-0.dev in the wrong place, and "/" or ".." would leave the state directory. Uppercase letters are refused too: DNS ignores case, so Dev and dev would be two sets of containers behind the same DNS names.
Types ¶
type Cluster ¶
type Cluster struct {
Kind string `json:"kind"`
Name string `json:"name,omitempty"`
Realm string `json:"realm,omitempty"`
Defaults Defaults `json:"defaults,omitempty"`
Storage Storage `json:"storage,omitempty"`
Slurm Slurm `json:"slurm,omitempty"`
Nodes []Node `json:"nodes,omitempty"`
// Pull is a runtime flag (not part of the config file) that forces
// fresh image pulls when creating containers.
Pull bool `json:"-" yaml:"-"`
}
Cluster represents a sind cluster configuration.
func (*Cluster) ApplyDefaults ¶
func (c *Cluster) ApplyDefaults()
ApplyDefaults populates missing fields with defaults. If no nodes are defined, creates a minimal cluster (1 controller + 1 worker). Node-level fields inherit from the Defaults section, which in turn falls back to built-in defaults.
func (*Cluster) HasBackupController ¶ added in v0.10.0
HasBackupController reports whether the controller node spec enables the backup controller.
type DataStorage ¶
type DataStorage struct {
Type StorageType `json:"type,omitempty"`
HostPath string `json:"hostPath,omitempty"`
MountPath string `json:"mountPath,omitempty"`
}
DataStorage configures the shared data volume.
func (DataStorage) UsesHostPath ¶ added in v0.10.0
func (d DataStorage) UsesHostPath() bool
UsesHostPath reports whether the data is a bind mount of HostPath rather than the cluster's Docker volume: with type hostPath, or with no type and a host path. With type volume, HostPath is ignored.
type Defaults ¶
type Defaults struct {
Image string `json:"image,omitempty"`
CPUs int `json:"cpus,omitempty"`
Memory string `json:"memory,omitempty"`
TmpSize string `json:"tmpSize,omitempty"`
CapAdd []string `json:"capAdd,omitempty"`
CapDrop []string `json:"capDrop,omitempty"`
Devices []string `json:"devices,omitempty"`
SecurityOpt []string `json:"securityOpt,omitempty"`
}
Defaults holds default settings applied to all nodes unless overridden.
type Node ¶
type Node struct {
Role Role `json:"role"`
Count int `json:"count,omitempty"`
Image string `json:"image,omitempty"`
CPUs int `json:"cpus,omitempty"`
Memory string `json:"memory,omitempty"`
TmpSize string `json:"tmpSize,omitempty"`
Managed *bool `json:"managed,omitempty"`
BackupController bool `json:"backupController,omitempty"`
CapAdd []string `json:"capAdd,omitempty"`
CapDrop []string `json:"capDrop,omitempty"`
Devices []string `json:"devices,omitempty"`
SecurityOpt []string `json:"securityOpt,omitempty"`
}
Node represents a single node or node group in the cluster configuration.
func (*Node) UnmarshalJSON ¶
UnmarshalJSON supports three YAML forms:
- bare string: "controller"
- shorthand map: "worker: 3" (role: count)
- full object: "role: worker\n count: 3\n cpus: 4"
type Role ¶ added in v0.7.0
type Role string
Role identifies the function of a node within a cluster.
type Section ¶ added in v0.7.0
Section represents a Slurm config file section that can be either:
- a string (content appended directly to the config file)
- a map of fragment name → content (creates a .conf.d/ directory)
func (Section) FragmentNames ¶ added in v0.7.0
FragmentNames returns the sorted keys from Fragments.
func (Section) IsEmpty ¶ added in v0.7.0
IsEmpty returns true if the section has no content and no fragments.
func (Section) IsMap ¶ added in v0.7.0
IsMap returns true if the section uses the map/fragments form.
func (Section) SetsParameter ¶ added in v0.10.0
SetsParameter reports whether any line of the section (string form or any fragment) assigns the given slurm.conf-style parameter. Keys are matched case-insensitively, as Slurm does; comments are ignored.
func (*Section) UnmarshalJSON ¶ added in v0.7.0
UnmarshalJSON supports two YAML/JSON forms:
- string: "content" → Section{Content: "content"}
- map: {"key": "content"} → Section{Fragments: {"key": "content"}}
type Slurm ¶ added in v0.7.0
type Slurm struct {
Main Section `json:"main,omitempty"`
Cgroup Section `json:"cgroup,omitempty"`
Gres Section `json:"gres,omitempty"`
Topology Section `json:"topology,omitempty"`
Plugstack Section `json:"plugstack,omitempty"`
}
Slurm configures custom Slurm configuration files. Each field maps to a Slurm config file: main → slurm.conf, cgroup → cgroup.conf, gres → gres.conf, etc.
type Storage ¶
type Storage struct {
DataStorage DataStorage `json:"dataStorage,omitempty"`
}
Storage configures cluster storage options.
type StorageType ¶ added in v0.7.0
type StorageType string
StorageType identifies the backing mechanism for data storage.
const ( StorageVolume StorageType = "volume" StorageHostPath StorageType = "hostPath" )
Storage type values.