Skip to content

Commit b107efe

Browse files
committed
Convert package metadata to v1 once
We need to handle package metadata that might be v1alpha1 or v1beta1 by converting it to v1. We were doing this twice when resolving dependencies in the lock - one on the caller side and once inside the implementation. Now we only do it on the caller side. Signed-off-by: Nic Cope <[email protected]>
1 parent 07e8e78 commit b107efe

File tree

7 files changed

+20
-35
lines changed

7 files changed

+20
-35
lines changed

apis/pkg/meta/v1/interfaces.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ limitations under the License.
1616

1717
package v1
1818

19+
import (
20+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21+
runtime "k8s.io/apimachinery/pkg/runtime"
22+
)
23+
1924
var (
2025
_ Pkg = &Configuration{}
2126
_ Pkg = &Provider{}
@@ -25,6 +30,9 @@ var (
2530
// Pkg is a description of a Crossplane package.
2631
// +k8s:deepcopy-gen=false
2732
type Pkg interface {
33+
runtime.Object
34+
metav1.Object
35+
2836
GetCrossplaneConstraints() *CrossplaneConstraints
2937
GetDependencies() []Dependency
3038
}

apis/pkg/meta/v1/zz_generated.deepcopy.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/controller/pkg/revision/dependency.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"github.com/google/go-containerregistry/pkg/name"
2626
conregv1 "github.com/google/go-containerregistry/pkg/v1"
2727
kerrors "k8s.io/apimachinery/pkg/api/errors"
28-
"k8s.io/apimachinery/pkg/runtime"
2928
"k8s.io/apimachinery/pkg/runtime/schema"
3029
"k8s.io/apimachinery/pkg/types"
3130
"k8s.io/utils/ptr"
@@ -54,7 +53,7 @@ const (
5453

5554
// DependencyManager is a lock on packages.
5655
type DependencyManager interface {
57-
Resolve(ctx context.Context, pkg runtime.Object, pr v1.PackageRevision) (found, installed, invalid int, err error)
56+
Resolve(ctx context.Context, meta pkgmetav1.Pkg, pr v1.PackageRevision) (found, installed, invalid int, err error)
5857
RemoveSelf(ctx context.Context, pr v1.PackageRevision) error
5958
}
6059

@@ -75,20 +74,15 @@ func NewPackageDependencyManager(c client.Client, nd dag.NewDAGFn, pkgType schem
7574
}
7675

7776
// Resolve resolves package dependencies.
78-
func (m *PackageDependencyManager) Resolve(ctx context.Context, meta runtime.Object, pr v1.PackageRevision) (found, installed, invalid int, err error) { //nolint:gocognit // TODO(negz): Can this be refactored for less complexity?
77+
func (m *PackageDependencyManager) Resolve(ctx context.Context, meta pkgmetav1.Pkg, pr v1.PackageRevision) (found, installed, invalid int, err error) { //nolint:gocognit // TODO(negz): Can this be refactored for less complexity?
7978
// If we are inactive, we don't need to resolve dependencies.
8079
if pr.GetDesiredState() == v1.PackageRevisionInactive {
8180
return 0, 0, 0, nil
8281
}
8382

84-
pack, ok := xpkg.TryConvertToPkg(meta, &pkgmetav1.Provider{}, &pkgmetav1.Function{}, &pkgmetav1.Configuration{})
85-
if !ok {
86-
return found, installed, invalid, errors.New(errNotMeta)
87-
}
88-
8983
// Copy package dependencies into Lock Dependencies.
90-
sources := make([]v1beta1.Dependency, len(pack.GetDependencies()))
91-
for i, dep := range pack.GetDependencies() {
84+
sources := make([]v1beta1.Dependency, len(meta.GetDependencies()))
85+
for i, dep := range meta.GetDependencies() {
9286
pdep := v1beta1.Dependency{}
9387
switch {
9488
// If the GVK and package are specified explicitly they take precedence.

internal/controller/pkg/revision/dependency_test.go

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
"github.com/google/go-cmp/cmp"
2424
kerrors "k8s.io/apimachinery/pkg/api/errors"
2525
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26-
"k8s.io/apimachinery/pkg/runtime"
2726
"k8s.io/apimachinery/pkg/runtime/schema"
2827
"k8s.io/utils/ptr"
2928
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -46,7 +45,7 @@ func TestResolve(t *testing.T) {
4645

4746
type args struct {
4847
dep *PackageDependencyManager
49-
meta runtime.Object
48+
meta pkgmetav1.Pkg
5049
pr v1.PackageRevision
5150
}
5251

@@ -75,21 +74,6 @@ func TestResolve(t *testing.T) {
7574
},
7675
want: want{},
7776
},
78-
"ErrNotMeta": {
79-
reason: "Should return error if not a valid package meta type.",
80-
args: args{
81-
dep: &PackageDependencyManager{},
82-
meta: &v1.Configuration{},
83-
pr: &v1.ConfigurationRevision{
84-
Spec: v1.PackageRevisionSpec{
85-
DesiredState: v1.PackageRevisionActive,
86-
},
87-
},
88-
},
89-
want: want{
90-
err: errors.New(errNotMeta),
91-
},
92-
},
9377
"ErrGetLock": {
9478
reason: "Should return error if we cannot get lock.",
9579
args: args{

internal/controller/pkg/revision/fuzz_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ func FuzzRevisionControllerPackageHandling(f *testing.F) {
123123
if err := linter.Lint(pkg); err != nil {
124124
return
125125
}
126-
pkgMeta, _ := xpkg.TryConvert(pkg.GetMeta()[0], &pkgmetav1.Provider{}, &pkgmetav1.Configuration{})
126+
pkgMeta, _ := xpkg.TryConvertToPkg(pkg.GetMeta()[0], &pkgmetav1.Provider{}, &pkgmetav1.Configuration{})
127127
c, err := getFuzzMockClient(ff)
128128
if err != nil {
129129
return

internal/controller/pkg/revision/reconciler.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import (
2828
appsv1 "k8s.io/api/apps/v1"
2929
corev1 "k8s.io/api/core/v1"
3030
kerrors "k8s.io/apimachinery/pkg/api/errors"
31-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3231
"k8s.io/apimachinery/pkg/types"
3332
"k8s.io/client-go/kubernetes"
3433
ctrl "sigs.k8s.io/controller-runtime"
@@ -804,11 +803,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (reco
804803
return reconcile.Result{}, err
805804
}
806805

807-
pkgMeta, _ := xpkg.TryConvert(pkg.GetMeta()[0], &pkgmetav1.Provider{}, &pkgmetav1.Configuration{}, &pkgmetav1.Function{})
806+
pkgMeta, _ := xpkg.TryConvertToPkg(pkg.GetMeta()[0], &pkgmetav1.Provider{}, &pkgmetav1.Configuration{}, &pkgmetav1.Function{})
808807

809-
pmo := pkgMeta.(metav1.Object) //nolint:forcetypeassert // Will always be metav1.Object.
810-
meta.AddLabels(pr, pmo.GetLabels())
811-
meta.AddAnnotations(pr, pmo.GetAnnotations())
808+
meta.AddLabels(pr, pkgMeta.GetLabels())
809+
meta.AddAnnotations(pr, pkgMeta.GetAnnotations())
812810
if err := r.client.Update(ctx, pr); err != nil {
813811
if kerrors.IsConflict(err) {
814812
return reconcile.Result{Requeue: true}, nil

internal/controller/pkg/revision/reconciler_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import (
4444
"github.com/crossplane/crossplane-runtime/pkg/resource/fake"
4545
"github.com/crossplane/crossplane-runtime/pkg/test"
4646

47+
pkgmetav1 "github.com/crossplane/crossplane/apis/pkg/meta/v1"
4748
v1 "github.com/crossplane/crossplane/apis/pkg/v1"
4849
"github.com/crossplane/crossplane/internal/features"
4950
verfake "github.com/crossplane/crossplane/internal/version/fake"
@@ -154,7 +155,7 @@ func NewMockRemoveSelfFn(err error) func() error {
154155
return func() error { return err }
155156
}
156157

157-
func (m *MockDependencyManager) Resolve(_ context.Context, _ runtime.Object, _ v1.PackageRevision) (int, int, int, error) {
158+
func (m *MockDependencyManager) Resolve(_ context.Context, _ pkgmetav1.Pkg, _ v1.PackageRevision) (int, int, int, error) {
158159
return m.MockResolve()
159160
}
160161

0 commit comments

Comments
 (0)