mirror of https://github.com/hashicorp/consul
121 lines
2.4 KiB
Go
121 lines
2.4 KiB
Go
|
// Copyright (c) HashiCorp, Inc.
|
||
|
// SPDX-License-Identifier: BUSL-1.1
|
||
|
|
||
|
package topoutil
|
||
|
|
||
|
import (
|
||
|
"strconv"
|
||
|
|
||
|
"github.com/hashicorp/consul/testing/deployer/topology"
|
||
|
)
|
||
|
|
||
|
const HashicorpDockerProxy = "docker.mirror.hashicorp.services"
|
||
|
|
||
|
func NewFortioServiceWithDefaults(
|
||
|
cluster string,
|
||
|
sid topology.ServiceID,
|
||
|
nodeVersion topology.NodeVersion,
|
||
|
mut func(s *topology.Service),
|
||
|
) *topology.Service {
|
||
|
const (
|
||
|
httpPort = 8080
|
||
|
grpcPort = 8079
|
||
|
adminPort = 19000
|
||
|
)
|
||
|
sid.Normalize()
|
||
|
|
||
|
svc := &topology.Service{
|
||
|
ID: sid,
|
||
|
Image: HashicorpDockerProxy + "/fortio/fortio",
|
||
|
EnvoyAdminPort: adminPort,
|
||
|
CheckTCP: "127.0.0.1:" + strconv.Itoa(httpPort),
|
||
|
Env: []string{
|
||
|
"FORTIO_NAME=" + cluster + "::" + sid.String(),
|
||
|
},
|
||
|
Command: []string{
|
||
|
"server",
|
||
|
"-http-port", strconv.Itoa(httpPort),
|
||
|
"-grpc-port", strconv.Itoa(grpcPort),
|
||
|
"-redirect-port", "-disabled",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
if nodeVersion == topology.NodeVersionV2 {
|
||
|
svc.Ports = map[string]int{
|
||
|
"http": httpPort,
|
||
|
"http-alt": httpPort,
|
||
|
"grpc": grpcPort,
|
||
|
}
|
||
|
} else {
|
||
|
svc.Port = httpPort
|
||
|
}
|
||
|
|
||
|
if mut != nil {
|
||
|
mut(svc)
|
||
|
}
|
||
|
return svc
|
||
|
}
|
||
|
|
||
|
func NewTopologyServerSet(
|
||
|
namePrefix string,
|
||
|
num int,
|
||
|
networks []string,
|
||
|
mutateFn func(i int, node *topology.Node),
|
||
|
) []*topology.Node {
|
||
|
var out []*topology.Node
|
||
|
for i := 1; i <= num; i++ {
|
||
|
name := namePrefix + strconv.Itoa(i)
|
||
|
|
||
|
node := &topology.Node{
|
||
|
Kind: topology.NodeKindServer,
|
||
|
Name: name,
|
||
|
}
|
||
|
for _, net := range networks {
|
||
|
node.Addresses = append(node.Addresses, &topology.Address{Network: net})
|
||
|
}
|
||
|
|
||
|
if mutateFn != nil {
|
||
|
mutateFn(i, node)
|
||
|
}
|
||
|
|
||
|
out = append(out, node)
|
||
|
}
|
||
|
return out
|
||
|
}
|
||
|
|
||
|
func NewTopologyMeshGatewaySet(
|
||
|
nodeKind topology.NodeKind,
|
||
|
partition string,
|
||
|
namePrefix string,
|
||
|
num int,
|
||
|
networks []string,
|
||
|
mutateFn func(i int, node *topology.Node),
|
||
|
) []*topology.Node {
|
||
|
var out []*topology.Node
|
||
|
for i := 1; i <= num; i++ {
|
||
|
name := namePrefix + strconv.Itoa(i)
|
||
|
|
||
|
node := &topology.Node{
|
||
|
Kind: nodeKind,
|
||
|
Partition: partition,
|
||
|
Name: name,
|
||
|
Services: []*topology.Service{{
|
||
|
ID: topology.ServiceID{Name: "mesh-gateway"},
|
||
|
Port: 8443,
|
||
|
EnvoyAdminPort: 19000,
|
||
|
IsMeshGateway: true,
|
||
|
}},
|
||
|
}
|
||
|
for _, net := range networks {
|
||
|
node.Addresses = append(node.Addresses, &topology.Address{Network: net})
|
||
|
}
|
||
|
|
||
|
if mutateFn != nil {
|
||
|
mutateFn(i, node)
|
||
|
}
|
||
|
|
||
|
out = append(out, node)
|
||
|
}
|
||
|
return out
|
||
|
}
|