adds a regexp location path option on configmap
This commit is contained in:
parent
b6d11caef3
commit
33af01d4d5
6 changed files with 45 additions and 1 deletions
|
@ -425,6 +425,9 @@ The default mime type list to compress is: `application/atom+xml application/jav
|
|||
**worker-processes:** Sets the number of [worker processes](http://nginx.org/en/docs/ngx_core_module.html#worker_processes). The default of "auto" means number of available CPU cores.
|
||||
|
||||
|
||||
**use-regexp-location-path:** Handles a path in Ingress pathes rules as a regexp location directive.
|
||||
The default is: `false`.
|
||||
|
||||
### Default configuration options
|
||||
|
||||
The following table shows the options, the default value and a description.
|
||||
|
|
|
@ -275,6 +275,8 @@ type Configuration struct {
|
|||
|
||||
// Defines the load balancing algorithm to use. The deault is round-robin
|
||||
LoadBalanceAlgorithm string `json:"load-balance,omitempty"`
|
||||
|
||||
UseRegexpLocationPath bool `json:"use-regexp-location-path,omitempty"`
|
||||
}
|
||||
|
||||
// NewDefault returns the default nginx configuration
|
||||
|
@ -328,6 +330,7 @@ func NewDefault() Configuration {
|
|||
WhitelistSourceRange: []string{},
|
||||
SkipAccessLogURLs: []string{},
|
||||
},
|
||||
UseRegexpLocationPath: false,
|
||||
}
|
||||
|
||||
if glog.V(5) {
|
||||
|
|
|
@ -42,6 +42,7 @@ func TestMergeConfigMapToStruct(t *testing.T) {
|
|||
"use-gzip": "true",
|
||||
"enable-dynamic-tls-records": "false",
|
||||
"gzip-types": "text/html",
|
||||
"use-regexp-location-path": "false",
|
||||
}
|
||||
def := config.NewDefault()
|
||||
def.CustomHTTPErrors = []int{300, 400}
|
||||
|
@ -52,6 +53,7 @@ func TestMergeConfigMapToStruct(t *testing.T) {
|
|||
def.EnableDynamicTLSRecords = false
|
||||
def.UseProxyProtocol = true
|
||||
def.GzipTypes = "text/html"
|
||||
def.UseRegexpLocationPath = false
|
||||
|
||||
to := ReadConfig(conf)
|
||||
if diff := pretty.Compare(to, def); diff != "" {
|
||||
|
|
|
@ -129,6 +129,7 @@ var (
|
|||
},
|
||||
"buildLocation": buildLocation,
|
||||
"buildAuthLocation": buildAuthLocation,
|
||||
"withLocationPathType": withLocationPathType,
|
||||
"buildAuthResponseHeaders": buildAuthResponseHeaders,
|
||||
"buildProxyPass": buildProxyPass,
|
||||
"buildRateLimitZones": buildRateLimitZones,
|
||||
|
@ -191,6 +192,20 @@ func buildLocation(input interface{}) string {
|
|||
return path
|
||||
}
|
||||
|
||||
func withLocationPathType(input interface{}, cfgInput interface{}) string {
|
||||
cfg, ok := cfgInput.(config.Configuration)
|
||||
if !ok {
|
||||
glog.Errorf("error an ingress.withLocationPathType type but %T was returned", cfgInput)
|
||||
}
|
||||
path := input.(string)
|
||||
|
||||
if cfg.UseRegexpLocationPath && strings.HasPrefix(path, "/") {
|
||||
return fmt.Sprintf("~ ^%s", path)
|
||||
} else {
|
||||
return path
|
||||
}
|
||||
}
|
||||
|
||||
func buildAuthLocation(input interface{}) string {
|
||||
location, ok := input.(*ingress.Location)
|
||||
if !ok {
|
||||
|
|
|
@ -102,6 +102,26 @@ func TestBuildLocation(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestWithLocationPathType(t *testing.T) {
|
||||
conf := config.NewDefault()
|
||||
|
||||
path0 := "/foo"
|
||||
if "/foo" != withLocationPathType(path0, conf) {
|
||||
t.Errorf("%s: expected not to be regexp path", path0)
|
||||
}
|
||||
|
||||
conf.UseRegexpLocationPath = true
|
||||
path1 := "/foo"
|
||||
if "~ ^/foo" != withLocationPathType(path1, conf) {
|
||||
t.Errorf("%s: expected to be regexp path", path1)
|
||||
}
|
||||
|
||||
path2 := "~* /foo"
|
||||
if "~* /foo" != withLocationPathType(path2, conf) {
|
||||
t.Errorf("%s: expected to be regexp path", path2)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildProxyPass(t *testing.T) {
|
||||
for k, tc := range tmplFuncTestcases {
|
||||
loc := &ingress.Location{
|
||||
|
|
|
@ -280,7 +280,8 @@ http {
|
|||
{{ if $cfg.EnableVtsStatus }}vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;{{ end }}
|
||||
|
||||
{{ range $location := $server.Locations }}
|
||||
{{ $path := buildLocation $location }}
|
||||
{{ $builtPath := buildLocation $location }}
|
||||
{{ $path := withLocationPathType $builtPath $cfg }}
|
||||
{{ $authPath := buildAuthLocation $location }}
|
||||
|
||||
{{ if not (empty $location.CertificateAuth.AuthSSLCert.CAFileName) }}
|
||||
|
|
Loading…
Reference in a new issue