Skip to content

Commit a8977e1

Browse files
authored
feat: allow server defaults override via env (#241)
Signed-off-by: Toma Puljak <[email protected]>
1 parent 1c92d9d commit a8977e1

File tree

2 files changed

+118
-45
lines changed

2 files changed

+118
-45
lines changed

pkg/server/config/config.go

+3-45
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"path"
1111

1212
"github.com/daytonaio/daytona/pkg/types"
13-
"github.com/google/uuid"
1413

1514
log "github.com/sirupsen/logrus"
1615
)
@@ -145,59 +144,18 @@ func GetProjectLogFilePath(workspaceId string, projectId string) (string, error)
145144
return filePath, nil
146145
}
147146

148-
func getDefaultProvidersDir() (string, error) {
149-
userConfigDir, err := os.UserConfigDir()
150-
if err != nil {
151-
return "", err
152-
}
153-
154-
return path.Join(userConfigDir, "daytona", "providers"), nil
155-
}
156-
157-
func getDefaultTargetsPath() (string, error) {
158-
configDir, err := GetConfigDir()
159-
if err != nil {
160-
return "", err
161-
}
162-
163-
return path.Join(configDir, "targets.json"), nil
164-
165-
}
166-
167-
func generateUuid() string {
168-
uuid := uuid.New()
169-
return uuid.String()
170-
}
171-
172147
func init() {
173148
_, err := GetConfig()
174149
if err == nil {
175150
return
176151
}
177152

178-
providersDir, err := getDefaultProvidersDir()
153+
c, err := getDefaultConfig()
179154
if err != nil {
180-
log.Fatal("failed to get default providers dir")
181-
}
182-
183-
targetsPath, err := getDefaultTargetsPath()
184-
if err != nil {
185-
log.Fatal("failed to get default targets path")
186-
}
187-
188-
c := types.ServerConfig{
189-
RegistryUrl: defaultRegistryUrl,
190-
ProvidersDir: providersDir,
191-
GitProviders: []types.GitProvider{},
192-
ServerDownloadUrl: defaultServerDownloadUrl,
193-
ApiPort: defaultApiPort,
194-
HeadscalePort: defaultHeadscalePort,
195-
TargetsFilePath: targetsPath,
196-
Frps: getDefaultFRPSConfig(),
197-
Id: generateUuid(),
155+
log.Fatal("failed to get default config")
198156
}
199157

200-
err = Save(&c)
158+
err = Save(c)
201159
if err != nil {
202160
log.Fatal("failed to save default config file")
203161
}

pkg/server/config/defaults.go

+115
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,17 @@
44
package config
55

66
import (
7+
"errors"
78
"fmt"
89
"net/http"
10+
"os"
11+
"path"
12+
"strconv"
913

1014
"github.com/daytonaio/daytona/pkg/types"
15+
"github.com/google/uuid"
16+
17+
log "github.com/sirupsen/logrus"
1118
)
1219

1320
const defaultRegistryUrl = "https://download.daytona.io/daytona"
@@ -28,6 +35,24 @@ var eu_defaultFrpsConfig = types.FRPSConfig{
2835
}
2936

3037
func getDefaultFRPSConfig() *types.FRPSConfig {
38+
frpsDomain := os.Getenv("DEFAULT_FRPS_DOMAIN")
39+
fprsProtocol := os.Getenv("DEFAULT_FRPS_PROTOCOL")
40+
frpsPort := os.Getenv("DEFAULT_FRPS_PORT")
41+
if frpsDomain != "" && fprsProtocol != "" && frpsPort != "" {
42+
port, err := parsePort(frpsPort)
43+
if err != nil {
44+
log.Error(fmt.Printf("%s. Using default", err))
45+
} else {
46+
return &types.FRPSConfig{
47+
Domain: frpsDomain,
48+
Port: port,
49+
Protocol: fprsProtocol,
50+
}
51+
}
52+
} else {
53+
log.Info("Using default FRPS config")
54+
}
55+
3156
// Return config which responds fastest to a ping
3257
usReturnChan := make(chan bool)
3358
euReturnChan := make(chan bool)
@@ -51,3 +76,93 @@ func getDefaultFRPSConfig() *types.FRPSConfig {
5176
return &eu_defaultFrpsConfig
5277
}
5378
}
79+
80+
func getDefaultConfig() (*types.ServerConfig, error) {
81+
providersDir, err := getDefaultProvidersDir()
82+
if err != nil {
83+
return nil, errors.New("failed to get default providers dir")
84+
}
85+
86+
targetsPath, err := getDefaultTargetsPath()
87+
if err != nil {
88+
return nil, errors.New("failed to get default targets path")
89+
}
90+
91+
c := types.ServerConfig{
92+
Id: generateUuid(),
93+
GitProviders: []types.GitProvider{},
94+
RegistryUrl: defaultRegistryUrl,
95+
ProvidersDir: providersDir,
96+
ServerDownloadUrl: defaultServerDownloadUrl,
97+
ApiPort: defaultApiPort,
98+
HeadscalePort: defaultHeadscalePort,
99+
TargetsFilePath: targetsPath,
100+
Frps: getDefaultFRPSConfig(),
101+
}
102+
103+
if os.Getenv("DEFAULT_REGISTRY_URL") != "" {
104+
c.RegistryUrl = os.Getenv("DEFAULT_REGISTRY_URL")
105+
}
106+
if os.Getenv("DEFAULT_SERVER_DOWNLOAD_URL") != "" {
107+
c.ServerDownloadUrl = os.Getenv("DEFAULT_SERVER_DOWNLOAD_URL")
108+
}
109+
if os.Getenv("DEFAULT_PROVIDERS_DIR") != "" {
110+
c.ProvidersDir = os.Getenv("DEFAULT_PROVIDERS_DIR")
111+
}
112+
if os.Getenv("DEFAULT_TARGETS_FILE_PATH") != "" {
113+
c.TargetsFilePath = os.Getenv("DEFAULT_TARGETS_FILE_PATH")
114+
}
115+
if os.Getenv("DEFAULT_API_PORT") != "" {
116+
apiPort, err := parsePort(os.Getenv("DEFAULT_API_PORT"))
117+
if err != nil {
118+
log.Error(fmt.Printf("%s. Using %d", err, defaultApiPort))
119+
} else {
120+
c.ApiPort = apiPort
121+
}
122+
}
123+
if os.Getenv("DEFAULT_HEADSCALE_PORT") != "" {
124+
headscalePort, err := parsePort(os.Getenv("DEFAULT_HEADSCALE_PORT"))
125+
if err != nil {
126+
log.Error(fmt.Printf("%s. Using %d", err, defaultHeadscalePort))
127+
} else {
128+
c.HeadscalePort = headscalePort
129+
}
130+
}
131+
132+
return &c, nil
133+
}
134+
135+
func parsePort(port string) (uint32, error) {
136+
p, err := strconv.Atoi(port)
137+
if err != nil {
138+
return 0, errors.New("failed to parse port")
139+
}
140+
if p < 0 || p > 65535 {
141+
return 0, errors.New("port out of range")
142+
}
143+
144+
return uint32(p), nil
145+
}
146+
147+
func getDefaultProvidersDir() (string, error) {
148+
userConfigDir, err := os.UserConfigDir()
149+
if err != nil {
150+
return "", err
151+
}
152+
153+
return path.Join(userConfigDir, "daytona", "providers"), nil
154+
}
155+
156+
func getDefaultTargetsPath() (string, error) {
157+
configDir, err := GetConfigDir()
158+
if err != nil {
159+
return "", err
160+
}
161+
162+
return path.Join(configDir, "targets.json"), nil
163+
}
164+
165+
func generateUuid() string {
166+
uuid := uuid.New()
167+
return uuid.String()
168+
}

0 commit comments

Comments
 (0)