in pkg/controller/direct/vmwareengine/networkpeering_controller.go [158:233]
func (a *networkPeeringAdapter) Update(ctx context.Context, updateOp *directbase.UpdateOperation) error {
log := klog.FromContext(ctx)
log.V(2).Info("updating vmwareengine networkpeering", "name", a.id)
if err := a.normalizeReferenceFields(ctx); err != nil {
return err
}
mapCtx := &direct.MapContext{}
desired := a.desired.DeepCopy()
resource := VMwareEngineNetworkPeeringSpec_ToProto(mapCtx, &desired.Spec)
if mapCtx.Err() != nil {
return mapCtx.Err()
}
var paths []string
if desired.Spec.Description != nil && !reflect.DeepEqual(resource.Description, a.actual.Description) {
paths = append(paths, "description")
}
if desired.Spec.PeerNetwork != nil && !reflect.DeepEqual(resource.PeerNetwork, a.actual.PeerNetwork) {
paths = append(paths, "peer_network")
}
if desired.Spec.PeerNetworkType != nil && !reflect.DeepEqual(resource.PeerNetworkType, a.actual.PeerNetworkType) {
paths = append(paths, "peer_network_type")
}
if desired.Spec.ExportCustomRoutes != nil && !reflect.DeepEqual(resource.ExportCustomRoutes, a.actual.ExportCustomRoutes) {
paths = append(paths, "export_custom_routes")
}
if desired.Spec.ImportCustomRoutes != nil && !reflect.DeepEqual(resource.ImportCustomRoutes, a.actual.ImportCustomRoutes) {
paths = append(paths, "import_custom_routes")
}
if desired.Spec.ExchangeSubnetRoutes != nil && !reflect.DeepEqual(resource.ExchangeSubnetRoutes, a.actual.ExchangeSubnetRoutes) {
paths = append(paths, "exchange_subnet_routes")
}
if desired.Spec.ExportCustomRoutesWithPublicIP != nil && !reflect.DeepEqual(resource.ExportCustomRoutesWithPublicIp, a.actual.ExportCustomRoutesWithPublicIp) {
paths = append(paths, "export_custom_routes_with_public_ip")
}
if desired.Spec.ImportCustomRoutesWithPublicIP != nil && !reflect.DeepEqual(resource.ImportCustomRoutesWithPublicIp, a.actual.ImportCustomRoutesWithPublicIp) {
paths = append(paths, "import_custom_routes_with_public_ip")
}
if desired.Spec.PeerMTU != nil && !reflect.DeepEqual(resource.PeerMtu, a.actual.PeerMtu) {
paths = append(paths, "peer_mtu")
}
if desired.Spec.VMwareEngineNetworkRef != nil && !reflect.DeepEqual(resource.VmwareEngineNetwork, a.actual.VmwareEngineNetwork) {
paths = append(paths, "vmware_engine_network")
}
var updated *pb.NetworkPeering
if len(paths) == 0 {
log.V(2).Info("no field needs update", "name", a.id)
updated = a.actual
} else {
resource.Name = a.id.String() // we need to set the name so that GCP API can identify the resource
req := &pb.UpdateNetworkPeeringRequest{
NetworkPeering: resource,
UpdateMask: &fieldmaskpb.FieldMask{Paths: paths},
}
op, err := a.gcpClient.UpdateNetworkPeering(ctx, req)
if err != nil {
return fmt.Errorf("updating vmwareengine networkpeering %s: %w", a.id.String(), err)
}
updated, err = op.Wait(ctx)
if err != nil {
return fmt.Errorf("vmwareengine networkpeering %s waiting for update: %w", a.id, err)
}
log.V(2).Info("successfully updated vmwareengine networkpeering", "name", a.id)
}
status := &krm.VMwareEngineNetworkPeeringStatus{}
status.ObservedState = VMwareEngineNetworkPeeringObservedState_FromProto(mapCtx, updated)
if mapCtx.Err() != nil {
return mapCtx.Err()
}
status.ExternalRef = direct.LazyPtr(a.id.String())
return updateOp.UpdateStatus(ctx, status, nil)
}