diff --git a/pkg/compose/create.go b/pkg/compose/create.go index 74a2184a..a0b74a0e 100644 --- a/pkg/compose/create.go +++ b/pkg/compose/create.go @@ -125,7 +125,8 @@ func prepareVolumes(p *types.Project) error { p.Services[i].DependsOn = make(types.DependsOnConfig, len(dependServices)) } for _, service := range p.Services { - if utils.StringContains(dependServices, service.Name) { + if utils.StringContains(dependServices, service.Name) && + p.Services[i].DependsOn[service.Name].Condition == "" { p.Services[i].DependsOn[service.Name] = types.ServiceDependency{ Condition: types.ServiceConditionStarted, } diff --git a/pkg/compose/create_test.go b/pkg/compose/create_test.go index 4b614046..c4b84ed1 100644 --- a/pkg/compose/create_test.go +++ b/pkg/compose/create_test.go @@ -96,6 +96,46 @@ func TestPrepareNetworkLabels(t *testing.T) { })) } +func TestPrepareVolumes(t *testing.T) { + t.Run("adds dependency condition if service depends on volume from another service", func(t *testing.T) { + project := composetypes.Project{ + Name: "myProject", + Services: []composetypes.ServiceConfig{ + { + Name: "aService", + VolumesFrom: []string{"anotherService"}, + }, + { + Name: "anotherService", + }, + }, + } + err := prepareVolumes(&project) + assert.NilError(t, err) + assert.Equal(t, project.Services[0].DependsOn["anotherService"].Condition, composetypes.ServiceConditionStarted) + }) + t.Run("doesn't overwrite existing dependency condition", func(t *testing.T) { + project := composetypes.Project{ + Name: "myProject", + Services: []composetypes.ServiceConfig{ + { + Name: "aService", + VolumesFrom: []string{"anotherService"}, + DependsOn: map[string]composetypes.ServiceDependency{ + "anotherService": {Condition: composetypes.ServiceConditionHealthy}, + }, + }, + { + Name: "anotherService", + }, + }, + } + err := prepareVolumes(&project) + assert.NilError(t, err) + assert.Equal(t, project.Services[0].DependsOn["anotherService"].Condition, composetypes.ServiceConditionHealthy) + }) +} + func TestBuildContainerMountOptions(t *testing.T) { project := composetypes.Project{ Name: "myProject",