Skip to content

Commit 999ce24

Browse files
authored
Merge pull request #321 from ndeloof/9756
merge exposes, heathchecks.test
2 parents 9df6287 + 5c50f88 commit 999ce24

File tree

2 files changed

+59
-2
lines changed

2 files changed

+59
-2
lines changed

loader/merge.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,9 @@ func _merge(baseService *types.ServiceConfig, overrideService *types.ServiceConf
119119
if overrideService.Command != nil {
120120
baseService.Command = overrideService.Command
121121
}
122+
if overrideService.HealthCheck != nil {
123+
baseService.HealthCheck.Test = overrideService.HealthCheck.Test
124+
}
122125
if overrideService.Entrypoint != nil {
123126
baseService.Entrypoint = overrideService.Entrypoint
124127
}
@@ -127,9 +130,26 @@ func _merge(baseService *types.ServiceConfig, overrideService *types.ServiceConf
127130
} else {
128131
baseService.Environment = overrideService.Environment
129132
}
133+
baseService.Expose = unique(baseService.Expose)
130134
return baseService, nil
131135
}
132136

137+
func unique(slice []string) []string {
138+
if slice == nil {
139+
return nil
140+
}
141+
uniqMap := make(map[string]struct{})
142+
for _, v := range slice {
143+
uniqMap[v] = struct{}{}
144+
}
145+
146+
uniqSlice := make([]string, 0, len(uniqMap))
147+
for v := range uniqMap {
148+
uniqSlice = append(uniqSlice, v)
149+
}
150+
return uniqSlice
151+
}
152+
133153
func toServiceSecretConfigsMap(s interface{}) (map[interface{}]interface{}, error) {
134154
secrets, ok := s.([]types.ServiceSecretConfig)
135155
if !ok {
@@ -299,15 +319,15 @@ func mergeLoggingConfig(dst, src reflect.Value) error {
299319
return nil
300320
}
301321

302-
//nolint: unparam
322+
// nolint: unparam
303323
func mergeUlimitsConfig(dst, src reflect.Value) error {
304324
if src.Interface() != reflect.Zero(reflect.TypeOf(src.Interface())).Interface() {
305325
dst.Elem().Set(src.Elem())
306326
}
307327
return nil
308328
}
309329

310-
//nolint: unparam
330+
// nolint: unparam
311331
func mergeServiceNetworkConfig(dst, src reflect.Value) error {
312332
if src.Interface() != reflect.Zero(reflect.TypeOf(src.Interface())).Interface() {
313333
dst.Elem().FieldByName("Aliases").Set(src.Elem().FieldByName("Aliases"))

loader/merge_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,9 @@ func TestLoadMultipleConfigs(t *testing.T) {
884884
"8080:80",
885885
"9090:90",
886886
},
887+
"expose": []interface{}{
888+
"8080",
889+
},
887890
"labels": []interface{}{
888891
"foo=bar",
889892
},
@@ -916,6 +919,9 @@ func TestLoadMultipleConfigs(t *testing.T) {
916919
"published": 8080,
917920
},
918921
},
922+
"expose": []interface{}{
923+
"8080",
924+
},
919925
"labels": map[string]interface{}{
920926
"foo": "baz",
921927
},
@@ -963,6 +969,7 @@ func TestLoadMultipleConfigs(t *testing.T) {
963969
"password": strPtr("secret"),
964970
},
965971
},
972+
Expose: []string{"8080"},
966973
Ports: []types.ServicePortConfig{
967974
{
968975
Mode: "ingress",
@@ -1223,6 +1230,36 @@ func TestMergeCommands(t *testing.T) {
12231230
assert.DeepEqual(t, merged.Services[0].Command, types.ShellCommand{"/bin/ash", "-c", "echo 'world'"})
12241231
}
12251232

1233+
func TestMergeHealthCheck(t *testing.T) {
1234+
configDetails := types.ConfigDetails{
1235+
ConfigFiles: []types.ConfigFile{
1236+
{Filename: "base.yml", Config: map[string]interface{}{
1237+
"services": map[string]interface{}{
1238+
"foo": map[string]interface{}{
1239+
"image": "alpine",
1240+
"healthcheck": map[string]interface{}{
1241+
"test": []interface{}{"CMD", "original"},
1242+
},
1243+
},
1244+
},
1245+
}},
1246+
{Filename: "override.yml", Config: map[string]interface{}{
1247+
"services": map[string]interface{}{
1248+
"foo": map[string]interface{}{
1249+
"image": "alpine",
1250+
"healthcheck": map[string]interface{}{
1251+
"test": []interface{}{"CMD", "override"},
1252+
},
1253+
},
1254+
},
1255+
}},
1256+
},
1257+
}
1258+
merged, err := loadTestProject(configDetails)
1259+
assert.NilError(t, err)
1260+
assert.DeepEqual(t, merged.Services[0].HealthCheck.Test, types.HealthCheckTest{"CMD", "override"})
1261+
}
1262+
12261263
func TestMergeEnvironments(t *testing.T) {
12271264
configDetails := types.ConfigDetails{
12281265
ConfigFiles: []types.ConfigFile{

0 commit comments

Comments
 (0)