mirror of
https://github.com/status-im/consul.git
synced 2025-02-04 01:43:43 +00:00
72a73661c9
* Stub proxycfg handler for API gateway * Add Service Kind constants/handling for API Gateway * Begin stubbing for SDS * Add new Secret type to xDS order of operations * Continue stubbing of SDS * Iterate on proxycfg handler for API gateway * Handle BoundAPIGateway config entry subscription in proxycfg-glue * Add API gateway to config snapshot validation * Add API gateway to config snapshot clone, leaf, etc. * Subscribe to bound route + cert config entries on bound-api-gateway * Track routes + certs on API gateway config snapshot * Generate DeepCopy() for types used in watch.Map * Watch all active references on api-gateway, unwatch inactive * Track loading of initial bound-api-gateway config entry * Use proper proto package for SDS mapping * Use ResourceReference instead of ServiceName, collect resources * Fix typo, add + remove TODOs * Watch discovery chains for TCPRoute * Add TODO for updating gateway services for api-gateway * make proto * Regenerate deep-copy for proxycfg * Set datacenter on upstream ID from query source * Watch discovery chains for http-route service backends * Add ServiceName getter to HTTP+TCP Service structs * Clean up unwatched discovery chains on API Gateway * Implement watch for ingress leaf certificate * Collect upstreams on http-route + tcp-route updates * Remove unused GatewayServices update handler * Remove unnecessary gateway services logic for API Gateway * Remove outdate TODO * Use .ToIngress where appropriate, including TODO for cleaning up * Cancel before returning error * Remove GatewayServices subscription * Add godoc for handlerAPIGateway functions * Update terminology from Connect => Consul Service Mesh Consistent with terminology changes in https://github.com/hashicorp/consul/pull/12690 * Add missing TODO * Remove duplicate switch case * Rerun deep-copy generator * Use correct property on config snapshot * Remove unnecessary leaf cert watch * Clean up based on code review feedback * Note handler properties that are initialized but set elsewhere * Add TODO for moving helper func into structs pkg * Update generated DeepCopy code * gofmt * Generate DeepCopy() for API gateway listener types * Improve variable name * Regenerate DeepCopy() code * Fix linting issue * Temporarily remove the secret type from resource generation
65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
package xds
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/go-hclog"
|
|
"google.golang.org/protobuf/proto"
|
|
|
|
"github.com/hashicorp/consul/envoyextensions/xdscommon"
|
|
|
|
"github.com/hashicorp/consul/agent/proxycfg"
|
|
)
|
|
|
|
// ResourceGenerator is associated with a single gRPC stream and creates xDS
|
|
// resources for a single client.
|
|
type ResourceGenerator struct {
|
|
Logger hclog.Logger
|
|
CfgFetcher ConfigFetcher
|
|
IncrementalXDS bool
|
|
|
|
ProxyFeatures xdscommon.SupportedProxyFeatures
|
|
}
|
|
|
|
func NewResourceGenerator(
|
|
logger hclog.Logger,
|
|
cfgFetcher ConfigFetcher,
|
|
incrementalXDS bool,
|
|
) *ResourceGenerator {
|
|
return &ResourceGenerator{
|
|
Logger: logger,
|
|
CfgFetcher: cfgFetcher,
|
|
IncrementalXDS: incrementalXDS,
|
|
}
|
|
}
|
|
|
|
func (g *ResourceGenerator) AllResourcesFromSnapshot(cfgSnap *proxycfg.ConfigSnapshot) (map[string][]proto.Message, error) {
|
|
all := make(map[string][]proto.Message)
|
|
// TODO Add xdscommon.SecretType
|
|
for _, typeUrl := range []string{xdscommon.ListenerType, xdscommon.RouteType, xdscommon.ClusterType, xdscommon.EndpointType} {
|
|
res, err := g.resourcesFromSnapshot(typeUrl, cfgSnap)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to generate xDS resources for %q: %v", typeUrl, err)
|
|
}
|
|
all[typeUrl] = res
|
|
}
|
|
return all, nil
|
|
}
|
|
|
|
func (g *ResourceGenerator) resourcesFromSnapshot(typeUrl string, cfgSnap *proxycfg.ConfigSnapshot) ([]proto.Message, error) {
|
|
switch typeUrl {
|
|
case xdscommon.ListenerType:
|
|
return g.listenersFromSnapshot(cfgSnap)
|
|
case xdscommon.RouteType:
|
|
return g.routesFromSnapshot(cfgSnap)
|
|
case xdscommon.ClusterType:
|
|
return g.clustersFromSnapshot(cfgSnap)
|
|
case xdscommon.EndpointType:
|
|
return g.endpointsFromSnapshot(cfgSnap)
|
|
case xdscommon.SecretType:
|
|
return g.secretsFromSnapshot(cfgSnap)
|
|
default:
|
|
return nil, fmt.Errorf("unknown typeUrl: %s", typeUrl)
|
|
}
|
|
}
|