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  }