mirror of https://github.com/hashicorp/consul
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
5.5 KiB
200 lines
5.5 KiB
package api |
|
|
|
import ( |
|
"encoding/json" |
|
"time" |
|
) |
|
|
|
type ServiceRouterConfigEntry struct { |
|
Kind string |
|
Name string |
|
|
|
Routes []ServiceRoute `json:",omitempty"` |
|
|
|
CreateIndex uint64 |
|
ModifyIndex uint64 |
|
} |
|
|
|
func (e *ServiceRouterConfigEntry) GetKind() string { return e.Kind } |
|
func (e *ServiceRouterConfigEntry) GetName() string { return e.Name } |
|
func (e *ServiceRouterConfigEntry) GetCreateIndex() uint64 { return e.CreateIndex } |
|
func (e *ServiceRouterConfigEntry) GetModifyIndex() uint64 { return e.ModifyIndex } |
|
|
|
type ServiceRoute struct { |
|
Match *ServiceRouteMatch `json:",omitempty"` |
|
Destination *ServiceRouteDestination `json:",omitempty"` |
|
} |
|
|
|
type ServiceRouteMatch struct { |
|
HTTP *ServiceRouteHTTPMatch `json:",omitempty"` |
|
} |
|
|
|
type ServiceRouteHTTPMatch struct { |
|
PathExact string `json:",omitempty"` |
|
PathPrefix string `json:",omitempty"` |
|
PathRegex string `json:",omitempty"` |
|
|
|
Header []ServiceRouteHTTPMatchHeader `json:",omitempty"` |
|
QueryParam []ServiceRouteHTTPMatchQueryParam `json:",omitempty"` |
|
Methods []string `json:",omitempty"` |
|
} |
|
|
|
type ServiceRouteHTTPMatchHeader struct { |
|
Name string |
|
Present bool `json:",omitempty"` |
|
Exact string `json:",omitempty"` |
|
Prefix string `json:",omitempty"` |
|
Suffix string `json:",omitempty"` |
|
Regex string `json:",omitempty"` |
|
Invert bool `json:",omitempty"` |
|
} |
|
|
|
type ServiceRouteHTTPMatchQueryParam struct { |
|
Name string |
|
Present bool `json:",omitempty"` |
|
Exact string `json:",omitempty"` |
|
Regex string `json:",omitempty"` |
|
} |
|
|
|
type ServiceRouteDestination struct { |
|
Service string `json:",omitempty"` |
|
ServiceSubset string `json:",omitempty"` |
|
Namespace string `json:",omitempty"` |
|
PrefixRewrite string `json:",omitempty"` |
|
RequestTimeout time.Duration `json:",omitempty"` |
|
NumRetries uint32 `json:",omitempty"` |
|
RetryOnConnectFailure bool `json:",omitempty"` |
|
RetryOnStatusCodes []uint32 `json:",omitempty"` |
|
} |
|
|
|
func (e *ServiceRouteDestination) MarshalJSON() ([]byte, error) { |
|
type Alias ServiceRouteDestination |
|
exported := &struct { |
|
RequestTimeout string `json:",omitempty"` |
|
*Alias |
|
}{ |
|
RequestTimeout: e.RequestTimeout.String(), |
|
Alias: (*Alias)(e), |
|
} |
|
if e.RequestTimeout == 0 { |
|
exported.RequestTimeout = "" |
|
} |
|
|
|
return json.Marshal(exported) |
|
} |
|
|
|
func (e *ServiceRouteDestination) UnmarshalJSON(data []byte) error { |
|
type Alias ServiceRouteDestination |
|
aux := &struct { |
|
RequestTimeout string |
|
*Alias |
|
}{ |
|
Alias: (*Alias)(e), |
|
} |
|
if err := json.Unmarshal(data, &aux); err != nil { |
|
return err |
|
} |
|
var err error |
|
if aux.RequestTimeout != "" { |
|
if e.RequestTimeout, err = time.ParseDuration(aux.RequestTimeout); err != nil { |
|
return err |
|
} |
|
} |
|
return nil |
|
} |
|
|
|
type ServiceSplitterConfigEntry struct { |
|
Kind string |
|
Name string |
|
|
|
Splits []ServiceSplit `json:",omitempty"` |
|
|
|
CreateIndex uint64 |
|
ModifyIndex uint64 |
|
} |
|
|
|
func (e *ServiceSplitterConfigEntry) GetKind() string { return e.Kind } |
|
func (e *ServiceSplitterConfigEntry) GetName() string { return e.Name } |
|
func (e *ServiceSplitterConfigEntry) GetCreateIndex() uint64 { return e.CreateIndex } |
|
func (e *ServiceSplitterConfigEntry) GetModifyIndex() uint64 { return e.ModifyIndex } |
|
|
|
type ServiceSplit struct { |
|
Weight float32 |
|
Service string `json:",omitempty"` |
|
ServiceSubset string `json:",omitempty"` |
|
Namespace string `json:",omitempty"` |
|
} |
|
|
|
type ServiceResolverConfigEntry struct { |
|
Kind string |
|
Name string |
|
|
|
DefaultSubset string `json:",omitempty"` |
|
Subsets map[string]ServiceResolverSubset `json:",omitempty"` |
|
Redirect *ServiceResolverRedirect `json:",omitempty"` |
|
Failover map[string]ServiceResolverFailover `json:",omitempty"` |
|
ConnectTimeout time.Duration `json:",omitempty"` |
|
|
|
CreateIndex uint64 |
|
ModifyIndex uint64 |
|
} |
|
|
|
func (e *ServiceResolverConfigEntry) MarshalJSON() ([]byte, error) { |
|
type Alias ServiceResolverConfigEntry |
|
exported := &struct { |
|
ConnectTimeout string `json:",omitempty"` |
|
*Alias |
|
}{ |
|
ConnectTimeout: e.ConnectTimeout.String(), |
|
Alias: (*Alias)(e), |
|
} |
|
if e.ConnectTimeout == 0 { |
|
exported.ConnectTimeout = "" |
|
} |
|
|
|
return json.Marshal(exported) |
|
} |
|
|
|
func (e *ServiceResolverConfigEntry) UnmarshalJSON(data []byte) error { |
|
type Alias ServiceResolverConfigEntry |
|
aux := &struct { |
|
ConnectTimeout string |
|
*Alias |
|
}{ |
|
Alias: (*Alias)(e), |
|
} |
|
if err := json.Unmarshal(data, &aux); err != nil { |
|
return err |
|
} |
|
var err error |
|
if aux.ConnectTimeout != "" { |
|
if e.ConnectTimeout, err = time.ParseDuration(aux.ConnectTimeout); err != nil { |
|
return err |
|
} |
|
} |
|
return nil |
|
} |
|
|
|
func (e *ServiceResolverConfigEntry) GetKind() string { return e.Kind } |
|
func (e *ServiceResolverConfigEntry) GetName() string { return e.Name } |
|
func (e *ServiceResolverConfigEntry) GetCreateIndex() uint64 { return e.CreateIndex } |
|
func (e *ServiceResolverConfigEntry) GetModifyIndex() uint64 { return e.ModifyIndex } |
|
|
|
type ServiceResolverSubset struct { |
|
Filter string `json:",omitempty"` |
|
OnlyPassing bool `json:",omitempty"` |
|
} |
|
|
|
type ServiceResolverRedirect struct { |
|
Service string `json:",omitempty"` |
|
ServiceSubset string `json:",omitempty"` |
|
Namespace string `json:",omitempty"` |
|
Datacenter string `json:",omitempty"` |
|
} |
|
|
|
type ServiceResolverFailover struct { |
|
Service string `json:",omitempty"` |
|
ServiceSubset string `json:",omitempty"` |
|
Namespace string `json:",omitempty"` |
|
Datacenters []string `json:",omitempty"` |
|
}
|
|
|