Skip to content

Commit

Permalink
support gcp internal vpc peering
Browse files Browse the repository at this point in the history
  • Loading branch information
zhengjiajin committed Jan 18, 2022
1 parent 1cb4cf3 commit 172336a
Showing 1 changed file with 46 additions and 0 deletions.
46 changes: 46 additions & 0 deletions pkg/controller/vpcpeering/peering.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package vpcpeering

import (
"fmt"
"strings"

"github.com/crossplane/crossplane-runtime/pkg/event"
"github.com/crossplane/crossplane-runtime/pkg/logging"
"github.com/crossplane/crossplane-runtime/pkg/ratelimiter"
Expand Down Expand Up @@ -107,7 +110,24 @@ func (e *external) Create(ctx context.Context, mg resource.Managed) (managed.Ext
PeerNetwork: peer.Spec.ForProvider.PeerNetwork,
AutoCreateRoutes: true,
}).Do()
if err != nil {
return managed.ExternalCreation{}, err
}

project, network, err := parsePeerNetwork(peer.Spec.ForProvider.PeerNetwork)
if err != nil {
return managed.ExternalCreation{}, err
}
if project == peer.Spec.ForProvider.Project {
_, err := e.compute.Networks.AddPeering(project, network, &compute.NetworksAddPeeringRequest{
Name: peer.Spec.ForProvider.Name,
PeerNetwork: peer.Spec.ForProvider.Network,
AutoCreateRoutes: true,
}).Do()
if err != nil && !gcp.IsErrorAlreadyExists(err) {
return managed.ExternalCreation{}, err
}
}
return managed.ExternalCreation{}, errors.Wrap(resource.Ignore(gcp.IsErrorAlreadyExists, err), errCreatePeering)
}

Expand Down Expand Up @@ -137,5 +157,31 @@ func (e *external) Delete(ctx context.Context, mg resource.Managed) error {
Name: peer.Spec.ForProvider.Name,
}).Do()

project, network, err := parsePeerNetwork(peer.Spec.ForProvider.PeerNetwork)
if err != nil {
return err
}
if project == peer.Spec.ForProvider.Project {
_, err = e.compute.Networks.RemovePeering(project, network, &compute.NetworksRemovePeeringRequest{
Name: peer.Spec.ForProvider.Name,
}).Do()
if err != nil && !gcp.IsErrorNotFound(err) {
return err
}
}

return errors.Wrap(resource.Ignore(gcp.IsErrorNotFound, err), errDeletePeering)
}

func parsePeerNetwork(peerNetwork string) (project string, Network string, err error) {
res := strings.TrimPrefix(peerNetwork, "https://www.googleapis.com/compute/v1/projects/")
item := strings.Split(res, "/")
if len(item) < 2 {
return "", "", fmt.Errorf("invalid peer network url")
}

return item[0], item[len(item)-1], nil
}
func newPeerNetwork(project string, network string) string {
return fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s/global/networks/%s", project, network)
}

0 comments on commit 172336a

Please sign in to comment.