mirror of https://github.com/hashicorp/consul
API Gateway to Ingress Gateway Snapshot Translation and Routes to Virtual Routers and Splitters (#16127)
* 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 * Begin stubbing for SDS * Start adding tests * Remove second BoundAPIGateway case in glue * TO BE PICKED: fix formatting of str * WIP * Fix merge conflict * Implement HTTP Route to Discovery Chain config entries * Stub out function to create discovery chain * Add discovery chain merging code (#16131) * Test adding TCP and HTTP routes * Add some tests for the synthesizer * Run go mod tidy * Pairing with N8 * Run deep copy * Clean up GatewayChainSynthesizer * Fix missing assignment of BoundAPIGateway topic * Separate out synthesizeChains and toIngressTLS * Fix build errors * Ensure synthesizer skips non-matching routes by protocol * Rebase on N8s work * Generate DeepCopy() for API gateway listener types * Improve variable name * Regenerate DeepCopy() code * Fix linting issue * fix protobuf import * Fix more merge conflict errors * Fix synthesize test * Run deep copy * Add URLRewrite to proto * Update agent/consul/discoverychain/gateway_tcproute.go Co-authored-by: Nathan Coleman <nathan.coleman@hashicorp.com> * Remove APIGatewayConfigEntry that was extra * Error out if route kind is unknown * Fix formatting errors in proto --------- Co-authored-by: Nathan Coleman <nathan.coleman@hashicorp.com> Co-authored-by: Andrew Stucki <andrew.stucki@hashicorp.com>pull/16219/head
parent
f4210d47dd
commit
e81a0c2855
|
@ -0,0 +1,190 @@
|
||||||
|
package discoverychain
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"hash/crc32"
|
||||||
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/hashicorp/consul/agent/configentry"
|
||||||
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GatewayChainSynthesizer is used to synthesize a discovery chain for a
|
||||||
|
// gateway from its configuration and multiple other discovery chains.
|
||||||
|
type GatewayChainSynthesizer struct {
|
||||||
|
datacenter string
|
||||||
|
gateway *structs.APIGatewayConfigEntry
|
||||||
|
matchesByHostname map[string][]hostnameMatch
|
||||||
|
tcpRoutes []structs.TCPRouteConfigEntry
|
||||||
|
}
|
||||||
|
|
||||||
|
type hostnameMatch struct {
|
||||||
|
match structs.HTTPMatch
|
||||||
|
filters structs.HTTPFilters
|
||||||
|
services []structs.HTTPService
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewGatewayChainSynthesizer creates a new GatewayChainSynthesizer for the
|
||||||
|
// given gateway and datacenter.
|
||||||
|
func NewGatewayChainSynthesizer(datacenter string, gateway *structs.APIGatewayConfigEntry) *GatewayChainSynthesizer {
|
||||||
|
return &GatewayChainSynthesizer{
|
||||||
|
datacenter: datacenter,
|
||||||
|
gateway: gateway,
|
||||||
|
matchesByHostname: map[string][]hostnameMatch{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddTCPRoute adds a TCPRoute to use in synthesizing a discovery chain
|
||||||
|
func (l *GatewayChainSynthesizer) AddTCPRoute(route structs.TCPRouteConfigEntry) {
|
||||||
|
l.tcpRoutes = append(l.tcpRoutes, route)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddHTTPRoute takes a new route and flattens its rule matches out per hostname.
|
||||||
|
// This is required since a single route can specify multiple hostnames, and a
|
||||||
|
// single hostname can be specified in multiple routes. Routing for a given
|
||||||
|
// hostname must behave based on the aggregate of all rules that apply to it.
|
||||||
|
func (l *GatewayChainSynthesizer) AddHTTPRoute(route structs.HTTPRouteConfigEntry) {
|
||||||
|
for _, host := range route.Hostnames {
|
||||||
|
matches, ok := l.matchesByHostname[host]
|
||||||
|
if !ok {
|
||||||
|
matches = []hostnameMatch{}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, rule := range route.Rules {
|
||||||
|
// If a rule has no matches defined, add default match
|
||||||
|
if rule.Matches == nil {
|
||||||
|
rule.Matches = []structs.HTTPMatch{}
|
||||||
|
}
|
||||||
|
if len(rule.Matches) == 0 {
|
||||||
|
rule.Matches = []structs.HTTPMatch{{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: structs.HTTPPathMatchPrefix,
|
||||||
|
Value: "/",
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add all matches for this rule to the list for this hostname
|
||||||
|
for _, match := range rule.Matches {
|
||||||
|
matches = append(matches, hostnameMatch{
|
||||||
|
match: match,
|
||||||
|
filters: rule.Filters,
|
||||||
|
services: rule.Services,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
l.matchesByHostname[host] = matches
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Synthesize assembles a synthetic discovery chain from multiple other discovery chains
|
||||||
|
// that have StartNodes that are referenced by routers or splitters in the entries for the
|
||||||
|
// given CompileRequest.
|
||||||
|
//
|
||||||
|
// This is currently used to help API gateways masquarade as ingress gateways
|
||||||
|
// by providing a set of virtual config entries that change the routing behavior
|
||||||
|
// to upstreams referenced in the given HTTPRoutes or TCPRoutes.
|
||||||
|
func (l *GatewayChainSynthesizer) Synthesize(chains ...*structs.CompiledDiscoveryChain) ([]structs.IngressService, *structs.CompiledDiscoveryChain, error) {
|
||||||
|
if len(chains) == 0 {
|
||||||
|
return nil, nil, fmt.Errorf("must provide at least one compiled discovery chain")
|
||||||
|
}
|
||||||
|
|
||||||
|
services, entries := l.synthesizeEntries()
|
||||||
|
|
||||||
|
if entries.IsEmpty() {
|
||||||
|
// we can't actually compile a discovery chain, i.e. we're using a TCPRoute-based listener, instead, just return the ingresses
|
||||||
|
// and the first pre-compiled discovery chain
|
||||||
|
return services, chains[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
compiled, err := Compile(CompileRequest{
|
||||||
|
ServiceName: l.gateway.Name,
|
||||||
|
EvaluateInNamespace: l.gateway.NamespaceOrDefault(),
|
||||||
|
EvaluateInPartition: l.gateway.PartitionOrDefault(),
|
||||||
|
EvaluateInDatacenter: l.datacenter,
|
||||||
|
Entries: entries,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range chains {
|
||||||
|
for id, target := range c.Targets {
|
||||||
|
compiled.Targets[id] = target
|
||||||
|
}
|
||||||
|
for id, node := range c.Nodes {
|
||||||
|
compiled.Nodes[id] = node
|
||||||
|
}
|
||||||
|
compiled.EnvoyExtensions = append(compiled.EnvoyExtensions, c.EnvoyExtensions...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return services, compiled, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// consolidateHTTPRoutes combines all rules into the shortest possible list of routes
|
||||||
|
// with one route per hostname containing all rules for that hostname.
|
||||||
|
func (l *GatewayChainSynthesizer) consolidateHTTPRoutes() []structs.HTTPRouteConfigEntry {
|
||||||
|
var routes []structs.HTTPRouteConfigEntry
|
||||||
|
|
||||||
|
for hostname, rules := range l.matchesByHostname {
|
||||||
|
// Create route for this hostname
|
||||||
|
route := structs.HTTPRouteConfigEntry{
|
||||||
|
Kind: structs.HTTPRoute,
|
||||||
|
Name: fmt.Sprintf("%s-%s", l.gateway.Name, hostsKey(hostname)),
|
||||||
|
Hostnames: []string{hostname},
|
||||||
|
Rules: make([]structs.HTTPRouteRule, 0, len(rules)),
|
||||||
|
Meta: l.gateway.Meta,
|
||||||
|
EnterpriseMeta: l.gateway.EnterpriseMeta,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort rules for this hostname in order of precedence
|
||||||
|
sort.SliceStable(rules, func(i, j int) bool {
|
||||||
|
return compareHTTPRules(rules[i].match, rules[j].match)
|
||||||
|
})
|
||||||
|
|
||||||
|
// Add all rules for this hostname
|
||||||
|
for _, rule := range rules {
|
||||||
|
route.Rules = append(route.Rules, structs.HTTPRouteRule{
|
||||||
|
Matches: []structs.HTTPMatch{rule.match},
|
||||||
|
Filters: rule.filters,
|
||||||
|
Services: rule.services,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
routes = append(routes, route)
|
||||||
|
}
|
||||||
|
|
||||||
|
return routes
|
||||||
|
}
|
||||||
|
|
||||||
|
func hostsKey(hosts ...string) string {
|
||||||
|
sort.Strings(hosts)
|
||||||
|
hostsHash := crc32.NewIEEE()
|
||||||
|
for _, h := range hosts {
|
||||||
|
if _, err := hostsHash.Write([]byte(h)); err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return strconv.FormatUint(uint64(hostsHash.Sum32()), 16)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *GatewayChainSynthesizer) synthesizeEntries() ([]structs.IngressService, *configentry.DiscoveryChainSet) {
|
||||||
|
services := []structs.IngressService{}
|
||||||
|
entries := configentry.NewDiscoveryChainSet()
|
||||||
|
|
||||||
|
for _, route := range l.consolidateHTTPRoutes() {
|
||||||
|
ingress, router, splitters, defaults := synthesizeHTTPRouteDiscoveryChain(route)
|
||||||
|
entries.AddRouters(router)
|
||||||
|
entries.AddSplitters(splitters...)
|
||||||
|
entries.AddServices(defaults...)
|
||||||
|
services = append(services, ingress)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, route := range l.tcpRoutes {
|
||||||
|
services = append(services, synthesizeTCPRouteDiscoveryChain(route)...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return services, entries
|
||||||
|
}
|
|
@ -0,0 +1,276 @@
|
||||||
|
package discoverychain
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
|
)
|
||||||
|
|
||||||
|
// compareHTTPRules implements the non-hostname order of precedence for routes specified by the K8s Gateway API spec.
|
||||||
|
// https://gateway-api.sigs.k8s.io/v1alpha2/references/spec/#gateway.networking.k8s.io/v1alpha2.HTTPRouteRule
|
||||||
|
//
|
||||||
|
// Ordering prefers matches based on the largest number of:
|
||||||
|
//
|
||||||
|
// 1. characters in a matching non-wildcard hostname
|
||||||
|
// 2. characters in a matching hostname
|
||||||
|
// 3. characters in a matching path
|
||||||
|
// 4. header matches
|
||||||
|
// 5. query param matches
|
||||||
|
//
|
||||||
|
// The hostname-specific comparison (1+2) occur in Envoy outside of our control:
|
||||||
|
// https://github.com/envoyproxy/envoy/blob/5c4d4bd957f9402eca80bef82e7cc3ae714e04b4/source/common/router/config_impl.cc#L1645-L1682
|
||||||
|
func compareHTTPRules(ruleA, ruleB structs.HTTPMatch) bool {
|
||||||
|
if len(ruleA.Path.Value) != len(ruleB.Path.Value) {
|
||||||
|
return len(ruleA.Path.Value) > len(ruleB.Path.Value)
|
||||||
|
}
|
||||||
|
if len(ruleA.Headers) != len(ruleB.Headers) {
|
||||||
|
return len(ruleA.Headers) > len(ruleB.Headers)
|
||||||
|
}
|
||||||
|
return len(ruleA.Query) > len(ruleB.Query)
|
||||||
|
}
|
||||||
|
|
||||||
|
func httpServiceDefault(entry structs.ConfigEntry, meta map[string]string) *structs.ServiceConfigEntry {
|
||||||
|
return &structs.ServiceConfigEntry{
|
||||||
|
Kind: structs.ServiceDefaults,
|
||||||
|
Name: entry.GetName(),
|
||||||
|
Protocol: "http",
|
||||||
|
Meta: meta,
|
||||||
|
EnterpriseMeta: *entry.GetEnterpriseMeta(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func synthesizeHTTPRouteDiscoveryChain(route structs.HTTPRouteConfigEntry) (structs.IngressService, *structs.ServiceRouterConfigEntry, []*structs.ServiceSplitterConfigEntry, []*structs.ServiceConfigEntry) {
|
||||||
|
meta := route.GetMeta()
|
||||||
|
splitters := []*structs.ServiceSplitterConfigEntry{}
|
||||||
|
defaults := []*structs.ServiceConfigEntry{}
|
||||||
|
|
||||||
|
router, splits := httpRouteToDiscoveryChain(route)
|
||||||
|
serviceDefault := httpServiceDefault(router, meta)
|
||||||
|
defaults = append(defaults, serviceDefault)
|
||||||
|
for _, split := range splits {
|
||||||
|
splitters = append(splitters, split)
|
||||||
|
if split.Name != serviceDefault.Name {
|
||||||
|
defaults = append(defaults, httpServiceDefault(split, meta))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ingress := structs.IngressService{
|
||||||
|
Name: router.Name,
|
||||||
|
Hosts: route.Hostnames,
|
||||||
|
Meta: route.Meta,
|
||||||
|
EnterpriseMeta: route.EnterpriseMeta,
|
||||||
|
}
|
||||||
|
|
||||||
|
return ingress, router, splitters, defaults
|
||||||
|
}
|
||||||
|
|
||||||
|
func httpRouteToDiscoveryChain(route structs.HTTPRouteConfigEntry) (*structs.ServiceRouterConfigEntry, []*structs.ServiceSplitterConfigEntry) {
|
||||||
|
router := &structs.ServiceRouterConfigEntry{
|
||||||
|
Kind: structs.ServiceRouter,
|
||||||
|
Name: route.GetName(),
|
||||||
|
Meta: route.GetMeta(),
|
||||||
|
EnterpriseMeta: route.EnterpriseMeta,
|
||||||
|
}
|
||||||
|
var splitters []*structs.ServiceSplitterConfigEntry
|
||||||
|
|
||||||
|
for idx, rule := range route.Rules {
|
||||||
|
modifier := httpRouteFiltersToServiceRouteHeaderModifier(rule.Filters.Headers)
|
||||||
|
prefixRewrite := httpRouteFiltersToDestinationPrefixRewrite(rule.Filters.URLRewrites)
|
||||||
|
|
||||||
|
var destination structs.ServiceRouteDestination
|
||||||
|
if len(rule.Services) == 1 {
|
||||||
|
// TODO open question: is there a use case where someone might want to set the rewrite to ""?
|
||||||
|
service := rule.Services[0]
|
||||||
|
|
||||||
|
servicePrefixRewrite := httpRouteFiltersToDestinationPrefixRewrite(service.Filters.URLRewrites)
|
||||||
|
if servicePrefixRewrite == "" {
|
||||||
|
servicePrefixRewrite = prefixRewrite
|
||||||
|
}
|
||||||
|
serviceModifier := httpRouteFiltersToServiceRouteHeaderModifier(service.Filters.Headers)
|
||||||
|
modifier.Add = mergeMaps(modifier.Add, serviceModifier.Add)
|
||||||
|
modifier.Set = mergeMaps(modifier.Set, serviceModifier.Set)
|
||||||
|
modifier.Remove = append(modifier.Remove, serviceModifier.Remove...)
|
||||||
|
|
||||||
|
destination.Service = service.Name
|
||||||
|
destination.Namespace = service.NamespaceOrDefault()
|
||||||
|
destination.Partition = service.PartitionOrDefault()
|
||||||
|
destination.PrefixRewrite = servicePrefixRewrite
|
||||||
|
destination.RequestHeaders = modifier
|
||||||
|
} else {
|
||||||
|
// create a virtual service to split
|
||||||
|
destination.Service = fmt.Sprintf("%s-%d", route.GetName(), idx)
|
||||||
|
destination.Namespace = route.NamespaceOrDefault()
|
||||||
|
destination.Partition = route.PartitionOrDefault()
|
||||||
|
destination.PrefixRewrite = prefixRewrite
|
||||||
|
destination.RequestHeaders = modifier
|
||||||
|
|
||||||
|
splitter := &structs.ServiceSplitterConfigEntry{
|
||||||
|
Kind: structs.ServiceSplitter,
|
||||||
|
Name: destination.Service,
|
||||||
|
Splits: []structs.ServiceSplit{},
|
||||||
|
Meta: route.GetMeta(),
|
||||||
|
EnterpriseMeta: route.EnterpriseMeta,
|
||||||
|
}
|
||||||
|
|
||||||
|
totalWeight := 0
|
||||||
|
for _, service := range rule.Services {
|
||||||
|
totalWeight += service.Weight
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, service := range rule.Services {
|
||||||
|
if service.Weight == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
modifier := httpRouteFiltersToServiceRouteHeaderModifier(service.Filters.Headers)
|
||||||
|
|
||||||
|
weightPercentage := float32(service.Weight) / float32(totalWeight)
|
||||||
|
split := structs.ServiceSplit{
|
||||||
|
RequestHeaders: modifier,
|
||||||
|
Weight: weightPercentage * 100,
|
||||||
|
}
|
||||||
|
split.Service = service.Name
|
||||||
|
split.Namespace = service.NamespaceOrDefault()
|
||||||
|
split.Partition = service.PartitionOrDefault()
|
||||||
|
splitter.Splits = append(splitter.Splits, split)
|
||||||
|
}
|
||||||
|
if len(splitter.Splits) > 0 {
|
||||||
|
splitters = append(splitters, splitter)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// for each match rule a ServiceRoute is created for the service-router
|
||||||
|
// if there are no rules a single route with the destination is set
|
||||||
|
if len(rule.Matches) == 0 {
|
||||||
|
router.Routes = append(router.Routes, structs.ServiceRoute{Destination: &destination})
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, match := range rule.Matches {
|
||||||
|
router.Routes = append(router.Routes, structs.ServiceRoute{
|
||||||
|
Match: &structs.ServiceRouteMatch{HTTP: httpRouteMatchToServiceRouteHTTPMatch(match)},
|
||||||
|
Destination: &destination,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return router, splitters
|
||||||
|
}
|
||||||
|
|
||||||
|
func httpRouteFiltersToDestinationPrefixRewrite(rewrites []structs.URLRewrite) string {
|
||||||
|
for _, rewrite := range rewrites {
|
||||||
|
if rewrite.Path != "" {
|
||||||
|
return rewrite.Path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// httpRouteFiltersToServiceRouteHeaderModifier will consolidate a list of HTTP filters
|
||||||
|
// into a single set of header modifications for Consul to make as a request passes through.
|
||||||
|
func httpRouteFiltersToServiceRouteHeaderModifier(filters []structs.HTTPHeaderFilter) *structs.HTTPHeaderModifiers {
|
||||||
|
modifier := &structs.HTTPHeaderModifiers{
|
||||||
|
Add: make(map[string]string),
|
||||||
|
Set: make(map[string]string),
|
||||||
|
}
|
||||||
|
for _, filter := range filters {
|
||||||
|
// If we have multiple filters specified, then we can potentially clobber
|
||||||
|
// "Add" and "Set" here -- as far as K8S gateway spec is concerned, this
|
||||||
|
// is all implementation-specific behavior and undefined by the spec.
|
||||||
|
modifier.Add = mergeMaps(modifier.Add, filter.Add)
|
||||||
|
modifier.Set = mergeMaps(modifier.Set, filter.Set)
|
||||||
|
modifier.Remove = append(modifier.Remove, filter.Remove...)
|
||||||
|
}
|
||||||
|
return modifier
|
||||||
|
}
|
||||||
|
|
||||||
|
func mergeMaps(a, b map[string]string) map[string]string {
|
||||||
|
for k, v := range b {
|
||||||
|
a[k] = v
|
||||||
|
}
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
||||||
|
func httpRouteMatchToServiceRouteHTTPMatch(match structs.HTTPMatch) *structs.ServiceRouteHTTPMatch {
|
||||||
|
var consulMatch structs.ServiceRouteHTTPMatch
|
||||||
|
switch match.Path.Match {
|
||||||
|
case structs.HTTPPathMatchExact:
|
||||||
|
consulMatch.PathExact = match.Path.Value
|
||||||
|
case structs.HTTPPathMatchPrefix:
|
||||||
|
consulMatch.PathPrefix = match.Path.Value
|
||||||
|
case structs.HTTPPathMatchRegularExpression:
|
||||||
|
consulMatch.PathRegex = match.Path.Value
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, header := range match.Headers {
|
||||||
|
switch header.Match {
|
||||||
|
case structs.HTTPHeaderMatchExact:
|
||||||
|
consulMatch.Header = append(consulMatch.Header, structs.ServiceRouteHTTPMatchHeader{
|
||||||
|
Name: header.Name,
|
||||||
|
Exact: header.Value,
|
||||||
|
})
|
||||||
|
case structs.HTTPHeaderMatchPrefix:
|
||||||
|
consulMatch.Header = append(consulMatch.Header, structs.ServiceRouteHTTPMatchHeader{
|
||||||
|
Name: header.Name,
|
||||||
|
Prefix: header.Value,
|
||||||
|
})
|
||||||
|
case structs.HTTPHeaderMatchSuffix:
|
||||||
|
consulMatch.Header = append(consulMatch.Header, structs.ServiceRouteHTTPMatchHeader{
|
||||||
|
Name: header.Name,
|
||||||
|
Suffix: header.Value,
|
||||||
|
})
|
||||||
|
case structs.HTTPHeaderMatchPresent:
|
||||||
|
consulMatch.Header = append(consulMatch.Header, structs.ServiceRouteHTTPMatchHeader{
|
||||||
|
Name: header.Name,
|
||||||
|
Present: true,
|
||||||
|
})
|
||||||
|
case structs.HTTPHeaderMatchRegularExpression:
|
||||||
|
consulMatch.Header = append(consulMatch.Header, structs.ServiceRouteHTTPMatchHeader{
|
||||||
|
Name: header.Name,
|
||||||
|
Regex: header.Value,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, query := range match.Query {
|
||||||
|
switch query.Match {
|
||||||
|
case structs.HTTPQueryMatchExact:
|
||||||
|
consulMatch.QueryParam = append(consulMatch.QueryParam, structs.ServiceRouteHTTPMatchQueryParam{
|
||||||
|
Name: query.Name,
|
||||||
|
Exact: query.Value,
|
||||||
|
})
|
||||||
|
case structs.HTTPQueryMatchPresent:
|
||||||
|
consulMatch.QueryParam = append(consulMatch.QueryParam, structs.ServiceRouteHTTPMatchQueryParam{
|
||||||
|
Name: query.Name,
|
||||||
|
Present: true,
|
||||||
|
})
|
||||||
|
case structs.HTTPQueryMatchRegularExpression:
|
||||||
|
consulMatch.QueryParam = append(consulMatch.QueryParam, structs.ServiceRouteHTTPMatchQueryParam{
|
||||||
|
Name: query.Name,
|
||||||
|
Regex: query.Value,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch match.Method {
|
||||||
|
case structs.HTTPMatchMethodConnect:
|
||||||
|
consulMatch.Methods = append(consulMatch.Methods, "CONNECT")
|
||||||
|
case structs.HTTPMatchMethodDelete:
|
||||||
|
consulMatch.Methods = append(consulMatch.Methods, "DELETE")
|
||||||
|
case structs.HTTPMatchMethodGet:
|
||||||
|
consulMatch.Methods = append(consulMatch.Methods, "GET")
|
||||||
|
case structs.HTTPMatchMethodHead:
|
||||||
|
consulMatch.Methods = append(consulMatch.Methods, "HEAD")
|
||||||
|
case structs.HTTPMatchMethodOptions:
|
||||||
|
consulMatch.Methods = append(consulMatch.Methods, "OPTIONS")
|
||||||
|
case structs.HTTPMatchMethodPatch:
|
||||||
|
consulMatch.Methods = append(consulMatch.Methods, "PATCH")
|
||||||
|
case structs.HTTPMatchMethodPost:
|
||||||
|
consulMatch.Methods = append(consulMatch.Methods, "POST")
|
||||||
|
case structs.HTTPMatchMethodPut:
|
||||||
|
consulMatch.Methods = append(consulMatch.Methods, "PUT")
|
||||||
|
case structs.HTTPMatchMethodTrace:
|
||||||
|
consulMatch.Methods = append(consulMatch.Methods, "TRACE")
|
||||||
|
}
|
||||||
|
|
||||||
|
return &consulMatch
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package discoverychain
|
||||||
|
|
||||||
|
import "github.com/hashicorp/consul/agent/structs"
|
||||||
|
|
||||||
|
func synthesizeTCPRouteDiscoveryChain(route structs.TCPRouteConfigEntry) []structs.IngressService {
|
||||||
|
services := make([]structs.IngressService, 0, len(route.Services))
|
||||||
|
for _, service := range route.Services {
|
||||||
|
ingress := structs.IngressService{
|
||||||
|
Name: service.Name,
|
||||||
|
EnterpriseMeta: service.EnterpriseMeta,
|
||||||
|
}
|
||||||
|
|
||||||
|
services = append(services, ingress)
|
||||||
|
}
|
||||||
|
|
||||||
|
return services
|
||||||
|
}
|
|
@ -0,0 +1,545 @@
|
||||||
|
package discoverychain
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGatewayChainSynthesizer_AddTCPRoute(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
datacenter := "dc1"
|
||||||
|
gateway := &structs.APIGatewayConfigEntry{
|
||||||
|
Kind: structs.APIGateway,
|
||||||
|
Name: "gateway",
|
||||||
|
}
|
||||||
|
route := structs.TCPRouteConfigEntry{
|
||||||
|
Kind: structs.TCPRoute,
|
||||||
|
Name: "route",
|
||||||
|
}
|
||||||
|
|
||||||
|
expected := GatewayChainSynthesizer{
|
||||||
|
datacenter: datacenter,
|
||||||
|
gateway: gateway,
|
||||||
|
matchesByHostname: map[string][]hostnameMatch{},
|
||||||
|
tcpRoutes: []structs.TCPRouteConfigEntry{
|
||||||
|
route,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
gatewayChainSynthesizer := NewGatewayChainSynthesizer(datacenter, gateway)
|
||||||
|
|
||||||
|
// Add a TCP route
|
||||||
|
gatewayChainSynthesizer.AddTCPRoute(route)
|
||||||
|
|
||||||
|
require.Equal(t, expected, *gatewayChainSynthesizer)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGatewayChainSynthesizer_AddHTTPRoute(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
cases := map[string]struct {
|
||||||
|
route structs.HTTPRouteConfigEntry
|
||||||
|
expectedMatchesByHostname map[string][]hostnameMatch
|
||||||
|
}{
|
||||||
|
"no hostanames": {
|
||||||
|
route: structs.HTTPRouteConfigEntry{
|
||||||
|
Kind: structs.HTTPRoute,
|
||||||
|
Name: "route",
|
||||||
|
},
|
||||||
|
expectedMatchesByHostname: map[string][]hostnameMatch{},
|
||||||
|
},
|
||||||
|
"single hostname with no rules": {
|
||||||
|
route: structs.HTTPRouteConfigEntry{
|
||||||
|
Kind: structs.HTTPRoute,
|
||||||
|
Name: "route",
|
||||||
|
Hostnames: []string{
|
||||||
|
"example.com",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedMatchesByHostname: map[string][]hostnameMatch{
|
||||||
|
"example.com": {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"single hostname with a single rule and no matches": {
|
||||||
|
route: structs.HTTPRouteConfigEntry{
|
||||||
|
Kind: structs.HTTPRoute,
|
||||||
|
Name: "route",
|
||||||
|
Hostnames: []string{
|
||||||
|
"example.com",
|
||||||
|
},
|
||||||
|
Rules: []structs.HTTPRouteRule{
|
||||||
|
{
|
||||||
|
Filters: structs.HTTPFilters{},
|
||||||
|
Matches: []structs.HTTPMatch{},
|
||||||
|
Services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedMatchesByHostname: map[string][]hostnameMatch{
|
||||||
|
"example.com": {
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "/",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"single hostname with a single rule and a single match": {
|
||||||
|
route: structs.HTTPRouteConfigEntry{
|
||||||
|
Kind: structs.HTTPRoute,
|
||||||
|
Name: "route",
|
||||||
|
Hostnames: []string{
|
||||||
|
"example.com",
|
||||||
|
},
|
||||||
|
Rules: []structs.HTTPRouteRule{
|
||||||
|
{
|
||||||
|
Filters: structs.HTTPFilters{},
|
||||||
|
Matches: []structs.HTTPMatch{
|
||||||
|
{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedMatchesByHostname: map[string][]hostnameMatch{
|
||||||
|
"example.com": {
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"single hostname with a single rule and multiple matches": {
|
||||||
|
route: structs.HTTPRouteConfigEntry{
|
||||||
|
Kind: structs.HTTPRoute,
|
||||||
|
Name: "route",
|
||||||
|
Hostnames: []string{
|
||||||
|
"example.com",
|
||||||
|
},
|
||||||
|
Rules: []structs.HTTPRouteRule{
|
||||||
|
{
|
||||||
|
Filters: structs.HTTPFilters{},
|
||||||
|
Matches: []structs.HTTPMatch{
|
||||||
|
{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "bar-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedMatchesByHostname: map[string][]hostnameMatch{
|
||||||
|
"example.com": {
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "bar-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"multiple hostnames with a single rule and a single match": {
|
||||||
|
route: structs.HTTPRouteConfigEntry{
|
||||||
|
Kind: structs.HTTPRoute,
|
||||||
|
Name: "route",
|
||||||
|
Hostnames: []string{
|
||||||
|
"example.com",
|
||||||
|
"example.net",
|
||||||
|
},
|
||||||
|
Rules: []structs.HTTPRouteRule{
|
||||||
|
{
|
||||||
|
Filters: structs.HTTPFilters{},
|
||||||
|
Matches: []structs.HTTPMatch{
|
||||||
|
{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedMatchesByHostname: map[string][]hostnameMatch{
|
||||||
|
"example.com": {
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"example.net": {
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"multiple hostnames with a single rule and multiple matches": {
|
||||||
|
route: structs.HTTPRouteConfigEntry{
|
||||||
|
Kind: structs.HTTPRoute,
|
||||||
|
Name: "route",
|
||||||
|
Hostnames: []string{
|
||||||
|
"example.com",
|
||||||
|
"example.net",
|
||||||
|
},
|
||||||
|
Rules: []structs.HTTPRouteRule{
|
||||||
|
{
|
||||||
|
Filters: structs.HTTPFilters{},
|
||||||
|
Matches: []structs.HTTPMatch{
|
||||||
|
{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "bar-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedMatchesByHostname: map[string][]hostnameMatch{
|
||||||
|
"example.com": {
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "bar-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"example.net": {
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "bar-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"multiple hostnames with multiple rules and multiple matches": {
|
||||||
|
route: structs.HTTPRouteConfigEntry{
|
||||||
|
Kind: structs.HTTPRoute,
|
||||||
|
Name: "route",
|
||||||
|
Hostnames: []string{
|
||||||
|
"example.com",
|
||||||
|
"example.net",
|
||||||
|
},
|
||||||
|
Rules: []structs.HTTPRouteRule{
|
||||||
|
{
|
||||||
|
Filters: structs.HTTPFilters{},
|
||||||
|
Matches: []structs.HTTPMatch{
|
||||||
|
{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "bar-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Filters: structs.HTTPFilters{},
|
||||||
|
Matches: []structs.HTTPMatch{
|
||||||
|
{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "baz-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "qux-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedMatchesByHostname: map[string][]hostnameMatch{
|
||||||
|
"example.com": {
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "bar-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "baz-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "qux-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"example.net": {
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "foo-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "bar-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "baz-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
match: structs.HTTPMatch{
|
||||||
|
Path: structs.HTTPPathMatch{
|
||||||
|
Match: "prefix",
|
||||||
|
Value: "qux-",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: structs.HTTPFilters{},
|
||||||
|
services: []structs.HTTPService{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for name, tc := range cases {
|
||||||
|
t.Run(name, func(t *testing.T) {
|
||||||
|
datacenter := "dc1"
|
||||||
|
gateway := &structs.APIGatewayConfigEntry{
|
||||||
|
Kind: structs.APIGateway,
|
||||||
|
Name: "gateway",
|
||||||
|
}
|
||||||
|
|
||||||
|
gatewayChainSynthesizer := NewGatewayChainSynthesizer(datacenter, gateway)
|
||||||
|
|
||||||
|
gatewayChainSynthesizer.AddHTTPRoute(tc.route)
|
||||||
|
|
||||||
|
require.Equal(t, tc.expectedMatchesByHostname, gatewayChainSynthesizer.matchesByHostname)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGatewayChainSynthesizer_Synthesize(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
cases := map[string]struct {
|
||||||
|
synthesizer *GatewayChainSynthesizer
|
||||||
|
tcpRoutes []*structs.TCPRouteConfigEntry
|
||||||
|
httpRoutes []*structs.HTTPRouteConfigEntry
|
||||||
|
chain *structs.CompiledDiscoveryChain
|
||||||
|
extra []*structs.CompiledDiscoveryChain
|
||||||
|
expectedIngressServices []structs.IngressService
|
||||||
|
expectedDiscoveryChain *structs.CompiledDiscoveryChain
|
||||||
|
}{
|
||||||
|
// TODO Add tests for other synthesizer types.
|
||||||
|
"TCPRoute-based listener": {
|
||||||
|
synthesizer: NewGatewayChainSynthesizer("dc1", &structs.APIGatewayConfigEntry{
|
||||||
|
Kind: structs.APIGateway,
|
||||||
|
Name: "gateway",
|
||||||
|
}),
|
||||||
|
tcpRoutes: []*structs.TCPRouteConfigEntry{
|
||||||
|
{
|
||||||
|
Kind: structs.TCPRoute,
|
||||||
|
Name: "tcp-route",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
chain: &structs.CompiledDiscoveryChain{
|
||||||
|
ServiceName: "foo",
|
||||||
|
Namespace: "default",
|
||||||
|
Datacenter: "dc1",
|
||||||
|
},
|
||||||
|
extra: []*structs.CompiledDiscoveryChain{},
|
||||||
|
expectedIngressServices: []structs.IngressService{},
|
||||||
|
expectedDiscoveryChain: &structs.CompiledDiscoveryChain{
|
||||||
|
ServiceName: "foo",
|
||||||
|
Namespace: "default",
|
||||||
|
Datacenter: "dc1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"HTTPRoute-based listener": {
|
||||||
|
synthesizer: NewGatewayChainSynthesizer("dc1", &structs.APIGatewayConfigEntry{
|
||||||
|
Kind: structs.APIGateway,
|
||||||
|
Name: "gateway",
|
||||||
|
}),
|
||||||
|
httpRoutes: []*structs.HTTPRouteConfigEntry{
|
||||||
|
{
|
||||||
|
Kind: structs.HTTPRoute,
|
||||||
|
Name: "http-route",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
chain: &structs.CompiledDiscoveryChain{
|
||||||
|
ServiceName: "foo",
|
||||||
|
Namespace: "default",
|
||||||
|
Datacenter: "dc1",
|
||||||
|
},
|
||||||
|
extra: []*structs.CompiledDiscoveryChain{},
|
||||||
|
expectedIngressServices: []structs.IngressService{},
|
||||||
|
expectedDiscoveryChain: &structs.CompiledDiscoveryChain{
|
||||||
|
ServiceName: "foo",
|
||||||
|
Namespace: "default",
|
||||||
|
Datacenter: "dc1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for name, tc := range cases {
|
||||||
|
t.Run(name, func(t *testing.T) {
|
||||||
|
for _, tcpRoute := range tc.tcpRoutes {
|
||||||
|
tc.synthesizer.AddTCPRoute(*tcpRoute)
|
||||||
|
}
|
||||||
|
for _, httpRoute := range tc.httpRoutes {
|
||||||
|
tc.synthesizer.AddHTTPRoute(*httpRoute)
|
||||||
|
}
|
||||||
|
|
||||||
|
chains := append([]*structs.CompiledDiscoveryChain{tc.chain}, tc.extra...)
|
||||||
|
ingressServices, discoveryChain, err := tc.synthesizer.Synthesize(chains...)
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, tc.expectedIngressServices, ingressServices)
|
||||||
|
require.Equal(t, tc.expectedDiscoveryChain, discoveryChain)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,11 +2,13 @@ package proxycfg
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/consul/acl"
|
"github.com/hashicorp/consul/acl"
|
||||||
|
"github.com/hashicorp/consul/agent/consul/discoverychain"
|
||||||
"github.com/hashicorp/consul/agent/proxycfg/internal/watch"
|
"github.com/hashicorp/consul/agent/proxycfg/internal/watch"
|
||||||
"github.com/hashicorp/consul/agent/structs"
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
"github.com/hashicorp/consul/lib"
|
"github.com/hashicorp/consul/lib"
|
||||||
|
@ -688,14 +690,99 @@ type configSnapshotAPIGateway struct {
|
||||||
// Consul API Gateway into Consul core.
|
// Consul API Gateway into Consul core.
|
||||||
//
|
//
|
||||||
// FUTURE: Remove when API gateways have custom snapshot generation
|
// FUTURE: Remove when API gateways have custom snapshot generation
|
||||||
func (c *configSnapshotAPIGateway) ToIngress() configSnapshotIngressGateway {
|
func (c *configSnapshotAPIGateway) ToIngress(datacenter string) (configSnapshotIngressGateway, error) {
|
||||||
|
// Convert API Gateway Listeners to Ingress Listeners.
|
||||||
|
ingressListeners := make(map[IngressListenerKey]structs.IngressListener, len(c.Listeners))
|
||||||
|
synthesizedChains := map[UpstreamID]*structs.CompiledDiscoveryChain{}
|
||||||
|
for name, listener := range c.Listeners {
|
||||||
|
boundListener, ok := c.BoundListeners[name]
|
||||||
|
if !ok {
|
||||||
|
// Skip any listeners that don't have a bound listener. Once the bound listener is created, this will be run again.
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
ingressListener := structs.IngressListener{
|
||||||
|
Port: listener.Port,
|
||||||
|
Protocol: string(listener.Protocol),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a synthesized discovery chain for each service.
|
||||||
|
services, compiled, err := c.synthesizeChains(datacenter, listener.Protocol, boundListener)
|
||||||
|
if err != nil {
|
||||||
|
return configSnapshotIngressGateway{}, err
|
||||||
|
}
|
||||||
|
ingressListener.Services = services
|
||||||
|
for _, service := range services {
|
||||||
|
id := NewUpstreamIDFromServiceName(structs.NewServiceName(service.Name, &service.EnterpriseMeta))
|
||||||
|
synthesizedChains[id] = compiled
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure TLS for the ingress listener
|
||||||
|
tls, err := c.toIngressTLS()
|
||||||
|
if err != nil {
|
||||||
|
return configSnapshotIngressGateway{}, err
|
||||||
|
}
|
||||||
|
ingressListener.TLS = tls
|
||||||
|
|
||||||
|
ingressListeners[IngressListenerKey{
|
||||||
|
Port: listener.Port,
|
||||||
|
Protocol: string(listener.Protocol),
|
||||||
|
}] = ingressListener
|
||||||
|
}
|
||||||
|
upstreams := c.DeepCopy().ConfigSnapshotUpstreams
|
||||||
|
upstreams.DiscoveryChain = synthesizedChains
|
||||||
|
|
||||||
return configSnapshotIngressGateway{
|
return configSnapshotIngressGateway{
|
||||||
ConfigSnapshotUpstreams: c.ConfigSnapshotUpstreams,
|
ConfigSnapshotUpstreams: upstreams,
|
||||||
// TODO Build from c.Listeners
|
GatewayConfigLoaded: true,
|
||||||
// Listeners:
|
Listeners: ingressListeners,
|
||||||
Defaults: structs.IngressServiceConfig{},
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *configSnapshotAPIGateway) synthesizeChains(datacenter string, protocol structs.APIGatewayListenerProtocol, boundListener structs.BoundAPIGatewayListener) ([]structs.IngressService, *structs.CompiledDiscoveryChain, error) {
|
||||||
|
chains := []*structs.CompiledDiscoveryChain{}
|
||||||
|
synthesizer := discoverychain.NewGatewayChainSynthesizer(datacenter, c.GatewayConfig)
|
||||||
|
for _, routeRef := range boundListener.Routes {
|
||||||
|
switch routeRef.Kind {
|
||||||
|
case structs.HTTPRoute:
|
||||||
|
route, ok := c.HTTPRoutes.Get(routeRef)
|
||||||
|
if !ok || protocol != structs.ListenerProtocolHTTP {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
synthesizer.AddHTTPRoute(*route)
|
||||||
|
for _, service := range route.GetServices() {
|
||||||
|
id := NewUpstreamIDFromServiceName(structs.NewServiceName(service.Name, &service.EnterpriseMeta))
|
||||||
|
if chain := c.DiscoveryChain[id]; chain != nil {
|
||||||
|
chains = append(chains, chain)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case structs.TCPRoute:
|
||||||
|
route, ok := c.TCPRoutes.Get(routeRef)
|
||||||
|
if !ok || protocol != structs.ListenerProtocolTCP {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
synthesizer.AddTCPRoute(*route)
|
||||||
|
for _, service := range route.GetServices() {
|
||||||
|
id := NewUpstreamIDFromServiceName(structs.NewServiceName(service.Name, &service.EnterpriseMeta))
|
||||||
|
if chain := c.DiscoveryChain[id]; chain != nil {
|
||||||
|
chains = append(chains, chain)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return nil, nil, fmt.Errorf("unknown route kind %q", routeRef.Kind)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(chains) == 0 {
|
||||||
|
return nil, nil, errors.New("could not synthesize discovery chain")
|
||||||
|
}
|
||||||
|
|
||||||
|
return synthesizer.Synthesize(chains...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *configSnapshotAPIGateway) toIngressTLS() (*structs.GatewayTLSConfig, error) {
|
||||||
|
// TODO (t-eckert) this is dependent on future SDS work.
|
||||||
|
return &structs.GatewayTLSConfig{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type configSnapshotIngressGateway struct {
|
type configSnapshotIngressGateway struct {
|
||||||
|
|
|
@ -8,7 +8,10 @@ import (
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
"github.com/google/go-cmp/cmp/cmpopts"
|
"github.com/google/go-cmp/cmp/cmpopts"
|
||||||
fuzz "github.com/google/gofuzz"
|
fuzz "github.com/google/gofuzz"
|
||||||
|
"github.com/hashicorp/consul/agent/proxycfg/internal/watch"
|
||||||
|
"github.com/hashicorp/consul/agent/structs"
|
||||||
"github.com/hashicorp/consul/proto/pbpeering"
|
"github.com/hashicorp/consul/proto/pbpeering"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestConfigSnapshot_Clone(t *testing.T) {
|
func TestConfigSnapshot_Clone(t *testing.T) {
|
||||||
|
@ -50,3 +53,36 @@ func TestConfigSnapshot_Clone(t *testing.T) {
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAPIGatewaySnapshotToIngressGatewaySnapshot(t *testing.T) {
|
||||||
|
cases := map[string]struct {
|
||||||
|
apiGatewaySnapshot *configSnapshotAPIGateway
|
||||||
|
expected configSnapshotIngressGateway
|
||||||
|
}{
|
||||||
|
"default": {
|
||||||
|
apiGatewaySnapshot: &configSnapshotAPIGateway{
|
||||||
|
Listeners: map[string]structs.APIGatewayListener{},
|
||||||
|
},
|
||||||
|
expected: configSnapshotIngressGateway{
|
||||||
|
GatewayConfigLoaded: true,
|
||||||
|
ConfigSnapshotUpstreams: ConfigSnapshotUpstreams{
|
||||||
|
PeerUpstreamEndpoints: watch.NewMap[UpstreamID, structs.CheckServiceNodes](),
|
||||||
|
WatchedLocalGWEndpoints: watch.NewMap[string, structs.CheckServiceNodes](),
|
||||||
|
UpstreamPeerTrustBundles: watch.NewMap[string, *pbpeering.PeeringTrustBundle](),
|
||||||
|
DiscoveryChain: map[UpstreamID]*structs.CompiledDiscoveryChain{},
|
||||||
|
},
|
||||||
|
Listeners: map[IngressListenerKey]structs.IngressListener{},
|
||||||
|
Defaults: structs.IngressServiceConfig{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for name, tc := range cases {
|
||||||
|
t.Run(name, func(t *testing.T) {
|
||||||
|
actual, err := tc.apiGatewaySnapshot.ToIngress("dc1")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Equal(t, tc.expected, actual)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -206,7 +206,8 @@ type HTTPQueryMatch struct {
|
||||||
// HTTPFilters specifies a list of filters used to modify a request
|
// HTTPFilters specifies a list of filters used to modify a request
|
||||||
// before it is routed to an upstream.
|
// before it is routed to an upstream.
|
||||||
type HTTPFilters struct {
|
type HTTPFilters struct {
|
||||||
Headers []HTTPHeaderFilter
|
Headers []HTTPHeaderFilter
|
||||||
|
URLRewrites []URLRewrite
|
||||||
}
|
}
|
||||||
|
|
||||||
// HTTPHeaderFilter specifies how HTTP headers should be modified.
|
// HTTPHeaderFilter specifies how HTTP headers should be modified.
|
||||||
|
@ -216,6 +217,10 @@ type HTTPHeaderFilter struct {
|
||||||
Set map[string]string
|
Set map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type URLRewrite struct {
|
||||||
|
Path string
|
||||||
|
}
|
||||||
|
|
||||||
// HTTPRouteRule specifies the routing rules used to determine what upstream
|
// HTTPRouteRule specifies the routing rules used to determine what upstream
|
||||||
// service an HTTP request is routed to.
|
// service an HTTP request is routed to.
|
||||||
type HTTPRouteRule struct {
|
type HTTPRouteRule struct {
|
||||||
|
|
|
@ -329,6 +329,10 @@ func (o *HTTPRouteConfigEntry) DeepCopy() *HTTPRouteConfigEntry {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if o.Rules[i2].Filters.URLRewrites != nil {
|
||||||
|
cp.Rules[i2].Filters.URLRewrites = make([]URLRewrite, len(o.Rules[i2].Filters.URLRewrites))
|
||||||
|
copy(cp.Rules[i2].Filters.URLRewrites, o.Rules[i2].Filters.URLRewrites)
|
||||||
|
}
|
||||||
if o.Rules[i2].Matches != nil {
|
if o.Rules[i2].Matches != nil {
|
||||||
cp.Rules[i2].Matches = make([]HTTPMatch, len(o.Rules[i2].Matches))
|
cp.Rules[i2].Matches = make([]HTTPMatch, len(o.Rules[i2].Matches))
|
||||||
copy(cp.Rules[i2].Matches, o.Rules[i2].Matches)
|
copy(cp.Rules[i2].Matches, o.Rules[i2].Matches)
|
||||||
|
@ -369,6 +373,10 @@ func (o *HTTPRouteConfigEntry) DeepCopy() *HTTPRouteConfigEntry {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if o.Rules[i2].Services[i4].Filters.URLRewrites != nil {
|
||||||
|
cp.Rules[i2].Services[i4].Filters.URLRewrites = make([]URLRewrite, len(o.Rules[i2].Services[i4].Filters.URLRewrites))
|
||||||
|
copy(cp.Rules[i2].Services[i4].Filters.URLRewrites, o.Rules[i2].Services[i4].Filters.URLRewrites)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,11 @@ func (s *ResourceGenerator) clustersFromSnapshot(cfgSnap *proxycfg.ConfigSnapsho
|
||||||
return res, nil
|
return res, nil
|
||||||
case structs.ServiceKindAPIGateway:
|
case structs.ServiceKindAPIGateway:
|
||||||
// TODO Find a cleaner solution, can't currently pass unexported property types
|
// TODO Find a cleaner solution, can't currently pass unexported property types
|
||||||
cfgSnap.IngressGateway = cfgSnap.APIGateway.ToIngress()
|
var err error
|
||||||
|
cfgSnap.IngressGateway, err = cfgSnap.APIGateway.ToIngress(cfgSnap.Datacenter)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
res, err := s.clustersFromSnapshotIngressGateway(cfgSnap)
|
res, err := s.clustersFromSnapshotIngressGateway(cfgSnap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -39,7 +39,11 @@ func (s *ResourceGenerator) endpointsFromSnapshot(cfgSnap *proxycfg.ConfigSnapsh
|
||||||
return s.endpointsFromSnapshotIngressGateway(cfgSnap)
|
return s.endpointsFromSnapshotIngressGateway(cfgSnap)
|
||||||
case structs.ServiceKindAPIGateway:
|
case structs.ServiceKindAPIGateway:
|
||||||
// TODO Find a cleaner solution, can't currently pass unexported property types
|
// TODO Find a cleaner solution, can't currently pass unexported property types
|
||||||
cfgSnap.IngressGateway = cfgSnap.APIGateway.ToIngress()
|
var err error
|
||||||
|
cfgSnap.IngressGateway, err = cfgSnap.APIGateway.ToIngress(cfgSnap.Datacenter)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
return s.endpointsFromSnapshotIngressGateway(cfgSnap)
|
return s.endpointsFromSnapshotIngressGateway(cfgSnap)
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("Invalid service kind: %v", cfgSnap.Kind)
|
return nil, fmt.Errorf("Invalid service kind: %v", cfgSnap.Kind)
|
||||||
|
|
|
@ -850,7 +850,11 @@ func (s *ResourceGenerator) listenersFromSnapshotGateway(cfgSnap *proxycfg.Confi
|
||||||
}
|
}
|
||||||
case structs.ServiceKindAPIGateway:
|
case structs.ServiceKindAPIGateway:
|
||||||
// TODO Find a cleaner solution, can't currently pass unexported property types
|
// TODO Find a cleaner solution, can't currently pass unexported property types
|
||||||
cfgSnap.IngressGateway = cfgSnap.APIGateway.ToIngress()
|
var err error
|
||||||
|
cfgSnap.IngressGateway, err = cfgSnap.APIGateway.ToIngress(cfgSnap.Datacenter)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
listeners, err := s.makeIngressGatewayListeners(a.Address, cfgSnap)
|
listeners, err := s.makeIngressGatewayListeners(a.Address, cfgSnap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -34,7 +34,11 @@ func (s *ResourceGenerator) routesFromSnapshot(cfgSnap *proxycfg.ConfigSnapshot)
|
||||||
return s.routesForIngressGateway(cfgSnap)
|
return s.routesForIngressGateway(cfgSnap)
|
||||||
case structs.ServiceKindAPIGateway:
|
case structs.ServiceKindAPIGateway:
|
||||||
// TODO Find a cleaner solution, can't currently pass unexported property types
|
// TODO Find a cleaner solution, can't currently pass unexported property types
|
||||||
cfgSnap.IngressGateway = cfgSnap.APIGateway.ToIngress()
|
var err error
|
||||||
|
cfgSnap.IngressGateway, err = cfgSnap.APIGateway.ToIngress(cfgSnap.Datacenter)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
return s.routesForIngressGateway(cfgSnap)
|
return s.routesForIngressGateway(cfgSnap)
|
||||||
case structs.ServiceKindTerminatingGateway:
|
case structs.ServiceKindTerminatingGateway:
|
||||||
return s.routesForTerminatingGateway(cfgSnap)
|
return s.routesForTerminatingGateway(cfgSnap)
|
||||||
|
|
|
@ -364,6 +364,14 @@ func HTTPFiltersToStructs(s *HTTPFilters, t *structs.HTTPFilters) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
t.URLRewrites = make([]structs.URLRewrite, len(s.URLRewrites))
|
||||||
|
for i := range s.URLRewrites {
|
||||||
|
if s.URLRewrites[i] != nil {
|
||||||
|
URLRewriteToStructs(s.URLRewrites[i], &t.URLRewrites[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
func HTTPFiltersFromStructs(t *structs.HTTPFilters, s *HTTPFilters) {
|
func HTTPFiltersFromStructs(t *structs.HTTPFilters, s *HTTPFilters) {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
|
@ -379,6 +387,16 @@ func HTTPFiltersFromStructs(t *structs.HTTPFilters, s *HTTPFilters) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
s.URLRewrites = make([]*URLRewrite, len(t.URLRewrites))
|
||||||
|
for i := range t.URLRewrites {
|
||||||
|
{
|
||||||
|
var x URLRewrite
|
||||||
|
URLRewriteFromStructs(&t.URLRewrites[i], &x)
|
||||||
|
s.URLRewrites[i] = &x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
func HTTPHeaderFilterToStructs(s *HTTPHeaderFilter, t *structs.HTTPHeaderFilter) {
|
func HTTPHeaderFilterToStructs(s *HTTPHeaderFilter, t *structs.HTTPHeaderFilter) {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
|
@ -1654,6 +1672,18 @@ func TransparentProxyMeshConfigFromStructs(t *structs.TransparentProxyMeshConfig
|
||||||
}
|
}
|
||||||
s.MeshDestinationsOnly = t.MeshDestinationsOnly
|
s.MeshDestinationsOnly = t.MeshDestinationsOnly
|
||||||
}
|
}
|
||||||
|
func URLRewriteToStructs(s *URLRewrite, t *structs.URLRewrite) {
|
||||||
|
if s == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.Path = s.Path
|
||||||
|
}
|
||||||
|
func URLRewriteFromStructs(t *structs.URLRewrite, s *URLRewrite) {
|
||||||
|
if s == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
s.Path = t.Path
|
||||||
|
}
|
||||||
func UpstreamConfigToStructs(s *UpstreamConfig, t *structs.UpstreamConfig) {
|
func UpstreamConfigToStructs(s *UpstreamConfig, t *structs.UpstreamConfig) {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
return
|
return
|
||||||
|
|
|
@ -567,6 +567,16 @@ func (msg *HTTPFilters) UnmarshalBinary(b []byte) error {
|
||||||
return proto.Unmarshal(b, msg)
|
return proto.Unmarshal(b, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MarshalBinary implements encoding.BinaryMarshaler
|
||||||
|
func (msg *URLRewrite) MarshalBinary() ([]byte, error) {
|
||||||
|
return proto.Marshal(msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalBinary implements encoding.BinaryUnmarshaler
|
||||||
|
func (msg *URLRewrite) UnmarshalBinary(b []byte) error {
|
||||||
|
return proto.Unmarshal(b, msg)
|
||||||
|
}
|
||||||
|
|
||||||
// MarshalBinary implements encoding.BinaryMarshaler
|
// MarshalBinary implements encoding.BinaryMarshaler
|
||||||
func (msg *HTTPHeaderFilter) MarshalBinary() ([]byte, error) {
|
func (msg *HTTPHeaderFilter) MarshalBinary() ([]byte, error) {
|
||||||
return proto.Marshal(msg)
|
return proto.Marshal(msg)
|
||||||
|
|
|
@ -4902,7 +4902,8 @@ type HTTPFilters struct {
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
Headers []*HTTPHeaderFilter `protobuf:"bytes,1,rep,name=Headers,proto3" json:"Headers,omitempty"`
|
Headers []*HTTPHeaderFilter `protobuf:"bytes,1,rep,name=Headers,proto3" json:"Headers,omitempty"`
|
||||||
|
URLRewrites []*URLRewrite `protobuf:"bytes,2,rep,name=URLRewrites,proto3" json:"URLRewrites,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *HTTPFilters) Reset() {
|
func (x *HTTPFilters) Reset() {
|
||||||
|
@ -4944,6 +4945,65 @@ func (x *HTTPFilters) GetHeaders() []*HTTPHeaderFilter {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *HTTPFilters) GetURLRewrites() []*URLRewrite {
|
||||||
|
if x != nil {
|
||||||
|
return x.URLRewrites
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// mog annotation:
|
||||||
|
//
|
||||||
|
// target=github.com/hashicorp/consul/agent/structs.URLRewrite
|
||||||
|
// output=config_entry.gen.go
|
||||||
|
// name=Structs
|
||||||
|
type URLRewrite struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
Path string `protobuf:"bytes,1,opt,name=Path,proto3" json:"Path,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *URLRewrite) Reset() {
|
||||||
|
*x = URLRewrite{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[56]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *URLRewrite) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*URLRewrite) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *URLRewrite) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[56]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use URLRewrite.ProtoReflect.Descriptor instead.
|
||||||
|
func (*URLRewrite) Descriptor() ([]byte, []int) {
|
||||||
|
return file_proto_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{56}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *URLRewrite) GetPath() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.Path
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
// mog annotation:
|
// mog annotation:
|
||||||
//
|
//
|
||||||
// target=github.com/hashicorp/consul/agent/structs.HTTPHeaderFilter
|
// target=github.com/hashicorp/consul/agent/structs.HTTPHeaderFilter
|
||||||
|
@ -4962,7 +5022,7 @@ type HTTPHeaderFilter struct {
|
||||||
func (x *HTTPHeaderFilter) Reset() {
|
func (x *HTTPHeaderFilter) Reset() {
|
||||||
*x = HTTPHeaderFilter{}
|
*x = HTTPHeaderFilter{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[56]
|
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[57]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
|
@ -4975,7 +5035,7 @@ func (x *HTTPHeaderFilter) String() string {
|
||||||
func (*HTTPHeaderFilter) ProtoMessage() {}
|
func (*HTTPHeaderFilter) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *HTTPHeaderFilter) ProtoReflect() protoreflect.Message {
|
func (x *HTTPHeaderFilter) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[56]
|
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[57]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@ -4988,7 +5048,7 @@ func (x *HTTPHeaderFilter) ProtoReflect() protoreflect.Message {
|
||||||
|
|
||||||
// Deprecated: Use HTTPHeaderFilter.ProtoReflect.Descriptor instead.
|
// Deprecated: Use HTTPHeaderFilter.ProtoReflect.Descriptor instead.
|
||||||
func (*HTTPHeaderFilter) Descriptor() ([]byte, []int) {
|
func (*HTTPHeaderFilter) Descriptor() ([]byte, []int) {
|
||||||
return file_proto_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{56}
|
return file_proto_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{57}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *HTTPHeaderFilter) GetAdd() map[string]string {
|
func (x *HTTPHeaderFilter) GetAdd() map[string]string {
|
||||||
|
@ -5033,7 +5093,7 @@ type HTTPService struct {
|
||||||
func (x *HTTPService) Reset() {
|
func (x *HTTPService) Reset() {
|
||||||
*x = HTTPService{}
|
*x = HTTPService{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[57]
|
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[58]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
|
@ -5046,7 +5106,7 @@ func (x *HTTPService) String() string {
|
||||||
func (*HTTPService) ProtoMessage() {}
|
func (*HTTPService) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *HTTPService) ProtoReflect() protoreflect.Message {
|
func (x *HTTPService) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[57]
|
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[58]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@ -5059,7 +5119,7 @@ func (x *HTTPService) ProtoReflect() protoreflect.Message {
|
||||||
|
|
||||||
// Deprecated: Use HTTPService.ProtoReflect.Descriptor instead.
|
// Deprecated: Use HTTPService.ProtoReflect.Descriptor instead.
|
||||||
func (*HTTPService) Descriptor() ([]byte, []int) {
|
func (*HTTPService) Descriptor() ([]byte, []int) {
|
||||||
return file_proto_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{57}
|
return file_proto_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{58}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *HTTPService) GetName() string {
|
func (x *HTTPService) GetName() string {
|
||||||
|
@ -5110,7 +5170,7 @@ type TCPRoute struct {
|
||||||
func (x *TCPRoute) Reset() {
|
func (x *TCPRoute) Reset() {
|
||||||
*x = TCPRoute{}
|
*x = TCPRoute{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[58]
|
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[59]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
|
@ -5123,7 +5183,7 @@ func (x *TCPRoute) String() string {
|
||||||
func (*TCPRoute) ProtoMessage() {}
|
func (*TCPRoute) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *TCPRoute) ProtoReflect() protoreflect.Message {
|
func (x *TCPRoute) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[58]
|
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[59]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@ -5136,7 +5196,7 @@ func (x *TCPRoute) ProtoReflect() protoreflect.Message {
|
||||||
|
|
||||||
// Deprecated: Use TCPRoute.ProtoReflect.Descriptor instead.
|
// Deprecated: Use TCPRoute.ProtoReflect.Descriptor instead.
|
||||||
func (*TCPRoute) Descriptor() ([]byte, []int) {
|
func (*TCPRoute) Descriptor() ([]byte, []int) {
|
||||||
return file_proto_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{58}
|
return file_proto_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{59}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *TCPRoute) GetMeta() map[string]string {
|
func (x *TCPRoute) GetMeta() map[string]string {
|
||||||
|
@ -5187,7 +5247,7 @@ type TCPService struct {
|
||||||
func (x *TCPService) Reset() {
|
func (x *TCPService) Reset() {
|
||||||
*x = TCPService{}
|
*x = TCPService{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[59]
|
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[60]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
|
@ -5200,7 +5260,7 @@ func (x *TCPService) String() string {
|
||||||
func (*TCPService) ProtoMessage() {}
|
func (*TCPService) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *TCPService) ProtoReflect() protoreflect.Message {
|
func (x *TCPService) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[59]
|
mi := &file_proto_pbconfigentry_config_entry_proto_msgTypes[60]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
@ -5213,7 +5273,7 @@ func (x *TCPService) ProtoReflect() protoreflect.Message {
|
||||||
|
|
||||||
// Deprecated: Use TCPService.ProtoReflect.Descriptor instead.
|
// Deprecated: Use TCPService.ProtoReflect.Descriptor instead.
|
||||||
func (*TCPService) Descriptor() ([]byte, []int) {
|
func (*TCPService) Descriptor() ([]byte, []int) {
|
||||||
return file_proto_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{59}
|
return file_proto_pbconfigentry_config_entry_proto_rawDescGZIP(), []int{60}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *TCPService) GetName() string {
|
func (x *TCPService) GetName() string {
|
||||||
|
@ -6196,180 +6256,188 @@ var file_proto_pbconfigentry_config_entry_proto_rawDesc = []byte{
|
||||||
0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x61, 0x74,
|
0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x4d, 0x61, 0x74,
|
||||||
0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18,
|
0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18,
|
||||||
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x60, 0x0a, 0x0b,
|
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb5, 0x01, 0x0a,
|
||||||
0x48, 0x54, 0x54, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x51, 0x0a, 0x07, 0x48,
|
0x0b, 0x48, 0x54, 0x54, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x51, 0x0a, 0x07,
|
||||||
0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x68,
|
0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e,
|
||||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||||
0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65,
|
0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
|
||||||
0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46,
|
0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72,
|
||||||
0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0xc2,
|
0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12,
|
||||||
0x02, 0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c,
|
0x53, 0x0a, 0x0b, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x18, 0x02,
|
||||||
0x74, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x03, 0x41, 0x64, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
|
0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
||||||
0x32, 0x40, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e,
|
0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
|
||||||
0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e,
|
0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x55, 0x52, 0x4c,
|
||||||
0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61,
|
0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x0b, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x77, 0x72,
|
||||||
0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74,
|
0x69, 0x74, 0x65, 0x73, 0x22, 0x20, 0x0a, 0x0a, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x77, 0x72, 0x69,
|
||||||
0x72, 0x79, 0x52, 0x03, 0x41, 0x64, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76,
|
0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12,
|
0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x22, 0xc2, 0x02, 0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x48,
|
||||||
0x52, 0x0a, 0x03, 0x53, 0x65, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x68,
|
0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x03, 0x41,
|
||||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
0x64, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69,
|
||||||
0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65,
|
0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65,
|
||||||
0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46,
|
0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79,
|
||||||
0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03,
|
0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65,
|
||||||
0x53, 0x65, 0x74, 0x1a, 0x36, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
|
0x72, 0x2e, 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x41, 0x64, 0x64, 0x12,
|
||||||
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
|
0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
|
||||||
0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x52, 0x0a, 0x03, 0x53, 0x65, 0x74, 0x18, 0x03,
|
||||||
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x36, 0x0a, 0x08, 0x53,
|
0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
||||||
0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
|
0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
|
||||||
|
0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54,
|
||||||
|
0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x65,
|
||||||
|
0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x53, 0x65, 0x74, 0x1a, 0x36, 0x0a, 0x08, 0x41,
|
||||||
|
0x64, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
|
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
|
||||||
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
|
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
|
||||||
0x02, 0x38, 0x01, 0x22, 0xe1, 0x01, 0x0a, 0x0b, 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x72, 0x76,
|
0x02, 0x38, 0x01, 0x1a, 0x36, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
|
||||||
0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
|
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
|
||||||
0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68,
|
0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12,
|
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe1, 0x01, 0x0a, 0x0b,
|
||||||
0x4c, 0x0a, 0x07, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
|
0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e,
|
||||||
0x32, 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e,
|
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12,
|
||||||
0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e,
|
0x16, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
|
||||||
0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x69, 0x6c,
|
0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x4c, 0x0a, 0x07, 0x46, 0x69, 0x6c, 0x74, 0x65,
|
||||||
0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a,
|
0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69,
|
||||||
0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18,
|
0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65,
|
||||||
0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72,
|
0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79,
|
||||||
0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
|
0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x52, 0x07, 0x46, 0x69,
|
||||||
0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72,
|
0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72,
|
||||||
0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72,
|
0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e,
|
||||||
0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x22, 0xfc, 0x02, 0x0a, 0x08, 0x54, 0x43, 0x50, 0x52,
|
0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||||
0x6f, 0x75, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03,
|
0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
|
||||||
0x28, 0x0b, 0x32, 0x39, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63,
|
0x2e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52,
|
||||||
0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63,
|
0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x22,
|
||||||
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x43, 0x50, 0x52, 0x6f,
|
0xfc, 0x02, 0x0a, 0x08, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x04,
|
||||||
0x75, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d,
|
0x4d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x68, 0x61, 0x73,
|
||||||
0x65, 0x74, 0x61, 0x12, 0x52, 0x0a, 0x07, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02,
|
0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e,
|
||||||
0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74,
|
||||||
0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
|
0x72, 0x79, 0x2e, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61,
|
||||||
0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73,
|
0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x52, 0x0a, 0x07, 0x50,
|
||||||
0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07,
|
0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x68,
|
||||||
0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69,
|
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
||||||
0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x61, 0x73, 0x68,
|
0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65,
|
||||||
0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74,
|
0x6e, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66,
|
||||||
0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72,
|
0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x73, 0x12,
|
||||||
0x79, 0x2e, 0x54, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x08, 0x53, 0x65,
|
0x4d, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
|
||||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
0x0b, 0x32, 0x31, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f,
|
||||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f,
|
0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f,
|
||||||
0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x43, 0x50, 0x53, 0x65, 0x72,
|
||||||
0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x53,
|
0x76, 0x69, 0x63, 0x65, 0x52, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x45,
|
||||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x37, 0x0a,
|
0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d,
|
||||||
0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
|
0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75,
|
||||||
0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
|
0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
|
||||||
0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
|
0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x53,
|
||||||
0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x92, 0x01, 0x0a, 0x0a, 0x54, 0x43, 0x50, 0x53, 0x65,
|
0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74,
|
||||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
|
0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, 0x69,
|
0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
|
||||||
0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68,
|
0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x92,
|
||||||
0x74, 0x12, 0x58, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d,
|
0x01, 0x0a, 0x0a, 0x54, 0x43, 0x50, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a,
|
||||||
0x65, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x61, 0x73, 0x68,
|
0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d,
|
||||||
0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74,
|
0x65, 0x12, 0x16, 0x0a, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||||
0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74,
|
0x05, 0x52, 0x06, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x58, 0x0a, 0x0e, 0x45, 0x6e, 0x74,
|
||||||
0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, 0x74,
|
0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28,
|
||||||
0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x2a, 0xfd, 0x01, 0x0a, 0x04,
|
0x0b, 0x32, 0x30, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f,
|
||||||
0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0f, 0x0a, 0x0b, 0x4b, 0x69, 0x6e, 0x64, 0x55, 0x6e, 0x6b, 0x6e,
|
0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f,
|
||||||
0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4b, 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x73,
|
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d,
|
||||||
0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4b, 0x69, 0x6e,
|
0x65, 0x74, 0x61, 0x52, 0x0e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x69, 0x73, 0x65, 0x4d,
|
||||||
0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72,
|
0x65, 0x74, 0x61, 0x2a, 0xfd, 0x01, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0f, 0x0a, 0x0b,
|
||||||
0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4b, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73,
|
0x4b, 0x69, 0x6e, 0x64, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x12, 0x0a,
|
||||||
0x73, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x4b, 0x69,
|
0x0e, 0x4b, 0x69, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x10,
|
||||||
0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69,
|
0x01, 0x12, 0x17, 0x0a, 0x13, 0x4b, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||||
0x6f, 0x6e, 0x73, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x4b, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72,
|
0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4b, 0x69,
|
||||||
0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x10, 0x05, 0x12, 0x19,
|
0x6e, 0x64, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
|
||||||
0x0a, 0x15, 0x4b, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x43, 0x65, 0x72, 0x74,
|
0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x4b, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||||
0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x4b, 0x69, 0x6e,
|
0x65, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x10, 0x04, 0x12, 0x17, 0x0a,
|
||||||
0x64, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x10, 0x07, 0x12, 0x17, 0x0a,
|
0x13, 0x4b, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61,
|
||||||
0x13, 0x4b, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74,
|
0x75, 0x6c, 0x74, 0x73, 0x10, 0x05, 0x12, 0x19, 0x0a, 0x15, 0x4b, 0x69, 0x6e, 0x64, 0x49, 0x6e,
|
||||||
0x65, 0x77, 0x61, 0x79, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, 0x4b, 0x69, 0x6e, 0x64, 0x48, 0x54,
|
0x6c, 0x69, 0x6e, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x10,
|
||||||
0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x4b, 0x69, 0x6e,
|
0x06, 0x12, 0x12, 0x0a, 0x0e, 0x4b, 0x69, 0x6e, 0x64, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65,
|
||||||
0x64, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x10, 0x0a, 0x2a, 0x26, 0x0a, 0x0f, 0x49,
|
0x77, 0x61, 0x79, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x4b, 0x69, 0x6e, 0x64, 0x42, 0x6f, 0x75,
|
||||||
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08,
|
0x6e, 0x64, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x10, 0x08, 0x12, 0x11,
|
||||||
0x0a, 0x04, 0x44, 0x65, 0x6e, 0x79, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x6c, 0x6c, 0x6f,
|
0x0a, 0x0d, 0x4b, 0x69, 0x6e, 0x64, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x10,
|
||||||
0x77, 0x10, 0x01, 0x2a, 0x21, 0x0a, 0x13, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e,
|
0x09, 0x12, 0x10, 0x0a, 0x0c, 0x4b, 0x69, 0x6e, 0x64, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74,
|
||||||
0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x6f,
|
0x65, 0x10, 0x0a, 0x2a, 0x26, 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
0x6e, 0x73, 0x75, 0x6c, 0x10, 0x00, 0x2a, 0x50, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d,
|
0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x65, 0x6e, 0x79, 0x10, 0x00,
|
||||||
0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65,
|
0x12, 0x09, 0x0a, 0x05, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x10, 0x01, 0x2a, 0x21, 0x0a, 0x13, 0x49,
|
||||||
0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x72, 0x6f,
|
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79,
|
||||||
0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e,
|
0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x10, 0x00, 0x2a, 0x50,
|
||||||
0x74, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65,
|
0x0a, 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x50,
|
||||||
0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x10, 0x02, 0x2a, 0x7b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x68,
|
0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10,
|
||||||
0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x4d,
|
0x00, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x54, 0x72,
|
||||||
0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x44, 0x65,
|
0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x50,
|
||||||
0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x65, 0x73, 0x68, 0x47,
|
0x72, 0x6f, 0x78, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x10, 0x02,
|
||||||
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x01,
|
0x2a, 0x7b, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d,
|
||||||
0x12, 0x18, 0x0a, 0x14, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d,
|
0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77,
|
||||||
0x6f, 0x64, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x65,
|
0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x10, 0x00, 0x12,
|
||||||
0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6d,
|
0x17, 0x0a, 0x13, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f,
|
||||||
0x6f, 0x74, 0x65, 0x10, 0x03, 0x2a, 0x4f, 0x0a, 0x1a, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65,
|
0x64, 0x65, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x65, 0x73, 0x68,
|
||||||
0x77, 0x61, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f,
|
0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c,
|
||||||
0x63, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50,
|
0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x65, 0x73, 0x68, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x48, 0x54, 0x54, 0x50, 0x10, 0x00, 0x12, 0x17, 0x0a,
|
0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x10, 0x03, 0x2a, 0x4f, 0x0a,
|
||||||
0x13, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f,
|
0x1a, 0x41, 0x50, 0x49, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x65,
|
||||||
0x6c, 0x54, 0x43, 0x50, 0x10, 0x01, 0x2a, 0x92, 0x02, 0x0a, 0x0f, 0x48, 0x54, 0x54, 0x50, 0x4d,
|
0x6e, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x14, 0x4c,
|
||||||
0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54,
|
0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x48,
|
||||||
0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x41, 0x6c, 0x6c,
|
0x54, 0x54, 0x50, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65,
|
||||||
0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d,
|
0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x54, 0x43, 0x50, 0x10, 0x01, 0x2a, 0x92,
|
||||||
0x65, 0x74, 0x68, 0x6f, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x10, 0x01, 0x12, 0x19,
|
0x02, 0x0a, 0x0f, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68,
|
||||||
0x0a, 0x15, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f,
|
0x6f, 0x64, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d,
|
||||||
0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54,
|
0x65, 0x74, 0x68, 0x6f, 0x64, 0x41, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x48, 0x54,
|
||||||
0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x47, 0x65, 0x74, 0x10,
|
0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x43, 0x6f, 0x6e,
|
||||||
0x03, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65,
|
0x6e, 0x65, 0x63, 0x74, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61,
|
||||||
0x74, 0x68, 0x6f, 0x64, 0x48, 0x65, 0x61, 0x64, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x48, 0x54,
|
0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x10,
|
||||||
0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74,
|
0x02, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65,
|
||||||
0x69, 0x6f, 0x6e, 0x73, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61,
|
0x74, 0x68, 0x6f, 0x64, 0x47, 0x65, 0x74, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54,
|
||||||
0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x50, 0x61, 0x74, 0x63, 0x68, 0x10, 0x06,
|
0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x48, 0x65, 0x61, 0x64,
|
||||||
0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74,
|
0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d,
|
||||||
0x68, 0x6f, 0x64, 0x50, 0x6f, 0x73, 0x74, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54,
|
0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x10, 0x05, 0x12, 0x18,
|
||||||
0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x50, 0x75, 0x74, 0x10,
|
0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f,
|
||||||
0x08, 0x12, 0x18, 0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65,
|
0x64, 0x50, 0x61, 0x74, 0x63, 0x68, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50,
|
||||||
0x74, 0x68, 0x6f, 0x64, 0x54, 0x72, 0x61, 0x63, 0x65, 0x10, 0x09, 0x2a, 0xa7, 0x01, 0x0a, 0x13,
|
0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x50, 0x6f, 0x73, 0x74, 0x10,
|
||||||
0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54,
|
0x07, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65,
|
||||||
0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65,
|
0x74, 0x68, 0x6f, 0x64, 0x50, 0x75, 0x74, 0x10, 0x08, 0x12, 0x18, 0x0a, 0x14, 0x48, 0x54, 0x54,
|
||||||
0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, 0x00, 0x12, 0x19, 0x0a,
|
0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x54, 0x72, 0x61, 0x63,
|
||||||
0x15, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68,
|
0x65, 0x10, 0x09, 0x2a, 0xa7, 0x01, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64,
|
||||||
0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x48, 0x54, 0x54, 0x50,
|
0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x48,
|
||||||
0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65,
|
0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78,
|
||||||
0x6e, 0x74, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64,
|
0x61, 0x63, 0x74, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61,
|
||||||
0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x45, 0x78,
|
0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x10, 0x01,
|
||||||
0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x54,
|
0x12, 0x1a, 0x0a, 0x16, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61,
|
||||||
0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x75, 0x66,
|
0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20,
|
||||||
0x66, 0x69, 0x78, 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x11, 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74,
|
0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52,
|
||||||
0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54,
|
0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
|
||||||
0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x61, 0x63, 0x74,
|
0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72,
|
||||||
0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61,
|
0x4d, 0x61, 0x74, 0x63, 0x68, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x10, 0x04, 0x2a, 0x68, 0x0a,
|
||||||
0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x48,
|
0x11, 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79,
|
||||||
0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x67, 0x75,
|
0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61,
|
||||||
0x6c, 0x61, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x2a,
|
0x74, 0x63, 0x68, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54,
|
||||||
0x6d, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63,
|
0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69,
|
||||||
0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65,
|
0x78, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x48, 0x54, 0x54, 0x50, 0x50, 0x61, 0x74, 0x68, 0x4d,
|
||||||
0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x61, 0x63, 0x74, 0x10, 0x00, 0x12, 0x19,
|
0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65,
|
||||||
0x0a, 0x15, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68,
|
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x2a, 0x6d, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x51,
|
||||||
0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x48, 0x54, 0x54,
|
0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a,
|
||||||
0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x67, 0x75, 0x6c,
|
0x13, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x45,
|
||||||
0x61, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x42, 0xa6,
|
0x78, 0x61, 0x63, 0x74, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75,
|
||||||
0x02, 0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
0x65, 0x72, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x10,
|
||||||
0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
|
0x01, 0x12, 0x23, 0x0a, 0x1f, 0x48, 0x54, 0x54, 0x50, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x61,
|
||||||
0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x10, 0x43, 0x6f,
|
0x74, 0x63, 0x68, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73,
|
||||||
0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
|
0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x42, 0xa6, 0x02, 0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68,
|
||||||
0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73,
|
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
||||||
0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72,
|
0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65,
|
||||||
0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72,
|
0x6e, 0x74, 0x72, 0x79, 0x42, 0x10, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72,
|
||||||
0x79, 0xa2, 0x02, 0x04, 0x48, 0x43, 0x49, 0x43, 0xaa, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69,
|
0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
|
||||||
0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x49, 0x6e, 0x74, 0x65,
|
0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63,
|
||||||
0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79,
|
0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x63, 0x6f,
|
||||||
0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e,
|
0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0xa2, 0x02, 0x04, 0x48, 0x43, 0x49, 0x43,
|
||||||
0x73, 0x75, 0x6c, 0x5c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5c, 0x43, 0x6f, 0x6e,
|
0xaa, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e,
|
||||||
0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0xe2, 0x02, 0x31, 0x48, 0x61, 0x73, 0x68, 0x69,
|
0x73, 0x75, 0x6c, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x6e,
|
||||||
|
0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69,
|
||||||
0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x49, 0x6e, 0x74, 0x65,
|
0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x49, 0x6e, 0x74, 0x65,
|
||||||
0x72, 0x6e, 0x61, 0x6c, 0x5c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79,
|
0x72, 0x6e, 0x61, 0x6c, 0x5c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79,
|
||||||
0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x48,
|
0xe2, 0x02, 0x31, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e,
|
||||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
0x73, 0x75, 0x6c, 0x5c, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5c, 0x43, 0x6f, 0x6e,
|
||||||
0x3a, 0x3a, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x66,
|
0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61,
|
||||||
0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
||||||
|
0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
||||||
|
0x61, 0x6c, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x62,
|
||||||
|
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -6385,7 +6453,7 @@ func file_proto_pbconfigentry_config_entry_proto_rawDescGZIP() []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_proto_pbconfigentry_config_entry_proto_enumTypes = make([]protoimpl.EnumInfo, 10)
|
var file_proto_pbconfigentry_config_entry_proto_enumTypes = make([]protoimpl.EnumInfo, 10)
|
||||||
var file_proto_pbconfigentry_config_entry_proto_msgTypes = make([]protoimpl.MessageInfo, 78)
|
var file_proto_pbconfigentry_config_entry_proto_msgTypes = make([]protoimpl.MessageInfo, 79)
|
||||||
var file_proto_pbconfigentry_config_entry_proto_goTypes = []interface{}{
|
var file_proto_pbconfigentry_config_entry_proto_goTypes = []interface{}{
|
||||||
(Kind)(0), // 0: hashicorp.consul.internal.configentry.Kind
|
(Kind)(0), // 0: hashicorp.consul.internal.configentry.Kind
|
||||||
(IntentionAction)(0), // 1: hashicorp.consul.internal.configentry.IntentionAction
|
(IntentionAction)(0), // 1: hashicorp.consul.internal.configentry.IntentionAction
|
||||||
|
@ -6453,38 +6521,39 @@ var file_proto_pbconfigentry_config_entry_proto_goTypes = []interface{}{
|
||||||
(*HTTPPathMatch)(nil), // 63: hashicorp.consul.internal.configentry.HTTPPathMatch
|
(*HTTPPathMatch)(nil), // 63: hashicorp.consul.internal.configentry.HTTPPathMatch
|
||||||
(*HTTPQueryMatch)(nil), // 64: hashicorp.consul.internal.configentry.HTTPQueryMatch
|
(*HTTPQueryMatch)(nil), // 64: hashicorp.consul.internal.configentry.HTTPQueryMatch
|
||||||
(*HTTPFilters)(nil), // 65: hashicorp.consul.internal.configentry.HTTPFilters
|
(*HTTPFilters)(nil), // 65: hashicorp.consul.internal.configentry.HTTPFilters
|
||||||
(*HTTPHeaderFilter)(nil), // 66: hashicorp.consul.internal.configentry.HTTPHeaderFilter
|
(*URLRewrite)(nil), // 66: hashicorp.consul.internal.configentry.URLRewrite
|
||||||
(*HTTPService)(nil), // 67: hashicorp.consul.internal.configentry.HTTPService
|
(*HTTPHeaderFilter)(nil), // 67: hashicorp.consul.internal.configentry.HTTPHeaderFilter
|
||||||
(*TCPRoute)(nil), // 68: hashicorp.consul.internal.configentry.TCPRoute
|
(*HTTPService)(nil), // 68: hashicorp.consul.internal.configentry.HTTPService
|
||||||
(*TCPService)(nil), // 69: hashicorp.consul.internal.configentry.TCPService
|
(*TCPRoute)(nil), // 69: hashicorp.consul.internal.configentry.TCPRoute
|
||||||
nil, // 70: hashicorp.consul.internal.configentry.MeshConfig.MetaEntry
|
(*TCPService)(nil), // 70: hashicorp.consul.internal.configentry.TCPService
|
||||||
nil, // 71: hashicorp.consul.internal.configentry.ServiceResolver.SubsetsEntry
|
nil, // 71: hashicorp.consul.internal.configentry.MeshConfig.MetaEntry
|
||||||
nil, // 72: hashicorp.consul.internal.configentry.ServiceResolver.FailoverEntry
|
nil, // 72: hashicorp.consul.internal.configentry.ServiceResolver.SubsetsEntry
|
||||||
nil, // 73: hashicorp.consul.internal.configentry.ServiceResolver.MetaEntry
|
nil, // 73: hashicorp.consul.internal.configentry.ServiceResolver.FailoverEntry
|
||||||
nil, // 74: hashicorp.consul.internal.configentry.IngressGateway.MetaEntry
|
nil, // 74: hashicorp.consul.internal.configentry.ServiceResolver.MetaEntry
|
||||||
nil, // 75: hashicorp.consul.internal.configentry.IngressService.MetaEntry
|
nil, // 75: hashicorp.consul.internal.configentry.IngressGateway.MetaEntry
|
||||||
nil, // 76: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.AddEntry
|
nil, // 76: hashicorp.consul.internal.configentry.IngressService.MetaEntry
|
||||||
nil, // 77: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.SetEntry
|
nil, // 77: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.AddEntry
|
||||||
nil, // 78: hashicorp.consul.internal.configentry.ServiceIntentions.MetaEntry
|
nil, // 78: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.SetEntry
|
||||||
nil, // 79: hashicorp.consul.internal.configentry.SourceIntention.LegacyMetaEntry
|
nil, // 79: hashicorp.consul.internal.configentry.ServiceIntentions.MetaEntry
|
||||||
nil, // 80: hashicorp.consul.internal.configentry.ServiceDefaults.MetaEntry
|
nil, // 80: hashicorp.consul.internal.configentry.SourceIntention.LegacyMetaEntry
|
||||||
nil, // 81: hashicorp.consul.internal.configentry.APIGateway.MetaEntry
|
nil, // 81: hashicorp.consul.internal.configentry.ServiceDefaults.MetaEntry
|
||||||
nil, // 82: hashicorp.consul.internal.configentry.BoundAPIGateway.MetaEntry
|
nil, // 82: hashicorp.consul.internal.configentry.APIGateway.MetaEntry
|
||||||
nil, // 83: hashicorp.consul.internal.configentry.InlineCertificate.MetaEntry
|
nil, // 83: hashicorp.consul.internal.configentry.BoundAPIGateway.MetaEntry
|
||||||
nil, // 84: hashicorp.consul.internal.configentry.HTTPRoute.MetaEntry
|
nil, // 84: hashicorp.consul.internal.configentry.InlineCertificate.MetaEntry
|
||||||
nil, // 85: hashicorp.consul.internal.configentry.HTTPHeaderFilter.AddEntry
|
nil, // 85: hashicorp.consul.internal.configentry.HTTPRoute.MetaEntry
|
||||||
nil, // 86: hashicorp.consul.internal.configentry.HTTPHeaderFilter.SetEntry
|
nil, // 86: hashicorp.consul.internal.configentry.HTTPHeaderFilter.AddEntry
|
||||||
nil, // 87: hashicorp.consul.internal.configentry.TCPRoute.MetaEntry
|
nil, // 87: hashicorp.consul.internal.configentry.HTTPHeaderFilter.SetEntry
|
||||||
(*pbcommon.EnterpriseMeta)(nil), // 88: hashicorp.consul.internal.common.EnterpriseMeta
|
nil, // 88: hashicorp.consul.internal.configentry.TCPRoute.MetaEntry
|
||||||
(*pbcommon.RaftIndex)(nil), // 89: hashicorp.consul.internal.common.RaftIndex
|
(*pbcommon.EnterpriseMeta)(nil), // 89: hashicorp.consul.internal.common.EnterpriseMeta
|
||||||
(*durationpb.Duration)(nil), // 90: google.protobuf.Duration
|
(*pbcommon.RaftIndex)(nil), // 90: hashicorp.consul.internal.common.RaftIndex
|
||||||
(*timestamppb.Timestamp)(nil), // 91: google.protobuf.Timestamp
|
(*durationpb.Duration)(nil), // 91: google.protobuf.Duration
|
||||||
(*pbcommon.EnvoyExtension)(nil), // 92: hashicorp.consul.internal.common.EnvoyExtension
|
(*timestamppb.Timestamp)(nil), // 92: google.protobuf.Timestamp
|
||||||
|
(*pbcommon.EnvoyExtension)(nil), // 93: hashicorp.consul.internal.common.EnvoyExtension
|
||||||
}
|
}
|
||||||
var file_proto_pbconfigentry_config_entry_proto_depIdxs = []int32{
|
var file_proto_pbconfigentry_config_entry_proto_depIdxs = []int32{
|
||||||
0, // 0: hashicorp.consul.internal.configentry.ConfigEntry.Kind:type_name -> hashicorp.consul.internal.configentry.Kind
|
0, // 0: hashicorp.consul.internal.configentry.ConfigEntry.Kind:type_name -> hashicorp.consul.internal.configentry.Kind
|
||||||
88, // 1: hashicorp.consul.internal.configentry.ConfigEntry.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
89, // 1: hashicorp.consul.internal.configentry.ConfigEntry.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
||||||
89, // 2: hashicorp.consul.internal.configentry.ConfigEntry.RaftIndex:type_name -> hashicorp.consul.internal.common.RaftIndex
|
90, // 2: hashicorp.consul.internal.configentry.ConfigEntry.RaftIndex:type_name -> hashicorp.consul.internal.common.RaftIndex
|
||||||
11, // 3: hashicorp.consul.internal.configentry.ConfigEntry.MeshConfig:type_name -> hashicorp.consul.internal.configentry.MeshConfig
|
11, // 3: hashicorp.consul.internal.configentry.ConfigEntry.MeshConfig:type_name -> hashicorp.consul.internal.configentry.MeshConfig
|
||||||
17, // 4: hashicorp.consul.internal.configentry.ConfigEntry.ServiceResolver:type_name -> hashicorp.consul.internal.configentry.ServiceResolver
|
17, // 4: hashicorp.consul.internal.configentry.ConfigEntry.ServiceResolver:type_name -> hashicorp.consul.internal.configentry.ServiceResolver
|
||||||
27, // 5: hashicorp.consul.internal.configentry.ConfigEntry.IngressGateway:type_name -> hashicorp.consul.internal.configentry.IngressGateway
|
27, // 5: hashicorp.consul.internal.configentry.ConfigEntry.IngressGateway:type_name -> hashicorp.consul.internal.configentry.IngressGateway
|
||||||
|
@ -6492,30 +6561,30 @@ var file_proto_pbconfigentry_config_entry_proto_depIdxs = []int32{
|
||||||
40, // 7: hashicorp.consul.internal.configentry.ConfigEntry.ServiceDefaults:type_name -> hashicorp.consul.internal.configentry.ServiceDefaults
|
40, // 7: hashicorp.consul.internal.configentry.ConfigEntry.ServiceDefaults:type_name -> hashicorp.consul.internal.configentry.ServiceDefaults
|
||||||
50, // 8: hashicorp.consul.internal.configentry.ConfigEntry.APIGateway:type_name -> hashicorp.consul.internal.configentry.APIGateway
|
50, // 8: hashicorp.consul.internal.configentry.ConfigEntry.APIGateway:type_name -> hashicorp.consul.internal.configentry.APIGateway
|
||||||
56, // 9: hashicorp.consul.internal.configentry.ConfigEntry.BoundAPIGateway:type_name -> hashicorp.consul.internal.configentry.BoundAPIGateway
|
56, // 9: hashicorp.consul.internal.configentry.ConfigEntry.BoundAPIGateway:type_name -> hashicorp.consul.internal.configentry.BoundAPIGateway
|
||||||
68, // 10: hashicorp.consul.internal.configentry.ConfigEntry.TCPRoute:type_name -> hashicorp.consul.internal.configentry.TCPRoute
|
69, // 10: hashicorp.consul.internal.configentry.ConfigEntry.TCPRoute:type_name -> hashicorp.consul.internal.configentry.TCPRoute
|
||||||
59, // 11: hashicorp.consul.internal.configentry.ConfigEntry.HTTPRoute:type_name -> hashicorp.consul.internal.configentry.HTTPRoute
|
59, // 11: hashicorp.consul.internal.configentry.ConfigEntry.HTTPRoute:type_name -> hashicorp.consul.internal.configentry.HTTPRoute
|
||||||
12, // 12: hashicorp.consul.internal.configentry.MeshConfig.TransparentProxy:type_name -> hashicorp.consul.internal.configentry.TransparentProxyMeshConfig
|
12, // 12: hashicorp.consul.internal.configentry.MeshConfig.TransparentProxy:type_name -> hashicorp.consul.internal.configentry.TransparentProxyMeshConfig
|
||||||
13, // 13: hashicorp.consul.internal.configentry.MeshConfig.TLS:type_name -> hashicorp.consul.internal.configentry.MeshTLSConfig
|
13, // 13: hashicorp.consul.internal.configentry.MeshConfig.TLS:type_name -> hashicorp.consul.internal.configentry.MeshTLSConfig
|
||||||
15, // 14: hashicorp.consul.internal.configentry.MeshConfig.HTTP:type_name -> hashicorp.consul.internal.configentry.MeshHTTPConfig
|
15, // 14: hashicorp.consul.internal.configentry.MeshConfig.HTTP:type_name -> hashicorp.consul.internal.configentry.MeshHTTPConfig
|
||||||
70, // 15: hashicorp.consul.internal.configentry.MeshConfig.Meta:type_name -> hashicorp.consul.internal.configentry.MeshConfig.MetaEntry
|
71, // 15: hashicorp.consul.internal.configentry.MeshConfig.Meta:type_name -> hashicorp.consul.internal.configentry.MeshConfig.MetaEntry
|
||||||
16, // 16: hashicorp.consul.internal.configentry.MeshConfig.Peering:type_name -> hashicorp.consul.internal.configentry.PeeringMeshConfig
|
16, // 16: hashicorp.consul.internal.configentry.MeshConfig.Peering:type_name -> hashicorp.consul.internal.configentry.PeeringMeshConfig
|
||||||
14, // 17: hashicorp.consul.internal.configentry.MeshTLSConfig.Incoming:type_name -> hashicorp.consul.internal.configentry.MeshDirectionalTLSConfig
|
14, // 17: hashicorp.consul.internal.configentry.MeshTLSConfig.Incoming:type_name -> hashicorp.consul.internal.configentry.MeshDirectionalTLSConfig
|
||||||
14, // 18: hashicorp.consul.internal.configentry.MeshTLSConfig.Outgoing:type_name -> hashicorp.consul.internal.configentry.MeshDirectionalTLSConfig
|
14, // 18: hashicorp.consul.internal.configentry.MeshTLSConfig.Outgoing:type_name -> hashicorp.consul.internal.configentry.MeshDirectionalTLSConfig
|
||||||
71, // 19: hashicorp.consul.internal.configentry.ServiceResolver.Subsets:type_name -> hashicorp.consul.internal.configentry.ServiceResolver.SubsetsEntry
|
72, // 19: hashicorp.consul.internal.configentry.ServiceResolver.Subsets:type_name -> hashicorp.consul.internal.configentry.ServiceResolver.SubsetsEntry
|
||||||
19, // 20: hashicorp.consul.internal.configentry.ServiceResolver.Redirect:type_name -> hashicorp.consul.internal.configentry.ServiceResolverRedirect
|
19, // 20: hashicorp.consul.internal.configentry.ServiceResolver.Redirect:type_name -> hashicorp.consul.internal.configentry.ServiceResolverRedirect
|
||||||
72, // 21: hashicorp.consul.internal.configentry.ServiceResolver.Failover:type_name -> hashicorp.consul.internal.configentry.ServiceResolver.FailoverEntry
|
73, // 21: hashicorp.consul.internal.configentry.ServiceResolver.Failover:type_name -> hashicorp.consul.internal.configentry.ServiceResolver.FailoverEntry
|
||||||
90, // 22: hashicorp.consul.internal.configentry.ServiceResolver.ConnectTimeout:type_name -> google.protobuf.Duration
|
91, // 22: hashicorp.consul.internal.configentry.ServiceResolver.ConnectTimeout:type_name -> google.protobuf.Duration
|
||||||
22, // 23: hashicorp.consul.internal.configentry.ServiceResolver.LoadBalancer:type_name -> hashicorp.consul.internal.configentry.LoadBalancer
|
22, // 23: hashicorp.consul.internal.configentry.ServiceResolver.LoadBalancer:type_name -> hashicorp.consul.internal.configentry.LoadBalancer
|
||||||
73, // 24: hashicorp.consul.internal.configentry.ServiceResolver.Meta:type_name -> hashicorp.consul.internal.configentry.ServiceResolver.MetaEntry
|
74, // 24: hashicorp.consul.internal.configentry.ServiceResolver.Meta:type_name -> hashicorp.consul.internal.configentry.ServiceResolver.MetaEntry
|
||||||
21, // 25: hashicorp.consul.internal.configentry.ServiceResolverFailover.Targets:type_name -> hashicorp.consul.internal.configentry.ServiceResolverFailoverTarget
|
21, // 25: hashicorp.consul.internal.configentry.ServiceResolverFailover.Targets:type_name -> hashicorp.consul.internal.configentry.ServiceResolverFailoverTarget
|
||||||
23, // 26: hashicorp.consul.internal.configentry.LoadBalancer.RingHashConfig:type_name -> hashicorp.consul.internal.configentry.RingHashConfig
|
23, // 26: hashicorp.consul.internal.configentry.LoadBalancer.RingHashConfig:type_name -> hashicorp.consul.internal.configentry.RingHashConfig
|
||||||
24, // 27: hashicorp.consul.internal.configentry.LoadBalancer.LeastRequestConfig:type_name -> hashicorp.consul.internal.configentry.LeastRequestConfig
|
24, // 27: hashicorp.consul.internal.configentry.LoadBalancer.LeastRequestConfig:type_name -> hashicorp.consul.internal.configentry.LeastRequestConfig
|
||||||
25, // 28: hashicorp.consul.internal.configentry.LoadBalancer.HashPolicies:type_name -> hashicorp.consul.internal.configentry.HashPolicy
|
25, // 28: hashicorp.consul.internal.configentry.LoadBalancer.HashPolicies:type_name -> hashicorp.consul.internal.configentry.HashPolicy
|
||||||
26, // 29: hashicorp.consul.internal.configentry.HashPolicy.CookieConfig:type_name -> hashicorp.consul.internal.configentry.CookieConfig
|
26, // 29: hashicorp.consul.internal.configentry.HashPolicy.CookieConfig:type_name -> hashicorp.consul.internal.configentry.CookieConfig
|
||||||
90, // 30: hashicorp.consul.internal.configentry.CookieConfig.TTL:type_name -> google.protobuf.Duration
|
91, // 30: hashicorp.consul.internal.configentry.CookieConfig.TTL:type_name -> google.protobuf.Duration
|
||||||
29, // 31: hashicorp.consul.internal.configentry.IngressGateway.TLS:type_name -> hashicorp.consul.internal.configentry.GatewayTLSConfig
|
29, // 31: hashicorp.consul.internal.configentry.IngressGateway.TLS:type_name -> hashicorp.consul.internal.configentry.GatewayTLSConfig
|
||||||
31, // 32: hashicorp.consul.internal.configentry.IngressGateway.Listeners:type_name -> hashicorp.consul.internal.configentry.IngressListener
|
31, // 32: hashicorp.consul.internal.configentry.IngressGateway.Listeners:type_name -> hashicorp.consul.internal.configentry.IngressListener
|
||||||
74, // 33: hashicorp.consul.internal.configentry.IngressGateway.Meta:type_name -> hashicorp.consul.internal.configentry.IngressGateway.MetaEntry
|
75, // 33: hashicorp.consul.internal.configentry.IngressGateway.Meta:type_name -> hashicorp.consul.internal.configentry.IngressGateway.MetaEntry
|
||||||
28, // 34: hashicorp.consul.internal.configentry.IngressGateway.Defaults:type_name -> hashicorp.consul.internal.configentry.IngressServiceConfig
|
28, // 34: hashicorp.consul.internal.configentry.IngressGateway.Defaults:type_name -> hashicorp.consul.internal.configentry.IngressServiceConfig
|
||||||
48, // 35: hashicorp.consul.internal.configentry.IngressServiceConfig.PassiveHealthCheck:type_name -> hashicorp.consul.internal.configentry.PassiveHealthCheck
|
48, // 35: hashicorp.consul.internal.configentry.IngressServiceConfig.PassiveHealthCheck:type_name -> hashicorp.consul.internal.configentry.PassiveHealthCheck
|
||||||
30, // 36: hashicorp.consul.internal.configentry.GatewayTLSConfig.SDS:type_name -> hashicorp.consul.internal.configentry.GatewayTLSSDSConfig
|
30, // 36: hashicorp.consul.internal.configentry.GatewayTLSConfig.SDS:type_name -> hashicorp.consul.internal.configentry.GatewayTLSSDSConfig
|
||||||
|
@ -6524,21 +6593,21 @@ var file_proto_pbconfigentry_config_entry_proto_depIdxs = []int32{
|
||||||
33, // 39: hashicorp.consul.internal.configentry.IngressService.TLS:type_name -> hashicorp.consul.internal.configentry.GatewayServiceTLSConfig
|
33, // 39: hashicorp.consul.internal.configentry.IngressService.TLS:type_name -> hashicorp.consul.internal.configentry.GatewayServiceTLSConfig
|
||||||
34, // 40: hashicorp.consul.internal.configentry.IngressService.RequestHeaders:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers
|
34, // 40: hashicorp.consul.internal.configentry.IngressService.RequestHeaders:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers
|
||||||
34, // 41: hashicorp.consul.internal.configentry.IngressService.ResponseHeaders:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers
|
34, // 41: hashicorp.consul.internal.configentry.IngressService.ResponseHeaders:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers
|
||||||
75, // 42: hashicorp.consul.internal.configentry.IngressService.Meta:type_name -> hashicorp.consul.internal.configentry.IngressService.MetaEntry
|
76, // 42: hashicorp.consul.internal.configentry.IngressService.Meta:type_name -> hashicorp.consul.internal.configentry.IngressService.MetaEntry
|
||||||
88, // 43: hashicorp.consul.internal.configentry.IngressService.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
89, // 43: hashicorp.consul.internal.configentry.IngressService.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
||||||
48, // 44: hashicorp.consul.internal.configentry.IngressService.PassiveHealthCheck:type_name -> hashicorp.consul.internal.configentry.PassiveHealthCheck
|
48, // 44: hashicorp.consul.internal.configentry.IngressService.PassiveHealthCheck:type_name -> hashicorp.consul.internal.configentry.PassiveHealthCheck
|
||||||
30, // 45: hashicorp.consul.internal.configentry.GatewayServiceTLSConfig.SDS:type_name -> hashicorp.consul.internal.configentry.GatewayTLSSDSConfig
|
30, // 45: hashicorp.consul.internal.configentry.GatewayServiceTLSConfig.SDS:type_name -> hashicorp.consul.internal.configentry.GatewayTLSSDSConfig
|
||||||
76, // 46: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.Add:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers.AddEntry
|
77, // 46: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.Add:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers.AddEntry
|
||||||
77, // 47: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.Set:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers.SetEntry
|
78, // 47: hashicorp.consul.internal.configentry.HTTPHeaderModifiers.Set:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderModifiers.SetEntry
|
||||||
36, // 48: hashicorp.consul.internal.configentry.ServiceIntentions.Sources:type_name -> hashicorp.consul.internal.configentry.SourceIntention
|
36, // 48: hashicorp.consul.internal.configentry.ServiceIntentions.Sources:type_name -> hashicorp.consul.internal.configentry.SourceIntention
|
||||||
78, // 49: hashicorp.consul.internal.configentry.ServiceIntentions.Meta:type_name -> hashicorp.consul.internal.configentry.ServiceIntentions.MetaEntry
|
79, // 49: hashicorp.consul.internal.configentry.ServiceIntentions.Meta:type_name -> hashicorp.consul.internal.configentry.ServiceIntentions.MetaEntry
|
||||||
1, // 50: hashicorp.consul.internal.configentry.SourceIntention.Action:type_name -> hashicorp.consul.internal.configentry.IntentionAction
|
1, // 50: hashicorp.consul.internal.configentry.SourceIntention.Action:type_name -> hashicorp.consul.internal.configentry.IntentionAction
|
||||||
37, // 51: hashicorp.consul.internal.configentry.SourceIntention.Permissions:type_name -> hashicorp.consul.internal.configentry.IntentionPermission
|
37, // 51: hashicorp.consul.internal.configentry.SourceIntention.Permissions:type_name -> hashicorp.consul.internal.configentry.IntentionPermission
|
||||||
2, // 52: hashicorp.consul.internal.configentry.SourceIntention.Type:type_name -> hashicorp.consul.internal.configentry.IntentionSourceType
|
2, // 52: hashicorp.consul.internal.configentry.SourceIntention.Type:type_name -> hashicorp.consul.internal.configentry.IntentionSourceType
|
||||||
79, // 53: hashicorp.consul.internal.configentry.SourceIntention.LegacyMeta:type_name -> hashicorp.consul.internal.configentry.SourceIntention.LegacyMetaEntry
|
80, // 53: hashicorp.consul.internal.configentry.SourceIntention.LegacyMeta:type_name -> hashicorp.consul.internal.configentry.SourceIntention.LegacyMetaEntry
|
||||||
91, // 54: hashicorp.consul.internal.configentry.SourceIntention.LegacyCreateTime:type_name -> google.protobuf.Timestamp
|
92, // 54: hashicorp.consul.internal.configentry.SourceIntention.LegacyCreateTime:type_name -> google.protobuf.Timestamp
|
||||||
91, // 55: hashicorp.consul.internal.configentry.SourceIntention.LegacyUpdateTime:type_name -> google.protobuf.Timestamp
|
92, // 55: hashicorp.consul.internal.configentry.SourceIntention.LegacyUpdateTime:type_name -> google.protobuf.Timestamp
|
||||||
88, // 56: hashicorp.consul.internal.configentry.SourceIntention.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
89, // 56: hashicorp.consul.internal.configentry.SourceIntention.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
||||||
1, // 57: hashicorp.consul.internal.configentry.IntentionPermission.Action:type_name -> hashicorp.consul.internal.configentry.IntentionAction
|
1, // 57: hashicorp.consul.internal.configentry.IntentionPermission.Action:type_name -> hashicorp.consul.internal.configentry.IntentionAction
|
||||||
38, // 58: hashicorp.consul.internal.configentry.IntentionPermission.HTTP:type_name -> hashicorp.consul.internal.configentry.IntentionHTTPPermission
|
38, // 58: hashicorp.consul.internal.configentry.IntentionPermission.HTTP:type_name -> hashicorp.consul.internal.configentry.IntentionHTTPPermission
|
||||||
39, // 59: hashicorp.consul.internal.configentry.IntentionHTTPPermission.Header:type_name -> hashicorp.consul.internal.configentry.IntentionHTTPHeaderPermission
|
39, // 59: hashicorp.consul.internal.configentry.IntentionHTTPPermission.Header:type_name -> hashicorp.consul.internal.configentry.IntentionHTTPHeaderPermission
|
||||||
|
@ -6548,39 +6617,39 @@ var file_proto_pbconfigentry_config_entry_proto_depIdxs = []int32{
|
||||||
43, // 63: hashicorp.consul.internal.configentry.ServiceDefaults.Expose:type_name -> hashicorp.consul.internal.configentry.ExposeConfig
|
43, // 63: hashicorp.consul.internal.configentry.ServiceDefaults.Expose:type_name -> hashicorp.consul.internal.configentry.ExposeConfig
|
||||||
45, // 64: hashicorp.consul.internal.configentry.ServiceDefaults.UpstreamConfig:type_name -> hashicorp.consul.internal.configentry.UpstreamConfiguration
|
45, // 64: hashicorp.consul.internal.configentry.ServiceDefaults.UpstreamConfig:type_name -> hashicorp.consul.internal.configentry.UpstreamConfiguration
|
||||||
49, // 65: hashicorp.consul.internal.configentry.ServiceDefaults.Destination:type_name -> hashicorp.consul.internal.configentry.DestinationConfig
|
49, // 65: hashicorp.consul.internal.configentry.ServiceDefaults.Destination:type_name -> hashicorp.consul.internal.configentry.DestinationConfig
|
||||||
80, // 66: hashicorp.consul.internal.configentry.ServiceDefaults.Meta:type_name -> hashicorp.consul.internal.configentry.ServiceDefaults.MetaEntry
|
81, // 66: hashicorp.consul.internal.configentry.ServiceDefaults.Meta:type_name -> hashicorp.consul.internal.configentry.ServiceDefaults.MetaEntry
|
||||||
92, // 67: hashicorp.consul.internal.configentry.ServiceDefaults.EnvoyExtensions:type_name -> hashicorp.consul.internal.common.EnvoyExtension
|
93, // 67: hashicorp.consul.internal.configentry.ServiceDefaults.EnvoyExtensions:type_name -> hashicorp.consul.internal.common.EnvoyExtension
|
||||||
4, // 68: hashicorp.consul.internal.configentry.MeshGatewayConfig.Mode:type_name -> hashicorp.consul.internal.configentry.MeshGatewayMode
|
4, // 68: hashicorp.consul.internal.configentry.MeshGatewayConfig.Mode:type_name -> hashicorp.consul.internal.configentry.MeshGatewayMode
|
||||||
44, // 69: hashicorp.consul.internal.configentry.ExposeConfig.Paths:type_name -> hashicorp.consul.internal.configentry.ExposePath
|
44, // 69: hashicorp.consul.internal.configentry.ExposeConfig.Paths:type_name -> hashicorp.consul.internal.configentry.ExposePath
|
||||||
46, // 70: hashicorp.consul.internal.configentry.UpstreamConfiguration.Overrides:type_name -> hashicorp.consul.internal.configentry.UpstreamConfig
|
46, // 70: hashicorp.consul.internal.configentry.UpstreamConfiguration.Overrides:type_name -> hashicorp.consul.internal.configentry.UpstreamConfig
|
||||||
46, // 71: hashicorp.consul.internal.configentry.UpstreamConfiguration.Defaults:type_name -> hashicorp.consul.internal.configentry.UpstreamConfig
|
46, // 71: hashicorp.consul.internal.configentry.UpstreamConfiguration.Defaults:type_name -> hashicorp.consul.internal.configentry.UpstreamConfig
|
||||||
88, // 72: hashicorp.consul.internal.configentry.UpstreamConfig.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
89, // 72: hashicorp.consul.internal.configentry.UpstreamConfig.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
||||||
47, // 73: hashicorp.consul.internal.configentry.UpstreamConfig.Limits:type_name -> hashicorp.consul.internal.configentry.UpstreamLimits
|
47, // 73: hashicorp.consul.internal.configentry.UpstreamConfig.Limits:type_name -> hashicorp.consul.internal.configentry.UpstreamLimits
|
||||||
48, // 74: hashicorp.consul.internal.configentry.UpstreamConfig.PassiveHealthCheck:type_name -> hashicorp.consul.internal.configentry.PassiveHealthCheck
|
48, // 74: hashicorp.consul.internal.configentry.UpstreamConfig.PassiveHealthCheck:type_name -> hashicorp.consul.internal.configentry.PassiveHealthCheck
|
||||||
42, // 75: hashicorp.consul.internal.configentry.UpstreamConfig.MeshGateway:type_name -> hashicorp.consul.internal.configentry.MeshGatewayConfig
|
42, // 75: hashicorp.consul.internal.configentry.UpstreamConfig.MeshGateway:type_name -> hashicorp.consul.internal.configentry.MeshGatewayConfig
|
||||||
90, // 76: hashicorp.consul.internal.configentry.PassiveHealthCheck.Interval:type_name -> google.protobuf.Duration
|
91, // 76: hashicorp.consul.internal.configentry.PassiveHealthCheck.Interval:type_name -> google.protobuf.Duration
|
||||||
81, // 77: hashicorp.consul.internal.configentry.APIGateway.Meta:type_name -> hashicorp.consul.internal.configentry.APIGateway.MetaEntry
|
82, // 77: hashicorp.consul.internal.configentry.APIGateway.Meta:type_name -> hashicorp.consul.internal.configentry.APIGateway.MetaEntry
|
||||||
53, // 78: hashicorp.consul.internal.configentry.APIGateway.Listeners:type_name -> hashicorp.consul.internal.configentry.APIGatewayListener
|
53, // 78: hashicorp.consul.internal.configentry.APIGateway.Listeners:type_name -> hashicorp.consul.internal.configentry.APIGatewayListener
|
||||||
51, // 79: hashicorp.consul.internal.configentry.APIGateway.Status:type_name -> hashicorp.consul.internal.configentry.Status
|
51, // 79: hashicorp.consul.internal.configentry.APIGateway.Status:type_name -> hashicorp.consul.internal.configentry.Status
|
||||||
52, // 80: hashicorp.consul.internal.configentry.Status.Conditions:type_name -> hashicorp.consul.internal.configentry.Condition
|
52, // 80: hashicorp.consul.internal.configentry.Status.Conditions:type_name -> hashicorp.consul.internal.configentry.Condition
|
||||||
55, // 81: hashicorp.consul.internal.configentry.Condition.Resource:type_name -> hashicorp.consul.internal.configentry.ResourceReference
|
55, // 81: hashicorp.consul.internal.configentry.Condition.Resource:type_name -> hashicorp.consul.internal.configentry.ResourceReference
|
||||||
91, // 82: hashicorp.consul.internal.configentry.Condition.LastTransitionTime:type_name -> google.protobuf.Timestamp
|
92, // 82: hashicorp.consul.internal.configentry.Condition.LastTransitionTime:type_name -> google.protobuf.Timestamp
|
||||||
5, // 83: hashicorp.consul.internal.configentry.APIGatewayListener.Protocol:type_name -> hashicorp.consul.internal.configentry.APIGatewayListenerProtocol
|
5, // 83: hashicorp.consul.internal.configentry.APIGatewayListener.Protocol:type_name -> hashicorp.consul.internal.configentry.APIGatewayListenerProtocol
|
||||||
54, // 84: hashicorp.consul.internal.configentry.APIGatewayListener.TLS:type_name -> hashicorp.consul.internal.configentry.APIGatewayTLSConfiguration
|
54, // 84: hashicorp.consul.internal.configentry.APIGatewayListener.TLS:type_name -> hashicorp.consul.internal.configentry.APIGatewayTLSConfiguration
|
||||||
55, // 85: hashicorp.consul.internal.configentry.APIGatewayTLSConfiguration.Certificates:type_name -> hashicorp.consul.internal.configentry.ResourceReference
|
55, // 85: hashicorp.consul.internal.configentry.APIGatewayTLSConfiguration.Certificates:type_name -> hashicorp.consul.internal.configentry.ResourceReference
|
||||||
88, // 86: hashicorp.consul.internal.configentry.ResourceReference.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
89, // 86: hashicorp.consul.internal.configentry.ResourceReference.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
||||||
82, // 87: hashicorp.consul.internal.configentry.BoundAPIGateway.Meta:type_name -> hashicorp.consul.internal.configentry.BoundAPIGateway.MetaEntry
|
83, // 87: hashicorp.consul.internal.configentry.BoundAPIGateway.Meta:type_name -> hashicorp.consul.internal.configentry.BoundAPIGateway.MetaEntry
|
||||||
57, // 88: hashicorp.consul.internal.configentry.BoundAPIGateway.Listeners:type_name -> hashicorp.consul.internal.configentry.BoundAPIGatewayListener
|
57, // 88: hashicorp.consul.internal.configentry.BoundAPIGateway.Listeners:type_name -> hashicorp.consul.internal.configentry.BoundAPIGatewayListener
|
||||||
55, // 89: hashicorp.consul.internal.configentry.BoundAPIGatewayListener.Certificates:type_name -> hashicorp.consul.internal.configentry.ResourceReference
|
55, // 89: hashicorp.consul.internal.configentry.BoundAPIGatewayListener.Certificates:type_name -> hashicorp.consul.internal.configentry.ResourceReference
|
||||||
55, // 90: hashicorp.consul.internal.configentry.BoundAPIGatewayListener.Routes:type_name -> hashicorp.consul.internal.configentry.ResourceReference
|
55, // 90: hashicorp.consul.internal.configentry.BoundAPIGatewayListener.Routes:type_name -> hashicorp.consul.internal.configentry.ResourceReference
|
||||||
83, // 91: hashicorp.consul.internal.configentry.InlineCertificate.Meta:type_name -> hashicorp.consul.internal.configentry.InlineCertificate.MetaEntry
|
84, // 91: hashicorp.consul.internal.configentry.InlineCertificate.Meta:type_name -> hashicorp.consul.internal.configentry.InlineCertificate.MetaEntry
|
||||||
84, // 92: hashicorp.consul.internal.configentry.HTTPRoute.Meta:type_name -> hashicorp.consul.internal.configentry.HTTPRoute.MetaEntry
|
85, // 92: hashicorp.consul.internal.configentry.HTTPRoute.Meta:type_name -> hashicorp.consul.internal.configentry.HTTPRoute.MetaEntry
|
||||||
55, // 93: hashicorp.consul.internal.configentry.HTTPRoute.Parents:type_name -> hashicorp.consul.internal.configentry.ResourceReference
|
55, // 93: hashicorp.consul.internal.configentry.HTTPRoute.Parents:type_name -> hashicorp.consul.internal.configentry.ResourceReference
|
||||||
60, // 94: hashicorp.consul.internal.configentry.HTTPRoute.Rules:type_name -> hashicorp.consul.internal.configentry.HTTPRouteRule
|
60, // 94: hashicorp.consul.internal.configentry.HTTPRoute.Rules:type_name -> hashicorp.consul.internal.configentry.HTTPRouteRule
|
||||||
51, // 95: hashicorp.consul.internal.configentry.HTTPRoute.Status:type_name -> hashicorp.consul.internal.configentry.Status
|
51, // 95: hashicorp.consul.internal.configentry.HTTPRoute.Status:type_name -> hashicorp.consul.internal.configentry.Status
|
||||||
65, // 96: hashicorp.consul.internal.configentry.HTTPRouteRule.Filters:type_name -> hashicorp.consul.internal.configentry.HTTPFilters
|
65, // 96: hashicorp.consul.internal.configentry.HTTPRouteRule.Filters:type_name -> hashicorp.consul.internal.configentry.HTTPFilters
|
||||||
61, // 97: hashicorp.consul.internal.configentry.HTTPRouteRule.Matches:type_name -> hashicorp.consul.internal.configentry.HTTPMatch
|
61, // 97: hashicorp.consul.internal.configentry.HTTPRouteRule.Matches:type_name -> hashicorp.consul.internal.configentry.HTTPMatch
|
||||||
67, // 98: hashicorp.consul.internal.configentry.HTTPRouteRule.Services:type_name -> hashicorp.consul.internal.configentry.HTTPService
|
68, // 98: hashicorp.consul.internal.configentry.HTTPRouteRule.Services:type_name -> hashicorp.consul.internal.configentry.HTTPService
|
||||||
62, // 99: hashicorp.consul.internal.configentry.HTTPMatch.Headers:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderMatch
|
62, // 99: hashicorp.consul.internal.configentry.HTTPMatch.Headers:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderMatch
|
||||||
6, // 100: hashicorp.consul.internal.configentry.HTTPMatch.Method:type_name -> hashicorp.consul.internal.configentry.HTTPMatchMethod
|
6, // 100: hashicorp.consul.internal.configentry.HTTPMatch.Method:type_name -> hashicorp.consul.internal.configentry.HTTPMatchMethod
|
||||||
63, // 101: hashicorp.consul.internal.configentry.HTTPMatch.Path:type_name -> hashicorp.consul.internal.configentry.HTTPPathMatch
|
63, // 101: hashicorp.consul.internal.configentry.HTTPMatch.Path:type_name -> hashicorp.consul.internal.configentry.HTTPPathMatch
|
||||||
|
@ -6588,23 +6657,24 @@ var file_proto_pbconfigentry_config_entry_proto_depIdxs = []int32{
|
||||||
7, // 103: hashicorp.consul.internal.configentry.HTTPHeaderMatch.Match:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderMatchType
|
7, // 103: hashicorp.consul.internal.configentry.HTTPHeaderMatch.Match:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderMatchType
|
||||||
8, // 104: hashicorp.consul.internal.configentry.HTTPPathMatch.Match:type_name -> hashicorp.consul.internal.configentry.HTTPPathMatchType
|
8, // 104: hashicorp.consul.internal.configentry.HTTPPathMatch.Match:type_name -> hashicorp.consul.internal.configentry.HTTPPathMatchType
|
||||||
9, // 105: hashicorp.consul.internal.configentry.HTTPQueryMatch.Match:type_name -> hashicorp.consul.internal.configentry.HTTPQueryMatchType
|
9, // 105: hashicorp.consul.internal.configentry.HTTPQueryMatch.Match:type_name -> hashicorp.consul.internal.configentry.HTTPQueryMatchType
|
||||||
66, // 106: hashicorp.consul.internal.configentry.HTTPFilters.Headers:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter
|
67, // 106: hashicorp.consul.internal.configentry.HTTPFilters.Headers:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter
|
||||||
85, // 107: hashicorp.consul.internal.configentry.HTTPHeaderFilter.Add:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter.AddEntry
|
66, // 107: hashicorp.consul.internal.configentry.HTTPFilters.URLRewrites:type_name -> hashicorp.consul.internal.configentry.URLRewrite
|
||||||
86, // 108: hashicorp.consul.internal.configentry.HTTPHeaderFilter.Set:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter.SetEntry
|
86, // 108: hashicorp.consul.internal.configentry.HTTPHeaderFilter.Add:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter.AddEntry
|
||||||
65, // 109: hashicorp.consul.internal.configentry.HTTPService.Filters:type_name -> hashicorp.consul.internal.configentry.HTTPFilters
|
87, // 109: hashicorp.consul.internal.configentry.HTTPHeaderFilter.Set:type_name -> hashicorp.consul.internal.configentry.HTTPHeaderFilter.SetEntry
|
||||||
88, // 110: hashicorp.consul.internal.configentry.HTTPService.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
65, // 110: hashicorp.consul.internal.configentry.HTTPService.Filters:type_name -> hashicorp.consul.internal.configentry.HTTPFilters
|
||||||
87, // 111: hashicorp.consul.internal.configentry.TCPRoute.Meta:type_name -> hashicorp.consul.internal.configentry.TCPRoute.MetaEntry
|
89, // 111: hashicorp.consul.internal.configentry.HTTPService.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
||||||
55, // 112: hashicorp.consul.internal.configentry.TCPRoute.Parents:type_name -> hashicorp.consul.internal.configentry.ResourceReference
|
88, // 112: hashicorp.consul.internal.configentry.TCPRoute.Meta:type_name -> hashicorp.consul.internal.configentry.TCPRoute.MetaEntry
|
||||||
69, // 113: hashicorp.consul.internal.configentry.TCPRoute.Services:type_name -> hashicorp.consul.internal.configentry.TCPService
|
55, // 113: hashicorp.consul.internal.configentry.TCPRoute.Parents:type_name -> hashicorp.consul.internal.configentry.ResourceReference
|
||||||
51, // 114: hashicorp.consul.internal.configentry.TCPRoute.Status:type_name -> hashicorp.consul.internal.configentry.Status
|
70, // 114: hashicorp.consul.internal.configentry.TCPRoute.Services:type_name -> hashicorp.consul.internal.configentry.TCPService
|
||||||
88, // 115: hashicorp.consul.internal.configentry.TCPService.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
51, // 115: hashicorp.consul.internal.configentry.TCPRoute.Status:type_name -> hashicorp.consul.internal.configentry.Status
|
||||||
18, // 116: hashicorp.consul.internal.configentry.ServiceResolver.SubsetsEntry.value:type_name -> hashicorp.consul.internal.configentry.ServiceResolverSubset
|
89, // 116: hashicorp.consul.internal.configentry.TCPService.EnterpriseMeta:type_name -> hashicorp.consul.internal.common.EnterpriseMeta
|
||||||
20, // 117: hashicorp.consul.internal.configentry.ServiceResolver.FailoverEntry.value:type_name -> hashicorp.consul.internal.configentry.ServiceResolverFailover
|
18, // 117: hashicorp.consul.internal.configentry.ServiceResolver.SubsetsEntry.value:type_name -> hashicorp.consul.internal.configentry.ServiceResolverSubset
|
||||||
118, // [118:118] is the sub-list for method output_type
|
20, // 118: hashicorp.consul.internal.configentry.ServiceResolver.FailoverEntry.value:type_name -> hashicorp.consul.internal.configentry.ServiceResolverFailover
|
||||||
118, // [118:118] is the sub-list for method input_type
|
119, // [119:119] is the sub-list for method output_type
|
||||||
118, // [118:118] is the sub-list for extension type_name
|
119, // [119:119] is the sub-list for method input_type
|
||||||
118, // [118:118] is the sub-list for extension extendee
|
119, // [119:119] is the sub-list for extension type_name
|
||||||
0, // [0:118] is the sub-list for field type_name
|
119, // [119:119] is the sub-list for extension extendee
|
||||||
|
0, // [0:119] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_proto_pbconfigentry_config_entry_proto_init() }
|
func init() { file_proto_pbconfigentry_config_entry_proto_init() }
|
||||||
|
@ -7286,7 +7356,7 @@ func file_proto_pbconfigentry_config_entry_proto_init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_proto_pbconfigentry_config_entry_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
|
file_proto_pbconfigentry_config_entry_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*HTTPHeaderFilter); i {
|
switch v := v.(*URLRewrite); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -7298,7 +7368,7 @@ func file_proto_pbconfigentry_config_entry_proto_init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_proto_pbconfigentry_config_entry_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
|
file_proto_pbconfigentry_config_entry_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*HTTPService); i {
|
switch v := v.(*HTTPHeaderFilter); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -7310,7 +7380,7 @@ func file_proto_pbconfigentry_config_entry_proto_init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_proto_pbconfigentry_config_entry_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
|
file_proto_pbconfigentry_config_entry_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*TCPRoute); i {
|
switch v := v.(*HTTPService); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -7322,6 +7392,18 @@ func file_proto_pbconfigentry_config_entry_proto_init() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_proto_pbconfigentry_config_entry_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} {
|
file_proto_pbconfigentry_config_entry_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*TCPRoute); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_proto_pbconfigentry_config_entry_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*TCPService); i {
|
switch v := v.(*TCPService); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
|
@ -7351,7 +7433,7 @@ func file_proto_pbconfigentry_config_entry_proto_init() {
|
||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_proto_pbconfigentry_config_entry_proto_rawDesc,
|
RawDescriptor: file_proto_pbconfigentry_config_entry_proto_rawDesc,
|
||||||
NumEnums: 10,
|
NumEnums: 10,
|
||||||
NumMessages: 78,
|
NumMessages: 79,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 0,
|
NumServices: 0,
|
||||||
},
|
},
|
||||||
|
|
|
@ -805,6 +805,16 @@ message HTTPQueryMatch {
|
||||||
// name=Structs
|
// name=Structs
|
||||||
message HTTPFilters {
|
message HTTPFilters {
|
||||||
repeated HTTPHeaderFilter Headers = 1;
|
repeated HTTPHeaderFilter Headers = 1;
|
||||||
|
repeated URLRewrite URLRewrites = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// mog annotation:
|
||||||
|
//
|
||||||
|
// target=github.com/hashicorp/consul/agent/structs.URLRewrite
|
||||||
|
// output=config_entry.gen.go
|
||||||
|
// name=Structs
|
||||||
|
message URLRewrite {
|
||||||
|
string Path = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// mog annotation:
|
// mog annotation:
|
||||||
|
|
Loading…
Reference in New Issue