github.com/simonferquel/app@v0.6.1-0.20181012141724-68b7cccf26ac/internal/compose/compose.go (about) 1 package compose 2 3 import ( 4 "regexp" 5 6 "github.com/docker/cli/cli/compose/loader" 7 "github.com/docker/cli/cli/compose/template" 8 composetypes "github.com/docker/cli/cli/compose/types" 9 "github.com/pkg/errors" 10 ) 11 12 // Load applies the specified function when loading a slice of compose data 13 func Load(composes [][]byte, apply func(string) (string, error)) ([]composetypes.ConfigFile, error) { 14 configFiles := []composetypes.ConfigFile{} 15 for _, data := range composes { 16 s, err := apply(string(data)) 17 if err != nil { 18 return nil, err 19 } 20 parsed, err := loader.ParseYAML([]byte(s)) 21 if err != nil { 22 return nil, errors.Wrapf(err, "failed to parse Compose file %s", data) 23 } 24 configFiles = append(configFiles, composetypes.ConfigFile{Config: parsed}) 25 } 26 return configFiles, nil 27 } 28 29 // ExtractVariables extracts the variables from the specified compose data 30 // This is a small helper to docker/cli template.ExtractVariables function 31 func ExtractVariables(data []byte, pattern *regexp.Regexp) (map[string]string, error) { 32 cfgMap, err := loader.ParseYAML(data) 33 if err != nil { 34 return nil, err 35 } 36 return template.ExtractVariables(cfgMap, pattern), nil 37 }