Skip to content

Commit ec2f6f4

Browse files
committed
refactor: further split code base in packages
1 parent 02edf71 commit ec2f6f4

27 files changed

+1934
-1866
lines changed

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@ jobs:
3232
run: make check-gofmt
3333

3434
- name: Run tests
35-
run: go test -v ./internal/dockergen
35+
run: go test -v ./internal/...

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,16 @@ get-deps:
4444
go mod download
4545

4646
check-gofmt:
47-
if [ -n "$(shell gofmt -l ./cmd/docker-gen)" ]; then \
47+
if [ -n "$(shell go fmt ./cmd/...)" ]; then \
4848
echo 1>&2 'The following files need to be formatted:'; \
4949
gofmt -l ./cmd/docker-gen; \
5050
exit 1; \
5151
fi
52-
if [ -n "$(shell gofmt -l ./internal/dockergen)" ]; then \
52+
if [ -n "$(shell go fmt ./internal/...)" ]; then \
5353
echo 1>&2 'The following files need to be formatted:'; \
5454
gofmt -l ./internal/dockergen; \
5555
exit 1; \
5656
fi
5757

5858
test:
59-
go test ./internal/dockergen
59+
go test ./internal/...

cmd/docker-gen/main.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import (
99

1010
"github.com/BurntSushi/toml"
1111
docker "github.com/fsouza/go-dockerclient"
12-
"github.com/nginx-proxy/docker-gen/internal/dockergen"
12+
"github.com/nginx-proxy/docker-gen/internal/config"
13+
"github.com/nginx-proxy/docker-gen/internal/generator"
1314
)
1415

1516
type stringslice []string
@@ -27,7 +28,7 @@ var (
2728
onlyPublished bool
2829
includeStopped bool
2930
configFiles stringslice
30-
configs dockergen.ConfigFile
31+
configs config.ConfigFile
3132
interval int
3233
keepBlankLines bool
3334
endpoint string
@@ -133,11 +134,11 @@ func main() {
133134
}
134135
}
135136
} else {
136-
w, err := dockergen.ParseWait(wait)
137+
w, err := config.ParseWait(wait)
137138
if err != nil {
138139
log.Fatalf("Error parsing wait interval: %s\n", err)
139140
}
140-
config := dockergen.Config{
141+
cfg := config.Config{
141142
Template: flag.Arg(0),
142143
Dest: flag.Arg(1),
143144
Watch: watch,
@@ -152,10 +153,10 @@ func main() {
152153
KeepBlankLines: keepBlankLines,
153154
}
154155
if notifyContainerID != "" {
155-
config.NotifyContainers[notifyContainerID] = notifyContainerSignal
156+
cfg.NotifyContainers[notifyContainerID] = notifyContainerSignal
156157
}
157-
configs = dockergen.ConfigFile{
158-
Config: []dockergen.Config{config}}
158+
configs = config.ConfigFile{
159+
Config: []config.Config{cfg}}
159160
}
160161

161162
all := true
@@ -165,7 +166,7 @@ func main() {
165166
}
166167
}
167168

168-
generator, err := dockergen.NewGenerator(dockergen.GeneratorConfig{
169+
generator, err := generator.NewGenerator(generator.GeneratorConfig{
169170
Endpoint: endpoint,
170171
TLSKey: tlsKey,
171172
TLSCert: tlsCert,

internal/dockergen/config.go renamed to internal/config/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dockergen
1+
package config
22

33
import (
44
"errors"

internal/dockergen/config_test.go renamed to internal/config/config_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dockergen
1+
package config
22

33
import (
44
"testing"

internal/dockergen/context.go renamed to internal/context/context.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dockergen
1+
package context
22

33
import (
44
"bufio"
@@ -8,6 +8,7 @@ import (
88
"sync"
99

1010
docker "github.com/fsouza/go-dockerclient"
11+
"github.com/nginx-proxy/docker-gen/internal/utils"
1112
)
1213

1314
var (
@@ -19,7 +20,7 @@ var (
1920
type Context []*RuntimeContainer
2021

2122
func (c *Context) Env() map[string]string {
22-
return splitKeyValueSlice(os.Environ())
23+
return utils.SplitKeyValueSlice(os.Environ())
2324
}
2425

2526
func (c *Context) Docker() Docker {

internal/dockergen/context_test.go renamed to internal/context/context_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dockergen
1+
package context
22

33
import (
44
"fmt"

internal/dockergen/docker_client.go renamed to internal/dockerclient/docker_cli.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,40 @@
1-
package dockergen
1+
package dockerclient
22

33
import (
44
"errors"
55
"fmt"
6+
"os"
67
"strconv"
78
"strings"
89

910
docker "github.com/fsouza/go-dockerclient"
11+
"github.com/nginx-proxy/docker-gen/internal/utils"
1012
)
1113

14+
func GetEndpoint(endpoint string) (string, error) {
15+
defaultEndpoint := "unix:///var/run/docker.sock"
16+
if os.Getenv("DOCKER_HOST") != "" {
17+
defaultEndpoint = os.Getenv("DOCKER_HOST")
18+
}
19+
20+
if endpoint != "" {
21+
defaultEndpoint = endpoint
22+
}
23+
24+
_, _, err := parseHost(defaultEndpoint)
25+
if err != nil {
26+
return "", err
27+
}
28+
29+
return defaultEndpoint, nil
30+
}
31+
1232
func NewDockerClient(endpoint string, tlsVerify bool, tlsCert, tlsCaCert, tlsKey string) (*docker.Client, error) {
1333
if strings.HasPrefix(endpoint, "unix:") {
1434
return docker.NewClient(endpoint)
1535
} else if tlsVerify || tlsEnabled(tlsCert, tlsCaCert, tlsKey) {
1636
if tlsVerify {
17-
if e, err := pathExists(tlsCaCert); !e || err != nil {
37+
if e, err := utils.PathExists(tlsCaCert); !e || err != nil {
1838
return nil, errors.New("TLS verification was requested, but CA cert does not exist")
1939
}
2040
}
@@ -26,7 +46,7 @@ func NewDockerClient(endpoint string, tlsVerify bool, tlsCert, tlsCaCert, tlsKey
2646

2747
func tlsEnabled(tlsCert, tlsCaCert, tlsKey string) bool {
2848
for _, v := range []string{tlsCert, tlsCaCert, tlsKey} {
29-
if e, err := pathExists(v); e && err == nil {
49+
if e, err := utils.PathExists(v); e && err == nil {
3050
return true
3151
}
3252
}
@@ -98,7 +118,7 @@ func parseHost(addr string) (string, string, error) {
98118
return proto, fmt.Sprintf("%s:%d", host, port), nil
99119
}
100120

101-
func splitDockerImage(img string) (string, string, string) {
121+
func SplitDockerImage(img string) (string, string, string) {
102122
index := 0
103123
repository := img
104124
var registry, tag string

internal/dockergen/docker_client_test.go renamed to internal/dockerclient/docker_cli_test.go

Lines changed: 70 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,79 @@
1-
package dockergen
1+
package dockerclient
22

33
import (
44
"fmt"
55
"io/ioutil"
66
"os"
77
"testing"
88

9+
"github.com/nginx-proxy/docker-gen/internal/context"
910
"github.com/stretchr/testify/assert"
1011
)
1112

13+
func TestDefaultEndpoint(t *testing.T) {
14+
err := os.Unsetenv("DOCKER_HOST")
15+
if err != nil {
16+
t.Fatalf("Unable to unset DOCKER_HOST: %s", err)
17+
}
18+
19+
endpoint, err := GetEndpoint("")
20+
if err != nil {
21+
t.Fatalf("%s", err)
22+
}
23+
if endpoint != "unix:///var/run/docker.sock" {
24+
t.Fatalf("Expected unix:///var/run/docker.sock, got %s", endpoint)
25+
}
26+
}
27+
28+
func TestDockerHostEndpoint(t *testing.T) {
29+
err := os.Setenv("DOCKER_HOST", "tcp://127.0.0.1:4243")
30+
if err != nil {
31+
t.Fatalf("Unable to set DOCKER_HOST: %s", err)
32+
}
33+
34+
endpoint, err := GetEndpoint("")
35+
if err != nil {
36+
t.Fatalf("%s", err)
37+
}
38+
39+
if endpoint != "tcp://127.0.0.1:4243" {
40+
t.Fatalf("Expected tcp://127.0.0.1:4243, got %s", endpoint)
41+
}
42+
}
43+
44+
func TestDockerFlagEndpoint(t *testing.T) {
45+
46+
err := os.Setenv("DOCKER_HOST", "tcp://127.0.0.1:4243")
47+
if err != nil {
48+
t.Fatalf("Unable to set DOCKER_HOST: %s", err)
49+
}
50+
51+
// flag value should override DOCKER_HOST and default value
52+
endpoint, err := GetEndpoint("tcp://127.0.0.1:5555")
53+
if err != nil {
54+
t.Fatalf("%s", err)
55+
}
56+
if endpoint != "tcp://127.0.0.1:5555" {
57+
t.Fatalf("Expected tcp://127.0.0.1:5555, got %s", endpoint)
58+
}
59+
}
60+
61+
func TestUnixBadFormat(t *testing.T) {
62+
endpoint := "unix:/var/run/docker.sock"
63+
_, err := GetEndpoint(endpoint)
64+
if err == nil {
65+
t.Fatal("endpoint should have failed")
66+
}
67+
}
68+
1269
func TestSplitDockerImageRepository(t *testing.T) {
13-
registry, repository, tag := splitDockerImage("ubuntu")
70+
registry, repository, tag := SplitDockerImage("ubuntu")
1471

1572
assert.Equal(t, "", registry)
1673
assert.Equal(t, "ubuntu", repository)
1774
assert.Equal(t, "", tag)
1875

19-
dockerImage := DockerImage{
76+
dockerImage := context.DockerImage{
2077
Registry: registry,
2178
Repository: repository,
2279
Tag: tag,
@@ -25,13 +82,13 @@ func TestSplitDockerImageRepository(t *testing.T) {
2582
}
2683

2784
func TestSplitDockerImageWithRegistry(t *testing.T) {
28-
registry, repository, tag := splitDockerImage("custom.registry/ubuntu")
85+
registry, repository, tag := SplitDockerImage("custom.registry/ubuntu")
2986

3087
assert.Equal(t, "custom.registry", registry)
3188
assert.Equal(t, "ubuntu", repository)
3289
assert.Equal(t, "", tag)
3390

34-
dockerImage := DockerImage{
91+
dockerImage := context.DockerImage{
3592
Registry: registry,
3693
Repository: repository,
3794
Tag: tag,
@@ -40,13 +97,13 @@ func TestSplitDockerImageWithRegistry(t *testing.T) {
4097
}
4198

4299
func TestSplitDockerImageWithRegistryAndTag(t *testing.T) {
43-
registry, repository, tag := splitDockerImage("custom.registry/ubuntu:12.04")
100+
registry, repository, tag := SplitDockerImage("custom.registry/ubuntu:12.04")
44101

45102
assert.Equal(t, "custom.registry", registry)
46103
assert.Equal(t, "ubuntu", repository)
47104
assert.Equal(t, "12.04", tag)
48105

49-
dockerImage := DockerImage{
106+
dockerImage := context.DockerImage{
50107
Registry: registry,
51108
Repository: repository,
52109
Tag: tag,
@@ -55,13 +112,13 @@ func TestSplitDockerImageWithRegistryAndTag(t *testing.T) {
55112
}
56113

57114
func TestSplitDockerImageWithRepositoryAndTag(t *testing.T) {
58-
registry, repository, tag := splitDockerImage("ubuntu:12.04")
115+
registry, repository, tag := SplitDockerImage("ubuntu:12.04")
59116

60117
assert.Equal(t, "", registry)
61118
assert.Equal(t, "ubuntu", repository)
62119
assert.Equal(t, "12.04", tag)
63120

64-
dockerImage := DockerImage{
121+
dockerImage := context.DockerImage{
65122
Registry: registry,
66123
Repository: repository,
67124
Tag: tag,
@@ -70,27 +127,27 @@ func TestSplitDockerImageWithRepositoryAndTag(t *testing.T) {
70127
}
71128

72129
func TestSplitDockerImageWithPrivateRegistryPath(t *testing.T) {
73-
registry, repository, tag := splitDockerImage("localhost:8888/ubuntu/foo:12.04")
130+
registry, repository, tag := SplitDockerImage("localhost:8888/ubuntu/foo:12.04")
74131

75132
assert.Equal(t, "localhost:8888", registry)
76133
assert.Equal(t, "ubuntu/foo", repository)
77134
assert.Equal(t, "12.04", tag)
78135

79-
dockerImage := DockerImage{
136+
dockerImage := context.DockerImage{
80137
Registry: registry,
81138
Repository: repository,
82139
Tag: tag,
83140
}
84141
assert.Equal(t, "localhost:8888/ubuntu/foo:12.04", dockerImage.String())
85142
}
86143
func TestSplitDockerImageWithLocalRepositoryAndTag(t *testing.T) {
87-
registry, repository, tag := splitDockerImage("localhost:8888/ubuntu:12.04")
144+
registry, repository, tag := SplitDockerImage("localhost:8888/ubuntu:12.04")
88145

89146
assert.Equal(t, "localhost:8888", registry)
90147
assert.Equal(t, "ubuntu", repository)
91148
assert.Equal(t, "12.04", tag)
92149

93-
dockerImage := DockerImage{
150+
dockerImage := context.DockerImage{
94151
Registry: registry,
95152
Repository: repository,
96153
Tag: tag,

0 commit comments

Comments
 (0)