Documentation
¶
Index ¶
- Constants
- Variables
- func ConvertStringMapToAny(m map[string]string) map[string]any
- func FindNode(node *yaml.Node, key string) (*yaml.Node, error)
- func FlattenMap(input any, prefix string) (map[string]interface{}, error)
- func FlattenMapRecursive(input map[string]any, prefix string, output map[string]any)
- func UpdateMappingValue(node *yaml.Node, key string, newValue any) error
- func UpdateNestedValue(node *yaml.Node, keyPath []string, newValue any) error
- type Config
- func NewConfigDefault(cfs *chartfs.ChartFS, namespace string, appName string) (*Config, error)
- func NewConfigFromBytes(payload []byte, namespace string, appName string) (*Config, error)
- func NewConfigFromFile(cfs *chartfs.ChartFS, configPath string, namespace string, appName string) (*Config, error)
- func (c *Config) ApplyDefaults()
- func (c *Config) DecodeNode() error
- func (c *Config) GetEnabledProducts() Products
- func (c *Config) GetProduct(name string) (*Product, error)
- func (c *Config) MarshalYAML() ([]byte, error)
- func (c *Config) Namespace() string
- func (c *Config) Set(key string, configData any) error
- func (c *Config) SetProduct(name string, spec Product) error
- func (c *Config) String() string
- func (c *Config) UnmarshalYAML(payload []byte) error
- func (c *Config) Validate() error
- type ConfigMapManager
- func (m *ConfigMapManager) Create(ctx context.Context, cfg *Config) error
- func (m *ConfigMapManager) Delete(ctx context.Context) error
- func (m *ConfigMapManager) GetConfig(ctx context.Context) (*Config, error)
- func (m *ConfigMapManager) GetConfigMap(ctx context.Context) (*corev1.ConfigMap, error)
- func (m *ConfigMapManager) Name() string
- func (m *ConfigMapManager) Update(ctx context.Context, cfg *Config) error
- type Product
- type Products
- type Settings
- type Spec
Constants ¶
const Selector = annotations.Config + "=true"
Selector label selector for installer configuration.
Variables ¶
var ( // ErrInvalidConfig indicates the configuration content is invalid. ErrInvalidConfig = errors.New("invalid configuration") // ErrEmptyConfig indicates the configuration file is empty. ErrEmptyConfig = errors.New("empty configuration") // ErrUnmarshalConfig indicates the configuration file structure is invalid. ErrUnmarshalConfig = errors.New("failed to unmarshal configuration") )
var ( // ErrConfigMapNotFound when the configmap isn't created in the cluster. ErrConfigMapNotFound = errors.New("cluster configmap not found") // ErrMultipleConfigMapFound when the label selector find multiple resources. ErrMultipleConfigMapFound = errors.New("multiple cluster configmaps found") // ErrIncompleteConfigMap when the ConfigMap exists, but doesn't contain the // expected payload. ErrIncompleteConfigMap = errors.New("invalid configmap found in the cluster") )
var DefaultRelativeConfigPath = constants.ConfigFilename
DefaultRelativeConfigPath default relative path to YAML configuration file.
Functions ¶
func ConvertStringMapToAny ¶
ConvertStringMapToAny converts a map[string]string to a map[string]any.
func FindNode ¶
FindNode searches for a specific key within a YAML node structure.
It traverses the YAML node structure:
- If the node is a DocumentNode, it unwraps to its first content node and recurses.
- If the node is a MappingNode, it first checks if the key exists directly within the current mapping. If not found, it recursively searches within the values of the current mapping.
- For any other node kind, it returns an error.
Returns the yaml.Node corresponding to the found key's value, or an error if the key is not found, or the node kind is unsupported.
func FlattenMap ¶
FlattenMap flattens a given input into a single-level map. If the input is a map[string]any, it calls FlattenMapRecursive to flatten it, using the provided prefix for keys. If the input is not a map, it treats the entire input as a single value and assigns it to the given prefix.
func FlattenMapRecursive ¶
FlattenMapRecursive recursively flattens a nested map[string]any into a single-level map. Keys are concatenated with dots to represent their original hierarchy ("key path").
func UpdateMappingValue ¶
UpdateMappingValue updates a key's value within a YAML mapping node.
It traverses the YAML node structure:
- If the node is a DocumentNode, it delegates to its first content node. If the DocumentNode is empty, it creates a root mapping node.
- If the node is a MappingNode, it searches for the specified key. If found, it marshals the newValue to YAML and unmarshals it back into a new yaml.Node to preserve type fidelity, then replaces the existing value node. If the key is not found, it returns nil.
- For any other node kind, it returns an error.
func UpdateNestedValue ¶
UpdateNestedValue updates a value deep within a YAML node structure by traversing a given path of keys. The path of keys represents the hierarchy of the yaml.Node structure.
It handles different node kinds and path lengths:
- If the path is empty, it returns an error.
- If the path contains only one key, it delegates to UpdateMappingValue.
- If the node is a DocumentNode, it unwraps to its first content node and recurses.
- If the node is a MappingNode, it iterates through its content to find the first key in the path. If found, it recursively calls itself on the corresponding value node with the rest of the path. If the key is not found, it returns an error.
- For any other node kind, it returns an error, as navigation is not possible.
Types ¶
type Config ¶
type Config struct {
Installer Spec `yaml:"-"` // root configuration for the installer
// contains filtered or unexported fields
}
Config root configuration structure.
func NewConfigDefault ¶
NewConfigDefault returns a new Config instance with default values, i.e. the configuration payload is loading embedded data.
func NewConfigFromBytes ¶
NewConfigFromBytes instantiates a new Config from the bytes payload informed.
func NewConfigFromFile ¶
func NewConfigFromFile( cfs *chartfs.ChartFS, configPath string, namespace string, appName string, ) (*Config, error)
NewConfigFromFile returns a new Config instance based on the informed file.
func (*Config) ApplyDefaults ¶
func (c *Config) ApplyDefaults()
ApplyDefaults applies default values to the configuration.
func (*Config) DecodeNode ¶
DecodeNode returns a struct converted from *yaml.Node.
func (*Config) GetEnabledProducts ¶
GetEnabledProducts returns a map of enabled products.
func (*Config) GetProduct ¶
GetProduct returns a product by name, or an error if the product is not found.
func (*Config) MarshalYAML ¶
MarshalYAML marshals the Config into a YAML byte array.
func (*Config) SetProduct ¶
SetProduct updates an existing product specification in the configuration. It searches for a product by its name and, if found, replaces its specification with the provided `spec`. The configuration is then re-decoded to reflect the changes.
func (*Config) UnmarshalYAML ¶
UnmarshalYAML Un-marshals the YAML payload into the Config struct, checking the validity of the configuration.
type ConfigMapManager ¶
type ConfigMapManager struct {
// contains filtered or unexported fields
}
ConfigMapManager the actor responsible for managing installer configuration in the cluster.
func NewConfigMapManager ¶
func NewConfigMapManager(kube k8s.Interface, appName string) *ConfigMapManager
NewConfigMapManager instantiates the ConfigMapManager. The appName parameter is used to generate the ConfigMap name as "{appName}-config" and, with hyphens replaced by underscores, as the YAML root key for config decoding.
func (*ConfigMapManager) Create ¶
func (m *ConfigMapManager) Create(ctx context.Context, cfg *Config) error
Create Bootstrap a ConfigMap with the provided configuration.
func (*ConfigMapManager) Delete ¶
func (m *ConfigMapManager) Delete(ctx context.Context) error
Delete find and delete the ConfigMap from the cluster.
func (*ConfigMapManager) GetConfig ¶
func (m *ConfigMapManager) GetConfig(ctx context.Context) (*Config, error)
GetConfig retrieves configuration from a cluster's ConfigMap.
func (*ConfigMapManager) GetConfigMap ¶
GetConfigMap retrieves the ConfigMap from the cluster, checking if a single resource is present.
func (*ConfigMapManager) Name ¶
func (m *ConfigMapManager) Name() string
Name returns the ConfigMap name.
type Product ¶
type Product struct {
// Name of the product.
Name string `yaml:"name"`
// Enabled product toggle.
Enabled bool `yaml:"enabled"`
// Namespace target namespace for product's dependency (Helm chart). If empty,
// it defaults to the installer's namespace.
Namespace *string `yaml:"namespace,omitempty"`
// Properties contains the product specific configuration.
Properties map[string]interface{} `yaml:"properties"`
}
ProductSpec contains the configuration for a specific product.
func (*Product) GetNamespace ¶
GetNamespace returns the product namespace, or an empty string if not set.
type Products ¶
type Products []Product
ProductSpec represents a map of product name and specification.