Skip to content

Commit 8570d50

Browse files
committed
check if secrets defined in services are defined
Signed-off-by: Guillaume Lours <[email protected]>
1 parent 517cf49 commit 8570d50

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

loader/validate.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ func checkConsistency(project *types.Project) error {
7070
return errors.Wrap(errdefs.ErrInvalid, fmt.Sprintf("service %q refers to undefined config %s", s.Name, config.Source))
7171
}
7272
}
73+
74+
for _, secret := range s.Secrets {
75+
if _, ok := project.Secrets[secret.Source]; !ok {
76+
return errors.Wrap(errdefs.ErrInvalid, fmt.Sprintf("service %q refers to undefined secret %s", s.Name, secret.Source))
77+
}
78+
}
7379
}
7480

7581
for name, secret := range project.Secrets {

loader/validate_test.go

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ func TestValidateSecret(t *testing.T) {
174174
err := checkConsistency(project)
175175
assert.NilError(t, err)
176176
})
177-
t.Run("uset secret", func(t *testing.T) {
177+
t.Run("unset secret type", func(t *testing.T) {
178178
project := &types.Project{
179179
Secrets: types.Secrets{
180180
"foo": types.SecretConfig{},
@@ -183,6 +183,49 @@ func TestValidateSecret(t *testing.T) {
183183
err := checkConsistency(project)
184184
assert.Error(t, err, "secret \"foo\" must declare either `file` or `environment`: invalid compose project")
185185
})
186+
187+
t.Run("service secret exist", func(t *testing.T) {
188+
project := &types.Project{
189+
Secrets: types.Secrets{
190+
"foo": types.SecretConfig{
191+
External: types.External{
192+
External: true,
193+
},
194+
},
195+
},
196+
Services: types.Services([]types.ServiceConfig{
197+
{
198+
Name: "myservice",
199+
Image: "scratch",
200+
Secrets: []types.ServiceSecretConfig{
201+
{
202+
Source: "foo",
203+
},
204+
},
205+
},
206+
}),
207+
}
208+
err := checkConsistency(project)
209+
assert.NilError(t, err)
210+
})
211+
212+
t.Run("service secret undefined", func(t *testing.T) {
213+
project := &types.Project{
214+
Services: types.Services([]types.ServiceConfig{
215+
{
216+
Name: "myservice",
217+
Image: "scratch",
218+
Secrets: []types.ServiceSecretConfig{
219+
{
220+
Source: "foo",
221+
},
222+
},
223+
},
224+
}),
225+
}
226+
err := checkConsistency(project)
227+
assert.Error(t, err, `service "myservice" refers to undefined secret foo: invalid compose project`)
228+
})
186229
}
187230

188231
func TestValidateDependsOn(t *testing.T) {

0 commit comments

Comments
 (0)