Skip to content

Commit 9fa36b9

Browse files
committed
refactor code for less complexity
1 parent b56b047 commit 9fa36b9

2 files changed

Lines changed: 40 additions & 60 deletions

File tree

entrypoint.go

Lines changed: 28 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"bufio"
55
"flag"
66
"fmt"
7-
"io/ioutil"
7+
"log"
88
"os"
99
"os/exec"
1010
"regexp"
@@ -26,14 +26,12 @@ type EnvVar struct {
2626
}
2727

2828
func main() {
29-
3029
var configFile string
3130
flag.StringVar(&configFile, "c", "/etc/traefik/traefik.toml", "Traefik config file to use, default: /etc/traefik/traefik.toml")
3231
flag.Parse()
3332

3433
if _, err := os.Stat(configFile); err != nil {
35-
fmt.Println("Config file", configFile, "not found")
36-
os.Exit(1)
34+
log.Fatalln("Config file not found:", configFile)
3735
}
3836

3937
if len(os.Args) <= 1 {
@@ -52,7 +50,6 @@ func main() {
5250
handleError(err)
5351

5452
runCmd()
55-
os.Exit(0)
5653
}
5754

5855
// Run CMD specified in Dockerfile or runtime and send output to stdout
@@ -79,29 +76,23 @@ func runCmd() {
7976

8077
func handleError(err error) {
8178
if err != nil {
82-
fmt.Println(err)
83-
os.Exit(1)
79+
log.Fatalln(err)
8480
}
8581
}
8682

8783
// ReadTraefikToml reads the Traefik config file from filesystem and returns as byte array
8884
func ReadTraefikToml(filename string) ([]byte, error) {
89-
file, err := ioutil.ReadFile(filename)
85+
file, err := os.ReadFile(filename)
9086
if err != nil {
91-
return []byte{}, fmt.Errorf("Unable to read config file at %s", filename)
87+
return []byte{}, fmt.Errorf("unable to read config file at %s", filename)
9288
}
9389

9490
return file, nil
9591
}
9692

9793
// WriteTraefikToml writes updated Traefix config to filesystem
9894
func WriteTraefikToml(filename string, contents []byte) error {
99-
err := ioutil.WriteFile(filename, contents, 0644)
100-
if err != nil {
101-
return err
102-
}
103-
104-
return nil
95+
return os.WriteFile(filename, contents, 0644)
10596
}
10697

10798
// UpdateConfigContent replaces placeholders with values from environment variables
@@ -116,38 +107,38 @@ func UpdateConfigContent(config []byte, replacements []Replacement) []byte {
116107

117108
// BuildReplacementsFromEnv Build []Replacement from env vars
118109
func BuildReplacementsFromEnv() ([]Replacement, error) {
110+
letsEncryptURLs := map[string]string{
111+
"staging": "https://acme-staging.api.letsencrypt.org/directory",
112+
"production": "https://acme-v01.api.letsencrypt.org/directory",
113+
}
119114

120115
var configReplacements []Replacement
121116

122117
envVars := GetEnvVarModels()
123118
for _, envvar := range envVars {
124119
value := os.Getenv(envvar.Name)
125-
if value == "" && envvar.Required {
126-
return configReplacements, fmt.Errorf("Missing required env var: %s. Description: %s", envvar.Name, envvar.Desc)
120+
if value == "" {
121+
if envvar.Required {
122+
return configReplacements, fmt.Errorf("missing required env var: %s. Description: %s", envvar.Name, envvar.Desc)
123+
}
124+
125+
value = envvar.Default
126+
continue
127127
}
128128

129-
if value != "" {
130-
if envvar.Name == "LETS_ENCRYPT_CA" {
131-
if value == "staging" {
132-
value = "https://acme-staging.api.letsencrypt.org/directory"
133-
} else if value == "production" {
134-
value = "https://acme-v01.api.letsencrypt.org/directory"
135-
}
136-
} else if envvar.Name == "SANS" {
137-
sans := strings.Split(value, ",")
138-
value = ""
139-
for _, san := range sans {
140-
value += "\"" + san + "\", "
141-
}
142-
value = strings.TrimRight(value, ", ")
129+
switch envvar.Name {
130+
case "LETS_ENCRYPT_CA":
131+
if v, ok := letsEncryptURLs[value]; ok {
132+
value = v
143133
}
144-
configReplacements = append(configReplacements, Replacement{
145-
Key: envvar.Name,
146-
Value: value,
147-
})
148-
} else if value == "" && !envvar.Required {
149-
value = envvar.Default
134+
case "SANS":
135+
value = `"` + strings.ReplaceAll(value, ",", `", "`) + `"`
150136
}
137+
138+
configReplacements = append(configReplacements, Replacement{
139+
Key: envvar.Name,
140+
Value: value,
141+
})
151142
}
152143

153144
return configReplacements, nil

entrypoint_test.go

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,51 +16,46 @@ example val
1616
another green
1717
`
1818
replacements := []Replacement{
19-
Replacement{
19+
{
2020
Key: "TEST",
2121
Value: "val",
2222
},
23-
Replacement{
23+
{
2424
Key: "FIELD",
2525
Value: "green",
2626
},
2727
}
2828
results := UpdateConfigContent([]byte(original), replacements)
2929

3030
if string(results) != expected {
31-
t.Error("Results to not match expected. Results:", results)
32-
t.FailNow()
31+
t.Fatal("Results to not match expected. Results:", results)
3332
}
3433
}
3534

3635
func TestBuildReplacementsFromEnv(t *testing.T) {
3736
// Test failure for required env var
3837
_, err := BuildReplacementsFromEnv()
3938
if err == nil {
40-
t.Error("BuildReplacementsFromEnv should have failed because no env vars have been set")
41-
t.FailNow()
39+
t.Fatal("BuildReplacementsFromEnv should have failed because no env vars have been set")
4240
}
4341

4442
setRequiredEnvVars()
4543

4644
replacements, err := BuildReplacementsFromEnv()
4745
if err != nil {
48-
t.Error(err)
49-
t.FailNow()
46+
t.Fatal(err)
5047
}
5148

5249
replacementsCount := len(replacements)
5350
if replacementsCount != 6 {
54-
t.Error("Replacements did not have enough entries, only found", replacementsCount, "but expected 6")
55-
t.FailNow()
51+
t.Fatal("Replacements did not have enough entries, only found", replacementsCount, "but expected 6")
5652
}
5753
}
5854

5955
func TestReadUpdateWrite(t *testing.T) {
6056
dir, err := os.Getwd()
6157
if err != nil {
62-
t.Error("Unable to get current working directory for TestReadUpdateWrite")
63-
t.FailNow()
58+
t.Fatal("Unable to get current working directory for TestReadUpdateWrite")
6459
}
6560
readFile := dir + "/traefik.toml"
6661
writeFile := dir + "/traefik_test.toml"
@@ -72,8 +67,7 @@ func TestReadUpdateWrite(t *testing.T) {
7267

7368
configToml, err := ReadTraefikToml(readFile)
7469
if err != nil {
75-
t.Error(err)
76-
t.FailNow()
70+
t.Fatal(err)
7771
}
7872

7973
// Make sure placeholders for env vars exist
@@ -82,17 +76,15 @@ func TestReadUpdateWrite(t *testing.T) {
8276
search := regexp.MustCompile(envvar.Name)
8377
found := search.Find(configToml)
8478
if found == nil {
85-
t.Error("Did not find key in configToml template for env var", envvar.Name)
86-
t.FailNow()
79+
t.Fatal("Did not find key in configToml template for env var", envvar.Name)
8780
}
8881
}
8982

9083
// Update config with required env var values
9184
setRequiredEnvVars()
9285
replacements, err := BuildReplacementsFromEnv()
9386
if err != nil {
94-
t.Error(err)
95-
t.FailNow()
87+
t.Fatal(err)
9688
}
9789
configToml = UpdateConfigContent(configToml, replacements)
9890

@@ -102,19 +94,16 @@ func TestReadUpdateWrite(t *testing.T) {
10294
search := regexp.MustCompile(envvar.Name)
10395
found := search.Find(configToml)
10496
if found != nil {
105-
t.Error("Uh oh, placeholder for required env var still present after update for env var:", envvar.Name)
106-
t.FailNow()
97+
t.Fatal("Uh oh, placeholder for required env var still present after update for env var:", envvar.Name)
10798
}
10899
}
109100
}
110101

111102
// Write out test file for manual reivew
112103
err = WriteTraefikToml(writeFile, configToml)
113104
if err != nil {
114-
t.Error(err)
115-
t.FailNow()
105+
t.Fatal(err)
116106
}
117-
118107
}
119108

120109
func setRequiredEnvVars() {

0 commit comments

Comments
 (0)