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 }