func mergeHTTPMatchRequest()

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
}