@@ -15,17 +15,18 @@ import (
1515)
1616
1717var (
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
2930)
3031
3132type Event struct {
@@ -66,13 +67,14 @@ func (i *DockerImage) String() string {
6667}
6768
6869type 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
7678}
7779
7880type ConfigFile struct {
@@ -120,7 +122,7 @@ func (r *RuntimeContainer) PublishedAddresses() []Address {
120122}
121123
122124func 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>]" )
124126}
125127
126128func generateFromContainers (client * docker.Client ) {
@@ -136,6 +138,7 @@ func generateFromContainers(client *docker.Client) {
136138 continue
137139 }
138140 runNotifyCmd (config )
141+ sendSignalToContainer (client , config )
139142 }
140143}
141144
@@ -154,6 +157,23 @@ func runNotifyCmd(config Config) {
154157 }
155158}
156159
160+ func sendSignalToContainer (client * docker.Client , config Config ) {
161+ if len (config .NotifyContainers ) < 1 {
162+ return
163+ }
164+
165+ for container , signal := range config .NotifyContainers {
166+ log .Printf ("Sending container '%s' signal '%v'" , container , signal )
167+ killOpts := docker.KillContainerOptions {
168+ ID : container ,
169+ Signal : signal ,
170+ }
171+ if err := client .KillContainer (killOpts ); err != nil {
172+ log .Printf ("Error sending signal to container: %s" , err )
173+ }
174+ }
175+ }
176+
157177func loadConfig (file string ) error {
158178 _ , err := toml .DecodeFile (file , & configs )
159179 if err != nil {
@@ -187,6 +207,7 @@ func generateAtInterval(client *docker.Client, configs ConfigFile) {
187207 // ignore changed return value. always run notify command
188208 generateFile (configCopy , containers )
189209 runNotifyCmd (configCopy )
210+ sendSignalToContainer (client , configCopy )
190211 case <- quit :
191212 ticker .Stop ()
192213 return
@@ -226,6 +247,7 @@ func initFlags() {
226247 flag .BoolVar (& onlyExposed , "only-exposed" , false , "only include containers with exposed ports" )
227248 flag .BoolVar (& onlyPublished , "only-published" , false , "only include containers with published ports (implies -only-exposed)" )
228249 flag .StringVar (& notifyCmd , "notify" , "" , "run command after template is regenerated" )
250+ flag .StringVar (& notifySigHUPContainerID , "notify-sighup" , "" , "send HUP signal to container. Equivalent to `docker kill -s HUP container-ID`" )
229251 flag .StringVar (& configFile , "config" , "" , "config file with template directives" )
230252 flag .IntVar (& interval , "interval" , 0 , "notify command interval (s)" )
231253 flag .StringVar (& endpoint , "endpoint" , "" , "docker api endpoint" )
@@ -253,13 +275,17 @@ func main() {
253275 }
254276 } else {
255277 config := Config {
256- Template : flag .Arg (0 ),
257- Dest : flag .Arg (1 ),
258- Watch : watch ,
259- NotifyCmd : notifyCmd ,
260- OnlyExposed : onlyExposed ,
261- OnlyPublished : onlyPublished ,
262- Interval : interval ,
278+ Template : flag .Arg (0 ),
279+ Dest : flag .Arg (1 ),
280+ Watch : watch ,
281+ NotifyCmd : notifyCmd ,
282+ NotifyContainers : make (map [string ]docker.Signal ),
283+ OnlyExposed : onlyExposed ,
284+ OnlyPublished : onlyPublished ,
285+ Interval : interval ,
286+ }
287+ if notifySigHUPContainerID != "" {
288+ config .NotifyContainers [notifySigHUPContainerID ] = docker .SIGHUP
263289 }
264290 configs = ConfigFile {
265291 Config : []Config {config }}
0 commit comments