| // Copyright Istio Authors |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package grpcgen |
| |
| import ( |
| route "github.com/envoyproxy/go-control-plane/envoy/config/route/v3" |
| discovery "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3" |
| ) |
| |
| import ( |
| "github.com/apache/dubbo-go-pixiu/pilot/pkg/model" |
| "github.com/apache/dubbo-go-pixiu/pilot/pkg/networking/core/v1alpha3" |
| "github.com/apache/dubbo-go-pixiu/pilot/pkg/networking/util" |
| ) |
| |
| // BuildHTTPRoutes supports per-VIP routes, as used by GRPC. |
| // This mode is indicated by using names containing full host:port instead of just port. |
| // Returns true of the request is of this type. |
| func (g *GrpcConfigGenerator) BuildHTTPRoutes(node *model.Proxy, push *model.PushContext, routeNames []string) model.Resources { |
| resp := model.Resources{} |
| for _, routeName := range routeNames { |
| if rc := buildHTTPRoute(node, push, routeName); rc != nil { |
| resp = append(resp, &discovery.Resource{ |
| Name: routeName, |
| Resource: util.MessageToAny(rc), |
| }) |
| } |
| } |
| return resp |
| } |
| |
| func buildHTTPRoute(node *model.Proxy, push *model.PushContext, routeName string) *route.RouteConfiguration { |
| // TODO use route-style naming instead of cluster naming |
| _, _, hostname, port := model.ParseSubsetKey(routeName) |
| if hostname == "" || port == 0 { |
| log.Warn("Failed to parse ", routeName) |
| return nil |
| } |
| |
| virtualHosts, _, _ := v1alpha3.BuildSidecarOutboundVirtualHosts(node, push, routeName, port, nil, &model.DisabledCache{}) |
| |
| // Only generate the required route for grpc. Will need to generate more |
| // as GRPC adds more features. |
| return &route.RouteConfiguration{ |
| Name: routeName, |
| VirtualHosts: virtualHosts, |
| } |
| } |