Documentation
¶
Index ¶
- Constants
- Variables
- func AllExecutionModes() []automa.TypeMode
- func AllNodeTypes() []string
- func AllProfiles() []string
- func IsEqualMap(a, b StringMap) bool
- type ActionType
- type AlloyConfig
- type AlloyRemoteConfig
- type BlockNodeConfig
- type BlockNodeInputs
- type BlockNodeStorage
- type ClusterInfo
- type ClusterInputs
- type CommonInputs
- type Config
- type Intent
- type MachineInputs
- type StringMap
- func (s StringMap) Clone() (StringMap, error)
- func (s StringMap) Delete(key string)
- func (s StringMap) Get(key string) (string, bool)
- func (s StringMap) IsEqual(other StringMap) bool
- func (s StringMap) Items() map[string]string
- func (s StringMap) Keys() []string
- func (s StringMap) Merge(other StringMap)
- func (s StringMap) Set(key, value string)
- func (s StringMap) Values() []string
- type TargetType
- type TeleportConfig
- type UserInputs
- type WeaverPaths
- type WorkflowExecutionOptions
Constants ¶
const ( // Node types NodeTypeLocal = "local" NodeTypeBlock = "block" NodeTypeConsensus = "consensus" NodeTypeMirror = "mirror" NodeTypeRelay = "relay" )
const ( // File and directory permissions DefaultDirOrExecPerm = 0755 // for directories and executable files DefaultFilePerm = 0644 // for regular data/config files // Weaver paths DefaultWeaverHome = "/opt/solo/weaver" DefaultUnpackFolderName = "unpack" SystemBinDir = "/usr/local/bin" SystemdUnitFilesDir = "/usr/lib/systemd/system" )
const ( // Deployment profiles ProfileLocal = "local" ProfilePerfnet = "perfnet" ProfileTestnet = "testnet" ProfilePreviewnet = "previewnet" ProfileMainnet = "mainnet" )
Variables ¶
var ErrPropertyResolution = errorx.RegisterProperty("resolution")
ErrPropertyResolution is the errorx property key used to attach remediation hints to precondition errors — mirrors doctor.ErrPropertyResolution without creating a circular import.
Functions ¶
func AllExecutionModes ¶
func AllNodeTypes ¶
func AllNodeTypes() []string
func AllProfiles ¶
func AllProfiles() []string
func IsEqualMap ¶
IsEqualMap compares two automa.StateBag values using Items()
Types ¶
type ActionType ¶
type ActionType string
const ( // ActionSetup sets up the base system required for further actions. // This includes installing dependencies, configuring system settings, etc. // It should be safe to run multiple times without adverse effects. ActionSetup ActionType = "setup" // ActionInstall installs the application or component on the system. // It should check if the application is already installed and skip installation if so. // Running this action multiple times should not result in multiple installations. ActionInstall ActionType = "install" // ActionUninstall removes the application or component from the system. // It should ensure that all related files and configurations are cleaned up. // Running this action multiple times should not cause errors if the application is already uninstalled. ActionUninstall ActionType = "uninstall" // ActionReset resets the system or application to a clean state as if it were newly installed. // It should remove any user data, configurations, or changes made after installation. // Running this action multiple times should consistently return the system to the clean state. ActionReset ActionType = "reset" // ActionDeploy deploys the application or component to the target cluster ActionDeploy ActionType = "deploy" // ActionDestroy removes the application or component from the target cluster ActionDestroy ActionType = "destroy" // ActionUpgrade upgrades the application or component to a newer version ActionUpgrade ActionType = "upgrade" // ActionMigrate migrates the application or component to a different environment or configuration ActionMigrate ActionType = "migrate" )
All actions must be idempotent meaning it only applies if system is not at the desired end state of the action.
type AlloyConfig ¶
type AlloyConfig struct {
MonitorBlockNode bool `yaml:"monitorBlockNode" json:"monitorBlockNode"`
ClusterName string `yaml:"clusterName" json:"clusterName"`
ClusterSecretStoreName string `yaml:"clusterSecretStoreName" json:"clusterSecretStoreName"` // Name of the ClusterSecretStore for ESO
PrometheusRemotes []AlloyRemoteConfig `yaml:"prometheusRemotes" json:"prometheusRemotes"`
LokiRemotes []AlloyRemoteConfig `yaml:"lokiRemotes" json:"lokiRemotes"`
// Deprecated: Use PrometheusRemotes instead. Kept for backward compatibility.
PrometheusURL string `yaml:"prometheusUrl" json:"prometheusUrl"`
PrometheusUsername string `yaml:"prometheusUsername" json:"prometheusUsername"`
// Deprecated: Use LokiRemotes instead. Kept for backward compatibility.
LokiURL string `yaml:"lokiUrl" json:"lokiUrl"`
LokiUsername string `yaml:"lokiUsername" json:"lokiUsername"`
}
AlloyConfig represents the `alloy` configuration block for observability. Note: Passwords are managed via Vault and External Secrets Operator, not in config files.
func (*AlloyConfig) Validate ¶
func (c *AlloyConfig) Validate() error
Validate validates all Alloy configuration fields.
type AlloyRemoteConfig ¶
type AlloyRemoteConfig struct {
Name string `yaml:"name" json:"name"` // Unique identifier for this remote
URL string `yaml:"url" json:"url"` // Remote write URL
Username string `yaml:"username" json:"username"` // Basic auth username
LabelProfile string `yaml:"labelProfile" json:"labelProfile"` // Label profile name (e.g. ops) for auto-derived labels
}
AlloyRemoteConfig represents a single remote endpoint for metrics or logs. Passwords are expected in K8s Secret "grafana-alloy-secrets" under conventional keys:
- Prometheus: PROMETHEUS_PASSWORD_<NAME>
- Loki: LOKI_PASSWORD_<NAME>
type BlockNodeConfig ¶
type BlockNodeConfig struct {
Namespace string `yaml:"namespace" json:"namespace"`
Release string `yaml:"release" json:"release"`
Chart string `yaml:"chart" json:"chart"`
ChartVersion string `yaml:"version" json:"version" mapstructure:"version"`
ChartName string `yaml:"chartName" json:"chartName"`
Storage BlockNodeStorage `yaml:"storage" json:"storage"`
}
BlockNodeConfig represents the `blockNode` configuration block.
func (*BlockNodeConfig) Validate ¶
func (c *BlockNodeConfig) Validate() error
Validate validates all block node configuration fields to ensure they are safe and secure. This performs early validation of user-provided configuration to catch security issues before workflow execution begins.
type BlockNodeInputs ¶
type BlockNodeInputs struct {
Profile string
Namespace string
Release string // Helm release name
Chart string // Helm chart reference: OCI, URL, or repo/chart
ChartName string
ChartVersion string
Storage BlockNodeStorage
ValuesFile string
ReuseValues bool
ResetStorage bool
SkipHardwareChecks bool
}
func (*BlockNodeInputs) Validate ¶
func (c *BlockNodeInputs) Validate() error
Validate validates all block node inputs fields to ensure they are safe and secure.
type BlockNodeStorage ¶
type BlockNodeStorage struct {
BasePath string `yaml:"basePath" json:"basePath"`
ArchivePath string `yaml:"archivePath" json:"archivePath"`
LivePath string `yaml:"livePath" json:"livePath"`
LogPath string `yaml:"logPath" json:"logPath"`
VerificationPath string `yaml:"verificationPath" json:"verificationPath"`
PluginsPath string `yaml:"pluginsPath" json:"pluginsPath"`
LiveSize string `yaml:"liveSize" json:"liveSize"`
ArchiveSize string `yaml:"archiveSize" json:"archiveSize"`
LogSize string `yaml:"logSize" json:"logSize"`
VerificationSize string `yaml:"verificationSize" json:"verificationSize"`
PluginsSize string `yaml:"pluginsSize" json:"pluginsSize"`
}
BlockNodeStorage represents the `storage` section under `blockNode`.
func (*BlockNodeStorage) IsEmpty ¶
func (b *BlockNodeStorage) IsEmpty() bool
IsEmpty returns true when all BlockNodeStorage fields are empty (after trimming).
func (*BlockNodeStorage) MergeFrom ¶ added in v0.15.0
func (b *BlockNodeStorage) MergeFrom(other BlockNodeStorage)
MergeFrom copies non-empty fields from other into b, filling gaps without overwriting fields already set in b.
func (*BlockNodeStorage) Validate ¶
func (b *BlockNodeStorage) Validate() error
Validate validates all storage paths to ensure they are safe and secure. This performs early validation of user-provided paths to catch security issues before workflow execution begins.
type ClusterInfo ¶
type ClusterInfo struct {
KubeconfigEnv string `yaml:"kubeconfigEnv" json:"kubeconfigEnv"`
KubeconfigPath string `yaml:"kubeconfigPath" json:"kubeconfigPath"`
ServerVersion k8sversion.Info `yaml:"serverVersion" json:"serverVersion"`
Host string `yaml:"host" json:"host"`
Proxy string `yaml:"proxy", json:"proxy"`
Clusters map[string]*api.Cluster `yaml:"clusters" json:"clusters"`
Contexts map[string]*api.Context `yaml:"contexts" json:"contexts"`
CurrentContext string `yaml:"currentContext" json:"currentContext"`
Namespace string `yaml:"namespace" json:"namespace"`
}
func (ClusterInfo) Equal ¶
func (c ClusterInfo) Equal(other ClusterInfo) bool
Equal returns true if two ClusterInfo values are equal, treating nil and empty maps as equivalent.
type ClusterInputs ¶
func (*ClusterInputs) Validate ¶
func (c *ClusterInputs) Validate() error
type CommonInputs ¶
type CommonInputs struct {
Force bool
NodeType string
ExecutionOptions WorkflowExecutionOptions
}
func (*CommonInputs) Validate ¶
func (c *CommonInputs) Validate() error
Validate validates all common inputs fields to ensure they are safe and secure.
type Config ¶
type Config struct {
Profile string `yaml:"profile" json:"profile"` // Deployment profile (local, perfnet, testnet, mainnet)
Log logx.LoggingConfig `yaml:"log" json:"log"`
BlockNode BlockNodeConfig `yaml:"blockNode" json:"blockNode"`
Alloy AlloyConfig `yaml:"alloy" json:"alloy"`
Teleport TeleportConfig `yaml:"teleport" json:"teleport"`
}
Config holds the global configuration for the application.
func (Config) IsLocalProfile ¶
IsLocalProfile returns true if the current profile is the local development profile.
type Intent ¶
type Intent struct {
Action ActionType `yaml:"action" json:"action"`
Target TargetType `yaml:"target" json:"target"`
}
Intent defines the desired action to be performed given certain parameters and configuration.
func (*Intent) IsValid ¶
IsValid checks if the Intent is valid based on allowed actions and targets. An intent is considered valid if: - The action is recognized. - The target is recognized. - The action-target combination is allowed.
It returns true if the intent is valid, false otherwise. Even if an intent is valid, it may still be rejected during execution based on current state, configuration, or other factors.
type MachineInputs ¶
func (*MachineInputs) Validate ¶
func (c *MachineInputs) Validate() error
type StringMap ¶
func NewStringMap ¶
func NewStringMap() StringMap
type TargetType ¶
type TargetType string
const ( // TargetMachine represents individual machines/servers TargetMachine TargetType = "machine" // TargetSystem represents the overall system configuration in a machine // This may include multiple applications and services running on the machine TargetSystem TargetType = "system" // TargetApplication represents a single application on the system TargetApplication TargetType = "application" // TargetCluster represents a Kubernetes cluster runnig on the machine TargetCluster TargetType = "cluster" // TargetBlockNode represents a blocknode component of the Hedera network TargetBlockNode TargetType = "blocknode" // TargetConsensusNode represents a consensus node component of the Hedera network TargetConsensusNode TargetType = "consensus" // TargetMirrorNode represents a mirror node component of the Hedera network TargetMirrorNode TargetType = "mirrornode" // TargetRelayNode represents a relay node component of the Hedera network TargetRelayNode TargetType = "relaynode" // TargetOperator represents solo-operator component TargetOperator TargetType = "operator" )
type TeleportConfig ¶
type TeleportConfig struct {
Version string `yaml:"version" json:"version"` // Helm chart version for cluster agent
ValuesFile string `yaml:"valuesFile" json:"valuesFile"` // Path to Helm values file for cluster agent
NodeAgentToken string `yaml:"nodeAgentToken" json:"nodeAgentToken"` // Join token for host-level SSH agent
NodeAgentProxyAddr string `yaml:"nodeAgentProxyAddr" json:"nodeAgentProxyAddr"` // Teleport proxy address (required when NodeAgentToken is set)
}
TeleportConfig represents the `teleport` configuration block for secure access. Teleport configuration for node agent and cluster agent. Node agent: Uses NodeAgentToken and NodeAgentProxyAddr Cluster agent: Uses Version and ValuesFile (passed directly to Helm)
func (TeleportConfig) Validate ¶
func (c TeleportConfig) Validate() error
Validate validates Teleport configuration fields that are set. This performs basic validation without context-specific requirements. Use ValidateClusterAgent() or ValidateNodeAgent() for use-case specific validation.
func (TeleportConfig) ValidateClusterAgent ¶
func (c TeleportConfig) ValidateClusterAgent() error
ValidateClusterAgent validates configuration for the cluster agent.
func (TeleportConfig) ValidateNodeAgent ¶
func (c TeleportConfig) ValidateNodeAgent() error
ValidateNodeAgent validates configuration for the node agent.
type UserInputs ¶
type UserInputs[T any] struct { Common CommonInputs Custom T }
func (*UserInputs[T]) Validate ¶
func (u *UserInputs[T]) Validate() error
Validate validates all user inputs fields to ensure they are safe and secure.
type WeaverPaths ¶
type WeaverPaths struct {
HomeDir string
BinDir string
LogsDir string
UtilsDir string
ConfigDir string
BackupDir string
TempDir string
DownloadsDir string
DiagnosticsDir string
StateDir string
AllDirectories []string
SandboxDir string
SandboxBinDir string
SandboxLocalBinDir string
SandboxDirectories []string // all sandbox related directories
}
func NewWeaverPaths ¶
func NewWeaverPaths(home string) *WeaverPaths
func Paths ¶
func Paths() WeaverPaths
func (WeaverPaths) Clone ¶
func (w WeaverPaths) Clone() *WeaverPaths
Clone returns a deep copy of the WeaverPaths. It is nil-safe and copies slice contents to avoid shared backing arrays.