Merge pull request #195 from hasheddan/typedrefto
Add TypedReferenceTo meta utility
This commit is contained in:
commit
c8aaffcea5
|
|
@ -27,14 +27,9 @@ import (
|
|||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
)
|
||||
|
||||
/*
|
||||
Prefer taking *corev1.ObjectReference as an argument where possible when
|
||||
adding new functions to this package. It's easier to convert an object to
|
||||
an ObjectReference using ReferenceTo() than it is to make an ObjectReference
|
||||
satisfy metav1.Object.
|
||||
*/
|
||||
"github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
|
||||
)
|
||||
|
||||
// AnnotationKeyExternalName is the key in the annotations map of a resource for
|
||||
// the name of the resource as it appears on provider's systems.
|
||||
|
|
@ -52,6 +47,9 @@ const (
|
|||
|
||||
// ReferenceTo returns an object reference to the supplied object, presumed to
|
||||
// be of the supplied group, version, and kind.
|
||||
// Deprecated: use a more specific reference type, such as TypedReference or
|
||||
// Reference instead of the overly verbose ObjectReference.
|
||||
// See https://github.com/crossplane/crossplane-runtime/issues/49
|
||||
func ReferenceTo(o metav1.Object, of schema.GroupVersionKind) *corev1.ObjectReference {
|
||||
v, k := of.ToAPIVersionAndKind()
|
||||
return &corev1.ObjectReference{
|
||||
|
|
@ -63,8 +61,20 @@ func ReferenceTo(o metav1.Object, of schema.GroupVersionKind) *corev1.ObjectRefe
|
|||
}
|
||||
}
|
||||
|
||||
// TypedReferenceTo returns a typed object reference to the supplied object,
|
||||
// presumed to be of the supplied group, version, and kind.
|
||||
func TypedReferenceTo(o metav1.Object, of schema.GroupVersionKind) *v1alpha1.TypedReference {
|
||||
v, k := of.ToAPIVersionAndKind()
|
||||
return &v1alpha1.TypedReference{
|
||||
APIVersion: v,
|
||||
Kind: k,
|
||||
Name: o.GetName(),
|
||||
UID: o.GetUID(),
|
||||
}
|
||||
}
|
||||
|
||||
// AsOwner converts the supplied object reference to an owner reference.
|
||||
func AsOwner(r *corev1.ObjectReference) metav1.OwnerReference {
|
||||
func AsOwner(r *v1alpha1.TypedReference) metav1.OwnerReference {
|
||||
return metav1.OwnerReference{
|
||||
APIVersion: r.APIVersion,
|
||||
Kind: r.Kind,
|
||||
|
|
@ -75,7 +85,7 @@ func AsOwner(r *corev1.ObjectReference) metav1.OwnerReference {
|
|||
|
||||
// AsController converts the supplied object reference to a controller
|
||||
// reference. You may also consider using metav1.NewControllerRef.
|
||||
func AsController(r *corev1.ObjectReference) metav1.OwnerReference {
|
||||
func AsController(r *v1alpha1.TypedReference) metav1.OwnerReference {
|
||||
c := true
|
||||
ref := AsOwner(r)
|
||||
ref.Controller = &c
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import (
|
|||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
|
||||
"github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
|
||||
"github.com/crossplane/crossplane-runtime/pkg/test"
|
||||
)
|
||||
|
||||
|
|
@ -85,16 +86,58 @@ func TestReferenceTo(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestTypedReferenceTo(t *testing.T) {
|
||||
type args struct {
|
||||
o metav1.Object
|
||||
of schema.GroupVersionKind
|
||||
}
|
||||
tests := map[string]struct {
|
||||
args
|
||||
want *v1alpha1.TypedReference
|
||||
}{
|
||||
"WithTypeMeta": {
|
||||
args: args{
|
||||
o: &corev1.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Namespace: namespace,
|
||||
Name: name,
|
||||
UID: uid,
|
||||
},
|
||||
},
|
||||
of: schema.GroupVersionKind{
|
||||
Group: group,
|
||||
Version: version,
|
||||
Kind: kind,
|
||||
},
|
||||
},
|
||||
want: &v1alpha1.TypedReference{
|
||||
APIVersion: groupVersion,
|
||||
Kind: kind,
|
||||
Name: name,
|
||||
UID: uid,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range tests {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
got := TypedReferenceTo(tc.args.o, tc.args.of)
|
||||
if diff := cmp.Diff(tc.want, got); diff != "" {
|
||||
t.Errorf("TypedReferenceTo(): -want, +got:\n%s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAsOwner(t *testing.T) {
|
||||
tests := map[string]struct {
|
||||
r *corev1.ObjectReference
|
||||
r *v1alpha1.TypedReference
|
||||
want metav1.OwnerReference
|
||||
}{
|
||||
"Successful": {
|
||||
r: &corev1.ObjectReference{
|
||||
r: &v1alpha1.TypedReference{
|
||||
APIVersion: groupVersion,
|
||||
Kind: kind,
|
||||
Namespace: name,
|
||||
Name: name,
|
||||
UID: uid,
|
||||
},
|
||||
|
|
@ -121,14 +164,13 @@ func TestAsController(t *testing.T) {
|
|||
controller := true
|
||||
|
||||
tests := map[string]struct {
|
||||
r *corev1.ObjectReference
|
||||
r *v1alpha1.TypedReference
|
||||
want metav1.OwnerReference
|
||||
}{
|
||||
"Successful": {
|
||||
r: &corev1.ObjectReference{
|
||||
r: &v1alpha1.TypedReference{
|
||||
APIVersion: groupVersion,
|
||||
Kind: kind,
|
||||
Namespace: name,
|
||||
Name: name,
|
||||
UID: uid,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ import (
|
|||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/google/go-cmp/cmp/cmpopts"
|
||||
"github.com/pkg/errors"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/types"
|
||||
|
|
@ -77,7 +76,7 @@ func TestResolve(t *testing.T) {
|
|||
controlled := &fake.Managed{}
|
||||
controlled.SetName(value)
|
||||
meta.SetExternalName(controlled, value)
|
||||
meta.AddControllerReference(controlled, meta.AsController(&corev1.ObjectReference{UID: types.UID("very-unique")}))
|
||||
meta.AddControllerReference(controlled, meta.AsController(&v1alpha1.TypedReference{UID: types.UID("very-unique")}))
|
||||
|
||||
type args struct {
|
||||
ctx context.Context
|
||||
|
|
@ -268,7 +267,7 @@ func TestResolveMultiple(t *testing.T) {
|
|||
controlled := &fake.Managed{}
|
||||
controlled.SetName(value)
|
||||
meta.SetExternalName(controlled, value)
|
||||
meta.AddControllerReference(controlled, meta.AsController(&corev1.ObjectReference{UID: types.UID("very-unique")}))
|
||||
meta.AddControllerReference(controlled, meta.AsController(&v1alpha1.TypedReference{UID: types.UID("very-unique")}))
|
||||
|
||||
type args struct {
|
||||
ctx context.Context
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ func LocalConnectionSecretFor(o LocalConnectionSecretOwner, kind schema.GroupVer
|
|||
ObjectMeta: metav1.ObjectMeta{
|
||||
Namespace: o.GetNamespace(),
|
||||
Name: o.GetWriteConnectionSecretToReference().Name,
|
||||
OwnerReferences: []metav1.OwnerReference{meta.AsController(meta.ReferenceTo(o, kind))},
|
||||
OwnerReferences: []metav1.OwnerReference{meta.AsController(meta.TypedReferenceTo(o, kind))},
|
||||
},
|
||||
Type: SecretTypeConnection,
|
||||
Data: make(map[string][]byte),
|
||||
|
|
@ -141,7 +141,7 @@ func ConnectionSecretFor(o ConnectionSecretOwner, kind schema.GroupVersionKind)
|
|||
ObjectMeta: metav1.ObjectMeta{
|
||||
Namespace: o.GetWriteConnectionSecretToReference().Namespace,
|
||||
Name: o.GetWriteConnectionSecretToReference().Name,
|
||||
OwnerReferences: []metav1.OwnerReference{meta.AsController(meta.ReferenceTo(o, kind))},
|
||||
OwnerReferences: []metav1.OwnerReference{meta.AsController(meta.TypedReferenceTo(o, kind))},
|
||||
},
|
||||
Type: SecretTypeConnection,
|
||||
Data: make(map[string][]byte),
|
||||
|
|
|
|||
Loading…
Reference in New Issue