Browse Source

Fix error on signal, de-jitter signals.

master
Chris Smith 5 years ago
parent
commit
d84c217431
1 changed files with 20 additions and 7 deletions
  1. 20
    7
      dotege.go

+ 20
- 7
dotege.go View File

150
 	doneChan := monitorSignals()
150
 	doneChan := monitorSignals()
151
 	createConfig()
151
 	createConfig()
152
 
152
 
153
+	var err error
153
 	dockerStopChan := make(chan struct{})
154
 	dockerStopChan := make(chan struct{})
154
-	dockerClient, err := client.NewEnvClient()
155
+	dockerClient, err = client.NewEnvClient()
155
 	if err != nil {
156
 	if err != nil {
156
 		panic(err)
157
 		panic(err)
157
 	}
158
 	}
161
 
162
 
162
 	jitterTimer := time.NewTimer(time.Minute)
163
 	jitterTimer := time.NewTimer(time.Minute)
163
 	redeployTimer := time.NewTicker(time.Hour * 24)
164
 	redeployTimer := time.NewTicker(time.Hour * 24)
165
+	updatedContainers := make(map[string]*model.Container)
164
 
166
 
165
 	go func() {
167
 	go func() {
166
 		err := monitorContainers(dockerClient, dockerStopChan, func(container *model.Container) {
168
 		err := monitorContainers(dockerClient, dockerStopChan, func(container *model.Container) {
167
 			containers[container.Name] = container
169
 			containers[container.Name] = container
170
+			updatedContainers[container.Name] = container
168
 			jitterTimer.Reset(100 * time.Millisecond)
171
 			jitterTimer.Reset(100 * time.Millisecond)
169
-			deployCertForContainer(container)
170
-			signalContainer()
171
 		}, func(name string) {
172
 		}, func(name string) {
173
+			delete(updatedContainers, name)
172
 			delete(containers, name)
174
 			delete(containers, name)
173
 			jitterTimer.Reset(100 * time.Millisecond)
175
 			jitterTimer.Reset(100 * time.Millisecond)
174
 		})
176
 		})
187
 					Containers: containers,
189
 					Containers: containers,
188
 					Hostnames:  hostnames,
190
 					Hostnames:  hostnames,
189
 				})
191
 				})
192
+
193
+				for name, container := range updatedContainers {
194
+					updated = updated || deployCertForContainer(container)
195
+					delete(updatedContainers, name)
196
+				}
197
+
198
+				signalContainer()
190
 				if updated {
199
 				if updated {
191
 					signalContainer()
200
 					signalContainer()
192
 				}
201
 				}
264
 	}
273
 	}
265
 }
274
 }
266
 
275
 
267
-func deployCertForContainer(container *model.Container) {
276
+func deployCertForContainer(container *model.Container) bool {
268
 	hostnames := getHostnamesForContainer(container)
277
 	hostnames := getHostnamesForContainer(container)
269
 	if len(hostnames) == 0 {
278
 	if len(hostnames) == 0 {
270
 		logger.Debugf("No labels found for container %s", container.Name)
279
 		logger.Debugf("No labels found for container %s", container.Name)
271
-		return
280
+		return false
272
 	}
281
 	}
273
 
282
 
274
 	err, cert := certificateManager.GetCertificate(hostnames)
283
 	err, cert := certificateManager.GetCertificate(hostnames)
275
 	if err != nil {
284
 	if err != nil {
276
 		logger.Warnf("Unable to generate certificate for %s: %s", container.Name, err.Error())
285
 		logger.Warnf("Unable to generate certificate for %s: %s", container.Name, err.Error())
286
+		return false
277
 	} else {
287
 	} else {
278
-		deployCert(cert)
288
+		return deployCert(cert)
279
 	}
289
 	}
280
 }
290
 }
281
 
291
 
282
-func deployCert(certificate *SavedCertificate) {
292
+func deployCert(certificate *SavedCertificate) bool {
283
 	target := path.Join(config.DefaultCertDestination, fmt.Sprintf("%s.pem", certificate.Domains[0]))
293
 	target := path.Join(config.DefaultCertDestination, fmt.Sprintf("%s.pem", certificate.Domains[0]))
284
 
294
 
295
+	// TODO: Check if the cert is different
285
 	err := ioutil.WriteFile(target, append(certificate.Certificate, certificate.PrivateKey...), 0700)
296
 	err := ioutil.WriteFile(target, append(certificate.Certificate, certificate.PrivateKey...), 0700)
286
 	if err != nil {
297
 	if err != nil {
287
 		logger.Warnf("Unable to write certificate %s - %s", target, err.Error())
298
 		logger.Warnf("Unable to write certificate %s - %s", target, err.Error())
299
+		return false
288
 	} else {
300
 	} else {
289
 		logger.Infof("Updated certificate file %s", target)
301
 		logger.Infof("Updated certificate file %s", target)
302
+		return true
290
 	}
303
 	}
291
 }
304
 }

Loading…
Cancel
Save