Skip to content

Commit

Permalink
Merge pull request #1035 from haarchri/fix-vpcpeeringconnection
Browse files Browse the repository at this point in the history
fix(ec2): vpcpeeringconnection fixed fields for resolvers, change tagger
  • Loading branch information
haarchri authored Feb 8, 2022
2 parents 1743a73 + 053b2d0 commit 5a112fc
Show file tree
Hide file tree
Showing 8 changed files with 96 additions and 77 deletions.
16 changes: 8 additions & 8 deletions apis/ec2/generator-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,14 @@ ignore:
- DeleteVpcPeeringConnectionInput.DryRun
- RejectVpcPeeringConnectionInput.DryRun
- AcceptVpcPeeringConnectionInput.DryRun
- CreateVpcPeeringConnectionInput.VPCID
- DeleteVpcPeeringConnectionInput.VPCID
- RejectVpcPeeringConnectionInput.VPCID
- AcceptVpcPeeringConnectionInput.VPCID
- CreateVpcPeeringConnectionInput.PeerVPCID
- DeleteVpcPeeringConnectionInput.PeerVPCID
- RejectVpcPeeringConnectionInput.PeerVPCID
- AcceptVpcPeeringConnectionInput.PeerVPCID
- CreateVpcPeeringConnectionInput.VpcId
- DeleteVpcPeeringConnectionInput.VpcId
- RejectVpcPeeringConnectionInput.VpcId
- AcceptVpcPeeringConnectionInput.VpcId
- CreateVpcPeeringConnectionInput.PeerVpcId
- DeleteVpcPeeringConnectionInput.PeerVpcId
- RejectVpcPeeringConnectionInput.PeerVpcId
- AcceptVpcPeeringConnectionInput.PeerVpcId
- CreateVolumeInput.DryRun
- CreateVolumeInput.KmsKeyId
- CreateTransitGatewayInput.DryRun
Expand Down
4 changes: 4 additions & 0 deletions apis/ec2/v1alpha1/custom_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,10 @@ type CustomVPCPeeringConnectionParameters struct {
// will be created, but will be in pending-acceptance state. This will only lead to an active
// connection if both VPCs are in the same tenant.
AcceptRequest bool `json:"acceptRequest,omitempty"`

// Metadata tagging key value pairs
// +optional
Tags []Tag `json:"tags,omitempty"`
}

// CustomTransitGatewayParameters are custom parameters for TransitGateway
Expand Down
27 changes: 7 additions & 20 deletions apis/ec2/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions apis/ec2/v1alpha1/zz_types.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 1 addition & 6 deletions apis/ec2/v1alpha1/zz_vpc_peering_connection.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions package/crds/ec2.aws.crossplane.io_vpcpeeringconnections.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,16 @@ spec:
type: array
type: object
type: array
tags:
description: Metadata tagging key value pairs
items:
properties:
key:
type: string
value:
type: string
type: object
type: array
vpcID:
description: The ID of the requester VPC. You must specify this
parameter in the request.
Expand Down
65 changes: 49 additions & 16 deletions pkg/controller/ec2/vpcpeeringconnection/setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package vpcpeeringconnection

import (
"context"
"sort"
"time"

"github.com/aws/aws-sdk-go/aws"
Expand All @@ -14,6 +15,7 @@ import (
"github.com/crossplane/crossplane-runtime/pkg/ratelimiter"
"github.com/crossplane/crossplane-runtime/pkg/reconciler/managed"
"github.com/crossplane/crossplane-runtime/pkg/resource"
"github.com/pkg/errors"

svcapitypes "github.com/crossplane/provider-aws/apis/ec2/v1alpha1"
awsclients "github.com/crossplane/provider-aws/pkg/clients"
Expand All @@ -24,6 +26,10 @@ import (
"sigs.k8s.io/controller-runtime/pkg/controller"
)

const (
errKubeUpdateFailed = "cannot update VPCPeeringConnection"
)

// SetupVPCPeeringConnection adds a controller that reconciles VPCPeeringConnection.
func SetupVPCPeeringConnection(mgr ctrl.Manager, l logging.Logger, rl workqueue.RateLimiter, poll time.Duration) error {
name := managed.ControllerName(svcapitypes.VPCPeeringConnectionGroupKind)
Expand All @@ -48,6 +54,7 @@ func SetupVPCPeeringConnection(mgr ctrl.Manager, l logging.Logger, rl workqueue.
managed.WithExternalConnecter(&connector{kube: mgr.GetClient(), opts: opts}),
managed.WithCreationGracePeriod(3*time.Minute),
managed.WithLogger(l.WithValues("controller", name)),
managed.WithInitializers(&tagger{kube: mgr.GetClient()}),
managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name)))))
}

Expand Down Expand Up @@ -115,21 +122,8 @@ func (e *custom) isUpToDate(cr *svcapitypes.VPCPeeringConnection, obj *svcsdk.De
}

func preCreate(ctx context.Context, cr *svcapitypes.VPCPeeringConnection, obj *svcsdk.CreateVpcPeeringConnectionInput) error {
// set external name as tag on the vpc peering connection
resType := "vpc-peering-connection"
key := "crossplane-claim-name"
value := cr.ObjectMeta.Name

spec := svcsdk.TagSpecification{
ResourceType: &resType,
Tags: []*svcsdk.Tag{
{
Key: &key,
Value: &value,
},
},
}
obj.TagSpecifications = append(obj.TagSpecifications, &spec)
obj.PeerVpcId = cr.Spec.ForProvider.PeerVPCID
obj.VpcId = cr.Spec.ForProvider.VPCID

return nil
}
Expand All @@ -138,8 +132,47 @@ func (e *custom) postCreate(ctx context.Context, cr *svcapitypes.VPCPeeringConne
if err != nil {
return managed.ExternalCreation{}, err
}
// set peering connection id as external name annotation on k8s object after creation

// set peering connection id as external name annotation on k8s object after creation
meta.SetExternalName(cr, aws.StringValue(obj.VpcPeeringConnection.VpcPeeringConnectionId))
return cre, nil
}

type tagger struct {
kube client.Client
}

func (t *tagger) Initialize(ctx context.Context, mgd resource.Managed) error {
cr, ok := mgd.(*svcapitypes.VPCPeeringConnection)
if !ok {
return errors.New(errUnexpectedObject)
}
var vpcPeeringConnectionTags svcapitypes.TagSpecification
for _, tagSpecification := range cr.Spec.ForProvider.TagSpecifications {
if aws.StringValue(tagSpecification.ResourceType) == "vpc-peering-connection" {
vpcPeeringConnectionTags = *tagSpecification
}
}

tagMap := map[string]string{}
tagMap["Name"] = cr.Name
for _, t := range vpcPeeringConnectionTags.Tags {
tagMap[aws.StringValue(t.Key)] = aws.StringValue(t.Value)
}
for k, v := range resource.GetExternalTags(mgd) {
tagMap[k] = v
}
vpcPeeringConnectionTags.Tags = make([]*svcapitypes.Tag, len(tagMap))
vpcPeeringConnectionTags.ResourceType = aws.String("vpc-peering-connection")
i := 0
for k, v := range tagMap {
vpcPeeringConnectionTags.Tags[i] = &svcapitypes.Tag{Key: aws.String(k), Value: aws.String(v)}
i++
}
sort.Slice(vpcPeeringConnectionTags.Tags, func(i, j int) bool {
return aws.StringValue(vpcPeeringConnectionTags.Tags[i].Key) < aws.StringValue(vpcPeeringConnectionTags.Tags[j].Key)
})

cr.Spec.ForProvider.TagSpecifications = []*svcapitypes.TagSpecification{&vpcPeeringConnectionTags}
return errors.Wrap(t.kube.Update(ctx, cr), errKubeUpdateFailed)
}
40 changes: 17 additions & 23 deletions pkg/controller/ec2/vpcpeeringconnection/zz_conversions.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 5a112fc

Please sign in to comment.