Skip to content

Commit ed20576

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 ed20576

File tree

2 files changed

+286
-1
lines changed

2 files changed

+286
-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: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
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+
title: "check v1.0.8 config",
87+
input: `
88+
version: 0.1
89+
log:
90+
level: debug
91+
http:
92+
addr: :5000
93+
storage:
94+
cache:
95+
layerinfo: inmemory
96+
filesystem:
97+
rootdirectory: /registry
98+
auth:
99+
openshift:
100+
realm: openshift
101+
middleware:
102+
repository:
103+
- name: openshift
104+
`,
105+
expect: `
106+
version: 0.1
107+
log:
108+
level: debug
109+
http:
110+
addr: :5000
111+
storage:
112+
cache:
113+
layerinfo: inmemory
114+
filesystem:
115+
rootdirectory: /registry
116+
auth:
117+
openshift:
118+
realm: openshift
119+
middleware:
120+
registry:
121+
- name: openshift
122+
repository:
123+
- name: openshift
124+
storage:
125+
- name: openshift
126+
`,
127+
},
128+
{
129+
title: "check v1.2.1 config",
130+
input: `
131+
version: 0.1
132+
log:
133+
level: debug
134+
http:
135+
addr: :5000
136+
storage:
137+
cache:
138+
layerinfo: inmemory
139+
filesystem:
140+
rootdirectory: /registry
141+
delete:
142+
enabled: true
143+
auth:
144+
openshift:
145+
realm: openshift
146+
middleware:
147+
repository:
148+
- name: openshift
149+
options:
150+
pullthrough: true
151+
`,
152+
expect: `
153+
version: 0.1
154+
log:
155+
level: debug
156+
http:
157+
addr: :5000
158+
storage:
159+
cache:
160+
layerinfo: inmemory
161+
filesystem:
162+
rootdirectory: /registry
163+
delete:
164+
enabled: true
165+
auth:
166+
openshift:
167+
realm: openshift
168+
middleware:
169+
registry:
170+
- name: openshift
171+
repository:
172+
- name: openshift
173+
options:
174+
pullthrough: true
175+
storage:
176+
- name: openshift
177+
`,
178+
},
179+
{
180+
title: "check v1.3.0-alpha.3 config",
181+
input: `
182+
version: 0.1
183+
log:
184+
level: debug
185+
http:
186+
addr: :5000
187+
storage:
188+
cache:
189+
blobdescriptor: inmemory
190+
filesystem:
191+
rootdirectory: /registry
192+
delete:
193+
enabled: true
194+
auth:
195+
openshift:
196+
realm: openshift
197+
middleware:
198+
registry:
199+
- name: openshift
200+
repository:
201+
- name: openshift
202+
options:
203+
acceptschema2: false
204+
pullthrough: true
205+
enforcequota: false
206+
projectcachettl: 1m
207+
blobrepositorycachettl: 10m
208+
storage:
209+
- name: openshift
210+
`,
211+
expect: `
212+
version: 0.1
213+
log:
214+
level: debug
215+
http:
216+
addr: :5000
217+
storage:
218+
cache:
219+
blobdescriptor: inmemory
220+
filesystem:
221+
rootdirectory: /registry
222+
delete:
223+
enabled: true
224+
auth:
225+
openshift:
226+
realm: openshift
227+
middleware:
228+
registry:
229+
- name: openshift
230+
repository:
231+
- name: openshift
232+
options:
233+
acceptschema2: false
234+
pullthrough: true
235+
enforcequota: false
236+
projectcachettl: 1m
237+
blobrepositorycachettl: 10m
238+
storage:
239+
- name: openshift
240+
`,
241+
},
242+
}
243+
244+
for _, check := range checks {
245+
currentConfig, err := configuration.Parse(strings.NewReader(check.input))
246+
if err != nil {
247+
t.Fatal(err)
248+
}
249+
expectConfig, err := configuration.Parse(strings.NewReader(check.expect))
250+
if err != nil {
251+
t.Fatal(err)
252+
}
253+
setDefaultMiddleware(currentConfig)
254+
255+
if !reflect.DeepEqual(currentConfig, expectConfig) {
256+
t.Errorf("%s: expected\n\t%#v\ngot\n\t%#v", check.title, expectConfig, currentConfig)
257+
}
258+
}
259+
}

0 commit comments

Comments
 (0)