Documentation
¶
Index ¶
- Constants
- Variables
- func ConfigKeyChecker(key string, instanceType Type) (func(value string) error, error)
- func ExpandInstanceConfig(globalConfig map[string]string, config map[string]string, ...) map[string]string
- func ExpandInstanceDevices(devices deviceConfig.Devices, profiles []api.Profile) deviceConfig.Devices
- func ValidName(instanceName string, isSnapshot bool) error
- func ValidSnapName(snapshotName string) error
- type InstanceAction
- type Type
- type VMAgentData
- type VMAgentMount
Constants ¶
const ( BootModeUEFISecureBoot = "uefi-secureboot" BootModeUEFINoSecureBoot = "uefi-nosecureboot" BootModeBIOS = "bios" )
Boot mode configuration values.
const ( // Any represents any type of instance. Any = Type(-1) // Container represents a container instance type. Container = Type(0) // VM represents a virtual-machine instance type. VM = Type(1) )
const ConfigVolatilePrefix = "volatile."
ConfigVolatilePrefix indicates the prefix used for volatile config keys.
const TargetClusterGroupPrefix = "@"
TargetClusterGroupPrefix indicates the prefix used for target cluster group names.
Variables ¶
var ConfigKeyPrefixesAny = []string{"environment.", "user.", "image.", "cloud-init.ssh-keys."}
ConfigKeyPrefixesAny indicates valid prefixes for configuration options.
var ConfigKeyPrefixesContainer = []string{"linux.sysctl.", "limits.kernel."}
ConfigKeyPrefixesContainer indicates valid prefixes for container configuration options.
var HugePageSizeKeys = [...]string{"limits.hugepages.64KB", "limits.hugepages.1MB", "limits.hugepages.2MB", "limits.hugepages.1GB"}
HugePageSizeKeys is a list of known hugepage size configuration keys.
var HugePageSizeSuffix = [...]string{"64KB", "1MB", "2MB", "1GB"}
HugePageSizeSuffix contains the list of known hugepage size suffixes.
var InstanceConfigKeysAny = map[string]func(value string) error{ "boot.autostart": validate.Optional(validate.IsBool), "boot.autostart.delay": validate.Optional(validate.IsInt64), "boot.autostart.priority": validate.Optional(validate.IsInt64), "boot.stop.priority": validate.Optional(validate.IsInt64), "boot.host_shutdown_timeout": validate.Optional(validate.IsInt64), "cloud-init.network-config": validate.Optional(validate.IsYAML), "cloud-init.user-data": validate.Optional(validate.IsCloudInitUserData), "cloud-init.vendor-data": validate.Optional(validate.IsCloudInitUserData), "cluster.evacuate": validate.Optional(validate.IsOneOf(api.ClusterEvacuateModeAuto, api.ClusterEvacuateModeMigrate, api.ClusterEvacuateModeLiveMigrate, api.ClusterEvacuateModeStop)), "limits.cpu": validate.Optional(validate.IsValidCPUSet), "limits.cpu.nodes": validate.Optional(validate.IsValidCPUSet), "limits.disk.priority": validate.Optional(validate.IsPriority), "limits.memory": func(value string) error { if value == "" { return nil } before, ok := strings.CutSuffix(value, "%") if ok { num, err := strconv.ParseInt(before, 10, 64) if err != nil { return err } if num == 0 { return errors.New("Memory limit cannot be 0%") } return nil } num, err := units.ParseByteSizeString(value) if err != nil { return err } if num < 1024*1024 { return errors.New("Memory limit is too low (minimum 1MiB)") } return nil }, "placement.group": validate.IsDeviceName, "raw.apparmor": validate.IsAny, "raw.idmap": validate.IsAny, "security.devlxd": validate.Optional(validate.IsBool), "security.devlxd.images": validate.Optional(validate.IsBool), "security.devlxd.management.volumes": validate.Optional(validate.IsBool), "security.protection.delete": validate.Optional(validate.IsBool), "security.protection.start": validate.Optional(validate.IsBool), "snapshots.schedule": validate.Optional(validate.IsCron([]string{"@hourly", "@daily", "@midnight", "@weekly", "@monthly", "@annually", "@yearly", "@startup", "@never"})), "snapshots.schedule.stopped": validate.Optional(validate.IsBool), "snapshots.pattern": validate.IsAny, "snapshots.expiry": func(value string) error { _, err := shared.GetExpiry(time.Time{}, value) return err }, "ubuntu_pro.guest_attach": validate.Optional(validate.IsOneOf("off", "on", "available")), "volatile.apply_template": validate.IsAny, "volatile.attached_volumes": validate.IsAny, "volatile.base_image": validate.IsAny, "volatile.cloud-init.instance-id": validate.Optional(validate.IsUUID), "volatile.evacuate.origin": validate.IsAny, "volatile.cluster.group": validate.Optional(validate.IsClusterGroupName), "volatile.last_state.power": validate.IsAny, "volatile.last_state.ready": validate.IsBool, "volatile.apply_quota": validate.IsAny, "volatile.uuid": validate.Optional(validate.IsUUID), "volatile.uuid.generation": validate.Optional(validate.IsUUID), }
InstanceConfigKeysAny is a map of config key to validator. (keys applying to containers AND virtual machines).
var InstanceConfigKeysContainer = map[string]func(value string) error{ "limits.cpu.allowance": func(value string) error { if value == "" { return nil } before, ok := strings.CutSuffix(value, "%") if ok { _, err := strconv.Atoi(before) if err != nil { return err } return nil } fields := strings.SplitN(value, "/", 2) if len(fields) != 2 { return fmt.Errorf("Invalid allowance: %s", value) } _, err := strconv.Atoi(strings.TrimSuffix(fields[0], "ms")) if err != nil { return err } _, err = strconv.Atoi(strings.TrimSuffix(fields[1], "ms")) if err != nil { return err } return nil }, "limits.cpu.priority": validate.Optional(validate.IsPriority), "limits.hugepages.64KB": validate.Optional(validate.IsSize), "limits.hugepages.1MB": validate.Optional(validate.IsSize), "limits.hugepages.2MB": validate.Optional(validate.IsSize), "limits.hugepages.1GB": validate.Optional(validate.IsSize), "limits.memory.enforce": validate.Optional(validate.IsOneOf("soft", "hard")), "limits.memory.swap": validate.Optional(validate.IsBool), "limits.memory.swap.priority": validate.Optional(validate.IsPriority), "limits.processes": validate.Optional(validate.IsInt64), "linux.kernel_modules": validate.IsAny, "linux.kernel_modules.load": validate.Optional(validate.IsOneOf("boot", "ondemand")), "migration.incremental.memory": validate.Optional(validate.IsBool), "migration.incremental.memory.iterations": validate.Optional(validate.IsUint32), "migration.incremental.memory.goal": validate.Optional(validate.IsUint32), "nvidia.runtime": validate.Optional(validate.IsBool), "nvidia.driver.capabilities": validate.IsAny, "nvidia.require.cuda": validate.IsAny, "nvidia.require.driver": validate.IsAny, "raw.lxc": validate.IsAny, "raw.seccomp": validate.IsAny, "security.idmap.base": validate.Optional(validate.IsUint32), "security.idmap.isolated": validate.Optional(validate.IsBool), "security.idmap.size": validate.Optional(validate.IsUint32), "security.nesting": validate.Optional(validate.IsBool), "security.privileged": validate.Optional(validate.IsBool), "security.protection.shift": validate.Optional(validate.IsBool), "security.syscalls.allow": validate.IsAny, "security.syscalls.deny_default": validate.Optional(validate.IsBool), "security.syscalls.deny_compat": validate.Optional(validate.IsBool), "security.syscalls.deny": validate.IsAny, "security.syscalls.intercept.bpf": validate.Optional(validate.IsBool), "security.syscalls.intercept.bpf.devices": validate.Optional(validate.IsBool), "security.syscalls.intercept.mknod": validate.Optional(validate.IsBool), "security.syscalls.intercept.mount": validate.Optional(validate.IsBool), "security.syscalls.intercept.mount.allowed": validate.IsAny, "security.syscalls.intercept.mount.fuse": validate.IsAny, "security.syscalls.intercept.mount.shift": validate.Optional(validate.IsBool), "security.syscalls.intercept.sched_setscheduler": validate.Optional(validate.IsBool), "security.syscalls.intercept.setxattr": validate.Optional(validate.IsBool), "security.syscalls.intercept.sysinfo": validate.Optional(validate.IsBool), "security.delegate_bpf": validate.Optional(validate.IsBool), "security.delegate_bpf.cmd_types": validate.Optional(validate.IsBPFDelegationOption("cmds")), "security.delegate_bpf.map_types": validate.Optional(validate.IsBPFDelegationOption("maps")), "security.delegate_bpf.prog_types": validate.Optional(validate.IsBPFDelegationOption("progs")), "security.delegate_bpf.attach_types": validate.Optional(validate.IsBPFDelegationOption("attachs")), "volatile.last_state.idmap": validate.IsAny, "volatile.idmap.base": validate.IsAny, "volatile.idmap.current": validate.IsAny, "volatile.idmap.next": validate.IsAny, }
InstanceConfigKeysContainer is a map of config key to validator. (keys applying to containers only).
var InstanceConfigKeysVM = map[string]func(value string) error{ "limits.memory.hugepages": validate.Optional(validate.IsBool), "limits.cpu.pin_strategy": validate.Optional(validate.IsOneOf("none", "auto")), "limits.max_bus_ports": validate.Optional(validate.IsUint8), "migration.stateful": validate.Optional(validate.IsBool), "raw.qemu": validate.IsAny, "raw.qemu.conf": validate.IsAny, "security.agent.metrics": validate.Optional(validate.IsBool), "boot.mode": validate.Optional(validate.IsOneOf(BootModeUEFISecureBoot, BootModeUEFINoSecureBoot, BootModeBIOS)), "security.sev": validate.Optional(validate.IsBool), "security.sev.policy.es": validate.Optional(validate.IsBool), "security.sev.session.dh": validate.IsAny, "security.sev.session.data": validate.IsAny, "agent.nic_config": validate.Optional(validate.IsBool), "volatile.apply_nvram": validate.Optional(validate.IsBool), "volatile.bus.mode": validate.Optional(validate.IsOneOf("persistent")), "volatile.vsock_id": validate.Optional(validate.IsInt64), "boot.debug_edk2": validate.Optional(validate.IsBool), }
InstanceConfigKeysVM is a map of config key to validator. (keys applying to VM only).
Functions ¶
func ConfigKeyChecker ¶
ConfigKeyChecker returns a function that will check whether or not a provide value is valid for the associate config key. Returns an error if the key is not known. The checker function only performs syntactic checking of the value, semantic and usage checking must be done by the caller. User defined keys are always considered to be valid, e.g. user.* and environment.* keys.
func ExpandInstanceConfig ¶
func ExpandInstanceConfig(globalConfig map[string]string, config map[string]string, profiles []api.Profile) map[string]string
ExpandInstanceConfig expands the given instance config with the config values of the given profiles.
func ExpandInstanceDevices ¶
func ExpandInstanceDevices(devices deviceConfig.Devices, profiles []api.Profile) deviceConfig.Devices
ExpandInstanceDevices expands the given instance devices with the devices defined in the given profiles.
func ValidName ¶
ValidName validates an instance name. There are different validation rules for instance snapshot names so it takes an argument indicating whether the name is to be used for a snapshot or not.
func ValidSnapName ¶
ValidSnapName validates a snnapshot instance name which must not include the instance prefix.
Types ¶
type InstanceAction ¶
type InstanceAction string
InstanceAction indicates the type of action being performed.
const ( Stop InstanceAction = "stop" Start InstanceAction = "start" Restart InstanceAction = "restart" Freeze InstanceAction = "freeze" Unfreeze InstanceAction = "unfreeze" )
InstanceAction types.
type Type ¶
type Type int
Type indicates the type of instance.
func New ¶
New validates the supplied string against the allowed types of instance and returns the internal representation of that type. If empty string is supplied then the type returned is TypeContainer. If an invalid name is supplied an error will be returned.
type VMAgentData ¶
type VMAgentData struct {
Name string `json:"name"`
CloudInitID string `json:"cloud_init_id"`
Location string `json:"location"`
Config map[string]string `json:"config,omitempty"`
Devices map[string]deviceConfig.Device `json:"devices,omitempty"`
}
VMAgentData represents the instance data exposed to the VM agent.