@@ -22,25 +22,31 @@ const (
22
22
// proxy. The generated configuration allows Caddy to route external traffic to service containers across the internal
23
23
// network.
24
24
type Controller struct {
25
- store * store.Store
26
- configDir string
27
- verifyResponse string
28
- log * slog.Logger
25
+ machineID string
26
+ configDir string
27
+ generator * CaddyfileGenerator
28
+ store * store.Store
29
+ log * slog.Logger
29
30
}
30
31
31
- func NewController (store * store. Store , configDir string , verifyResponse string ) (* Controller , error ) {
32
+ func NewController (machineID , configDir , adminSock string , store * store. Store ) (* Controller , error ) {
32
33
if err := os .MkdirAll (configDir , 0o750 ); err != nil {
33
34
return nil , fmt .Errorf ("create directory for Caddy configuration '%s': %w" , configDir , err )
34
35
}
35
36
if err := fs .Chown (configDir , "" , CaddyGroup ); err != nil {
36
37
return nil , fmt .Errorf ("change owner of directory for Caddy configuration '%s': %w" , configDir , err )
37
38
}
38
39
40
+ generator := & CaddyfileGenerator {
41
+ MachineID : machineID ,
42
+ }
43
+
39
44
return & Controller {
40
- store : store ,
41
- configDir : configDir ,
42
- verifyResponse : verifyResponse ,
43
- log : slog .With ("component" , "caddy-controller" ),
45
+ machineID : machineID ,
46
+ configDir : configDir ,
47
+ generator : generator ,
48
+ store : store ,
49
+ log : slog .With ("component" , "caddy-controller" ),
44
50
}, nil
45
51
}
46
52
@@ -73,20 +79,20 @@ func (c *Controller) Run(ctx context.Context) error {
73
79
74
80
containerRecords , err = c .store .ListContainers (ctx , store.ListOptions {})
75
81
if err != nil {
76
- c .log .Info ("Failed to list containers." , "err" , err )
82
+ c .log .Error ("Failed to list containers." , "err" , err )
77
83
continue
78
84
}
79
85
containers , err = c .filterAvailableContainers (containerRecords )
80
86
if err != nil {
81
- c .log .Info ("Failed to filter available containers." , "err" , err )
87
+ c .log .Error ("Failed to filter available containers." , "err" , err )
82
88
continue
83
89
}
84
90
85
91
if err = c .generateCaddyfile (containers ); err != nil {
86
- c .log .Info ("Failed to generate Caddyfile configuration." , "err" , err )
92
+ c .log .Error ("Failed to generate Caddyfile configuration." , "err" , err )
87
93
}
88
94
if err = c .generateJSONConfig (containers ); err != nil {
89
- c .log .Info ("Failed to generate Caddy JSON configuration." , "err" , err )
95
+ c .log .Error ("Failed to generate Caddy JSON configuration." , "err" , err )
90
96
}
91
97
92
98
c .log .Info ("Updated Caddy configuration." , "dir" , c .configDir )
@@ -110,12 +116,13 @@ func (c *Controller) filterAvailableContainers(
110
116
}
111
117
112
118
func (c * Controller ) generateCaddyfile (containers []api.ServiceContainer ) error {
113
- caddyfile , err := GenerateCaddyfile ( containers , c . verifyResponse )
119
+ caddyfile , err := c . generator . Generate ( containers )
114
120
if err != nil {
115
121
return fmt .Errorf ("generate Caddyfile: %w" , err )
116
122
}
117
123
caddyfilePath := filepath .Join (c .configDir , "Caddyfile" )
118
124
125
+ // TODO: use atomic file write to avoid partial loads on Caddy watch reload.
119
126
if err = os .WriteFile (caddyfilePath , []byte (caddyfile ), 0o640 ); err != nil {
120
127
return fmt .Errorf ("write Caddyfile to file '%s': %w" , caddyfilePath , err )
121
128
}
@@ -127,7 +134,7 @@ func (c *Controller) generateCaddyfile(containers []api.ServiceContainer) error
127
134
}
128
135
129
136
func (c * Controller ) generateJSONConfig (containers []api.ServiceContainer ) error {
130
- config , err := GenerateJSONConfig (containers , c .verifyResponse )
137
+ config , err := GenerateJSONConfig (containers , c .machineID )
131
138
if err != nil {
132
139
return err
133
140
}
0 commit comments