@@ -342,8 +342,8 @@ func createTransformHook(additionalTransformers ...Transformer) mapstructure.Dec
342
342
reflect .TypeOf (types.UlimitsConfig {}): transformUlimits ,
343
343
reflect .TypeOf (types .UnitBytes (0 )): transformSize ,
344
344
reflect .TypeOf ([]types.ServicePortConfig {}): transformServicePort ,
345
- reflect .TypeOf (types.ServiceSecretConfig {}): transformStringSourceMap ,
346
- reflect .TypeOf (types.ServiceConfigObjConfig {}): transformStringSourceMap ,
345
+ reflect .TypeOf (types.ServiceSecretConfig {}): transformFileReferenceConfig ,
346
+ reflect .TypeOf (types.ServiceConfigObjConfig {}): transformFileReferenceConfig ,
347
347
reflect .TypeOf (types.StringOrNumberList {}): transformStringOrNumberList ,
348
348
reflect .TypeOf (map [string ]* types.ServiceNetworkConfig {}): transformServiceNetworkMap ,
349
349
reflect .TypeOf (types.Mapping {}): transformMappingOrListFunc ("=" , false ),
@@ -852,17 +852,27 @@ var transformServiceDeviceRequest TransformerFunc = func(data interface{}) (inte
852
852
}
853
853
}
854
854
855
- var transformStringSourceMap TransformerFunc = func (data interface {}) (interface {}, error ) {
855
+ var transformFileReferenceConfig TransformerFunc = func (data interface {}) (interface {}, error ) {
856
856
switch value := data .(type ) {
857
857
case string :
858
858
return map [string ]interface {}{"source" : value }, nil
859
859
case map [string ]interface {}:
860
- return groupXFieldsIntoExtensions (data .(map [string ]interface {})), nil
860
+ if target , ok := value ["target" ]; ok {
861
+ value ["target" ] = cleanTarget (target .(string ))
862
+ }
863
+ return groupXFieldsIntoExtensions (value ), nil
861
864
default :
862
865
return data , errors .Errorf ("invalid type %T for secret" , value )
863
866
}
864
867
}
865
868
869
+ func cleanTarget (target string ) string {
870
+ if target == "" {
871
+ return ""
872
+ }
873
+ return path .Clean (target )
874
+ }
875
+
866
876
var transformBuildConfig TransformerFunc = func (data interface {}) (interface {}, error ) {
867
877
switch value := data .(type ) {
868
878
case string :
@@ -906,9 +916,15 @@ var transformExtendsConfig TransformerFunc = func(data interface{}) (interface{}
906
916
var transformServiceVolumeConfig TransformerFunc = func (data interface {}) (interface {}, error ) {
907
917
switch value := data .(type ) {
908
918
case string :
909
- return ParseVolume (value )
919
+ volume , err := ParseVolume (value )
920
+ volume .Target = cleanTarget (volume .Target )
921
+ return volume , err
910
922
case map [string ]interface {}:
911
- return groupXFieldsIntoExtensions (data .(map [string ]interface {})), nil
923
+ data := groupXFieldsIntoExtensions (data .(map [string ]interface {}))
924
+ if target , ok := data ["target" ]; ok {
925
+ data ["target" ] = cleanTarget (target .(string ))
926
+ }
927
+ return data , nil
912
928
default :
913
929
return data , errors .Errorf ("invalid type %T for service volume" , value )
914
930
}
0 commit comments