Browse Source

Use new docker and lego code

master
Chris Smith 5 years ago
parent
commit
5828c6f837
5 changed files with 53 additions and 43 deletions
  1. 0
    1
      .pre-commit-config.yaml
  2. 1
    1
      Dockerfile
  3. 35
    27
      dotege.go
  4. 7
    6
      go.mod
  5. 10
    8
      go.sum

+ 0
- 1
.pre-commit-config.yaml View File

@@ -13,4 +13,3 @@ repos:
13 13
     rev: v0.3.2
14 14
     hooks:
15 15
       - id: go-fmt
16
-      - id: go-vet

+ 1
- 1
Dockerfile View File

@@ -1,10 +1,10 @@
1 1
 FROM golang:alpine
2 2
 
3 3
 WORKDIR /go/src/app
4
-COPY . .
5 4
 
6 5
 RUN apk add git build-base
7 6
 
7
+COPY . .
8 8
 RUN GO111MODULE=on go install -v ./...
9 9
 
10 10
 CMD ["dotege"]

+ 35
- 27
dotege.go View File

@@ -2,10 +2,11 @@ package main
2 2
 
3 3
 import (
4 4
 	"fmt"
5
-	"github.com/csmith/dotege/certs"
6
-	"github.com/csmith/dotege/docker"
7 5
 	"github.com/csmith/dotege/model"
8 6
 	"github.com/docker/docker/client"
7
+	"github.com/xenolf/lego/certcrypto"
8
+	"github.com/xenolf/lego/lego"
9
+	"github.com/xenolf/lego/platform/config/env"
9 10
 	"go.uber.org/zap"
10 11
 	"go.uber.org/zap/zapcore"
11 12
 	"os"
@@ -42,9 +43,6 @@ func main() {
42 43
 	sugar.Info("Dotege is starting")
43 44
 
44 45
 	doneChan := monitorSignals()
45
-	containerChan := make(chan model.Container, 1)
46
-	expiryChan := make(chan string, 1)
47
-	certChan := make(chan model.FoundCertificate, 1)
48 46
 
49 47
 	config := model.Config{
50 48
 		Labels: model.LabelConfig{
@@ -55,60 +53,70 @@ func main() {
55 53
 		DefaultCertDestination: "/data/certs/",
56 54
 	}
57 55
 
58
-	cli, err := client.NewEnvClient()
56
+	dockerStopChan := make(chan struct{})
57
+	dockerClient, err := client.NewEnvClient()
59 58
 	if err != nil {
60 59
 		panic(err)
61 60
 	}
62 61
 
63
-	certMonitor := certs.NewCertificateManager(sugar, certChan)
64
-	certMonitor.AddDirectory("/data/certrequests/certs/")
65
-	certDeployer := certs.NewCertificateDeployer(sugar, certChan)
66
-
67 62
 	templateGenerator := NewTemplateGenerator(sugar)
68
-	templateGenerator.AddTemplate(model.TemplateConfig{
69
-		Source:      "./templates/domains.txt.tpl",
70
-		Destination: "/data/certrequests/domains.txt",
71
-	})
72 63
 	templateGenerator.AddTemplate(model.TemplateConfig{
73 64
 		Source:      "./templates/haproxy.cfg.tpl",
74 65
 		Destination: "haproxy.cfg",
75 66
 	})
76 67
 
77
-	monitor := docker.NewContainerMonitor(sugar, cli, containerChan, expiryChan)
78
-	go monitor.Monitor()
68
+	certificateManager := NewCertificateManager(sugar, lego.LEDirectoryStaging, certcrypto.EC256, env.GetOrDefaultString("DOTEGE_DNS_PROVIDER", ""), "/config/certs.json")
69
+
70
+	timer := time.NewTimer(time.Hour)
71
+	timer.Stop()
72
+	containers := make(map[string]model.Container)
79 73
 
80 74
 	go func() {
81
-		containers := make(map[string]model.Container)
82
-		timer := time.NewTimer(time.Hour)
83
-		timer.Stop()
75
+		err := monitorContainers(dockerClient, dockerStopChan, func(container model.Container) {
76
+			containers[container.Name] = container
77
+			timer.Reset(100 * time.Millisecond)
78
+			err, _ = certificateManager.GetCertificate(getHostnamesForContainer(container, config))
79
+		}, func(name string) {
80
+			delete(containers, name)
81
+			timer.Reset(100 * time.Millisecond)
82
+		})
83
+
84
+		if err != nil {
85
+			sugar.Fatal("Error monitoring containers: ", err.Error())
86
+		}
87
+	}()
84 88
 
89
+	go func() {
85 90
 		for {
86 91
 			select {
87
-			case container := <-containerChan:
88
-				containers[container.Name] = container
89
-				timer.Reset(100 * time.Millisecond)
90
-			case name := <-expiryChan:
91
-				delete(containers, name)
92
-				timer.Reset(100 * time.Millisecond)
93 92
 			case <-timer.C:
94 93
 				hostnames := getHostnames(containers, config)
95 94
 				templateGenerator.Generate(Context{
96 95
 					Containers: containers,
97 96
 					Hostnames:  hostnames,
98 97
 				})
99
-				certDeployer.UpdateHostnames(hostnames)
98
+				//certDeployer.UpdateHostnames(hostnames)
100 99
 			}
101 100
 		}
102 101
 	}()
103 102
 
104 103
 	<-doneChan
105 104
 
106
-	err = cli.Close()
105
+	dockerStopChan <- struct{}{}
106
+	err = dockerClient.Close()
107 107
 	if err != nil {
108 108
 		panic(err)
109 109
 	}
110 110
 }
111 111
 
112
+func getHostnamesForContainer(container model.Container, config model.Config) []string {
113
+	if label, ok := container.Labels[config.Labels.Hostnames]; ok {
114
+		return strings.Split(strings.Replace(label, ",", " ", -1), " ")
115
+	} else {
116
+		return []string{}
117
+	}
118
+}
119
+
112 120
 func getHostnames(containers map[string]model.Container, config model.Config) (hostnames map[string]*model.Hostname) {
113 121
 	hostnames = make(map[string]*model.Hostname)
114 122
 	for _, container := range containers {

+ 7
- 6
go.mod View File

@@ -1,11 +1,12 @@
1 1
 module github.com/csmith/dotege
2 2
 
3
+go 1.12
4
+
3 5
 require (
4 6
 	contrib.go.opencensus.io/exporter/ocagent v0.4.6 // indirect
5 7
 	github.com/Azure/azure-sdk-for-go v26.1.0+incompatible // indirect
6 8
 	github.com/Azure/go-autorest v11.5.0+incompatible // indirect
7 9
 	github.com/JamesClonk/vultr v0.0.0-20190227191206-c034fac6873e // indirect
8
-	github.com/Microsoft/go-winio v0.4.11 // indirect
9 10
 	github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 // indirect
10 11
 	github.com/akamai/AkamaiOPEN-edgegrid-golang v0.7.3 // indirect
11 12
 	github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190228100301-04069f0b8c3f // indirect
@@ -13,7 +14,7 @@ require (
13 14
 	github.com/cenkalti/backoff v2.1.1+incompatible // indirect
14 15
 	github.com/cloudflare/cloudflare-go v0.8.5 // indirect
15 16
 	github.com/cpu/goacmedns v0.0.1 // indirect
16
-	github.com/decker502/dnspod-go v0.2.0 // indirect
17
+	github.com/decker502/dnspod-go v0.0.0-20181231011336-d1081970f528 // indirect
17 18
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect
18 19
 	github.com/dimchansky/utfbom v1.1.0 // indirect
19 20
 	github.com/dnsimple/dnsimple-go v0.23.0 // indirect
@@ -21,7 +22,7 @@ require (
21 22
 	github.com/docker/docker v1.13.1
22 23
 	github.com/docker/go-connections v0.4.0 // indirect
23 24
 	github.com/docker/go-units v0.3.3 // indirect
24
-	github.com/exoscale/egoscale v0.14.3 // indirect
25
+	github.com/exoscale/egoscale v0.11.1 // indirect
25 26
 	github.com/fatih/structs v1.1.0 // indirect
26 27
 	github.com/go-ini/ini v1.42.0 // indirect
27 28
 	github.com/google/go-querystring v1.0.0 // indirect
@@ -44,16 +45,16 @@ require (
44 45
 	github.com/ovh/go-ovh v0.0.0-20181109152953-ba5adb4cf014 // indirect
45 46
 	github.com/pkg/errors v0.8.1 // indirect
46 47
 	github.com/sacloud/libsacloud v1.15.0 // indirect
48
+	github.com/satori/go.uuid v1.2.0 // indirect
47 49
 	github.com/sirupsen/logrus v1.3.0 // indirect
48
-	github.com/stretchr/testify v1.3.0 // indirect
49 50
 	github.com/timewasted/linode v0.0.0-20160829202747-37e84520dcf7 // indirect
50 51
 	github.com/transip/gotransip v5.8.2+incompatible // indirect
51 52
 	github.com/xenolf/lego v2.2.0+incompatible
52 53
 	go.uber.org/atomic v1.3.2 // indirect
53 54
 	go.uber.org/multierr v1.1.0 // indirect
54 55
 	go.uber.org/zap v1.9.1
55
-	golang.org/x/crypto v0.0.0-20190228050851-31a38585487a // indirect
56
-	golang.org/x/net v0.0.0-20190213061140-3a22650c66bd
56
+	golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25 // indirect
57
+	golang.org/x/net v0.0.0-20190228165749-92fc7df08ae7
57 58
 	golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 // indirect
58 59
 	golang.org/x/time v0.0.0-20181108054448-85acf8d2951c // indirect
59 60
 	google.golang.org/api v0.1.0 // indirect

+ 10
- 8
go.sum View File

@@ -10,7 +10,6 @@ github.com/Azure/go-autorest v11.5.0+incompatible h1:zp9GQJhEX+EBqEYC2MEGQ+gjKFE
10 10
 github.com/Azure/go-autorest v11.5.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
11 11
 github.com/JamesClonk/vultr v0.0.0-20190227191206-c034fac6873e h1:l9pxunkqzV2TXLGWiPiWHzCVbplZ2tOeuI0ClGd03WE=
12 12
 github.com/JamesClonk/vultr v0.0.0-20190227191206-c034fac6873e/go.mod h1:k9Jhe7M4bxsOOTMtsXQ0Hj7R7vw0FW4Q4jVJrPis9a8=
13
-github.com/Microsoft/go-winio v0.4.11 h1:zoIOcVf0xPN1tnMVbTtEdI+P8OofVk3NObnwOQ6nK2Q=
14 13
 github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
15 14
 github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 h1:xPMsUicZ3iosVPSIP7bW5EcGUzjiiMl1OYTe14y/R24=
16 15
 github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks=
@@ -30,9 +29,10 @@ github.com/cloudflare/cloudflare-go v0.8.5 h1:k1iz+H2jIL8OnS+bGhNQ6GPldi7VCo2tuW
30 29
 github.com/cloudflare/cloudflare-go v0.8.5/go.mod h1:8KhU6K+zHUEWOSU++mEQYf7D9UZOcQcibUoSm6vCUz4=
31 30
 github.com/cpu/goacmedns v0.0.1 h1:GeIU5chKys9zmHgOAgP+bstRaLqcGQ6HJh/hLw9hrus=
32 31
 github.com/cpu/goacmedns v0.0.1/go.mod h1:sesf/pNnCYwUevQEQfEwY0Y3DydlQWSGZbaMElOWxok=
33
-github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
34 32
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
35 33
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
34
+github.com/decker502/dnspod-go v0.0.0-20181231011336-d1081970f528 h1:K+b0A8KmJsgR8OV17MH/IIpscz4nASjvaqYpslEgB3Q=
35
+github.com/decker502/dnspod-go v0.0.0-20181231011336-d1081970f528/go.mod h1:1xTEhqHsJ0UdTJTGBagkADAOwd/7ulfYdlQwJcqdSHs=
36 36
 github.com/decker502/dnspod-go v0.2.0 h1:6dwhUFCYbC5bgpebLKn7PrI43e/5mn9tpUL9YcYCdTU=
37 37
 github.com/decker502/dnspod-go v0.2.0/go.mod h1:qsurYu1FgxcDwfSwXJdLt4kRsBLZeosEb9uq4Sy+08g=
38 38
 github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
@@ -49,6 +49,10 @@ github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKoh
49 49
 github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
50 50
 github.com/docker/go-units v0.3.3 h1:Xk8S3Xj5sLGlG5g67hJmYMmUgXv5N4PhkjJHHqrwnTk=
51 51
 github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
52
+github.com/exoscale/egoscale v0.11.1 h1:J6wiadBkUogH2nagtyQzaj+9X0ywvDf1OMY/pw7rKHc=
53
+github.com/exoscale/egoscale v0.11.1/go.mod h1:Ee3U4ZjSDpbbEc9VkQ/jttUU8USE8Nv7L3YzVi03Y1U=
54
+github.com/exoscale/egoscale v0.14.0 h1:xC09oILlpobCFxdKt3IuTw22e3UduIZ62gnozTcn6Ow=
55
+github.com/exoscale/egoscale v0.14.0/go.mod h1:SHSox0l8ud/I8Q6joR7Oj96DFer0mdo1cQzb7dmZgro=
52 56
 github.com/exoscale/egoscale v0.14.3 h1:e5NJdsJ54TMrHDOJBDr1TAWTgM6QQkrfvjRp/MoC5hg=
53 57
 github.com/exoscale/egoscale v0.14.3/go.mod h1:SHSox0l8ud/I8Q6joR7Oj96DFer0mdo1cQzb7dmZgro=
54 58
 github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
@@ -112,7 +116,6 @@ github.com/ovh/go-ovh v0.0.0-20181109152953-ba5adb4cf014 h1:37VE5TYj2m/FLA9SNr4z
112 116
 github.com/ovh/go-ovh v0.0.0-20181109152953-ba5adb4cf014/go.mod h1:joRatxRJaZBsY3JAOEMcoOp05CnZzsx4scTxi95DHyQ=
113 117
 github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
114 118
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
115
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
116 119
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
117 120
 github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
118 121
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
@@ -128,7 +131,6 @@ github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c/go.mod h1:s
128 131
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
129 132
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
130 133
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
131
-github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
132 134
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
133 135
 github.com/timewasted/linode v0.0.0-20160829202747-37e84520dcf7 h1:CpHxIaZzVy26GqJn8ptRyto8fuoYOd1v0fXm9bG3wQ8=
134 136
 github.com/timewasted/linode v0.0.0-20160829202747-37e84520dcf7/go.mod h1:imsgLplxEC/etjIhdr3dNzV3JeT27LbVu5pYWm0JCBY=
@@ -149,8 +151,9 @@ go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
149 151
 golang.org/x/crypto v0.0.0-20180621125126-a49355c7e3f8/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
150 152
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
151 153
 golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
152
-golang.org/x/crypto v0.0.0-20190228050851-31a38585487a h1:53VJPSIh1mc/PLK5AlXoj1HHfovtbS77YvYJ0AqjSgE=
153 154
 golang.org/x/crypto v0.0.0-20190228050851-31a38585487a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
155
+golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25 h1:jsG6UpNLt9iAsb0S2AGW28DveNzzgmbXR+ENoPjUeIU=
156
+golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
154 157
 golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
155 158
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
156 159
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -159,8 +162,9 @@ golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73r
159 162
 golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
160 163
 golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
161 164
 golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
162
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd h1:HuTn7WObtcDo9uEEU7rEqL0jYthdXAmZ6PP+meazmaU=
163 165
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
166
+golang.org/x/net v0.0.0-20190228165749-92fc7df08ae7 h1:Qe/u+eY379X4He4GBMFZYu3pmh1ML5yT1aL1ndNM1zQ=
167
+golang.org/x/net v0.0.0-20190228165749-92fc7df08ae7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
164 168
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
165 169
 golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
166 170
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 h1:Wo7BWFiOk0QRFMLYMqJGFMd9CgUAcGx7V+qEg/h5IBI=
@@ -174,8 +178,6 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h
174 178
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
175 179
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
176 180
 golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
177
-golang.org/x/sys v0.0.0-20190213121743-983097b1a8a3 h1:+KlxhGbYkFs8lMfwKn+2ojry1ID5eBSMXprS2u/wqCE=
178
-golang.org/x/sys v0.0.0-20190213121743-983097b1a8a3/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
179 181
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
180 182
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
181 183
 golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=

Loading…
Cancel
Save