Skip to content

Commit 4fbaf17

Browse files
committed
Automatically check and update docker-registry configuration
We made changes in docker-registry configuration, without which the server will not work correctly. In order not to disrupt the user experience we must change the old config.
1 parent b3808bd commit 4fbaf17

File tree

2 files changed

+129
-1
lines changed

2 files changed

+129
-1
lines changed

pkg/cmd/dockerregistry/dockerregistry.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ import (
4343
func Execute(configFile io.Reader) {
4444
config, err := configuration.Parse(configFile)
4545
if err != nil {
46-
log.Fatalf("Error parsing configuration file: %s", err)
46+
log.Fatalf("error parsing configuration file: %s", err)
4747
}
48+
setDefaultMiddleware(config)
4849

4950
ctx := context.Background()
5051
ctx, err = configureLogging(ctx, config)
@@ -242,3 +243,28 @@ func panicHandler(handler http.Handler) http.Handler {
242243
handler.ServeHTTP(w, r)
243244
})
244245
}
246+
247+
func setDefaultMiddleware(config *configuration.Configuration) {
248+
// Default to openshift middleware for relevant types
249+
// This allows custom configs based on old default configs to continue to work
250+
if config.Middleware == nil {
251+
config.Middleware = map[string][]configuration.Middleware{}
252+
}
253+
for _, middlewareType := range []string{"registry", "repository", "storage"} {
254+
found := false
255+
for _, middleware := range config.Middleware[middlewareType] {
256+
if middleware.Name == "openshift" {
257+
found = true
258+
break
259+
}
260+
}
261+
if found {
262+
continue
263+
}
264+
config.Middleware[middlewareType] = append(config.Middleware[middlewareType], configuration.Middleware{
265+
Name: "openshift",
266+
})
267+
log.Errorf("obsolete configuration detected, please add openshift %s middleware into registry config file", middlewareType)
268+
}
269+
return
270+
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package dockerregistry
2+
3+
import (
4+
"reflect"
5+
"strings"
6+
"testing"
7+
8+
"github.com/docker/distribution/configuration"
9+
)
10+
11+
func TestDefaultMiddleware(t *testing.T) {
12+
checks := []struct {
13+
title, input, expect string
14+
}{
15+
{
16+
title: "miss all middlewares",
17+
input: `
18+
version: 0.1
19+
storage:
20+
inmemory: {}
21+
`,
22+
expect: `
23+
version: 0.1
24+
storage:
25+
inmemory: {}
26+
middleware:
27+
registry:
28+
- name: openshift
29+
repository:
30+
- name: openshift
31+
storage:
32+
- name: openshift
33+
`,
34+
},
35+
{
36+
title: "miss some middlewares",
37+
input: `
38+
version: 0.1
39+
storage:
40+
inmemory: {}
41+
middleware:
42+
registry:
43+
- name: openshift
44+
`,
45+
expect: `
46+
version: 0.1
47+
storage:
48+
inmemory: {}
49+
middleware:
50+
registry:
51+
- name: openshift
52+
repository:
53+
- name: openshift
54+
storage:
55+
- name: openshift
56+
`,
57+
},
58+
{
59+
title: "all middlewares are in place",
60+
input: `
61+
version: 0.1
62+
storage:
63+
inmemory: {}
64+
middleware:
65+
registry:
66+
- name: openshift
67+
repository:
68+
- name: openshift
69+
storage:
70+
- name: openshift
71+
`,
72+
expect: `
73+
version: 0.1
74+
storage:
75+
inmemory: {}
76+
middleware:
77+
registry:
78+
- name: openshift
79+
repository:
80+
- name: openshift
81+
storage:
82+
- name: openshift
83+
`,
84+
},
85+
}
86+
87+
for _, check := range checks {
88+
currentConfig, err := configuration.Parse(strings.NewReader(check.input))
89+
if err != nil {
90+
t.Fatal(err)
91+
}
92+
expectConfig, err := configuration.Parse(strings.NewReader(check.expect))
93+
if err != nil {
94+
t.Fatal(err)
95+
}
96+
setDefaultMiddleware(currentConfig)
97+
98+
if !reflect.DeepEqual(currentConfig, expectConfig) {
99+
t.Errorf("%s: expected\n\t%#v\ngot\n\t%#v", check.title, expectConfig, currentConfig)
100+
}
101+
}
102+
}

0 commit comments

Comments
 (0)