in pkg/virtualrouter/routes_manager.go [85:129]
func (m *defaultRoutesManager) reconcile(ctx context.Context, ms *appmesh.Mesh, vr *appmesh.VirtualRouter, vnByKey map[types.NamespacedName]*appmesh.VirtualNode,
routes []appmesh.Route, sdkRouteRefs []*appmeshsdk.RouteRef) (map[string]*appmeshsdk.RouteData, error) {
matchedRouteAndSDKRouteRefs, unmatchedRoutes, unmatchedSDKRouteRefs := matchRoutesAgainstSDKRouteRefs(routes, sdkRouteRefs)
sdkRouteByName := make(map[string]*appmeshsdk.RouteData, len(matchedRouteAndSDKRouteRefs)+len(unmatchedRoutes))
for _, route := range unmatchedRoutes {
sdkRoute, err := m.createSDKRoute(ctx, ms, vr, route, vnByKey)
if err != nil {
return nil, err
}
sdkRouteByName[route.Name] = sdkRoute
}
for _, routeAndSDKRouteRef := range matchedRouteAndSDKRouteRefs {
route := routeAndSDKRouteRef.route
sdkRouteRef := routeAndSDKRouteRef.sdkRouteRef
sdkRoute, err := m.findSDKRoute(ctx, sdkRouteRef)
if err != nil {
return nil, err
}
if sdkRoute == nil {
return nil, errors.Errorf("route not found: %v", aws.StringValue(sdkRouteRef.RouteName))
}
sdkRoute, err = m.updateSDKRoute(ctx, sdkRoute, vr, route, vnByKey)
if err != nil {
return nil, err
}
sdkRouteByName[route.Name] = sdkRoute
}
for _, sdkRouteRef := range unmatchedSDKRouteRefs {
sdkRoute, err := m.findSDKRoute(ctx, sdkRouteRef)
if err != nil {
return nil, err
}
if sdkRoute == nil {
return nil, errors.Errorf("route not found: %v", aws.StringValue(sdkRouteRef.RouteName))
}
if err = m.deleteSDKRoute(ctx, sdkRoute); err != nil {
return nil, err
}
}
return sdkRouteByName, nil
}