@@ -15,17 +15,18 @@ import (
15
15
)
16
16
17
17
var (
18
- buildVersion string
19
- version bool
20
- watch bool
21
- notifyCmd string
22
- onlyExposed bool
23
- onlyPublished bool
24
- configFile string
25
- configs ConfigFile
26
- interval int
27
- endpoint string
28
- wg sync.WaitGroup
18
+ buildVersion string
19
+ version bool
20
+ watch bool
21
+ notifyCmd string
22
+ notifySigHUPContainerID string
23
+ onlyExposed bool
24
+ onlyPublished bool
25
+ configFile string
26
+ configs ConfigFile
27
+ interval int
28
+ endpoint string
29
+ wg sync.WaitGroup
29
30
)
30
31
31
32
type Event struct {
@@ -66,13 +67,14 @@ func (i *DockerImage) String() string {
66
67
}
67
68
68
69
type Config struct {
69
- Template string
70
- Dest string
71
- Watch bool
72
- NotifyCmd string
73
- OnlyExposed bool
74
- OnlyPublished bool
75
- Interval int
70
+ Template string
71
+ Dest string
72
+ Watch bool
73
+ NotifyCmd string
74
+ NotifyContainers map [string ]docker.Signal
75
+ OnlyExposed bool
76
+ OnlyPublished bool
77
+ Interval int
76
78
}
77
79
78
80
type ConfigFile struct {
@@ -120,7 +122,7 @@ func (r *RuntimeContainer) PublishedAddresses() []Address {
120
122
}
121
123
122
124
func usage () {
123
- println ("Usage: docker-gen [-config file] [-watch=false] [-notify=\" restart xyz\" ] [-interval=0] [-endpoint tcp|unix://..] <template> [<dest>]" )
125
+ println ("Usage: docker-gen [-config file] [-watch=false] [-notify=\" restart xyz\" ] [-notify-sighup= \" container-ID \" ] [- interval=0] [-endpoint tcp|unix://..] <template> [<dest>]" )
124
126
}
125
127
126
128
func generateFromContainers (client * docker.Client ) {
@@ -136,6 +138,7 @@ func generateFromContainers(client *docker.Client) {
136
138
continue
137
139
}
138
140
runNotifyCmd (config )
141
+ sendSignalToContainer (client , config )
139
142
}
140
143
}
141
144
@@ -153,6 +156,23 @@ func runNotifyCmd(config Config) {
153
156
}
154
157
}
155
158
159
+ func sendSignalToContainer (client * docker.Client , config Config ) {
160
+ if len (config .NotifyContainers ) < 1 {
161
+ return
162
+ }
163
+
164
+ for container , signal := range config .NotifyContainers {
165
+ log .Printf ("Sending container '%s' signal '%v'" , container , signal )
166
+ killOpts := docker.KillContainerOptions {
167
+ ID : container ,
168
+ Signal : signal ,
169
+ }
170
+ if err := client .KillContainer (killOpts ); err != nil {
171
+ log .Printf ("Error sending signal to container: %s" , err )
172
+ }
173
+ }
174
+ }
175
+
156
176
func loadConfig (file string ) error {
157
177
_ , err := toml .DecodeFile (file , & configs )
158
178
if err != nil {
@@ -186,6 +206,7 @@ func generateAtInterval(client *docker.Client, configs ConfigFile) {
186
206
// ignore changed return value. always run notify command
187
207
generateFile (configCopy , containers )
188
208
runNotifyCmd (configCopy )
209
+ sendSignalToContainer (client , configCopy )
189
210
case <- quit :
190
211
ticker .Stop ()
191
212
return
@@ -225,6 +246,7 @@ func initFlags() {
225
246
flag .BoolVar (& onlyExposed , "only-exposed" , false , "only include containers with exposed ports" )
226
247
flag .BoolVar (& onlyPublished , "only-published" , false , "only include containers with published ports (implies -only-exposed)" )
227
248
flag .StringVar (& notifyCmd , "notify" , "" , "run command after template is regenerated" )
249
+ flag .StringVar (& notifySigHUPContainerID , "notify-sighup" , "" , "send HUP signal to container. Equivalent to `docker kill -s HUP container-ID`" )
228
250
flag .StringVar (& configFile , "config" , "" , "config file with template directives" )
229
251
flag .IntVar (& interval , "interval" , 0 , "notify command interval (s)" )
230
252
flag .StringVar (& endpoint , "endpoint" , "" , "docker api endpoint" )
@@ -252,13 +274,17 @@ func main() {
252
274
}
253
275
} else {
254
276
config := Config {
255
- Template : flag .Arg (0 ),
256
- Dest : flag .Arg (1 ),
257
- Watch : watch ,
258
- NotifyCmd : notifyCmd ,
259
- OnlyExposed : onlyExposed ,
260
- OnlyPublished : onlyPublished ,
261
- Interval : interval ,
277
+ Template : flag .Arg (0 ),
278
+ Dest : flag .Arg (1 ),
279
+ Watch : watch ,
280
+ NotifyCmd : notifyCmd ,
281
+ NotifyContainers : make (map [string ]docker.Signal ),
282
+ OnlyExposed : onlyExposed ,
283
+ OnlyPublished : onlyPublished ,
284
+ Interval : interval ,
285
+ }
286
+ if notifySigHUPContainerID != "" {
287
+ config .NotifyContainers [notifySigHUPContainerID ] = docker .SIGHUP
262
288
}
263
289
configs = ConfigFile {
264
290
Config : []Config {config }}
0 commit comments