@@ -342,8 +342,8 @@ func createTransformHook(additionalTransformers ...Transformer) mapstructure.Dec
342342 reflect .TypeOf (types.UlimitsConfig {}): transformUlimits ,
343343 reflect .TypeOf (types .UnitBytes (0 )): transformSize ,
344344 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 ,
347347 reflect .TypeOf (types.StringOrNumberList {}): transformStringOrNumberList ,
348348 reflect .TypeOf (map [string ]* types.ServiceNetworkConfig {}): transformServiceNetworkMap ,
349349 reflect .TypeOf (types.Mapping {}): transformMappingOrListFunc ("=" , false ),
@@ -852,17 +852,27 @@ var transformServiceDeviceRequest TransformerFunc = func(data interface{}) (inte
852852 }
853853}
854854
855- var transformStringSourceMap TransformerFunc = func (data interface {}) (interface {}, error ) {
855+ var transformFileReferenceConfig TransformerFunc = func (data interface {}) (interface {}, error ) {
856856 switch value := data .(type ) {
857857 case string :
858858 return map [string ]interface {}{"source" : value }, nil
859859 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
861864 default :
862865 return data , errors .Errorf ("invalid type %T for secret" , value )
863866 }
864867}
865868
869+ func cleanTarget (target string ) string {
870+ if target == "" {
871+ return ""
872+ }
873+ return path .Clean (target )
874+ }
875+
866876var transformBuildConfig TransformerFunc = func (data interface {}) (interface {}, error ) {
867877 switch value := data .(type ) {
868878 case string :
@@ -906,9 +916,15 @@ var transformExtendsConfig TransformerFunc = func(data interface{}) (interface{}
906916var transformServiceVolumeConfig TransformerFunc = func (data interface {}) (interface {}, error ) {
907917 switch value := data .(type ) {
908918 case string :
909- return ParseVolume (value )
919+ volume , err := ParseVolume (value )
920+ volume .Target = cleanTarget (volume .Target )
921+ return volume , err
910922 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
912928 default :
913929 return data , errors .Errorf ("invalid type %T for service volume" , value )
914930 }
0 commit comments