in pilot/pkg/model/virtualservice.go [345:419]
func mergeHTTPMatchRequest(root, delegate *networking.HTTPMatchRequest) *networking.HTTPMatchRequest {
out := proto.Clone(delegate).(*networking.HTTPMatchRequest)
if out.Name == "" {
out.Name = root.Name
} else if root.Name != "" {
out.Name = root.Name + "-" + out.Name
}
if out.Uri == nil {
out.Uri = root.Uri
}
if out.Scheme == nil {
out.Scheme = root.Scheme
}
if out.Method == nil {
out.Method = root.Method
}
if out.Authority == nil {
out.Authority = root.Authority
}
// headers
if len(root.Headers) > 0 || len(delegate.Headers) > 0 {
out.Headers = make(map[string]*networking.StringMatch)
}
for k, v := range root.Headers {
out.Headers[k] = v
}
for k, v := range delegate.Headers {
out.Headers[k] = v
}
// withoutheaders
if len(root.WithoutHeaders) > 0 || len(delegate.WithoutHeaders) > 0 {
out.WithoutHeaders = make(map[string]*networking.StringMatch)
}
for k, v := range root.WithoutHeaders {
out.WithoutHeaders[k] = v
}
for k, v := range delegate.WithoutHeaders {
out.WithoutHeaders[k] = v
}
// queryparams
if len(root.QueryParams) > 0 || len(delegate.QueryParams) > 0 {
out.QueryParams = make(map[string]*networking.StringMatch)
}
for k, v := range root.QueryParams {
out.QueryParams[k] = v
}
for k, v := range delegate.QueryParams {
out.QueryParams[k] = v
}
if out.Port == 0 {
out.Port = root.Port
}
// SourceLabels
if len(root.SourceLabels) > 0 || len(delegate.SourceLabels) > 0 {
out.SourceLabels = make(map[string]string)
}
for k, v := range root.SourceLabels {
out.SourceLabels[k] = v
}
for k, v := range delegate.SourceLabels {
out.SourceLabels[k] = v
}
if out.SourceNamespace == "" {
out.SourceNamespace = root.SourceNamespace
}
if len(out.Gateways) == 0 {
out.Gateways = root.Gateways
}
return out
}