2626 configs ConfigFile
2727 interval int
2828 endpoint string
29+ tlsCert string
30+ tlsKey string
31+ tlsCaCert string
32+ tlsVerify bool
2933 wg sync.WaitGroup
3034)
3135
@@ -123,7 +127,7 @@ func (r *RuntimeContainer) PublishedAddresses() []Address {
123127}
124128
125129func usage () {
126- println ("Usage: docker-gen [-config file] [-watch=false] [-notify=\" restart xyz\" ] [-notify-sighup=\" container-ID\" ] [-interval=0] [-endpoint tcp|unix://..] <template> [<dest>]" )
130+ println ("Usage: docker-gen [-config file] [-watch=false] [-notify=\" restart xyz\" ] [-notify-sighup=\" container-ID\" ] [-interval=0] [-endpoint tcp|unix://..] [-tlscert file] [-tlskey file] [-tlscacert file] [-tlsverify] <template> [<dest>]" )
127131}
128132
129133func generateFromContainers (client * docker.Client ) {
@@ -225,8 +229,17 @@ func generateFromEvents(client *docker.Client, configs ConfigFile) {
225229
226230 wg .Add (1 )
227231 defer wg .Done ()
232+
233+ eventChan := make (chan * docker.APIEvents , 100 )
234+ defer close (eventChan )
235+
236+ err := client .AddEventListener ((chan <- * docker.APIEvents )(eventChan ))
237+ if err != nil {
238+ log .Fatalf ("Unable to add docker event listener: %s" , err )
239+ }
240+ defer client .RemoveEventListener (eventChan )
241+
228242 log .Println ("Watching docker events" )
229- eventChan := getEvents ()
230243 for {
231244 event := <- eventChan
232245
@@ -235,7 +248,7 @@ func generateFromEvents(client *docker.Client, configs ConfigFile) {
235248 }
236249
237250 if event .Status == "start" || event .Status == "stop" || event .Status == "die" {
238- log .Printf ("Received event %s for container %s" , event .Status , event .ContainerID [:12 ])
251+ log .Printf ("Received event %s for container %s" , event .Status , event .ID [:12 ])
239252 generateFromContainers (client )
240253 }
241254 }
@@ -251,6 +264,10 @@ func initFlags() {
251264 flag .StringVar (& configFile , "config" , "" , "config file with template directives" )
252265 flag .IntVar (& interval , "interval" , 0 , "notify command interval (s)" )
253266 flag .StringVar (& endpoint , "endpoint" , "" , "docker api endpoint" )
267+ flag .StringVar (& tlsCert , "tlscert" , "" , "path to TLS client certificate file" )
268+ flag .StringVar (& tlsKey , "tlskey" , "" , "path to TLS client key file" )
269+ flag .StringVar (& tlsCaCert , "tlscacert" , "" , "path to TLS CA certificate file" )
270+ flag .BoolVar (& tlsVerify , "tlsverify" , false , "verify docker daemon's TLS certicate" )
254271 flag .Parse ()
255272}
256273
@@ -270,8 +287,7 @@ func main() {
270287 if configFile != "" {
271288 err := loadConfig (configFile )
272289 if err != nil {
273- log .Printf ("error loading config %s: %s\n " , configFile , err )
274- os .Exit (1 )
290+ log .Fatalf ("error loading config %s: %s\n " , configFile , err )
275291 }
276292 } else {
277293 config := Config {
@@ -296,9 +312,22 @@ func main() {
296312 log .Fatalf ("Bad endpoint: %s" , err )
297313 }
298314
299- client , err := docker .NewClient (endpoint )
315+ var client * docker.Client
316+ if strings .HasPrefix (endpoint , "unix:" ) {
317+ client , err = docker .NewClient (endpoint )
318+ } else if tlsVerify || tlsCert != "" || tlsKey != "" || tlsCaCert != "" {
319+ if tlsVerify {
320+ if tlsCaCert == "" {
321+ log .Fatal ("TLS verification was requested, but no -tlscacert was provided" )
322+ }
323+ }
324+
325+ client , err = docker .NewTLSClient (endpoint , tlsCert , tlsKey , tlsCaCert )
326+ } else {
327+ client , err = docker .NewClient (endpoint )
328+ }
300329 if err != nil {
301- log .Fatalf ("Unable to parse %s : %s" , endpoint , err )
330+ log .Fatalf ("Unable to create docker client : %s" , err )
302331 }
303332
304333 generateFromContainers (client )
0 commit comments