provision

package
v1.7.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 1, 2024 License: MPL-2.0 Imports: 16 Imported by: 2

Documentation

Overview

Package provision provides abstract definitions for Talos cluster provisioners.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CNIConfig

type CNIConfig struct {
	BinPath  []string
	ConfDir  string
	CacheDir string

	BundleURL string
}

CNIConfig describes CNI part of NetworkRequest.

type Cluster

type Cluster interface {
	// Provisioner returns name of the provisioner used to build the cluster.
	Provisioner() string
	// StatePath returns path to the state directory of the cluster.
	StatePath() (string, error)
	// Info returns running cluster information.
	Info() ClusterInfo
}

Cluster describes the provisioned Cluster.

type ClusterInfo

type ClusterInfo struct {
	ClusterName string

	Network NetworkInfo
	Nodes   []NodeInfo

	// ExtraNodes are not part of the cluster.
	ExtraNodes []NodeInfo

	// KubernetesEndpoint is the endpoint of the Kubernetes API server.
	KubernetesEndpoint string
}

ClusterInfo describes the cluster.

type ClusterRequest

type ClusterRequest struct {
	Name string

	Network NetworkRequest
	Nodes   NodeRequests

	// Docker specific parameters.
	Image string

	// Boot options (QEMU).
	KernelPath     string
	InitramfsPath  string
	ISOPath        string
	DiskImagePath  string
	IPXEBootScript string

	// Encryption
	KMSEndpoint string

	// Path to talosctl executable to re-execute itself as needed.
	SelfExecutable string

	// Path to root of state directory (~/.talos/clusters by default).
	StateDirectory string

	SiderolinkRequest SiderolinkRequest
}

ClusterRequest is the root object describing cluster to be provisioned.

type Disk

type Disk struct {
	// Size in bytes.
	Size uint64
	// Whether to skip preallocating the disk space.
	SkipPreallocate bool
	// Partitions represents the list of partitions.
	Partitions []*v1alpha1.DiskPartition
}

Disk represents a disk size and name in NodeRequest.

type NetworkInfo

type NetworkInfo struct {
	Name         string
	CIDRs        []netip.Prefix
	GatewayAddrs []netip.Addr
	MTU          int
}

NetworkInfo describes cluster network.

type NetworkRequest

type NetworkRequest struct {
	Name         string
	CIDRs        []netip.Prefix
	GatewayAddrs []netip.Addr
	MTU          int
	Nameservers  []netip.Addr

	LoadBalancerPorts []int

	// CNI-specific parameters.
	CNI CNIConfig

	// DHCP options
	DHCPSkipHostname bool

	// Docker-specific parameters.
	DockerDisableIPv6 bool

	// Network chaos parameters.
	NetworkChaos  bool
	Jitter        time.Duration
	Latency       time.Duration
	PacketLoss    float64
	PacketReorder float64
	PacketCorrupt float64
	Bandwidth     int
}

NetworkRequest describes cluster network.

type NodeInfo

type NodeInfo struct {
	ID   string
	UUID uuid.UUID
	Name string
	Type machine.Type

	// Share of CPUs, in 1e-9 fractions
	NanoCPUs int64
	// Memory limit in bytes
	Memory int64
	// Disk (volume) size in bytes, if applicable
	DiskSize uint64

	IPs []netip.Addr

	APIPort      int
	TPM2StateDir string
}

NodeInfo describes a node.

type NodeRequest

type NodeRequest struct {
	Name   string
	IPs    []netip.Addr
	Config config.Provider
	Type   machine.Type

	// Share of CPUs, in 1e-9 fractions
	NanoCPUs int64
	// Memory limit in bytes
	Memory int64
	// Disks (volumes), if applicable
	Disks []*Disk
	// Ports
	Ports []string
	// SkipInjectingConfig disables reading configuration from http server
	SkipInjectingConfig bool
	// DefaultBootOrder overrides default boot order "cn" (disk, then network boot).
	//
	// BootOrder can be forced to be "nc" (PXE boot) via the API in QEMU provisioner.
	DefaultBootOrder string

	// ExtraKernelArgs passes additional kernel args
	// to the initial boot from initramfs and vmlinuz.
	//
	// This doesn't apply to boots from ISO or from the disk image.
	ExtraKernelArgs *procfs.Cmdline

	// UUID allows to specify the UUID of the node (VMs only).
	//
	// If not specified, a random UUID will be generated.
	UUID *uuid.UUID

	// BadRTC resets RTC to well known time in the past (QEMU provisioner).
	BadRTC bool

	// PXE-booted VMs
	PXEBooted        bool
	TFTPServer       string
	IPXEBootFilename string
}

NodeRequest describes a request for a node.

type NodeRequests

type NodeRequests []NodeRequest

NodeRequests is a list of NodeRequest.

func (NodeRequests) ControlPlaneNodes

func (reqs NodeRequests) ControlPlaneNodes() (nodes []NodeRequest)

ControlPlaneNodes returns subset of nodes which are Init/ControlPlane type.

func (NodeRequests) FindInitNode

func (reqs NodeRequests) FindInitNode() (req NodeRequest, err error)

FindInitNode looks up init node, it returns an error if no init node is present or if it's duplicate.

func (NodeRequests) PXENodes

func (reqs NodeRequests) PXENodes() (nodes []NodeRequest)

PXENodes returns subset of nodes which are PXE booted.

func (NodeRequests) WorkerNodes

func (reqs NodeRequests) WorkerNodes() (nodes []NodeRequest)

WorkerNodes returns subset of nodes which are Init/ControlPlane type.

type Option

type Option func(o *Options) error

Option controls Provisioner.

func WithBootlader

func WithBootlader(enabled bool) Option

WithBootlader enables or disables bootloader (bootloader is enabled by default).

func WithDeleteOnErr

func WithDeleteOnErr(v bool) Option

WithDeleteOnErr informs the provisioner to delete cluster state folder on error.

func WithDockerPorts

func WithDockerPorts(ports []string) Option

WithDockerPorts allows docker provisioner to expose ports on workers.

func WithDockerPortsHostIP

func WithDockerPortsHostIP(hostIP string) Option

WithDockerPortsHostIP sets host IP for docker provisioner to expose ports on workers.

func WithExtraUEFISearchPaths

func WithExtraUEFISearchPaths(extraUEFISearchPaths []string) Option

WithExtraUEFISearchPaths configures additional search paths to look for UEFI firmware.

func WithKMS added in v1.5.0

func WithKMS(endpoint string) Option

WithKMS inits KMS server in the provisioner.

func WithKubernetesEndpoint added in v1.7.0

func WithKubernetesEndpoint(endpoint string) Option

WithKubernetesEndpoint specifies full external Kubernetes API endpoint to use when accessing Talos cluster.

func WithLogWriter

func WithLogWriter(w io.Writer) Option

WithLogWriter sets logging destination.

func WithSiderolinkAgent added in v1.7.0

func WithSiderolinkAgent(v bool) Option

WithSiderolinkAgent enables or disables siderolink agent.

func WithTPM2 added in v1.5.0

func WithTPM2(enabled bool) Option

WithTPM2 enables or disables TPM2 emulation.

func WithTalosClient

func WithTalosClient(client *client.Client) Option

WithTalosClient specifies client to use when acessing Talos cluster.

func WithTalosConfig

func WithTalosConfig(talosConfig *clientconfig.Config) Option

WithTalosConfig specifies talosconfig to use when acessing Talos cluster.

func WithTargetArch

func WithTargetArch(arch string) Option

WithTargetArch specifies target architecture for the cluster.

func WithUEFI

func WithUEFI(enabled bool) Option

WithUEFI enables or disables UEFI boot on amd64 (default for amd64 is BIOS boot).

type Options

type Options struct {
	LogWriter          io.Writer
	TalosConfig        *clientconfig.Config
	TalosClient        *client.Client
	KubernetesEndpoint string
	TargetArch         string

	// Enable bootloader by booting from disk image after install.
	BootloaderEnabled bool

	// Enable UEFI (for amd64), arm64 can only boot UEFI
	UEFIEnabled bool
	// Enable TPM2 emulation using swtpm.
	TPM2Enabled bool
	// Configure additional search paths to look for UEFI firmware.
	ExtraUEFISearchPaths []string

	// Expose ports to worker machines in docker provisioner
	DockerPorts       []string
	DockerPortsHostIP string
	DeleteStateOnErr  bool

	KMSEndpoint string

	SiderolinkEnabled bool
}

Options describes Provisioner parameters.

func DefaultOptions

func DefaultOptions() Options

DefaultOptions returns default options.

type Provisioner

type Provisioner interface {
	Create(context.Context, ClusterRequest, ...Option) (Cluster, error)
	Destroy(context.Context, Cluster, ...Option) error

	CrashDump(context.Context, Cluster, io.Writer)

	Reflect(ctx context.Context, clusterName, stateDirectory string) (Cluster, error)

	GenOptions(NetworkRequest) []generate.Option

	GetInClusterKubernetesControlPlaneEndpoint(req NetworkRequest, controlPlanePort int) string
	GetExternalKubernetesControlPlaneEndpoint(req NetworkRequest, controlPlanePort int) string
	GetTalosAPIEndpoints(NetworkRequest) []string

	GetFirstInterface() v1alpha1.IfaceSelector

	Close() error

	UserDiskName(index int) string
}

Provisioner is an interface each provisioner should implement.

type SiderolinkBind added in v1.7.0

type SiderolinkBind struct {
	UUID uuid.UUID
	Addr netip.Addr
}

SiderolinkBind describes a pair of prebinded UUID->Addr for SideroLink agent.

type SiderolinkRequest added in v1.7.0

type SiderolinkRequest struct {
	WireguardEndpoint string
	APIEndpoint       string
	SinkEndpoint      string
	LogEndpoint       string
	SiderolinkBind    []SiderolinkBind
}

SiderolinkRequest describes a request for SideroLink agent.

func (*SiderolinkRequest) GetAddr added in v1.7.0

func (sr *SiderolinkRequest) GetAddr(u *uuid.UUID) (netip.Addr, bool)

GetAddr returns the address for the given UUID.

Directories

Path Synopsis
Package access provides methods to access provisioned Talos cluster.
Package access provides methods to access provisioned Talos cluster.
internal
cniutils
Package cniutils provides helper functions to parse CNI results.
Package cniutils provides helper functions to parse CNI results.
inmemhttp
Package inmemhttp implements temporary HTTP server which is based off memory fs.
Package inmemhttp implements temporary HTTP server which is based off memory fs.
docker
Package docker implements Provisioner via docker.
Package docker implements Provisioner via docker.
vm
Package vm implements common methods for VM provisioners.
Package vm implements common methods for VM provisioners.
vm/internal/ipxe
Package ipxe provides utility to deliver iPXE images and build iPXE scripts.
Package ipxe provides utility to deliver iPXE images and build iPXE scripts.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL