Skip to content

Commit 96a15aa

Browse files
authored
Merge pull request #1022 from haarchri/feature/s3-resolvers
added s3 resolvers for queueArn, replicaKmsKeyId, kmsMasterKeyId, crossplane:generate:reference
2 parents 688f65f + c9a8b38 commit 96a15aa

9 files changed

Lines changed: 337 additions & 97 deletions

apis/notification/v1alpha1/referencers.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,20 @@ import (
2323
"sigs.k8s.io/controller-runtime/pkg/client"
2424

2525
"github.com/crossplane/crossplane-runtime/pkg/reference"
26+
resource "github.com/crossplane/crossplane-runtime/pkg/resource"
2627
)
2728

29+
// SNSTopicARN returns a function that returns the ARN of the given SNS Topic.
30+
func SNSTopicARN() reference.ExtractValueFn {
31+
return func(mg resource.Managed) string {
32+
r, ok := mg.(*SNSTopic)
33+
if !ok {
34+
return ""
35+
}
36+
return r.Status.AtProvider.ARN
37+
}
38+
}
39+
2840
// ResolveReferences for SNS Subscription managed type
2941
func (mg *SNSSubscription) ResolveReferences(ctx context.Context, c client.Reader) error {
3042
r := reference.NewAPIResolver(c, mg)

apis/s3/v1beta1/loggingConfiguration_types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type LoggingConfiguration struct {
2626
// At least one of targetBucket, targetBucketRef or targetBucketSelector is
2727
// required.
2828
// +optional
29+
// +crossplane:generate:reference:type=Bucket
2930
TargetBucket *string `json:"targetBucket,omitempty"`
3031

3132
// TargetBucketRef references an S3Bucket to retrieve its name

apis/s3/v1beta1/notificationConfiguration_types.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,16 @@ type QueueConfiguration struct {
135135
// publishes a message when it detects events of the specified type.
136136
//
137137
// QueueArn is a required field
138+
// +crossplane:generate:reference:type=github.com/crossplane/provider-aws/apis/sqs/v1beta1.Queue
138139
QueueArn string `json:"queueArn"`
140+
141+
// QueueArnRef references an Queue to retrieve its ARN
142+
// +optional
143+
QueueArnRef *xpv1.Reference `json:"queueArnRef,omitempty"`
144+
145+
// QueueArnSelector selects a reference to an Queue to retrieve its ARN
146+
// +optional
147+
QueueArnSelector *xpv1.Selector `json:"queueArnSelector,omitempty"`
139148
}
140149

141150
// TopicConfiguration specifies the configuration for publication of messages
@@ -165,6 +174,8 @@ type TopicConfiguration struct {
165174
// publishes a message when it detects events of the specified type.
166175
// At least one of topicArn, topicArnRef or topicSelector is required.
167176
// +optional
177+
// +crossplane:generate:reference:type=github.com/crossplane/provider-aws/apis/notification/v1alpha1.SNSTopic
178+
// +crossplane:generate:reference:extractor=github.com/crossplane/provider-aws/apis/notification/v1alpha1.SNSTopicARN()
168179
TopicArn *string `json:"topicArn,omitempty"`
169180

170181
// TopicArnRef references an SNS Topic to retrieve its Arn

apis/s3/v1beta1/referencers.go

Lines changed: 2 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,10 @@ limitations under the License.
1717
package v1beta1
1818

1919
import (
20-
"context"
21-
22-
"github.com/pkg/errors"
23-
"sigs.k8s.io/controller-runtime/pkg/client"
24-
25-
"github.com/crossplane/crossplane-runtime/pkg/reference"
26-
"github.com/crossplane/crossplane-runtime/pkg/resource"
27-
28-
"github.com/crossplane/provider-aws/apis/iam/v1beta1"
29-
"github.com/crossplane/provider-aws/apis/notification/v1alpha1"
20+
reference "github.com/crossplane/crossplane-runtime/pkg/reference"
21+
resource "github.com/crossplane/crossplane-runtime/pkg/resource"
3022
)
3123

32-
// SNSTopicARN returns a function that returns the ARN of the given SNS Topic.
33-
func SNSTopicARN() reference.ExtractValueFn {
34-
return func(mg resource.Managed) string {
35-
r, ok := mg.(*v1alpha1.SNSTopic)
36-
if !ok {
37-
return ""
38-
}
39-
return r.Status.AtProvider.ARN
40-
}
41-
}
42-
4324
// BucketARN returns a function that returns the ARN of the given S3 Bucket
4425
func BucketARN() reference.ExtractValueFn {
4526
return func(mg resource.Managed) string {
@@ -50,79 +31,3 @@ func BucketARN() reference.ExtractValueFn {
5031
return r.Status.AtProvider.ARN
5132
}
5233
}
53-
54-
// ResolveReferences of this Bucket
55-
func (mg *Bucket) ResolveReferences(ctx context.Context, c client.Reader) error { // nolint:gocyclo
56-
r := reference.NewAPIResolver(c, mg)
57-
// Resolve spec.forProvider.notificationConfiguration.topicConfigurations[].topicArn
58-
// TODO - need a way to extract arbitrary ARNs from resources - for the
59-
// topic we are missing a lot of information
60-
if mg.Spec.ForProvider.NotificationConfiguration != nil {
61-
for i, v := range mg.Spec.ForProvider.NotificationConfiguration.TopicConfigurations {
62-
rsp, err := r.Resolve(ctx, reference.ResolutionRequest{
63-
CurrentValue: reference.FromPtrValue(v.TopicArn),
64-
Reference: v.TopicArnRef,
65-
Selector: v.TopicArnSelector,
66-
To: reference.To{Managed: &v1alpha1.SNSTopic{}, List: &v1alpha1.SNSTopicList{}},
67-
Extract: SNSTopicARN(),
68-
})
69-
if err != nil {
70-
return errors.Wrapf(err, "spec.forProvider.notificationConfiguration.topicConfigurations[%d].topicArn", i)
71-
}
72-
mg.Spec.ForProvider.NotificationConfiguration.TopicConfigurations[i].TopicArn = reference.ToPtrValue(rsp.ResolvedValue)
73-
mg.Spec.ForProvider.NotificationConfiguration.TopicConfigurations[i].TopicArnRef = rsp.ResolvedReference
74-
}
75-
}
76-
77-
// Resolve spec.forProvider.loggingConfiguration.targetBucket
78-
if mg.Spec.ForProvider.LoggingConfiguration != nil {
79-
rsp, err := r.Resolve(ctx, reference.ResolutionRequest{
80-
CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.LoggingConfiguration.TargetBucket),
81-
Reference: mg.Spec.ForProvider.LoggingConfiguration.TargetBucketRef,
82-
Selector: mg.Spec.ForProvider.LoggingConfiguration.TargetBucketSelector,
83-
To: reference.To{Managed: &Bucket{}, List: &BucketList{}},
84-
Extract: reference.ExternalName(),
85-
})
86-
if err != nil {
87-
return errors.Wrap(err, "spec.forProvider.loggingConfiguration.targetBucket")
88-
}
89-
mg.Spec.ForProvider.LoggingConfiguration.TargetBucket = reference.ToPtrValue(rsp.ResolvedValue)
90-
mg.Spec.ForProvider.LoggingConfiguration.TargetBucketRef = rsp.ResolvedReference
91-
}
92-
93-
// Resolve spec.forProvider.replicationConfiguration.role
94-
if mg.Spec.ForProvider.ReplicationConfiguration != nil {
95-
rsp, err := r.Resolve(ctx, reference.ResolutionRequest{
96-
CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ReplicationConfiguration.Role),
97-
Reference: mg.Spec.ForProvider.ReplicationConfiguration.RoleRef,
98-
Selector: mg.Spec.ForProvider.ReplicationConfiguration.RoleSelector,
99-
To: reference.To{Managed: &v1beta1.Role{}, List: &v1beta1.RoleList{}},
100-
Extract: v1beta1.RoleARN(),
101-
})
102-
if err != nil {
103-
return errors.Wrap(err, "spec.forProvider.replicationConfiguration.role")
104-
}
105-
mg.Spec.ForProvider.ReplicationConfiguration.Role = reference.ToPtrValue(rsp.ResolvedValue)
106-
mg.Spec.ForProvider.ReplicationConfiguration.RoleRef = rsp.ResolvedReference
107-
}
108-
109-
// Resolve spec.forProvider.replicationConfiguration.rules[*].bucket
110-
if mg.Spec.ForProvider.ReplicationConfiguration != nil {
111-
for i, v := range mg.Spec.ForProvider.ReplicationConfiguration.Rules {
112-
rsp, err := r.Resolve(ctx, reference.ResolutionRequest{
113-
CurrentValue: reference.FromPtrValue(v.Destination.Bucket),
114-
Reference: v.Destination.BucketRef,
115-
Selector: v.Destination.BucketSelector,
116-
To: reference.To{Managed: &Bucket{}, List: &BucketList{}},
117-
Extract: BucketARN(),
118-
})
119-
if err != nil {
120-
return errors.Wrapf(err, "spec.forProvider.replicationConfiguration.rules[%d].bucket", i)
121-
}
122-
mg.Spec.ForProvider.ReplicationConfiguration.Rules[i].Destination.Bucket = reference.ToPtrValue(rsp.ResolvedValue)
123-
mg.Spec.ForProvider.ReplicationConfiguration.Rules[i].Destination.BucketRef = rsp.ResolvedReference
124-
}
125-
}
126-
127-
return nil
128-
}

apis/s3/v1beta1/replicationConfiguration_types.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ type ReplicationConfiguration struct {
3030
//
3131
// At least one of role, roleRef or roleSelector fields is required.
3232
// +optional
33+
// +crossplane:generate:reference:type=github.com/crossplane/provider-aws/apis/iam/v1beta1.Role
34+
// +crossplane:generate:reference:extractor=github.com/crossplane/provider-aws/apis/iam/v1beta1.RoleARN()
3335
Role *string `json:"role,omitempty"`
3436

3537
// RoleRef references an IAMRole to retrieve its Name
@@ -151,6 +153,8 @@ type Destination struct {
151153
// store the results.
152154
// At least one of bucket, bucketRef or bucketSelector is required.
153155
// +optional
156+
// +crossplane:generate:reference:type=Bucket
157+
// +crossplane:generate:reference:extractor=BucketARN()
154158
Bucket *string `json:"bucket,omitempty"`
155159

156160
// BucketRef references a Bucket to retrieve its Name
@@ -205,7 +209,16 @@ type EncryptionConfiguration struct {
205209
// supports symmetric customer managed CMKs. For more information, see Using
206210
// Symmetric and Asymmetric Keys (https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)
207211
// in the AWS Key Management Service Developer Guide.
212+
// +crossplane:generate:reference:type=github.com/crossplane/provider-aws/apis/kms/v1alpha1.Key
208213
ReplicaKmsKeyID *string `json:"replicaKmsKeyId"`
214+
215+
// ReplicaKmsKeyIDRef references an KMSKey to retrieve its ID
216+
// +optional
217+
ReplicaKmsKeyIDRef *xpv1.Reference `json:"replicaKmsKeyIdRef,omitempty"`
218+
219+
// ReplicaKmsKeyIDSelector selects a reference to an KMSKey to retrieve its ID
220+
// +optional
221+
ReplicaKmsKeyIDSelector *xpv1.Selector `json:"replicaKmsKeyIdSelector,omitempty"`
209222
}
210223

211224
// Metrics specifies replication metrics-related settings enabling metrics

apis/s3/v1beta1/serverSideEncryption_types.go

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

1717
package v1beta1
1818

19+
import xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1"
20+
1921
// ServerSideEncryptionConfiguration specifies the default server-side-encryption configuration.
2022
type ServerSideEncryptionConfiguration struct {
2123
// Container for information about a particular server-side encryption configuration
@@ -54,8 +56,17 @@ type ServerSideEncryptionByDefault struct {
5456
// information, see Using Symmetric and Asymmetric Keys (https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)
5557
// in the AWS Key Management Service Developer Guide.
5658
// +optional
59+
// +crossplane:generate:reference:type=github.com/crossplane/provider-aws/apis/kms/v1alpha1.Key
5760
KMSMasterKeyID *string `json:"kmsMasterKeyId,omitempty"`
5861

62+
// KMSMasterKeyIDRef references an KMSKey to retrieve its ID
63+
// +optional
64+
KMSMasterKeyIDRef *xpv1.Reference `json:"kmsMasterKeyIdRef,omitempty"`
65+
66+
// KMSMasterKeyIDSelector selects a reference to an KMSKey to retrieve its ID
67+
// +optional
68+
KMSMasterKeyIDSelector *xpv1.Selector `json:"kmsMasterKeyIdSelector,omitempty"`
69+
5970
// NOTE(muvaf): aws:kms is not accepted by kubebuilder enum.
6071

6172
// Server-side encryption algorithm to use for the default encryption.

apis/s3/v1beta1/zz_generated.deepcopy.go

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)