refactor(recipe): move GetComposeFiles to new struct
This commit is contained in:
parent
ca1db33e97
commit
99da8d4e57
@ -173,7 +173,7 @@ recipes.
|
||||
app.Env[k] = v
|
||||
}
|
||||
|
||||
composeFiles, err := recipe.GetComposeFiles(app.Recipe, app.Env)
|
||||
composeFiles, err := r2.GetComposeFiles(app.Env)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ var appNewCommand = cli.Command{
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
composeFiles, err := recipePkg.GetComposeFiles(recipe.Name, sampleEnv)
|
||||
composeFiles, err := r.GetComposeFiles(sampleEnv)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
@ -68,7 +68,8 @@ var appPsCommand = cli.Command{
|
||||
|
||||
// showPSOutput renders ps output.
|
||||
func showPSOutput(app appPkg.App, cl *dockerClient.Client) {
|
||||
composeFiles, err := recipe.GetComposeFiles(app.Recipe, app.Env)
|
||||
r := recipe.Get2(app.Name)
|
||||
composeFiles, err := r.GetComposeFiles(app.Env)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return
|
||||
|
@ -193,7 +193,7 @@ recipes.
|
||||
app.Env[k] = v
|
||||
}
|
||||
|
||||
composeFiles, err := recipe.GetComposeFiles(app.Recipe, app.Env)
|
||||
composeFiles, err := r2.GetComposeFiles(app.Env)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ var appSecretGenerateCommand = cli.Command{
|
||||
internal.ShowSubcommandHelpAndError(c, err)
|
||||
}
|
||||
|
||||
composeFiles, err := recipe.GetComposeFiles(app.Recipe, app.Env)
|
||||
composeFiles, err := r.GetComposeFiles(app.Env)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@ -270,7 +270,7 @@ Example:
|
||||
}
|
||||
}
|
||||
|
||||
composeFiles, err := recipe.GetComposeFiles(app.Recipe, app.Env)
|
||||
composeFiles, err := r.GetComposeFiles(app.Env)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
@ -231,7 +231,7 @@ recipes.
|
||||
app.Env[k] = v
|
||||
}
|
||||
|
||||
composeFiles, err := recipePkg.GetComposeFiles(app.Recipe, app.Env)
|
||||
composeFiles, err := r.GetComposeFiles(app.Env)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
@ -357,7 +357,7 @@ func mergeAbraShEnv(recipeName string, env envfile.AppEnv) error {
|
||||
}
|
||||
|
||||
// createDeployConfig merges and enriches the compose config for the deployment.
|
||||
func createDeployConfig(recipeName string, stackName string, env envfile.AppEnv) (*composetypes.Config, stack.Deploy, error) {
|
||||
func createDeployConfig(r recipe.Recipe2, stackName string, env envfile.AppEnv) (*composetypes.Config, stack.Deploy, error) {
|
||||
env["STACK_NAME"] = stackName
|
||||
|
||||
deployOpts := stack.Deploy{
|
||||
@ -367,7 +367,7 @@ func createDeployConfig(recipeName string, stackName string, env envfile.AppEnv)
|
||||
Detach: false,
|
||||
}
|
||||
|
||||
composeFiles, err := recipe.GetComposeFiles(recipeName, env)
|
||||
composeFiles, err := r.GetComposeFiles(env)
|
||||
if err != nil {
|
||||
return nil, deployOpts, err
|
||||
}
|
||||
@ -382,7 +382,7 @@ func createDeployConfig(recipeName string, stackName string, env envfile.AppEnv)
|
||||
|
||||
// after the upgrade the deployment won't be in chaos state anymore
|
||||
appPkg.SetChaosLabel(compose, stackName, false)
|
||||
appPkg.SetRecipeLabel(compose, stackName, recipeName)
|
||||
appPkg.SetRecipeLabel(compose, stackName, r.Name)
|
||||
appPkg.SetUpdateLabel(compose, stackName, env)
|
||||
|
||||
return compose, deployOpts, nil
|
||||
@ -455,7 +455,7 @@ func upgrade(cl *dockerclient.Client, stackName, recipeName,
|
||||
return err
|
||||
}
|
||||
|
||||
compose, deployOpts, err := createDeployConfig(recipeName, stackName, app.Env)
|
||||
compose, deployOpts, err := createDeployConfig(r, stackName, app.Env)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -161,7 +161,8 @@ func (a App) Filters(appendServiceNames, exactMatch bool, services ...string) (f
|
||||
return filters, nil
|
||||
}
|
||||
|
||||
composeFiles, err := recipe.GetComposeFiles(a.Recipe, a.Env)
|
||||
r := recipe.Get2(a.Recipe)
|
||||
composeFiles, err := r.GetComposeFiles(a.Env)
|
||||
if err != nil {
|
||||
return filters, err
|
||||
}
|
||||
@ -317,7 +318,8 @@ func GetAppServiceNames(appName string) ([]string, error) {
|
||||
return serviceNames, err
|
||||
}
|
||||
|
||||
composeFiles, err := recipe.GetComposeFiles(app.Recipe, app.Env)
|
||||
r := recipe.Get2(app.Recipe)
|
||||
composeFiles, err := r.GetComposeFiles(app.Env)
|
||||
if err != nil {
|
||||
return serviceNames, err
|
||||
}
|
||||
|
@ -85,7 +85,8 @@ func TestGetComposeFiles(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
composeFiles, err := recipe.GetComposeFiles(r.Name, test.appEnv)
|
||||
r2 := recipe.Get2(r.Name)
|
||||
composeFiles, err := r2.GetComposeFiles(test.appEnv)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -106,7 +107,8 @@ func TestGetComposeFilesError(t *testing.T) {
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
_, err := recipe.GetComposeFiles(r.Name, test.appEnv)
|
||||
r2 := recipe.Get2(r.Name)
|
||||
_, err := r2.GetComposeFiles(test.appEnv)
|
||||
if err == nil {
|
||||
t.Fatalf("should have failed: %v", test.appEnv)
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package recipe
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
@ -14,6 +15,50 @@ import (
|
||||
composetypes "github.com/docker/cli/cli/compose/types"
|
||||
)
|
||||
|
||||
// GetComposeFiles gets the list of compose files for an app (or recipe if you
|
||||
// don't already have an app) which should be merged into a composetypes.Config
|
||||
// while respecting the COMPOSE_FILE env var.
|
||||
func (r Recipe2) GetComposeFiles(appEnv map[string]string) ([]string, error) {
|
||||
composeFileEnvVar, ok := appEnv["COMPOSE_FILE"]
|
||||
if !ok {
|
||||
if err := ensurePathExists(r.ComposePath); err != nil {
|
||||
return []string{}, err
|
||||
}
|
||||
log.Debugf("no COMPOSE_FILE detected, loading default: %s", r.ComposePath)
|
||||
return []string{r.ComposePath}, nil
|
||||
}
|
||||
|
||||
if !strings.Contains(composeFileEnvVar, ":") {
|
||||
path := fmt.Sprintf("%s/%s", r.Dir, composeFileEnvVar)
|
||||
if err := ensurePathExists(path); err != nil {
|
||||
return []string{}, err
|
||||
}
|
||||
log.Debugf("COMPOSE_FILE detected, loading %s", path)
|
||||
return []string{path}, nil
|
||||
}
|
||||
|
||||
var composeFiles []string
|
||||
|
||||
numComposeFiles := strings.Count(composeFileEnvVar, ":") + 1
|
||||
envVars := strings.SplitN(composeFileEnvVar, ":", numComposeFiles)
|
||||
if len(envVars) != numComposeFiles {
|
||||
return composeFiles, fmt.Errorf("COMPOSE_FILE (=\"%s\") parsing failed?", composeFileEnvVar)
|
||||
}
|
||||
|
||||
for _, file := range envVars {
|
||||
path := fmt.Sprintf("%s/%s", r.Dir, file)
|
||||
if err := ensurePathExists(path); err != nil {
|
||||
return composeFiles, err
|
||||
}
|
||||
composeFiles = append(composeFiles, path)
|
||||
}
|
||||
|
||||
log.Debugf("COMPOSE_FILE detected (%s), loading %s", composeFileEnvVar, strings.Join(envVars, ", "))
|
||||
log.Debugf("retrieved %s configs for %s", strings.Join(composeFiles, ", "), r.Name)
|
||||
|
||||
return composeFiles, nil
|
||||
}
|
||||
|
||||
// UpdateTag updates an image tag in-place on file system local compose files.
|
||||
func (r Recipe2) UpdateTag(image, tag string) (bool, error) {
|
||||
fullPattern := fmt.Sprintf("%s/compose**yml", r.Dir)
|
||||
@ -74,7 +119,7 @@ func (r Recipe2) UpdateTag(image, tag string) (bool, error) {
|
||||
|
||||
log.Debugf("updating %s to %s in %s", old, new, compose.Filename)
|
||||
|
||||
if err := ioutil.WriteFile(compose.Filename, []byte(replacedBytes), 0764); err != nil {
|
||||
if err := os.WriteFile(compose.Filename, []byte(replacedBytes), 0764); err != nil {
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
|
@ -188,6 +188,7 @@ func Get2(name string) Recipe2 {
|
||||
Dir: dir,
|
||||
SSHURL: fmt.Sprintf(config.SSH_URL_TEMPLATE, name),
|
||||
|
||||
ComposePath: path.Join(dir, "compose.yml"),
|
||||
ReadmePath: path.Join(dir, "README.md"),
|
||||
SampleEnvPath: path.Join(dir, ".env.sample"),
|
||||
}
|
||||
@ -198,6 +199,7 @@ type Recipe2 struct {
|
||||
Dir string
|
||||
SSHURL string
|
||||
|
||||
ComposePath string
|
||||
ReadmePath string
|
||||
SampleEnvPath string
|
||||
}
|
||||
@ -776,50 +778,3 @@ func ensurePathExists(path string) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetComposeFiles gets the list of compose files for an app (or recipe if you
|
||||
// don't already have an app) which should be merged into a composetypes.Config
|
||||
// while respecting the COMPOSE_FILE env var.
|
||||
func GetComposeFiles(recipe string, appEnv map[string]string) ([]string, error) {
|
||||
var composeFiles []string
|
||||
|
||||
composeFileEnvVar, ok := appEnv["COMPOSE_FILE"]
|
||||
if !ok {
|
||||
path := fmt.Sprintf("%s/%s/compose.yml", config.RECIPES_DIR, recipe)
|
||||
if err := ensurePathExists(path); err != nil {
|
||||
return composeFiles, err
|
||||
}
|
||||
log.Debugf("no COMPOSE_FILE detected, loading default: %s", path)
|
||||
composeFiles = append(composeFiles, path)
|
||||
return composeFiles, nil
|
||||
}
|
||||
|
||||
if !strings.Contains(composeFileEnvVar, ":") {
|
||||
path := fmt.Sprintf("%s/%s/%s", config.RECIPES_DIR, recipe, composeFileEnvVar)
|
||||
if err := ensurePathExists(path); err != nil {
|
||||
return composeFiles, err
|
||||
}
|
||||
log.Debugf("COMPOSE_FILE detected, loading %s", path)
|
||||
composeFiles = append(composeFiles, path)
|
||||
return composeFiles, nil
|
||||
}
|
||||
|
||||
numComposeFiles := strings.Count(composeFileEnvVar, ":") + 1
|
||||
envVars := strings.SplitN(composeFileEnvVar, ":", numComposeFiles)
|
||||
if len(envVars) != numComposeFiles {
|
||||
return composeFiles, fmt.Errorf("COMPOSE_FILE (=\"%s\") parsing failed?", composeFileEnvVar)
|
||||
}
|
||||
|
||||
for _, file := range envVars {
|
||||
path := fmt.Sprintf("%s/%s/%s", config.RECIPES_DIR, recipe, file)
|
||||
if err := ensurePathExists(path); err != nil {
|
||||
return composeFiles, err
|
||||
}
|
||||
composeFiles = append(composeFiles, path)
|
||||
}
|
||||
|
||||
log.Debugf("COMPOSE_FILE detected (%s), loading %s", composeFileEnvVar, strings.Join(envVars, ", "))
|
||||
log.Debugf("retrieved %s configs for %s", strings.Join(composeFiles, ", "), recipe)
|
||||
|
||||
return composeFiles, nil
|
||||
}
|
||||
|
@ -246,7 +246,8 @@ type secretStatuses []secretStatus
|
||||
func PollSecretsStatus(cl *dockerClient.Client, app appPkg.App) (secretStatuses, error) {
|
||||
var secStats secretStatuses
|
||||
|
||||
composeFiles, err := recipe.GetComposeFiles(app.Recipe, app.Env)
|
||||
r := recipe.Get2(app.Name)
|
||||
composeFiles, err := r.GetComposeFiles(app.Env)
|
||||
if err != nil {
|
||||
return secStats, err
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user