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 (c *Config) DecodeNode() error
- func (c *Config) EnableDisableProduct(name string, enabled bool) (*Config, error)
- func (c *Config) GetEnabledProducts() Products
- func (c *Config) GetProduct(name string) (*Product, error)
- func (c *Config) MarshalYAML() ([]byte, error)
- 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) Update(ctx context.Context, cfg *Config) error
- type Product
- type Products
- type Settings
- type Spec
Constants ¶
const ( // Filename the default Filename = "config.yaml" // Label label selector to find the cluster's installer configuration. Label = "tssc.redhat-appstudio.github.com/config" // Name name of the installer's configuration ConfigMap. Name = "tssc-config" )
const ( // DeveloperHub Red Hat Developer Hub (RHDH). DeveloperHub = "Developer Hub" // OpenShiftPipelines OpenShift Pipelines. OpenShiftPipelines = "OpenShift Pipelines" )
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 = fmt.Sprintf("installer/%s", Filename)
DefaultRelativeConfigPath default relative path to YAML configuration file.
Functions ¶
func ConvertStringMapToAny ¶ added in v1.8.0
ConvertStringMapToAny converts a map[string]string to a map[string]any.
func FindNode ¶ added in v1.8.0
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 ¶ added in v1.8.0
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 ¶ added in v1.8.0
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 ¶ added in v1.8.0
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 ¶ added in v1.8.0
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:"tssc"` // 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 ¶
NewConfigFromFile returns a new Config instance based on the informed file.
func (*Config) DecodeNode ¶ added in v1.8.0
DecodeNode returns a struct converted from *yaml.Node
func (*Config) EnableDisableProduct ¶ added in v1.8.0
EnableDisableProduct enables or disables a product by its name in the configuration. It searches for the product and updates its 'Enabled' field accordingly. The updated configuration is then returned.
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 ¶ added in v1.8.0
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.Kube) *ConfigMapManager
NewConfigMapManager instantiates the ConfigMapManager.
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.
type Product ¶
type Product struct {
// Name of the product.
Name string `yaml:"name"`
// Enabled product toggle.
Enabled bool `yaml:"enabled"`
// Namespace target namespace for the product, which may involve different
// Helm charts targeting the specific product namespace, while the chart
// target is deployed in a different 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.
type Settings ¶
type Settings map[string]interface{}
Settings represents a map of configuration settings.
type Spec ¶
type Spec struct {
// Namespace installer's namespace, where the installer's resources will be
// deployed. Note, Helm charts deployed by the installer are likely to use a
// different namespace.
Namespace string `yaml:"namespace"`
// Settings contains the configuration for the installer settings.
Settings Settings `yaml:"settings"`
// Products contains the configuration for the installer products.
Products Products `yaml:"products"`
}
Spec contains all configuration sections.