@@ -26,29 +26,32 @@ var (
2626)
2727
2828// Load applies the specified function when loading a slice of compose data
29- func Load (composes [][]byte , apply func (string ) (string , error )) ([]composetypes.ConfigFile , error ) {
29+ func Load (composes [][]byte , apply func (string ) (string , error )) ([]composetypes.ConfigFile , map [ string ] string , error ) {
3030 configFiles := []composetypes.ConfigFile {}
3131 for _ , data := range composes {
3232 s , err := apply (string (data ))
3333 if err != nil {
34- return nil , err
34+ return nil , nil , err
3535 }
3636 parsed , err := loader .ParseYAML ([]byte (s ))
3737 if err != nil {
38- return nil , errors .Wrapf (err , "failed to parse Compose file %s" , data )
38+ return nil , nil , errors .Wrapf (err , "failed to parse Compose file %s" , data )
3939 }
4040 configFiles = append (configFiles , composetypes.ConfigFile {Config : parsed })
4141 }
4242
43- if err := validateImageInConfigFiles (configFiles ); err != nil {
44- return nil , err
43+ images , err := validateImagesInConfigFiles (configFiles )
44+ if err != nil {
45+ return nil , nil , err
4546 }
4647
47- return configFiles , nil
48+ return configFiles , images , nil
4849}
4950
50- func validateImageInConfigFiles (configFiles []composetypes.ConfigFile ) error {
51+ // validateImagesInConfigFiles validates that there is no unsupported variable expensions in service images and returns a map of service name -> image
52+ func validateImagesInConfigFiles (configFiles []composetypes.ConfigFile ) (map [string ]string , error ) {
5153 var errors []string
54+ images := map [string ]string {}
5255 for _ , configFile := range configFiles {
5356 services , ok := configFile .Config ["services" ].(map [string ]interface {})
5457 if ! ok {
@@ -63,6 +66,7 @@ func validateImageInConfigFiles(configFiles []composetypes.ConfigFile) error {
6366 if ! ok {
6467 continue
6568 }
69+ images [serviceName ] = imageName
6670
6771 if ExtrapolationPattern .MatchString (imageName ) {
6872 errors = append (errors ,
@@ -73,10 +77,10 @@ func validateImageInConfigFiles(configFiles []composetypes.ConfigFile) error {
7377 }
7478
7579 if len (errors ) > 0 {
76- return fmt .Errorf ("%s" , strings .Join (errors , "\n " ))
80+ return nil , fmt .Errorf ("%s" , strings .Join (errors , "\n " ))
7781 }
7882
79- return nil
83+ return images , nil
8084}
8185
8286// ExtractVariables extracts the variables from the specified compose data
0 commit comments