mirror of
https://github.com/portainer/portainer.git
synced 2025-07-20 05:49:40 +02:00
fix(libstack): correctly load COMPOSE_* env vars [BE-11474] (#536)
This commit is contained in:
parent
5d1cd670e9
commit
34235199dd
7 changed files with 952 additions and 87 deletions
109
pkg/libstack/compose/composeplugin_windows_test.go
Normal file
109
pkg/libstack/compose/composeplugin_windows_test.go
Normal file
|
@ -0,0 +1,109 @@
|
|||
package compose
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/compose-spec/compose-go/v2/types"
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/portainer/portainer/pkg/libstack"
|
||||
)
|
||||
|
||||
func Test_createProject_win(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
dir := t.TempDir()
|
||||
projectName := "create-project-test"
|
||||
|
||||
defer func() {
|
||||
err := os.RemoveAll(dir)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to remove temp dir: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
testcases := []struct {
|
||||
name string
|
||||
createFilesFn func() []string
|
||||
configFilepaths []string
|
||||
options libstack.Options
|
||||
expectedProject *types.Project
|
||||
}{
|
||||
{
|
||||
name: "Convert windows paths",
|
||||
createFilesFn: func() []string {
|
||||
var filepaths []string
|
||||
filepaths = append(filepaths, createFile(t, dir, "docker-compose.yml", `services:
|
||||
nginx:
|
||||
container_name: nginx
|
||||
image: nginx:latest
|
||||
volumes:
|
||||
- "C:\\Users\\Joey\\Desktop\\backend:/var/www/html"`))
|
||||
return filepaths
|
||||
},
|
||||
configFilepaths: []string{dir + "/docker-compose.yml"},
|
||||
options: libstack.Options{
|
||||
WorkingDir: dir,
|
||||
ProjectName: projectName,
|
||||
Env: []string{"COMPOSE_CONVERT_WINDOWS_PATHS=true"},
|
||||
},
|
||||
expectedProject: &types.Project{
|
||||
Name: projectName,
|
||||
WorkingDir: dir,
|
||||
Services: types.Services{
|
||||
"nginx": {
|
||||
Name: "nginx",
|
||||
ContainerName: "nginx",
|
||||
Environment: types.MappingWithEquals{},
|
||||
Image: "nginx:latest",
|
||||
Networks: map[string]*types.ServiceNetworkConfig{"default": nil},
|
||||
Volumes: []types.ServiceVolumeConfig{
|
||||
{
|
||||
Type: "bind",
|
||||
Source: "/c/Users/Joey/Desktop/backend",
|
||||
Target: "/var/www/html",
|
||||
ReadOnly: false,
|
||||
Bind: &types.ServiceVolumeBind{CreateHostPath: true},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Networks: types.Networks{"default": {Name: "create-project-test_default"}},
|
||||
ComposeFiles: []string{
|
||||
dir + "/docker-compose.yml",
|
||||
},
|
||||
Environment: types.Mapping{"COMPOSE_PROJECT_NAME": "create-project-test", "COMPOSE_CONVERT_WINDOWS_PATHS": "true"},
|
||||
DisabledServices: types.Services{},
|
||||
Profiles: []string{""},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testcases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
createdFiles := tc.createFilesFn()
|
||||
|
||||
defer func() {
|
||||
var errs []error
|
||||
for _, f := range createdFiles {
|
||||
errs = append(errs, os.Remove(f))
|
||||
}
|
||||
|
||||
err := errors.Join(errs...)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to remove config files: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
gotProject, err := createProject(ctx, tc.configFilepaths, tc.options)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to create new project: %v", err)
|
||||
}
|
||||
|
||||
if diff := cmp.Diff(gotProject, tc.expectedProject); diff != "" {
|
||||
t.Fatalf("Projects are different:\n%s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue