Use custom types for secret references
This allows us to require that name (and namespace where appropriate) are set at the CRD level. In the case of cluster scoped resources that reference secrets this is less surprising than defaulting to the `default` namespace when the namespace is omitted. Signed-off-by: Nic Cope <negz@rk0n.org>
This commit is contained in:
parent
9f5188e0cb
commit
a2e24876e0
|
@ -39,6 +39,35 @@ const (
|
|||
ResourceCredentialsTokenKey = "token"
|
||||
)
|
||||
|
||||
// NOTE(negz): The below secret references differ from ObjectReference and
|
||||
// LocalObjectReference in that they include only the fields Crossplane needs to
|
||||
// reference a secret, and make those fields required. This reduces ambiguity in
|
||||
// the API for resource authors.
|
||||
|
||||
// A LocalSecretReference is a reference to a secret in the same namespace as
|
||||
// the referencer.
|
||||
type LocalSecretReference struct {
|
||||
// Name of the secret.
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
// A SecretReference is a reference to a secret in an arbitrary namespace.
|
||||
type SecretReference struct {
|
||||
// Name of the secret.
|
||||
Name string `json:"name"`
|
||||
|
||||
// Namespace of the secret.
|
||||
Namespace string `json:"namespace"`
|
||||
}
|
||||
|
||||
// A SecretKeySelector is a reference to a secret key in an arbitrary namespace.
|
||||
type SecretKeySelector struct {
|
||||
SecretReference `json:",inline"`
|
||||
|
||||
// The key to select.
|
||||
Key string `json:"key"`
|
||||
}
|
||||
|
||||
// A ResourceClaimSpec defines the desired state of a resource claim.
|
||||
type ResourceClaimSpec struct {
|
||||
// WriteConnectionSecretToReference specifies the name of a Secret, in the
|
||||
|
@ -47,7 +76,7 @@ type ResourceClaimSpec struct {
|
|||
// include the endpoint, username, and password required to connect to the
|
||||
// managed resource bound to this resource claim.
|
||||
// +optional
|
||||
WriteConnectionSecretToReference corev1.LocalObjectReference `json:"writeConnectionSecretToRef,omitempty"`
|
||||
WriteConnectionSecretToReference *LocalSecretReference `json:"writeConnectionSecretToRef,omitempty"`
|
||||
|
||||
// TODO(negz): Make the below references immutable once set? Doing so means
|
||||
// we don't have to track what provisioner was used to create a resource.
|
||||
|
@ -83,7 +112,7 @@ type ResourceSpec struct {
|
|||
// be written. Connection details frequently include the endpoint, username,
|
||||
// and password required to connect to the managed resource.
|
||||
// +optional
|
||||
WriteConnectionSecretToReference *corev1.ObjectReference `json:"writeConnectionSecretToRef,omitempty"`
|
||||
WriteConnectionSecretToReference *SecretReference `json:"writeConnectionSecretToRef,omitempty"`
|
||||
|
||||
// ClaimReference specifies the resource claim to which this managed
|
||||
// resource will be bound. ClaimReference is set automatically during
|
||||
|
|
|
@ -97,10 +97,29 @@ func (in *ConditionedStatus) DeepCopy() *ConditionedStatus {
|
|||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *LocalSecretReference) DeepCopyInto(out *LocalSecretReference) {
|
||||
*out = *in
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalSecretReference.
|
||||
func (in *LocalSecretReference) DeepCopy() *LocalSecretReference {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(LocalSecretReference)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *ResourceClaimSpec) DeepCopyInto(out *ResourceClaimSpec) {
|
||||
*out = *in
|
||||
out.WriteConnectionSecretToReference = in.WriteConnectionSecretToReference
|
||||
if in.WriteConnectionSecretToReference != nil {
|
||||
in, out := &in.WriteConnectionSecretToReference, &out.WriteConnectionSecretToReference
|
||||
*out = new(LocalSecretReference)
|
||||
**out = **in
|
||||
}
|
||||
if in.ClassReference != nil {
|
||||
in, out := &in.ClassReference, &out.ClassReference
|
||||
*out = new(v1.ObjectReference)
|
||||
|
@ -145,7 +164,7 @@ func (in *ResourceSpec) DeepCopyInto(out *ResourceSpec) {
|
|||
*out = *in
|
||||
if in.WriteConnectionSecretToReference != nil {
|
||||
in, out := &in.WriteConnectionSecretToReference, &out.WriteConnectionSecretToReference
|
||||
*out = new(v1.ObjectReference)
|
||||
*out = new(SecretReference)
|
||||
**out = **in
|
||||
}
|
||||
if in.ClaimReference != nil {
|
||||
|
@ -191,3 +210,34 @@ func (in *ResourceStatus) DeepCopy() *ResourceStatus {
|
|||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *SecretKeySelector) DeepCopyInto(out *SecretKeySelector) {
|
||||
*out = *in
|
||||
out.SecretReference = in.SecretReference
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretKeySelector.
|
||||
func (in *SecretKeySelector) DeepCopy() *SecretKeySelector {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(SecretKeySelector)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *SecretReference) DeepCopyInto(out *SecretReference) {
|
||||
*out = *in
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretReference.
|
||||
func (in *SecretReference) DeepCopy() *SecretReference {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(SecretReference)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
|
|
@ -93,7 +93,7 @@ func NewAPIManagedConnectionPropagator(c client.Client, t runtime.ObjectTyper) *
|
|||
func (a *APIManagedConnectionPropagator) PropagateConnection(ctx context.Context, cm Claim, mg Managed) error {
|
||||
// Either this resource does not expose a connection secret, or this claim
|
||||
// does not want one.
|
||||
if mg.GetWriteConnectionSecretToReference() == nil || cm.GetWriteConnectionSecretToReference().Name == "" {
|
||||
if mg.GetWriteConnectionSecretToReference() == nil || cm.GetWriteConnectionSecretToReference() == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -173,6 +173,7 @@ func TestPropagateConnection(t *testing.T) {
|
|||
uid := types.UID("definitely-a-uuid")
|
||||
cmcsname := "coolclaimsecret"
|
||||
mgcsname := "coolmanagedsecret"
|
||||
mgcsnamespace := "coolns"
|
||||
mgcsdata := map[string][]byte{"cool": []byte("data")}
|
||||
controller := true
|
||||
errBoom := errors.New("boom")
|
||||
|
@ -187,7 +188,9 @@ func TestPropagateConnection(t *testing.T) {
|
|||
ctx: context.Background(),
|
||||
cm: &MockClaim{},
|
||||
mg: &MockManaged{
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{
|
||||
Ref: &v1alpha1.SecretReference{Namespace: mgcsnamespace, Name: mgcsname},
|
||||
},
|
||||
},
|
||||
},
|
||||
want: nil,
|
||||
|
@ -196,7 +199,9 @@ func TestPropagateConnection(t *testing.T) {
|
|||
args: args{
|
||||
ctx: context.Background(),
|
||||
cm: &MockClaim{
|
||||
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{Ref: corev1.LocalObjectReference{Name: mgcsname}},
|
||||
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{
|
||||
Ref: &v1alpha1.LocalSecretReference{Name: mgcsname},
|
||||
},
|
||||
},
|
||||
mg: &MockManaged{},
|
||||
},
|
||||
|
@ -209,10 +214,14 @@ func TestPropagateConnection(t *testing.T) {
|
|||
args: args{
|
||||
ctx: context.Background(),
|
||||
cm: &MockClaim{
|
||||
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{Ref: corev1.LocalObjectReference{Name: cmcsname}},
|
||||
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{
|
||||
Ref: &v1alpha1.LocalSecretReference{Name: cmcsname},
|
||||
},
|
||||
},
|
||||
mg: &MockManaged{
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{
|
||||
Ref: &v1alpha1.SecretReference{Namespace: mgcsnamespace, Name: mgcsname},
|
||||
},
|
||||
},
|
||||
},
|
||||
want: errors.Wrap(errBoom, errGetSecret),
|
||||
|
@ -248,12 +257,16 @@ func TestPropagateConnection(t *testing.T) {
|
|||
args: args{
|
||||
ctx: context.Background(),
|
||||
cm: &MockClaim{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: cmname},
|
||||
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{Ref: corev1.LocalObjectReference{Name: cmcsname}},
|
||||
ObjectMeta: metav1.ObjectMeta{Name: cmname},
|
||||
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{
|
||||
Ref: &v1alpha1.LocalSecretReference{Name: cmcsname},
|
||||
},
|
||||
},
|
||||
mg: &MockManaged{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{
|
||||
Ref: &v1alpha1.SecretReference{Namespace: mgcsnamespace, Name: mgcsname},
|
||||
},
|
||||
},
|
||||
},
|
||||
want: errors.Wrap(errors.New(errSecretConflict), errCreateOrUpdateSecret),
|
||||
|
@ -285,12 +298,16 @@ func TestPropagateConnection(t *testing.T) {
|
|||
args: args{
|
||||
ctx: context.Background(),
|
||||
cm: &MockClaim{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: cmname},
|
||||
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{Ref: corev1.LocalObjectReference{Name: cmcsname}},
|
||||
ObjectMeta: metav1.ObjectMeta{Name: cmname},
|
||||
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{
|
||||
Ref: &v1alpha1.LocalSecretReference{Name: cmcsname},
|
||||
},
|
||||
},
|
||||
mg: &MockManaged{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{
|
||||
Ref: &v1alpha1.SecretReference{Namespace: mgcsnamespace, Name: mgcsname},
|
||||
},
|
||||
},
|
||||
},
|
||||
want: errors.Wrap(errors.New(errSecretConflict), errCreateOrUpdateSecret),
|
||||
|
@ -331,12 +348,16 @@ func TestPropagateConnection(t *testing.T) {
|
|||
args: args{
|
||||
ctx: context.Background(),
|
||||
cm: &MockClaim{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: cmname},
|
||||
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{Ref: corev1.LocalObjectReference{Name: cmcsname}},
|
||||
ObjectMeta: metav1.ObjectMeta{Name: cmname},
|
||||
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{
|
||||
Ref: &v1alpha1.LocalSecretReference{Name: cmcsname},
|
||||
},
|
||||
},
|
||||
mg: &MockManaged{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{
|
||||
Ref: &v1alpha1.SecretReference{Namespace: mgcsnamespace, Name: mgcsname},
|
||||
},
|
||||
},
|
||||
},
|
||||
want: errors.Wrap(errBoom, errUpdateSecret),
|
||||
|
@ -402,12 +423,16 @@ func TestPropagateConnection(t *testing.T) {
|
|||
args: args{
|
||||
ctx: context.Background(),
|
||||
cm: &MockClaim{
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: namespace, Name: cmname, UID: uid},
|
||||
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{Ref: corev1.LocalObjectReference{Name: cmcsname}},
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: namespace, Name: cmname, UID: uid},
|
||||
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{
|
||||
Ref: &v1alpha1.LocalSecretReference{Name: cmcsname},
|
||||
},
|
||||
},
|
||||
mg: &MockManaged{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{
|
||||
Ref: &v1alpha1.SecretReference{Namespace: mgcsnamespace, Name: mgcsname},
|
||||
},
|
||||
},
|
||||
},
|
||||
want: nil,
|
||||
|
|
|
@ -59,15 +59,15 @@ type ManagedResourceReferencer interface {
|
|||
// A LocalConnectionSecretWriterTo may write a connection secret to its own
|
||||
// namespace.
|
||||
type LocalConnectionSecretWriterTo interface {
|
||||
SetWriteConnectionSecretToReference(r corev1.LocalObjectReference)
|
||||
GetWriteConnectionSecretToReference() corev1.LocalObjectReference
|
||||
SetWriteConnectionSecretToReference(r *v1alpha1.LocalSecretReference)
|
||||
GetWriteConnectionSecretToReference() *v1alpha1.LocalSecretReference
|
||||
}
|
||||
|
||||
// A ConnectionSecretWriterTo may write a connection secret to an arbitrary
|
||||
// namespace.
|
||||
type ConnectionSecretWriterTo interface {
|
||||
SetWriteConnectionSecretToReference(r *corev1.ObjectReference)
|
||||
GetWriteConnectionSecretToReference() *corev1.ObjectReference
|
||||
SetWriteConnectionSecretToReference(r *v1alpha1.SecretReference)
|
||||
GetWriteConnectionSecretToReference() *v1alpha1.SecretReference
|
||||
}
|
||||
|
||||
// A Reclaimer may specify a ReclaimPolicy.
|
||||
|
|
|
@ -55,21 +55,23 @@ type MockManagedResourceReferencer struct{ Ref *corev1.ObjectReference }
|
|||
func (m *MockManagedResourceReferencer) SetResourceReference(r *corev1.ObjectReference) { m.Ref = r }
|
||||
func (m *MockManagedResourceReferencer) GetResourceReference() *corev1.ObjectReference { return m.Ref }
|
||||
|
||||
type MockLocalConnectionSecretWriterTo struct{ Ref corev1.LocalObjectReference }
|
||||
type MockLocalConnectionSecretWriterTo struct {
|
||||
Ref *v1alpha1.LocalSecretReference
|
||||
}
|
||||
|
||||
func (m *MockLocalConnectionSecretWriterTo) SetWriteConnectionSecretToReference(r corev1.LocalObjectReference) {
|
||||
func (m *MockLocalConnectionSecretWriterTo) SetWriteConnectionSecretToReference(r *v1alpha1.LocalSecretReference) {
|
||||
m.Ref = r
|
||||
}
|
||||
func (m *MockLocalConnectionSecretWriterTo) GetWriteConnectionSecretToReference() corev1.LocalObjectReference {
|
||||
func (m *MockLocalConnectionSecretWriterTo) GetWriteConnectionSecretToReference() *v1alpha1.LocalSecretReference {
|
||||
return m.Ref
|
||||
}
|
||||
|
||||
type MockConnectionSecretWriterTo struct{ Ref *corev1.ObjectReference }
|
||||
type MockConnectionSecretWriterTo struct{ Ref *v1alpha1.SecretReference }
|
||||
|
||||
func (m *MockConnectionSecretWriterTo) SetWriteConnectionSecretToReference(r *corev1.ObjectReference) {
|
||||
func (m *MockConnectionSecretWriterTo) SetWriteConnectionSecretToReference(r *v1alpha1.SecretReference) {
|
||||
m.Ref = r
|
||||
}
|
||||
func (m *MockConnectionSecretWriterTo) GetWriteConnectionSecretToReference() *corev1.ObjectReference {
|
||||
func (m *MockConnectionSecretWriterTo) GetWriteConnectionSecretToReference() *v1alpha1.SecretReference {
|
||||
return m.Ref
|
||||
}
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ import (
|
|||
"k8s.io/apimachinery/pkg/types"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/crossplaneio/crossplane-runtime/apis/core/v1alpha1"
|
||||
"github.com/crossplaneio/crossplane-runtime/pkg/test"
|
||||
)
|
||||
|
||||
|
@ -164,7 +165,10 @@ func TestAPISecretPublisher(t *testing.T) {
|
|||
args: args{
|
||||
ctx: context.Background(),
|
||||
mg: &MockManaged{
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &v1alpha1.SecretReference{
|
||||
Namespace: mgcsnamespace,
|
||||
Name: mgcsname,
|
||||
}},
|
||||
},
|
||||
c: ConnectionDetails{},
|
||||
},
|
||||
|
@ -184,7 +188,10 @@ func TestAPISecretPublisher(t *testing.T) {
|
|||
args: args{
|
||||
ctx: context.Background(),
|
||||
mg: &MockManaged{
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &v1alpha1.SecretReference{
|
||||
Namespace: mgcsnamespace,
|
||||
Name: mgcsname,
|
||||
}},
|
||||
},
|
||||
c: ConnectionDetails{},
|
||||
},
|
||||
|
@ -216,41 +223,11 @@ func TestAPISecretPublisher(t *testing.T) {
|
|||
args: args{
|
||||
ctx: context.Background(),
|
||||
mg: &MockManaged{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Namespace: mgcsnamespace, Name: mgcsname}},
|
||||
},
|
||||
c: ConnectionDetails(cddata),
|
||||
},
|
||||
want: nil,
|
||||
},
|
||||
"SuccessfulCreateInDefaultNamespace": {
|
||||
fields: fields{
|
||||
client: &test.MockClient{
|
||||
MockGet: test.NewMockGetFn(kerrors.NewNotFound(schema.GroupResource{}, "")),
|
||||
MockCreate: test.NewMockCreateFn(nil, func(got runtime.Object) error {
|
||||
want := &corev1.Secret{}
|
||||
want.SetNamespace(corev1.NamespaceDefault)
|
||||
want.SetName(mgcsname)
|
||||
want.SetOwnerReferences([]metav1.OwnerReference{{
|
||||
Name: mgname,
|
||||
APIVersion: MockGVK(&MockManaged{}).GroupVersion().String(),
|
||||
Kind: MockGVK(&MockManaged{}).Kind,
|
||||
Controller: &controller,
|
||||
}})
|
||||
want.Data = cddata
|
||||
if diff := cmp.Diff(want, got); diff != "" {
|
||||
t.Errorf("-want, +got:\n%s", diff)
|
||||
}
|
||||
return nil
|
||||
}),
|
||||
},
|
||||
typer: MockSchemeWith(&MockManaged{}),
|
||||
},
|
||||
args: args{
|
||||
ctx: context.Background(),
|
||||
mg: &MockManaged{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &v1alpha1.SecretReference{
|
||||
Namespace: mgcsnamespace,
|
||||
Name: mgcsname,
|
||||
}},
|
||||
},
|
||||
c: ConnectionDetails(cddata),
|
||||
},
|
||||
|
@ -261,7 +238,7 @@ func TestAPISecretPublisher(t *testing.T) {
|
|||
client: &test.MockClient{
|
||||
MockGet: func(_ context.Context, n types.NamespacedName, o runtime.Object) error {
|
||||
s := &corev1.Secret{}
|
||||
s.SetNamespace(corev1.NamespaceDefault)
|
||||
s.SetNamespace(mgcsnamespace)
|
||||
s.SetName(mgcsname)
|
||||
s.SetOwnerReferences([]metav1.OwnerReference{{
|
||||
Name: mgname,
|
||||
|
@ -274,7 +251,7 @@ func TestAPISecretPublisher(t *testing.T) {
|
|||
},
|
||||
MockUpdate: test.NewMockUpdateFn(nil, func(got runtime.Object) error {
|
||||
want := &corev1.Secret{}
|
||||
want.SetNamespace(corev1.NamespaceDefault)
|
||||
want.SetNamespace(mgcsnamespace)
|
||||
want.SetName(mgcsname)
|
||||
want.SetOwnerReferences([]metav1.OwnerReference{{
|
||||
Name: mgname,
|
||||
|
@ -294,8 +271,11 @@ func TestAPISecretPublisher(t *testing.T) {
|
|||
args: args{
|
||||
ctx: context.Background(),
|
||||
mg: &MockManaged{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &v1alpha1.SecretReference{
|
||||
Namespace: mgcsnamespace,
|
||||
Name: mgcsname,
|
||||
}},
|
||||
},
|
||||
c: ConnectionDetails(cddata),
|
||||
},
|
||||
|
@ -306,7 +286,7 @@ func TestAPISecretPublisher(t *testing.T) {
|
|||
client: &test.MockClient{
|
||||
MockGet: func(_ context.Context, n types.NamespacedName, o runtime.Object) error {
|
||||
s := &corev1.Secret{}
|
||||
s.SetNamespace(corev1.NamespaceDefault)
|
||||
s.SetNamespace(mgcsnamespace)
|
||||
s.SetName(mgcsname)
|
||||
s.SetOwnerReferences([]metav1.OwnerReference{{
|
||||
Name: mgname,
|
||||
|
@ -320,7 +300,7 @@ func TestAPISecretPublisher(t *testing.T) {
|
|||
},
|
||||
MockUpdate: test.NewMockUpdateFn(nil, func(got runtime.Object) error {
|
||||
want := &corev1.Secret{}
|
||||
want.SetNamespace(corev1.NamespaceDefault)
|
||||
want.SetNamespace(mgcsnamespace)
|
||||
want.SetName(mgcsname)
|
||||
want.SetOwnerReferences([]metav1.OwnerReference{{
|
||||
Name: mgname,
|
||||
|
@ -344,8 +324,11 @@ func TestAPISecretPublisher(t *testing.T) {
|
|||
args: args{
|
||||
ctx: context.Background(),
|
||||
mg: &MockManaged{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
|
||||
ObjectMeta: metav1.ObjectMeta{Name: mgname},
|
||||
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &v1alpha1.SecretReference{
|
||||
Namespace: mgcsnamespace,
|
||||
Name: mgcsname,
|
||||
}},
|
||||
},
|
||||
c: ConnectionDetails(cddata),
|
||||
},
|
||||
|
|
|
@ -60,14 +60,9 @@ type ConnectionSecretOwner interface {
|
|||
// written to 'default' namespace if the ConnectionSecretOwner does not specify
|
||||
// a namespace.
|
||||
func ConnectionSecretFor(o ConnectionSecretOwner, kind schema.GroupVersionKind) *corev1.Secret {
|
||||
ns := o.GetWriteConnectionSecretToReference().Namespace
|
||||
if ns == "" {
|
||||
ns = corev1.NamespaceDefault
|
||||
}
|
||||
|
||||
return &corev1.Secret{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Namespace: ns,
|
||||
Namespace: o.GetWriteConnectionSecretToReference().Namespace,
|
||||
Name: o.GetWriteConnectionSecretToReference().Name,
|
||||
OwnerReferences: []metav1.OwnerReference{meta.AsController(meta.ReferenceTo(o, kind))},
|
||||
},
|
||||
|
|
|
@ -45,14 +45,14 @@ var MockOwnerGVK = schema.GroupVersionKind{
|
|||
|
||||
type MockLocalOwner struct {
|
||||
metav1.ObjectMeta
|
||||
Ref corev1.LocalObjectReference
|
||||
Ref *v1alpha1.LocalSecretReference
|
||||
}
|
||||
|
||||
func (m *MockLocalOwner) GetWriteConnectionSecretToReference() corev1.LocalObjectReference {
|
||||
func (m *MockLocalOwner) GetWriteConnectionSecretToReference() *v1alpha1.LocalSecretReference {
|
||||
return m.Ref
|
||||
}
|
||||
|
||||
func (m *MockLocalOwner) SetWriteConnectionSecretToReference(r corev1.LocalObjectReference) {
|
||||
func (m *MockLocalOwner) SetWriteConnectionSecretToReference(r *v1alpha1.LocalSecretReference) {
|
||||
m.Ref = r
|
||||
}
|
||||
|
||||
|
@ -78,7 +78,7 @@ func TestLocalConnectionSecretFor(t *testing.T) {
|
|||
Name: name,
|
||||
UID: uid,
|
||||
},
|
||||
Ref: corev1.LocalObjectReference{Name: secretName},
|
||||
Ref: &v1alpha1.LocalSecretReference{Name: secretName},
|
||||
},
|
||||
kind: MockOwnerGVK,
|
||||
},
|
||||
|
@ -110,14 +110,14 @@ func TestLocalConnectionSecretFor(t *testing.T) {
|
|||
|
||||
type MockOwner struct {
|
||||
metav1.ObjectMeta
|
||||
Ref *corev1.ObjectReference
|
||||
Ref *v1alpha1.SecretReference
|
||||
}
|
||||
|
||||
func (m *MockOwner) GetWriteConnectionSecretToReference() *corev1.ObjectReference {
|
||||
func (m *MockOwner) GetWriteConnectionSecretToReference() *v1alpha1.SecretReference {
|
||||
return m.Ref
|
||||
}
|
||||
|
||||
func (m *MockOwner) SetWriteConnectionSecretToReference(r *corev1.ObjectReference) {
|
||||
func (m *MockOwner) SetWriteConnectionSecretToReference(r *v1alpha1.SecretReference) {
|
||||
m.Ref = r
|
||||
}
|
||||
|
||||
|
@ -135,7 +135,7 @@ func TestConnectionSecretFor(t *testing.T) {
|
|||
args args
|
||||
want *corev1.Secret
|
||||
}{
|
||||
"SpecifiedNamespace": {
|
||||
"Success": {
|
||||
args: args{
|
||||
o: &MockOwner{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
|
@ -143,7 +143,7 @@ func TestConnectionSecretFor(t *testing.T) {
|
|||
Name: name,
|
||||
UID: uid,
|
||||
},
|
||||
Ref: &corev1.ObjectReference{Namespace: namespace, Name: secretName},
|
||||
Ref: &v1alpha1.SecretReference{Namespace: namespace, Name: secretName},
|
||||
},
|
||||
kind: MockOwnerGVK,
|
||||
},
|
||||
|
@ -162,33 +162,6 @@ func TestConnectionSecretFor(t *testing.T) {
|
|||
Data: map[string][]byte{},
|
||||
},
|
||||
},
|
||||
"DefaultNamespace": {
|
||||
args: args{
|
||||
o: &MockOwner{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Namespace: namespace,
|
||||
Name: name,
|
||||
UID: uid,
|
||||
},
|
||||
Ref: &corev1.ObjectReference{Name: secretName},
|
||||
},
|
||||
kind: MockOwnerGVK,
|
||||
},
|
||||
want: &corev1.Secret{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Namespace: corev1.NamespaceDefault,
|
||||
Name: secretName,
|
||||
OwnerReferences: []metav1.OwnerReference{{
|
||||
APIVersion: MockOwnerGVK.GroupVersion().String(),
|
||||
Kind: MockOwnerGVK.Kind,
|
||||
Name: name,
|
||||
UID: uid,
|
||||
Controller: &controller,
|
||||
}},
|
||||
},
|
||||
Data: map[string][]byte{},
|
||||
},
|
||||
},
|
||||
}
|
||||
for name, tc := range cases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
|
|
Loading…
Reference in New Issue