Skip to content

Commit 604574e

Browse files
committed
logrotate
1 parent bc70ebc commit 604574e

File tree

4 files changed

+132
-96
lines changed

4 files changed

+132
-96
lines changed

packages/gateway-v2/systemd.go

Lines changed: 8 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package gatewayv2
22

33
import (
4-
"bytes"
54
"fmt"
65
"os"
76
"os/exec"
87
"path/filepath"
98
"runtime"
10-
"text/template"
119

12-
"github.com/Infisical/infisical-merge/packages/templates"
10+
"github.com/Infisical/infisical-merge/packages/util"
1311
"github.com/rs/zerolog/log"
1412
)
1513

@@ -41,56 +39,17 @@ func InstallGatewaySystemdService(token string, domain string, name string, rela
4139
configContent += fmt.Sprintf("%s=%s\n", RELAY_NAME_ENV_NAME, relayName)
4240
}
4341

44-
configPath := filepath.Join(configDir, "gateway.conf")
45-
if err := os.WriteFile(configPath, []byte(configContent), 0600); err != nil {
46-
return fmt.Errorf("failed to write config file: %v", err)
42+
environmentFilePath := filepath.Join(configDir, "gateway.conf")
43+
if err := os.WriteFile(environmentFilePath, []byte(configContent), 0600); err != nil {
44+
return fmt.Errorf("failed to write environment file: %v", err)
4745
}
4846

49-
tmpl, err := template.ParseFS(templates.TemplatesFS, "infisical-service.tmpl")
50-
if err != nil {
51-
return fmt.Errorf("failed to parse template: %v", err)
52-
}
53-
54-
data := map[string]string{
55-
"Description": "Infisical Gateway Service",
56-
"EnvironmentFile": configPath,
57-
"ServiceType": "gateway",
58-
}
59-
60-
if serviceLogFile != "" {
61-
62-
serviceLogFile = filepath.Clean(serviceLogFile)
63-
64-
if !filepath.IsAbs(serviceLogFile) {
65-
return fmt.Errorf("service-log-file must be an absolute path: %s", serviceLogFile)
66-
}
67-
68-
logDir := filepath.Dir(serviceLogFile)
69-
70-
// create the directory structure with appropriate permissions
71-
if err := os.MkdirAll(logDir, 0755); err != nil {
72-
return fmt.Errorf("failed to create log directory %s: %w", logDir, err)
73-
}
74-
75-
// create the log file if it doesn't exist
76-
logFile, err := os.Create(serviceLogFile)
77-
if err != nil {
78-
return fmt.Errorf("failed to create log file %s: %w", serviceLogFile, err)
79-
}
80-
logFile.Close()
81-
82-
data["ServiceLogFile"] = serviceLogFile
83-
84-
}
85-
86-
var buf bytes.Buffer
87-
if err := tmpl.Execute(&buf, data); err != nil {
88-
return fmt.Errorf("failed to execute template: %v", err)
47+
if err := util.WriteSystemdServiceFile(serviceLogFile, environmentFilePath, "infisical-gateway"); err != nil {
48+
return fmt.Errorf("failed to write systemd service file: %v", err)
8949
}
9050

91-
servicePath := "/etc/systemd/system/infisical-gateway.service"
92-
if err := os.WriteFile(servicePath, buf.Bytes(), 0644); err != nil {
93-
return fmt.Errorf("failed to write systemd service file: %v", err)
51+
if err := util.WriteLogrotateFile(serviceLogFile, "infisical-gateway"); err != nil {
52+
return fmt.Errorf("failed to write logrotate file: %v", err)
9453
}
9554

9655
reloadCmd := exec.Command("systemctl", "daemon-reload")

packages/relay/systemd.go

Lines changed: 9 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
package relay
22

33
import (
4-
"bytes"
54
"fmt"
65
"os"
76
"os/exec"
87
"path/filepath"
98
"runtime"
10-
"text/template"
119

1210
gatewayv2 "github.com/Infisical/infisical-merge/packages/gateway-v2"
13-
"github.com/Infisical/infisical-merge/packages/templates"
11+
"github.com/Infisical/infisical-merge/packages/util"
1412
"github.com/rs/zerolog/log"
1513
)
1614

@@ -56,55 +54,19 @@ func InstallRelaySystemdService(token string, domain string, name string, host s
5654
}
5755
}
5856

59-
configPath := filepath.Join(configDir, "relay.conf")
60-
if err := os.WriteFile(configPath, []byte(configContent), 0600); err != nil {
61-
return fmt.Errorf("failed to write config file: %v", err)
57+
environmentFilePath := filepath.Join(configDir, "relay.conf")
58+
if err := os.WriteFile(environmentFilePath, []byte(configContent), 0600); err != nil {
59+
return fmt.Errorf("failed to write environment file: %v", err)
6260
}
6361

64-
tmpl, err := template.ParseFS(templates.TemplatesFS, "infisical-service.tmpl")
65-
if err != nil {
66-
return fmt.Errorf("failed to parse template: %v", err)
67-
}
68-
69-
data := map[string]string{
70-
"Description": "Infisical Relay Service",
71-
"EnvironmentFile": configPath,
72-
"ServiceType": "relay",
73-
}
74-
75-
if serviceLogFile != "" {
76-
77-
serviceLogFile = filepath.Clean(serviceLogFile)
62+
serviceName := "infisical-relay"
7863

79-
if !filepath.IsAbs(serviceLogFile) {
80-
return fmt.Errorf("service-log-file must be an absolute path: %s", serviceLogFile)
81-
}
82-
83-
logDir := filepath.Dir(serviceLogFile)
84-
85-
// create the directory structure with appropriate permissions
86-
if err := os.MkdirAll(logDir, 0755); err != nil {
87-
return fmt.Errorf("failed to create log directory %s: %w", logDir, err)
88-
}
89-
90-
// create the log file if it doesn't exist
91-
logFile, err := os.Create(serviceLogFile)
92-
if err != nil {
93-
return fmt.Errorf("failed to create log file %s: %w", serviceLogFile, err)
94-
}
95-
logFile.Close()
96-
97-
data["ServiceLogFile"] = serviceLogFile
98-
}
99-
100-
var buf bytes.Buffer
101-
if err := tmpl.Execute(&buf, data); err != nil {
102-
return fmt.Errorf("failed to execute template: %v", err)
64+
if err := util.WriteSystemdServiceFile(serviceLogFile, environmentFilePath, serviceName); err != nil {
65+
return fmt.Errorf("failed to write systemd service file: %v", err)
10366
}
10467

105-
servicePath := "/etc/systemd/system/infisical-relay.service"
106-
if err := os.WriteFile(servicePath, buf.Bytes(), 0644); err != nil {
107-
return fmt.Errorf("failed to write systemd service file: %v", err)
68+
if err := util.WriteLogrotateFile(serviceLogFile, serviceName); err != nil {
69+
return fmt.Errorf("failed to write logrotate file: %v", err)
10870
}
10971

11072
reloadCmd := exec.Command("systemctl", "daemon-reload")
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{{ .LogFilePath }} {
2+
daily
3+
rotate 7
4+
compress
5+
delaycompress
6+
missingok
7+
notifempty
8+
create 0644 root root
9+
postrotate
10+
systemctl reload {{ .ServiceName }} > /dev/null 2>&1 || true
11+
endscript
12+
}

packages/util/systemd.go

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package util
2+
3+
import (
4+
"bytes"
5+
"fmt"
6+
"os"
7+
"path/filepath"
8+
"text/template"
9+
10+
"github.com/Infisical/infisical-merge/packages/templates"
11+
"github.com/rs/zerolog/log"
12+
)
13+
14+
func WriteSystemdServiceFile(
15+
serviceLogFilePath string,
16+
environmentFilePath string,
17+
serviceName string, // service name (e.g. infisical-relay)
18+
) error {
19+
20+
data := map[string]string{
21+
"Description": "Infisical Relay Service",
22+
"EnvironmentFile": environmentFilePath,
23+
"ServiceType": "relay",
24+
}
25+
26+
serviceLogFile := filepath.Clean(serviceLogFilePath)
27+
28+
if !filepath.IsAbs(serviceLogFile) {
29+
return fmt.Errorf("service-log-file must be an absolute path: %s", serviceLogFile)
30+
}
31+
32+
logDir := filepath.Dir(serviceLogFile)
33+
34+
// create the directory structure with appropriate permissions
35+
if err := os.MkdirAll(logDir, 0755); err != nil {
36+
return fmt.Errorf("failed to create log directory %s: %w", logDir, err)
37+
}
38+
39+
// create the log file if it doesn't exist
40+
logFile, err := os.Create(serviceLogFile)
41+
if err != nil {
42+
return fmt.Errorf("failed to create log file %s: %w", serviceLogFile, err)
43+
}
44+
logFile.Close()
45+
46+
data["ServiceLogFile"] = serviceLogFile
47+
48+
tmpl, err := template.ParseFS(templates.TemplatesFS, "infisical-service.tmpl")
49+
if err != nil {
50+
return fmt.Errorf("failed to parse template: %v", err)
51+
}
52+
53+
var buf bytes.Buffer
54+
if err := tmpl.Execute(&buf, data); err != nil {
55+
return fmt.Errorf("failed to execute template: %v", err)
56+
}
57+
58+
servicePath := fmt.Sprintf("/etc/systemd/system/%s.service", serviceName)
59+
if err := os.WriteFile(servicePath, buf.Bytes(), 0644); err != nil {
60+
return fmt.Errorf("failed to write systemd service file: %v", err)
61+
}
62+
63+
return nil
64+
65+
}
66+
67+
func WriteLogrotateFile(
68+
serviceLogFilePath string,
69+
serviceName string, // service name (e.g. infisical-relay)
70+
) error {
71+
72+
logrotateDirectory := "/etc/logrotate.d"
73+
74+
// check if /etc/logrotate.d exists (logrotate.d is a directory )
75+
if _, err := os.Stat(logrotateDirectory); os.IsNotExist(err) {
76+
log.Warn().Msg("logrotate.d directory does not exist. log files will not be pruned automatically.")
77+
} else if err != nil {
78+
return fmt.Errorf("failed to check if logrotate.d directory exists: %v", err)
79+
} else {
80+
81+
logrotateTmpl, err := template.ParseFS(templates.TemplatesFS, "logrotate.d.tmpl")
82+
if err != nil {
83+
return fmt.Errorf("failed to parse logrotate template: %v", err)
84+
}
85+
86+
data := map[string]string{
87+
"LogFilePath": serviceLogFilePath,
88+
"ServiceName": serviceName,
89+
}
90+
91+
var buf bytes.Buffer
92+
if err := logrotateTmpl.Execute(&buf, data); err != nil {
93+
return fmt.Errorf("failed to execute logrotate template: %v", err)
94+
}
95+
96+
if err := os.WriteFile(filepath.Join(logrotateDirectory, serviceName), buf.Bytes(), 0644); err != nil {
97+
return fmt.Errorf("failed to write logrotate file: %v", err)
98+
}
99+
}
100+
101+
return nil
102+
103+
}

0 commit comments

Comments
 (0)