Documentation
¶
Index ¶
- Constants
- Variables
- func AutoRemove() error
- func GetPackageManager() (syspkg.PackageManager, error)
- func GetRegistriesConfPath() string
- func Installers() map[string]InstallerFunc
- func NewChecksumError(filePath, algorithm, expectedHash, actualHash string) *errorx.Error
- func NewCleanupError(cause error, downloadFolder string) *errorx.Error
- func NewConfigLoadError(cause error) *errorx.Error
- func NewConfigurationError(cause error, softwareName string) *errorx.Error
- func NewDownloadError(cause error, url string, statusCode int) *errorx.Error
- func NewExtractionError(cause error, filePath, destPath string) *errorx.Error
- func NewFileNotFoundError(filePath string) *errorx.Error
- func NewFileSystemError(cause error) *errorx.Error
- func NewInstallationError(cause error, softwareName, version string) *errorx.Error
- func NewInvalidURLError(cause error, url string) *errorx.Error
- func NewPathTraversalError(entryName string) *errorx.Error
- func NewPlatformNotFoundError(softwareName, version, os, arch string) *errorx.Error
- func NewSoftwareNotFoundError(softwareName string) *errorx.Error
- func NewTemplateError(cause error, softwareName string) *errorx.Error
- func NewUninstallationError(cause error, softwareName, version string) *errorx.Error
- func NewVersionNotFoundError(softwareName, version string) *errorx.Error
- func RefreshPackageIndex() error
- func SafeErrorDetails(err *errorx.Error) []string
- func VerifyChecksum(filePath string, expectedValue string, algorithm string) error
- func WithPackageManager(pm syspkg.PackageManager) func(*PackageInstaller)
- func WithPackageName(name string) func(*PackageInstaller)
- func WithPackageOptions(opts manager.Options) func(*PackageInstaller)
- type ArchiveDetail
- type ArtifactCollection
- type ArtifactMetadata
- type AutoRemover
- type BinaryDetail
- type Checksum
- type ConfigDetail
- type Downloader
- type DownloaderOption
- type InstallerFunc
- type InstallerOption
- type Package
- type PackageInstaller
- func (p *PackageInstaller) Info() (*syspkg.PackageInfo, error)
- func (p *PackageInstaller) Install() (*syspkg.PackageInfo, error)
- func (p *PackageInstaller) IsInstalled() bool
- func (p *PackageInstaller) Name() string
- func (p *PackageInstaller) Uninstall() (*syspkg.PackageInfo, error)
- func (p *PackageInstaller) Upgrade() (*syspkg.PackageInfo, error)
- type PlatformChecksum
- type Software
- func NewCiliumInstaller(opts ...InstallerOption) (Software, error)
- func NewCrioInstaller(opts ...InstallerOption) (Software, error)
- func NewHelmInstaller(opts ...InstallerOption) (Software, error)
- func NewK9sInstaller(opts ...InstallerOption) (Software, error)
- func NewKubeadmInstaller(opts ...InstallerOption) (Software, error)
- func NewKubectlInstaller(opts ...InstallerOption) (Software, error)
- func NewKubeletInstaller(opts ...InstallerOption) (Software, error)
- func NewTeleportNodeAgentInstaller(opts ...InstallerOption) (Software, error)
- func NewTeleportNodeAgentInstallerWithConfig(configOpts *TeleportNodeAgentConfigureOptions, opts ...InstallerOption) (Software, error)
- type TeleportNodeAgentConfigureOptions
- type TemplateData
- type Version
- type VersionDetails
- func (v VersionDetails) BinariesByArchive() []BinaryDetail
- func (v VersionDetails) BinariesByURL() []BinaryDetail
- func (v VersionDetails) ConfigsByArchive() []ConfigDetail
- func (v VersionDetails) ConfigsByURL() []ConfigDetail
- func (v VersionDetails) GetArchiveByName(archiveName string) (*ArchiveDetail, error)
- func (v VersionDetails) GetArchives() []ArchiveDetail
- func (v VersionDetails) GetBinaries() []BinaryDetail
- func (v VersionDetails) GetBinaryByName(binaryName string) (*BinaryDetail, error)
- func (v VersionDetails) GetConfigByName(configName string) (*ConfigDetail, error)
- func (v VersionDetails) GetConfigs() []ConfigDetail
Constants ¶
const ( OSLinux string = "linux" OSDarwin string = "darwin" OSWindows string = "windows" ArchAMD64 string = "amd64" ArchARM64 string = "arm64" )
const ( CrioBinaryName = "crio" CrioServiceName = "crio" // File names - extracted as constants to avoid duplication CrioConfFile = "10-crio.conf" CrioServiceFile = "crio.service" PolicyJsonFile = "policy.json" CrictlYamlFile = "crictl.yaml" CrioUmountConfFile = "crio-umount.conf" CrioConfDisabledFile = "10-crio-bridge.conflist.disabled" CrioConf5File = "crio.conf.5" CrioConfd5File = "crio.conf.d.5" Crio8File = "crio.8" CrioFishFile = "crio.fish" RegistriesConfFile = "registries.conf" CrioInstallFile = ".crio-install" CrioDefaultConfigFile = "crio" // Directory names ContribDir = "contrib/" )
const ( TeleportBinaryName = "teleport" TeleportServiceName = "teleport" )
const (
CiliumBinaryName = "cilium"
)
const HelmBinaryName = "helm"
const K9sBinaryName = "k9s"
const KubeadmBinaryName = "kubeadm"
const KubectlBinaryName = "kubectl"
const KubeletBinaryName = "kubelet"
const KubeletServiceName = "kubelet"
Variables ¶
var ( ErrorsNamespace = errorx.NewNamespace("software") ConfigLoadError = ErrorsNamespace.NewType("config_load_error") SoftwareNotFoundError = ErrorsNamespace.NewType("software_not_found") VersionNotFoundError = ErrorsNamespace.NewType("version_not_found") PlatformNotFoundError = ErrorsNamespace.NewType("platform_not_found") DownloadError = ErrorsNamespace.NewType("download_error") ChecksumError = ErrorsNamespace.NewType("checksum_error") ExtractionError = ErrorsNamespace.NewType("extraction_error") FileNotFoundError = ErrorsNamespace.NewType("file_not_found") InstallationError = ErrorsNamespace.NewType("installation_error") UninstallationError = ErrorsNamespace.NewType("uninstallation_error") ConfigurationError = ErrorsNamespace.NewType("configuration_error") CleanupError = ErrorsNamespace.NewType("cleanup_error") FileSystemError = ErrorsNamespace.NewType("filesystem_error") TemplateError = ErrorsNamespace.NewType("template_error") PathTraversalError = ErrorsNamespace.NewType("path_traversal_error") InvalidURLError = ErrorsNamespace.NewType("invalid_url_error") )
var GenerateKubeadmToken = func() (string, error) { const allowedChars = "abcdefghijklmnopqrstuvwxyz0123456789" const part1Len = 6 const part2Len = 16 tokenPart := func(length int) (string, error) { b := make([]byte, length) for i := range b { nBig, err := rand.Int(rand.Reader, big.NewInt(int64(len(allowedChars)))) if err != nil { return "", fmt.Errorf("failed to generate random int for kubeadm token: %w", err) } b[i] = allowedChars[nBig.Int64()] } return string(b), nil } part1, err := tokenPart(part1Len) if err != nil { return "", err } part2, err := tokenPart(part2Len) if err != nil { return "", err } return fmt.Sprintf("%s.%s", part1, part2), nil }
GenerateKubeadmToken generates a random kubeadm token in the format [a-z0-9]{6}.[a-z0-9]{16}
Functions ¶
func AutoRemove ¶
func AutoRemove() error
func GetPackageManager ¶
func GetPackageManager() (syspkg.PackageManager, error)
func GetRegistriesConfPath ¶
func GetRegistriesConfPath() string
GetRegistriesConfPath returns the full path to the registries.conf file in the sandbox This is used by tests to install custom registry mirror configuration
func Installers ¶ added in v0.12.0
func Installers() map[string]InstallerFunc
Installers returns a map of available installer constructors. The keys of the map are the names of the software, and the values are the corresponding installer functions. This allows for dynamic retrieval of installer functions based on software names, facilitating extensibility and modularity in the installation process. This is primarily used by the machineChecker to determine which installers are available for checking and installation on the local host.
func NewChecksumError ¶
func NewConfigLoadError ¶
func NewConfigurationError ¶
func NewDownloadError ¶
func NewExtractionError ¶
func NewFileNotFoundError ¶
func NewFileSystemError ¶
func NewInstallationError ¶
func NewPathTraversalError ¶
func NewUninstallationError ¶
func NewVersionNotFoundError ¶
func RefreshPackageIndex ¶
func RefreshPackageIndex() error
func SafeErrorDetails ¶
SafeErrorDetails emits a PII-safe slice of error details.
func VerifyChecksum ¶
VerifyChecksum dynamically verifies the checksum of a file using the specified algorithm
func WithPackageManager ¶
func WithPackageManager(pm syspkg.PackageManager) func(*PackageInstaller)
func WithPackageName ¶
func WithPackageName(name string) func(*PackageInstaller)
func WithPackageOptions ¶
func WithPackageOptions(opts manager.Options) func(*PackageInstaller)
Types ¶
type ArchiveDetail ¶
type ArchiveDetail struct {
Name string `yaml:"name"`
URL string `yaml:"url"`
PlatformChecksum `yaml:",inline"`
}
type ArtifactCollection ¶
type ArtifactCollection struct {
Artifact []ArtifactMetadata `yaml:"artifact"`
}
ArtifactCollection represents the root configuration structure
func LoadArtifactConfig ¶
func LoadArtifactConfig() (*ArtifactCollection, error)
LoadArtifactConfig loads and parses the artifact.yaml configuration
func (*ArtifactCollection) GetArtifactByName ¶
func (sc *ArtifactCollection) GetArtifactByName(name string) (*ArtifactMetadata, error)
GetArtifactByName finds a artifact item by name
func (*ArtifactCollection) Names ¶ added in v0.12.0
func (sc *ArtifactCollection) Names() []string
Names returns the names of all managed software artifacts.
type ArtifactMetadata ¶
type ArtifactMetadata struct {
Name string `yaml:"name"`
Versions map[Version]VersionDetails `yaml:"versions"`
// contains filtered or unexported fields
}
ArtifactMetadata represents a single software artifact configuration with its versions which including archives, binaries and configuration files
func (*ArtifactMetadata) GetLatestVersion ¶
func (si *ArtifactMetadata) GetLatestVersion() (string, error)
GetLatestVersion returns the latest versionToBeInstalled available for this software item Only supports semantic versions - returns error for non-semantic versionToBeInstalled formats
type AutoRemover ¶
type AutoRemover interface {
AutoRemove(opts *manager.Options) ([]manager.PackageInfo, error)
}
AutoRemover is an interface for package managers that support autoremove.
type BinaryDetail ¶
type BinaryDetail struct {
Name string `yaml:"name"`
URL string `yaml:"url,omitempty"`
Archive string `yaml:"archive,omitempty"`
PlatformChecksum `yaml:",inline"`
}
type ConfigDetail ¶
type ConfigDetail struct {
Name string `yaml:"name"`
URL string `yaml:"url"`
Archive string `yaml:"archive,omitempty"`
Algorithm string `yaml:"algorithm"`
Value string `yaml:"checksum"`
}
ConfigDetail represents a configuration file with its software
type Downloader ¶
type Downloader struct {
// contains filtered or unexported fields
}
Downloader is responsible for downloading a software package and checking its integrity.
func NewDownloader ¶
func NewDownloader(opts ...DownloaderOption) *Downloader
NewDownloader creates a new Downloader with default settings and optional configurations
func (*Downloader) Download ¶
func (fd *Downloader) Download(url, destination string) error
Download downloads a file from the given URL to the specified destination
type DownloaderOption ¶
type DownloaderOption func(*Downloader)
DownloaderOption is a function that configures a Downloader
func WithAllowedDomains ¶
func WithAllowedDomains(domains []string) DownloaderOption
WithAllowedDomains sets custom allowed domains for the downloader
func WithBasePath ¶
func WithBasePath(basePath string) DownloaderOption
WithBasePath sets a custom base path for the downloader
func WithHTTPClient ¶
func WithHTTPClient(client *http.Client) DownloaderOption
WithHTTPClient sets a custom HTTP client for the downloader (useful for testing)
func WithInsecureTLS ¶ added in v0.7.0
func WithInsecureTLS(insecure bool) DownloaderOption
WithInsecureTLS skips TLS certificate verification. WARNING: Only use this for local development with self-signed certificates! This option is ignored in release builds for security.
func WithTimeout ¶
func WithTimeout(timeout time.Duration) DownloaderOption
WithTimeout sets a custom timeout for the downloader
type InstallerFunc ¶ added in v0.12.0
type InstallerFunc func(opts ...InstallerOption) (Software, error)
type InstallerOption ¶
type InstallerOption func(*baseInstaller)
func WithStateManager ¶ added in v0.12.0
func WithStateManager(sm state.Manager) InstallerOption
WithStateManager injects a state.Manager into the installer so that IsInstalled/IsConfigured reads and Install/Configure/Uninstall/RemoveConfiguration writes flow through the shared DefaultStateManager instead of the legacy file-per-component Manager.
func WithVersion ¶
func WithVersion(version string) InstallerOption
WithVersion sets the specific version to install for the software. If not provided, the latest version will be used automatically. This is a public API option that can be used when creating installers to override the default version selection behavior.
type Package ¶
type Package interface {
Name() string
Install() (*syspkg.PackageInfo, error)
Uninstall() (*syspkg.PackageInfo, error)
Upgrade() (*syspkg.PackageInfo, error)
Info() (*syspkg.PackageInfo, error)
IsInstalled() bool
}
func NewConntrack ¶
func NewContainerd ¶
func NewEbtables ¶
func NewGpg ¶
NewGpg creates a GPG package installer that works across different distributions Uses "gpg" package name which works on most modern distributions including: - Ubuntu/Debian (newer versions) - RHEL/CentOS/Fedora/Oracle Linux The underlying syspkg library automatically detects the correct package manager
func NewIptables ¶
func NewNftables ¶
type PackageInstaller ¶
type PackageInstaller struct {
// contains filtered or unexported fields
}
PackageInstaller is the default implementation of the Package interface that uses standard system package manager to manage a system package
func NewPackageInstaller ¶
func NewPackageInstaller(opts ...option) (*PackageInstaller, error)
func (*PackageInstaller) Info ¶
func (p *PackageInstaller) Info() (*syspkg.PackageInfo, error)
func (*PackageInstaller) Install ¶
func (p *PackageInstaller) Install() (*syspkg.PackageInfo, error)
func (*PackageInstaller) IsInstalled ¶
func (p *PackageInstaller) IsInstalled() bool
func (*PackageInstaller) Name ¶
func (p *PackageInstaller) Name() string
func (*PackageInstaller) Uninstall ¶
func (p *PackageInstaller) Uninstall() (*syspkg.PackageInfo, error)
func (*PackageInstaller) Upgrade ¶
func (p *PackageInstaller) Upgrade() (*syspkg.PackageInfo, error)
type PlatformChecksum ¶
PlatformChecksum maps OS and ARCH to their respective checksums Format: map[OS]map[ARCH]Checksum e.g. in yaml format:
linux:
amd64:
algorithm: sha256
checksum: abcdef...
type Software ¶
type Software interface {
// Download fetches the software artifacts,
// including the binary, and configuration files
Download() error
// Extract unpacks the downloaded files under a temporary subdirectory called 'unpack'
Extract() error
// Install places the files in the sandbox destination
Install() error
// Uninstall removes the software from the sandbox and cleans up related files
Uninstall() error
// IsInstalled checks the directories and high-level contents in sandbox
IsInstalled() (bool, error)
// Configure sets up configurations, services, and related symlinks
// It also fills the configuration files
Configure() error
// RemoveConfiguration removes symlinks and restores the configuration files
RemoveConfiguration() error
// IsConfigured checks if the configuration has been done
IsConfigured() (bool, error)
// Version returns the version of the software to be installed
Version() string
// Cleanup removes temporary files created during download and extraction
Cleanup() error
// GetSoftwareName returns the software name
GetSoftwareName() string
// VerifyInstallation checks if the software is installed and configured
VerifyInstallation() (*state.SoftwareState, error)
}
func NewCiliumInstaller ¶
func NewCiliumInstaller(opts ...InstallerOption) (Software, error)
NewCiliumInstaller creates a new installer for Cilium
func NewCrioInstaller ¶
func NewCrioInstaller(opts ...InstallerOption) (Software, error)
func NewHelmInstaller ¶
func NewHelmInstaller(opts ...InstallerOption) (Software, error)
func NewK9sInstaller ¶
func NewK9sInstaller(opts ...InstallerOption) (Software, error)
func NewKubeadmInstaller ¶
func NewKubeadmInstaller(opts ...InstallerOption) (Software, error)
func NewKubectlInstaller ¶
func NewKubectlInstaller(opts ...InstallerOption) (Software, error)
func NewKubeletInstaller ¶
func NewKubeletInstaller(opts ...InstallerOption) (Software, error)
func NewTeleportNodeAgentInstaller ¶ added in v0.7.0
func NewTeleportNodeAgentInstaller(opts ...InstallerOption) (Software, error)
NewTeleportNodeAgentInstaller creates a new installer for the Teleport node agent
func NewTeleportNodeAgentInstallerWithConfig ¶ added in v0.7.0
func NewTeleportNodeAgentInstallerWithConfig(configOpts *TeleportNodeAgentConfigureOptions, opts ...InstallerOption) (Software, error)
NewTeleportNodeAgentInstallerWithConfig creates a new Teleport node agent installer with configuration options This is used when setting up the node agent with proxy address and join token
type TeleportNodeAgentConfigureOptions ¶ added in v0.7.0
type TeleportNodeAgentConfigureOptions struct {
// ProxyAddr is the address of the Teleport proxy server (e.g., "hashgraph.teleport.sh:443")
ProxyAddr string
// JoinToken is the token used to join the Teleport cluster
JoinToken string
}
TeleportNodeAgentConfigureOptions holds options for configuring the Teleport node agent
type TemplateData ¶
TemplateData contains the variables used in template substitution
type VersionDetails ¶
type VersionDetails struct {
Archives []ArchiveDetail `yaml:"archives,omitempty"`
Binaries []BinaryDetail `yaml:"binaries"`
Configs []ConfigDetail `yaml:"configs,omitempty"`
}
VersionDetails represents the structure for a specific versionToBeInstalled including the archive, binary and related configuration files
func (VersionDetails) BinariesByArchive ¶
func (v VersionDetails) BinariesByArchive() []BinaryDetail
BinariesByArchive returns only the binaries that are extracted from archives
func (VersionDetails) BinariesByURL ¶
func (v VersionDetails) BinariesByURL() []BinaryDetail
BinariesByURL returns only the binaries that are downloaded directly via URL
func (VersionDetails) ConfigsByArchive ¶
func (v VersionDetails) ConfigsByArchive() []ConfigDetail
ConfigsByArchive returns only the configuration files that are extracted from archives
func (VersionDetails) ConfigsByURL ¶
func (v VersionDetails) ConfigsByURL() []ConfigDetail
ConfigsByURL returns only the configuration files that are downloaded directly via URL
func (VersionDetails) GetArchiveByName ¶
func (v VersionDetails) GetArchiveByName(archiveName string) (*ArchiveDetail, error)
GetArchiveByName retrieves a specific archive file by name
func (VersionDetails) GetArchives ¶
func (v VersionDetails) GetArchives() []ArchiveDetail
GetArchives retrieves all archives, sorted by name for consistent order
func (VersionDetails) GetBinaries ¶
func (v VersionDetails) GetBinaries() []BinaryDetail
GetBinaries retrieves all binaries, sorted by name for consistent order
func (VersionDetails) GetBinaryByName ¶
func (v VersionDetails) GetBinaryByName(binaryName string) (*BinaryDetail, error)
GetBinaryByName retrieves a specific binary file by name
func (VersionDetails) GetConfigByName ¶
func (v VersionDetails) GetConfigByName(configName string) (*ConfigDetail, error)
GetConfigByName retrieves a specific configuration file by name
func (VersionDetails) GetConfigs ¶
func (v VersionDetails) GetConfigs() []ConfigDetail
GetConfigs retrieves all configuration files, sorted by name for consistent order