[cmd] buildConfigFromCmd: Include the process id on config names

This commit is contained in:
Carlos Ibáñez 2022-07-10 20:00:12 +02:00 committed by ginuerzh
parent 2f0da6993b
commit fec33e62ea

View File

@ -34,6 +34,7 @@ func (l *stringList) Set(value string) error {
} }
func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) { func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
namePrefix := ""
cfg := &config.Config{} cfg := &config.Config{}
if v := os.Getenv("GOST_PROFILING"); v != "" { if v := os.Getenv("GOST_PROFILING"); v != "" {
@ -59,10 +60,14 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
} }
} }
if v := os.Getenv("_GOST_ID"); v != "" {
namePrefix = fmt.Sprintf("go-%s@", v)
}
var chain *config.ChainConfig var chain *config.ChainConfig
if len(nodes) > 0 { if len(nodes) > 0 {
chain = &config.ChainConfig{ chain = &config.ChainConfig{
Name: "chain-0", Name: fmt.Sprintf("%schain-0", namePrefix),
} }
cfg.Chains = append(cfg.Chains, chain) cfg.Chains = append(cfg.Chains, chain)
} }
@ -77,7 +82,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
nodeConfig.Name = "node-0" nodeConfig.Name = fmt.Sprintf("%snode-0", namePrefix)
var nodes []*config.NodeConfig var nodes []*config.NodeConfig
for _, host := range strings.Split(nodeConfig.Addr, ",") { for _, host := range strings.Split(nodeConfig.Addr, ",") {
@ -86,7 +91,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
} }
nodeCfg := &config.NodeConfig{} nodeCfg := &config.NodeConfig{}
*nodeCfg = *nodeConfig *nodeCfg = *nodeConfig
nodeCfg.Name = fmt.Sprintf("node-%d", len(nodes)) nodeCfg.Name = fmt.Sprintf("%snode-%d", namePrefix, len(nodes))
nodeCfg.Addr = host nodeCfg.Addr = host
nodes = append(nodes, nodeCfg) nodes = append(nodes, nodeCfg)
} }
@ -95,14 +100,14 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
md := mdx.NewMetadata(mc) md := mdx.NewMetadata(mc)
hopConfig := &config.HopConfig{ hopConfig := &config.HopConfig{
Name: fmt.Sprintf("hop-%d", i), Name: fmt.Sprintf("%shop-%d", namePrefix, i),
Selector: parseSelector(mc), Selector: parseSelector(mc),
Nodes: nodes, Nodes: nodes,
} }
if v := mdutil.GetString(md, "bypass"); v != "" { if v := mdutil.GetString(md, "bypass"); v != "" {
bypassCfg := &config.BypassConfig{ bypassCfg := &config.BypassConfig{
Name: fmt.Sprintf("bypass-%d", len(cfg.Bypasses)), Name: fmt.Sprintf("%sbypass-%d", namePrefix, len(cfg.Bypasses)),
} }
if v[0] == '~' { if v[0] == '~' {
bypassCfg.Whitelist = true bypassCfg.Whitelist = true
@ -120,7 +125,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
} }
if v := mdutil.GetString(md, "resolver"); v != "" { if v := mdutil.GetString(md, "resolver"); v != "" {
resolverCfg := &config.ResolverConfig{ resolverCfg := &config.ResolverConfig{
Name: fmt.Sprintf("resolver-%d", len(cfg.Resolvers)), Name: fmt.Sprintf("%sresolver-%d", namePrefix, len(cfg.Resolvers)),
} }
for _, rs := range strings.Split(v, ",") { for _, rs := range strings.Split(v, ",") {
if rs == "" { if rs == "" {
@ -139,7 +144,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
} }
if v := mdutil.GetString(md, "hosts"); v != "" { if v := mdutil.GetString(md, "hosts"); v != "" {
hostsCfg := &config.HostsConfig{ hostsCfg := &config.HostsConfig{
Name: fmt.Sprintf("hosts-%d", len(cfg.Hosts)), Name: fmt.Sprintf("%shosts-%d", namePrefix, len(cfg.Hosts)),
} }
for _, s := range strings.Split(v, ",") { for _, s := range strings.Split(v, ",") {
ss := strings.SplitN(s, ":", 2) ss := strings.SplitN(s, ":", 2)
@ -183,7 +188,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
service.Name = fmt.Sprintf("service-%d", i) service.Name = fmt.Sprintf("%sservice-%d", namePrefix, i)
if chain != nil { if chain != nil {
if service.Listener.Type == "rtcp" || service.Listener.Type == "rudp" { if service.Listener.Type == "rtcp" || service.Listener.Type == "rudp" {
service.Listener.Chain = chain.Name service.Listener.Chain = chain.Name
@ -201,7 +206,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
} }
if v := mdutil.GetString(md, "admission"); v != "" { if v := mdutil.GetString(md, "admission"); v != "" {
admCfg := &config.AdmissionConfig{ admCfg := &config.AdmissionConfig{
Name: fmt.Sprintf("admission-%d", len(cfg.Admissions)), Name: fmt.Sprintf("%sadmission-%d", namePrefix, len(cfg.Admissions)),
} }
if v[0] == '~' { if v[0] == '~' {
admCfg.Whitelist = true admCfg.Whitelist = true
@ -219,7 +224,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
} }
if v := mdutil.GetString(md, "bypass"); v != "" { if v := mdutil.GetString(md, "bypass"); v != "" {
bypassCfg := &config.BypassConfig{ bypassCfg := &config.BypassConfig{
Name: fmt.Sprintf("bypass-%d", len(cfg.Bypasses)), Name: fmt.Sprintf("%sbypass-%d", namePrefix, len(cfg.Bypasses)),
} }
if v[0] == '~' { if v[0] == '~' {
bypassCfg.Whitelist = true bypassCfg.Whitelist = true
@ -237,7 +242,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
} }
if v := mdutil.GetString(md, "resolver"); v != "" { if v := mdutil.GetString(md, "resolver"); v != "" {
resolverCfg := &config.ResolverConfig{ resolverCfg := &config.ResolverConfig{
Name: fmt.Sprintf("resolver-%d", len(cfg.Resolvers)), Name: fmt.Sprintf("%sresolver-%d", namePrefix, len(cfg.Resolvers)),
} }
for _, rs := range strings.Split(v, ",") { for _, rs := range strings.Split(v, ",") {
if rs == "" { if rs == "" {
@ -257,7 +262,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
} }
if v := mdutil.GetString(md, "hosts"); v != "" { if v := mdutil.GetString(md, "hosts"); v != "" {
hostsCfg := &config.HostsConfig{ hostsCfg := &config.HostsConfig{
Name: fmt.Sprintf("hosts-%d", len(cfg.Hosts)), Name: fmt.Sprintf("%shosts-%d", namePrefix, len(cfg.Hosts)),
} }
for _, s := range strings.Split(v, ",") { for _, s := range strings.Split(v, ",") {
ss := strings.SplitN(s, ":", 2) ss := strings.SplitN(s, ":", 2)
@ -283,7 +288,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
cout := mdutil.GetString(md, "limiter.conn.out") cout := mdutil.GetString(md, "limiter.conn.out")
if in != "" || cin != "" { if in != "" || cin != "" {
limiter := &config.LimiterConfig{ limiter := &config.LimiterConfig{
Name: fmt.Sprintf("limiter-%d", len(cfg.Limiters)), Name: fmt.Sprintf("%slimiter-%d", namePrefix, len(cfg.Limiters)),
} }
if in != "" { if in != "" {
limiter.Limits = append(limiter.Limits, limiter.Limits = append(limiter.Limits,
@ -303,7 +308,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
if climit := mdutil.GetInt(md, "climiter"); climit > 0 { if climit := mdutil.GetInt(md, "climiter"); climit > 0 {
limiter := &config.LimiterConfig{ limiter := &config.LimiterConfig{
Name: fmt.Sprintf("climiter-%d", len(cfg.CLimiters)), Name: fmt.Sprintf("%sclimiter-%d", namePrefix, len(cfg.CLimiters)),
Limits: []string{fmt.Sprintf("%s %d", conn.GlobalLimitKey, climit)}, Limits: []string{fmt.Sprintf("%s %d", conn.GlobalLimitKey, climit)},
} }
service.CLimiter = limiter.Name service.CLimiter = limiter.Name
@ -313,7 +318,7 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
if rlimit := mdutil.GetFloat(md, "rlimiter"); rlimit > 0 { if rlimit := mdutil.GetFloat(md, "rlimiter"); rlimit > 0 {
limiter := &config.LimiterConfig{ limiter := &config.LimiterConfig{
Name: fmt.Sprintf("rlimiter-%d", len(cfg.RLimiters)), Name: fmt.Sprintf("%srlimiter-%d", namePrefix, len(cfg.RLimiters)),
Limits: []string{fmt.Sprintf("%s %s", conn.GlobalLimitKey, strconv.FormatFloat(rlimit, 'f', -1, 64))}, Limits: []string{fmt.Sprintf("%s %s", conn.GlobalLimitKey, strconv.FormatFloat(rlimit, 'f', -1, 64))},
} }
service.RLimiter = limiter.Name service.RLimiter = limiter.Name
@ -326,6 +331,11 @@ func buildConfigFromCmd(services, nodes stringList) (*config.Config, error) {
} }
func buildServiceConfig(url *url.URL) (*config.ServiceConfig, error) { func buildServiceConfig(url *url.URL) (*config.ServiceConfig, error) {
namePrefix := ""
if v := os.Getenv("_GOST_ID"); v != "" {
namePrefix = fmt.Sprintf("go-%s@", v)
}
var handler, listener string var handler, listener string
schemes := strings.Split(url.Scheme, "+") schemes := strings.Split(url.Scheme, "+")
if len(schemes) == 1 { if len(schemes) == 1 {
@ -359,7 +369,7 @@ func buildServiceConfig(url *url.URL) (*config.ServiceConfig, error) {
for i, addr := range strings.Split(remotes, ",") { for i, addr := range strings.Split(remotes, ",") {
svc.Forwarder.Nodes = append(svc.Forwarder.Nodes, svc.Forwarder.Nodes = append(svc.Forwarder.Nodes,
&config.ForwardNodeConfig{ &config.ForwardNodeConfig{
Name: fmt.Sprintf("target-%d", i), Name: fmt.Sprintf("%starget-%d", namePrefix, i),
Addr: addr, Addr: addr,
}) })
} }