a8eb047ee6
Re-add ServerExternalAddresses parameter in GenerateToken endpoint This reverts commit 5e156772f6a7fba5324eb6804ae4e93c091229a6 and adds extra functionality to support newer peering behaviors.
81 lines
2.2 KiB
Go
81 lines
2.2 KiB
Go
package structs
|
|
|
|
// PeeringToken identifies a peer in order for a connection to be established.
|
|
type PeeringToken struct {
|
|
CA []string
|
|
ManualServerAddresses []string
|
|
ServerAddresses []string
|
|
ServerName string
|
|
PeerID string
|
|
EstablishmentSecret string
|
|
Remote PeeringTokenRemote
|
|
}
|
|
|
|
type PeeringTokenRemote struct {
|
|
Partition string
|
|
Datacenter string
|
|
}
|
|
|
|
type IndexedExportedServiceList struct {
|
|
Services map[string]ServiceList
|
|
QueryMeta
|
|
}
|
|
|
|
// NOTE: this is not serialized via msgpack so it can be changed without concern.
|
|
type ExportedServiceList struct {
|
|
// Services is a list of exported services that apply to both standard
|
|
// service discovery and service mesh.
|
|
Services []ServiceName
|
|
|
|
// DiscoChains is a map of service names to their exported discovery chains
|
|
// for service mesh purposes as defined in the exported-services
|
|
// configuration entry.
|
|
DiscoChains map[ServiceName]ExportedDiscoveryChainInfo
|
|
}
|
|
|
|
// NOTE: this is not serialized via msgpack so it can be changed without concern.
|
|
type ExportedDiscoveryChainInfo struct {
|
|
// Protocol is the overall protocol associated with this discovery chain.
|
|
Protocol string
|
|
|
|
// TCPTargets is the list of discovery chain targets that are reachable by
|
|
// this discovery chain.
|
|
//
|
|
// NOTE: this is only populated if Protocol=tcp.
|
|
TCPTargets []*DiscoveryTarget
|
|
}
|
|
|
|
func (i ExportedDiscoveryChainInfo) Equal(o ExportedDiscoveryChainInfo) bool {
|
|
switch {
|
|
case i.Protocol != o.Protocol:
|
|
return false
|
|
case len(i.TCPTargets) != len(o.TCPTargets):
|
|
return false
|
|
}
|
|
|
|
for j := 0; j < len(i.TCPTargets); j++ {
|
|
if i.TCPTargets[j].ID != o.TCPTargets[j].ID {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// ListAllDiscoveryChains returns all discovery chains (union of Services and
|
|
// DiscoChains).
|
|
func (list *ExportedServiceList) ListAllDiscoveryChains() map[ServiceName]ExportedDiscoveryChainInfo {
|
|
chainsByName := make(map[ServiceName]ExportedDiscoveryChainInfo)
|
|
if list == nil {
|
|
return chainsByName
|
|
}
|
|
|
|
for _, svc := range list.Services {
|
|
chainsByName[svc] = list.DiscoChains[svc]
|
|
}
|
|
for chainName, info := range list.DiscoChains {
|
|
chainsByName[chainName] = info
|
|
}
|
|
return chainsByName
|
|
}
|