CE port of enterprise extension (#18572)

CE commit
This commit is contained in:
Chris S. Kim 2023-08-24 11:43:26 -04:00 committed by GitHub
parent 2cc2c6b88d
commit 82993fcc4f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 10 deletions

View File

@ -32,11 +32,13 @@ var extensionConstructors = map[string]extensionConstructor{
// given config. Returns an error if the extension does not exist, or if the extension fails // given config. Returns an error if the extension does not exist, or if the extension fails
// to be constructed properly. // to be constructed properly.
func ConstructExtension(ext api.EnvoyExtension) (extensioncommon.EnvoyExtender, error) { func ConstructExtension(ext api.EnvoyExtension) (extensioncommon.EnvoyExtender, error) {
constructor, ok := extensionConstructors[ext.Name] if constructor, ok := extensionConstructors[ext.Name]; ok {
if !ok { return constructor(ext)
return nil, fmt.Errorf("name %q is not a built-in extension", ext.Name)
} }
return constructor(ext) if constructor, ok := enterpriseExtensionConstructors[ext.Name]; ok {
return constructor(ext)
}
return nil, fmt.Errorf("name %q is not a built-in extension", ext.Name)
} }
// ValidateExtensions will attempt to construct each instance of the given envoy extension configurations // ValidateExtensions will attempt to construct each instance of the given envoy extension configurations

View File

@ -0,0 +1,8 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
//go:build !consulent
package envoyextensions
var enterpriseExtensionConstructors = map[string]extensionConstructor{}

View File

@ -411,8 +411,8 @@ func getSNI(chain *envoy_listener_v3.FilterChain) string {
} }
// GetHTTPConnectionManager returns the Envoy HttpConnectionManager filter from the list of network filters. // GetHTTPConnectionManager returns the Envoy HttpConnectionManager filter from the list of network filters.
// It also returns the index within the list of filters where the connection manager was found in case the caller // It also returns the index within the list of filters where the connection manager was found in case the
// needs this information. // caller needs to overwrite the original filter.
// It returns a non-nil error if the HttpConnectionManager is not found. // It returns a non-nil error if the HttpConnectionManager is not found.
func GetHTTPConnectionManager(filters ...*envoy_listener_v3.Filter) (*envoy_http_v3.HttpConnectionManager, int, error) { func GetHTTPConnectionManager(filters ...*envoy_listener_v3.Filter) (*envoy_http_v3.HttpConnectionManager, int, error) {
for idx, filter := range filters { for idx, filter := range filters {
@ -491,9 +491,11 @@ func InsertHTTPFilter(filters []*envoy_listener_v3.Filter, filter *envoy_http_v3
if err != nil { if err != nil {
return filters, errors.New("failed to insert new HTTP connection manager filter") return filters, errors.New("failed to insert new HTTP connection manager filter")
} }
filters[idx] = newHttpConMan filtersCopy := make([]*envoy_listener_v3.Filter, len(filters))
copy(filtersCopy, filters)
filtersCopy[idx] = newHttpConMan
return filters, nil return filtersCopy, nil
} }
// InsertNetworkFilter inserts the given network filter into the filter chain in the location // InsertNetworkFilter inserts the given network filter into the filter chain in the location

View File

@ -13,12 +13,12 @@ type TestingT interface {
Fatalf(string, ...any) Fatalf(string, ...any)
} }
func AssertDeepEqual(t TestingT, x, y interface{}, opts ...cmp.Option) { func AssertDeepEqual(t TestingT, exp, got interface{}, opts ...cmp.Option) {
t.Helper() t.Helper()
opts = append(opts, protocmp.Transform()) opts = append(opts, protocmp.Transform())
if diff := cmp.Diff(x, y, opts...); diff != "" { if diff := cmp.Diff(exp, got, opts...); diff != "" {
t.Fatalf("assertion failed: values are not equal\n--- expected\n+++ actual\n%v", diff) t.Fatalf("assertion failed: values are not equal\n--- expected\n+++ actual\n%v", diff)
} }
} }