plugin-barman-cloud/internal/cnpgi/operator/config/config.go
Leonardo Cecchi 2f62d539c9
feat: sidecar role and rolebinding (#23)
Signed-off-by: Leonardo Cecchi <leonardo.cecchi@enterprisedb.com>
2024-10-02 15:03:07 +02:00

72 lines
1.7 KiB
Go

package config
import (
"strings"
cnpgv1 "github.com/cloudnative-pg/cloudnative-pg/api/v1"
"github.com/cloudnative-pg/cnpg-i-machinery/pkg/pluginhelper/common"
"github.com/cloudnative-pg/plugin-barman-cloud/internal/cnpgi/metadata"
)
// ConfigurationError represents a mistake in the plugin configuration
type ConfigurationError struct {
messages []string
}
// Error implements the error interface
func (e *ConfigurationError) Error() string {
return strings.Join(e.messages, ",")
}
// NewConfigurationError creates a new empty configuration error
func NewConfigurationError() *ConfigurationError {
return &ConfigurationError{}
}
// WithMessage adds a new error message to a potentially empty
// ConfigurationError
func (e *ConfigurationError) WithMessage(msg string) *ConfigurationError {
if e == nil {
return &ConfigurationError{
messages: []string{msg},
}
}
return &ConfigurationError{
messages: append(e.messages, msg),
}
}
// IsEmpty returns true if there's no error messages
func (e *ConfigurationError) IsEmpty() bool {
return len(e.messages) == 0
}
// PluginConfiguration is the configuration of the plugin
type PluginConfiguration struct {
BarmanObjectName string
}
// NewFromCluster extracts the configuration from the cluster
func NewFromCluster(cluster *cnpgv1.Cluster) (*PluginConfiguration, error) {
helper := common.NewPlugin(
*cluster,
metadata.PluginName,
)
result := &PluginConfiguration{
BarmanObjectName: helper.Parameters["barmanObjectName"],
}
err := NewConfigurationError()
if len(result.BarmanObjectName) == 0 {
err = err.WithMessage("Missing barmanObjectName parameter")
}
if err.IsEmpty() {
return result, nil
}
return result, err
}