@@ -20,14 +20,20 @@ import (
2020 "github.com/compose-spec/compose-go/v2/tree"
2121)
2222
23- var defaultValues = map [tree.Path ]transformFunc {}
23+ // DefaultValues contains the default value transformers for compose fields
24+ var DefaultValues = map [tree.Path ]Func {}
2425
2526func init () {
26- defaultValues ["services.*.build" ] = defaultBuildContext
27- defaultValues ["services.*.secrets.*" ] = defaultSecretMount
28- defaultValues ["services.*.ports.*" ] = portDefaults
29- defaultValues ["services.*.deploy.resources.reservations.devices.*" ] = deviceRequestDefaults
30- defaultValues ["services.*.gpus.*" ] = deviceRequestDefaults
27+ DefaultValues ["services.*.build" ] = defaultBuildContext
28+ DefaultValues ["services.*.secrets.*" ] = defaultSecretMount
29+ DefaultValues ["services.*.ports.*" ] = portDefaults
30+ DefaultValues ["services.*.deploy.resources.reservations.devices.*" ] = deviceRequestDefaults
31+ DefaultValues ["services.*.gpus.*" ] = deviceRequestDefaults
32+ }
33+
34+ // RegisterDefaultValue registers a custom transformer for the given path pattern
35+ func RegisterDefaultValue (path string , transformer Func ) {
36+ DefaultValues [tree .Path (path )] = transformer
3137}
3238
3339// SetDefaultValues transforms a compose model to set default values to missing attributes
@@ -40,7 +46,7 @@ func SetDefaultValues(yaml map[string]any) (map[string]any, error) {
4046}
4147
4248func setDefaults (data any , p tree.Path ) (any , error ) {
43- for pattern , transformer := range defaultValues {
49+ for pattern , transformer := range DefaultValues {
4450 if p .Matches (pattern ) {
4551 t , err := transformer (data , p , false )
4652 if err != nil {
0 commit comments