diff --git a/go.mod b/go.mod index 0fe5534..9c895d1 100644 --- a/go.mod +++ b/go.mod @@ -3,16 +3,18 @@ module github.com/cloudogu/blueprint-lib go 1.23.4 require ( + github.com/Masterminds/semver/v3 v3.3.0 github.com/cloudogu/ces-commons-lib v0.2.0 github.com/cloudogu/cesapp-lib v0.18.0 github.com/cloudogu/k8s-blueprint-operator/v2 v2.2.2 + github.com/cloudogu/k8s-registry-lib v0.5.1 github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.10.0 + golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c + k8s.io/apimachinery v0.31.2 ) require ( - github.com/Masterminds/semver/v3 v3.3.0 // indirect - github.com/cloudogu/k8s-registry-lib v0.5.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/eapache/go-resiliency v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect @@ -21,9 +23,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/x448/float16 v0.8.4 // indirect - golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect golang.org/x/sys v0.29.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apimachinery v0.31.2 // indirect ) diff --git a/v2/component.go b/v2/component.go index ee8b76b..c4a4162 100644 --- a/v2/component.go +++ b/v2/component.go @@ -1,11 +1,7 @@ package v2 import ( - "errors" - "fmt" - "github.com/Masterminds/semver/v3" - "github.com/cloudogu/k8s-blueprint-operator/v2/pkg/domain/ecosystem" ) // Component represents a CES component (e.g. operators), its version, and the installation state in which it is supposed to be @@ -19,19 +15,5 @@ type Component struct { // TargetState defines a state of installation of this package. Optional field, but defaults to "TargetStatePresent" TargetState TargetState // DeployConfig defines generic properties for the component. This field is optional. - DeployConfig ecosystem.DeployConfig -} - -// Validate checks if the component is semantically correct. -func (component *Component) Validate() error { - nameError := component.Name.Validate() - - var versionErr error - if component.TargetState == TargetStatePresent { - if component.Version == nil { - versionErr = fmt.Errorf("version of component %q must not be empty", component.Name) - } - } - - return errors.Join(versionErr, nameError) + DeployConfig map[string]interface{} } diff --git a/v2/component_test.go b/v2/component_test.go deleted file mode 100644 index b3283be..0000000 --- a/v2/component_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package v2 - -import ( - "testing" - - "github.com/Masterminds/semver/v3" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/cloudogu/cesapp-lib/core" -) - -var ( - compVersion123 = semver.MustParse("1.2.3") - version123, _ = core.ParseVersion("1.2.3") -) - -func TestComponent_Validate(t *testing.T) { - t.Run("errorOnMissingComponentVersion", func(t *testing.T) { - component := Component{Name: testComponentName, TargetState: TargetStatePresent} - - err := component.Validate() - - require.Error(t, err) - assert.Contains(t, err.Error(), `version of component "k8s/my-component" must not be empty`) - }) - - t.Run("errorOnEmptyComponentVersion", func(t *testing.T) { - component := Component{Name: testComponentName, Version: nil, TargetState: TargetStatePresent} - - err := component.Validate() - - require.Error(t, err) - assert.Contains(t, err.Error(), "version of component \"k8s/my-component\" must not be empty") - }) - - t.Run("errorOnMissingComponentName", func(t *testing.T) { - component := Component{Version: compVersion123, TargetState: TargetStatePresent} - - err := component.Validate() - - require.Error(t, err) - assert.Contains(t, err.Error(), "component name must not be empty") - }) - - t.Run("errorOnEmptyComponentNamespace", func(t *testing.T) { - component := Component{Name: v2.QualifiedComponentName{Namespace: "", SimpleName: "test"}, Version: compVersion123, TargetState: TargetStatePresent} - err := component.Validate() - - require.Error(t, err) - assert.Contains(t, err.Error(), "namespace of component \"test\" must not be empty") - }) - - t.Run("errorOnEmptyComponentName", func(t *testing.T) { - component := Component{Name: v2.QualifiedComponentName{Namespace: "k8s"}, Version: compVersion123, TargetState: TargetStatePresent} - - err := component.Validate() - - require.Error(t, err) - assert.Contains(t, err.Error(), "component name must not be empty") - }) - - t.Run("emptyComponentStateDefaultsToPresent", func(t *testing.T) { - component := Component{Name: testComponentName, Version: compVersion123} - - err := component.Validate() - - require.NoError(t, err) - assert.Equal(t, TargetState(TargetStatePresent), component.TargetState) - }) - - t.Run("missingComponentVersionOkayForAbsent", func(t *testing.T) { - component := Component{Name: testComponentName, TargetState: TargetStateAbsent} - - err := component.Validate() - - require.NoError(t, err) - }) -}