depenv: ntppool configuration for deployment environments
This commit is contained in:
parent
f6d160a7f8
commit
e5836a8b97
18
config/depenv/context.go
Normal file
18
config/depenv/context.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package depenv
|
||||||
|
|
||||||
|
import "context"
|
||||||
|
|
||||||
|
type contextKey struct{}
|
||||||
|
|
||||||
|
// NewContext adds the deployment environment to the context
|
||||||
|
func NewContext(ctx context.Context, d DeploymentEnvironment) context.Context {
|
||||||
|
return context.WithValue(ctx, contextKey{}, d)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromContext retrieves the deployment environment from the context
|
||||||
|
func FromContext(ctx context.Context) DeploymentEnvironment {
|
||||||
|
if d, ok := ctx.Value(contextKey{}).(DeploymentEnvironment); ok {
|
||||||
|
return d
|
||||||
|
}
|
||||||
|
return DeployUndefined
|
||||||
|
}
|
67
config/depenv/depenv.go
Normal file
67
config/depenv/depenv.go
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
package depenv
|
||||||
|
|
||||||
|
import "os"
|
||||||
|
|
||||||
|
var manageServers = map[DeploymentEnvironment]string{
|
||||||
|
DeployDevel: "https://manage.askdev.grundclock.com",
|
||||||
|
DeployTest: "https://manage.beta.grundclock.com",
|
||||||
|
DeployProd: "https://manage.ntppool.org",
|
||||||
|
}
|
||||||
|
|
||||||
|
var apiServers = map[DeploymentEnvironment]string{
|
||||||
|
DeployDevel: "https://dev-api.ntppool.dev",
|
||||||
|
DeployTest: "https://beta-api.ntppool.dev",
|
||||||
|
DeployProd: "https://api.ntppool.dev",
|
||||||
|
}
|
||||||
|
|
||||||
|
// var validationServers = map[DeploymentEnvironment]string{
|
||||||
|
// DeployDevel: "https://v.ntp.dev/d/",
|
||||||
|
// DeployTest: "https://v.ntp.dev/b/",
|
||||||
|
// DeployProd: "https://v.ntp.dev/p/",
|
||||||
|
// }
|
||||||
|
|
||||||
|
const (
|
||||||
|
DeployUndefined DeploymentEnvironment = iota
|
||||||
|
DeployDevel
|
||||||
|
DeployTest
|
||||||
|
DeployProd
|
||||||
|
)
|
||||||
|
|
||||||
|
type DeploymentEnvironment uint8
|
||||||
|
|
||||||
|
func DeploymentEnvironmentFromString(s string) DeploymentEnvironment {
|
||||||
|
switch s {
|
||||||
|
case "devel", "dev":
|
||||||
|
return DeployDevel
|
||||||
|
case "test", "beta":
|
||||||
|
return DeployTest
|
||||||
|
case "prod":
|
||||||
|
return DeployProd
|
||||||
|
default:
|
||||||
|
return DeployUndefined
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d DeploymentEnvironment) String() string {
|
||||||
|
switch d {
|
||||||
|
case DeployProd:
|
||||||
|
return "prod"
|
||||||
|
case DeployTest:
|
||||||
|
return "test"
|
||||||
|
case DeployDevel:
|
||||||
|
return "devel"
|
||||||
|
default:
|
||||||
|
panic("invalid DeploymentEnvironment")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d DeploymentEnvironment) APIHost() string {
|
||||||
|
if apiHost := os.Getenv("API_HOST"); apiHost != "" {
|
||||||
|
return apiHost
|
||||||
|
}
|
||||||
|
return apiServers[d]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d DeploymentEnvironment) ManageURL(path string) string {
|
||||||
|
return manageServers[d] + path
|
||||||
|
}
|
40
config/depenv/monitor_names.go
Normal file
40
config/depenv/monitor_names.go
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package depenv
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var monitorApiServers = map[DeploymentEnvironment]string{
|
||||||
|
DeployDevel: "https://api.devel.mon.ntppool.dev",
|
||||||
|
DeployTest: "https://api.test.mon.ntppool.dev",
|
||||||
|
DeployProd: "https://api.mon.ntppool.dev",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d DeploymentEnvironment) MonitorAPIHost() string {
|
||||||
|
return monitorApiServers[d]
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDeploymentEnvironmentFromName(clientName string) (DeploymentEnvironment, error) {
|
||||||
|
clientName = strings.ToLower(clientName)
|
||||||
|
|
||||||
|
if !strings.HasSuffix(clientName, ".mon.ntppool.dev") {
|
||||||
|
return DeployUndefined, fmt.Errorf("invalid client name %s", clientName)
|
||||||
|
}
|
||||||
|
|
||||||
|
if clientName == "api.mon.ntppool.dev" {
|
||||||
|
return DeployProd, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
prefix := clientName[:strings.Index(clientName, ".mon.ntppool.dev")]
|
||||||
|
parts := strings.Split(prefix, ".")
|
||||||
|
if len(parts) != 2 {
|
||||||
|
return DeployUndefined, fmt.Errorf("invalid client name %s", clientName)
|
||||||
|
}
|
||||||
|
|
||||||
|
if d := DeploymentEnvironmentFromString(parts[1]); d != DeployUndefined {
|
||||||
|
return d, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return DeployUndefined, fmt.Errorf("invalid client name %s (unknown environment %s)", clientName, parts[1])
|
||||||
|
}
|
4
go.mod
4
go.mod
@ -1,8 +1,6 @@
|
|||||||
module go.ntppool.org/common
|
module go.ntppool.org/common
|
||||||
|
|
||||||
go 1.23
|
go 1.23.5
|
||||||
|
|
||||||
toolchain go1.23.4
|
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/abh/certman v0.4.0
|
github.com/abh/certman v0.4.0
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
go install github.com/goreleaser/goreleaser/v2@v2.5.0
|
go install github.com/goreleaser/goreleaser/v2@v2.5.1
|
||||||
|
|
||||||
if [ ! -z "${harbor_username:-}" ]; then
|
if [ ! -z "${harbor_username:-}" ]; then
|
||||||
DOCKER_FILE=~/.docker/config.json
|
DOCKER_FILE=~/.docker/config.json
|
||||||
|
Loading…
Reference in New Issue
Block a user