Skip to content

Commit 6d84d23

Browse files
umman.mammadovUMMAN2005
authored andcommitted
feat: Add support for Docker Compose models
Signed-off-by: Umman Mammadov <[email protected]>
1 parent f801d70 commit 6d84d23

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

internal/provisioners/core.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ type ProvisionOutput struct {
9292
ComposeNetworks map[string]compose.NetworkConfig `json:"compose_networks"`
9393
ComposeVolumes map[string]compose.VolumeConfig `json:"compose_volumes"`
9494
ComposeServices map[string]compose.ServiceConfig `json:"compose_services"`
95+
ComposeModels map[string]compose.ModelConfig `json:"compose_models"`
9596

9697
// For testing and legacy reasons, built in provisioners can set a direct lookup function
9798
OutputLookupFunc framework.OutputLookupFunc `json:"-"`
@@ -166,6 +167,7 @@ func (po *ProvisionOutput) ApplyToStateAndProject(state *project.State, resUid f
166167
"#volumes", len(po.ComposeVolumes),
167168
"#networks", len(po.ComposeNetworks),
168169
"#services", len(po.ComposeServices),
170+
"#models", len(po.ComposeModels),
169171
)
170172

171173
out := *state
@@ -260,6 +262,12 @@ func (po *ProvisionOutput) ApplyToStateAndProject(state *project.State, resUid f
260262
}
261263
project.Services[serviceName] = service
262264
}
265+
for modelName, model := range po.ComposeModels {
266+
if project.Models == nil {
267+
project.Models = make(compose.Models)
268+
}
269+
project.Models[modelName] = model
270+
}
263271

264272
out.Resources[resUid] = existing
265273
return &out, nil

internal/provisioners/core_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,9 @@ func TestApplyToStateAndProject(t *testing.T) {
8080
ComposeVolumes: map[string]compose.VolumeConfig{
8181
"some-volume": {Name: "volume"},
8282
},
83+
ComposeModels: map[string]compose.ModelConfig{
84+
"some-model": {Name: "model-name", Model: "provider/model-id"},
85+
},
8386
}
8487
afterState, err := output.ApplyToStateAndProject(startState, resUid, composeProject)
8588
require.NoError(t, err)
@@ -91,6 +94,9 @@ func TestApplyToStateAndProject(t *testing.T) {
9194
assert.Len(t, composeProject.Networks, 1)
9295
assert.Len(t, composeProject.Volumes, 1)
9396
assert.Len(t, composeProject.Services, 1)
97+
assert.Len(t, composeProject.Models, 1)
98+
assert.Equal(t, "model-name", composeProject.Models["some-model"].Name)
99+
assert.Equal(t, "provider/model-id", composeProject.Models["some-model"].Model)
94100
paths := make([]string, 0)
95101
_ = filepath.WalkDir(td, func(path string, d fs.DirEntry, err error) error {
96102
if d.IsDir() {

internal/provisioners/templateprov/template.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ type Provisioner struct {
7070
// ComposeServicesTemplate generates a set of services to add to the compose project. These will replace any with
7171
// the same name already.
7272
ComposeServicesTemplate string `yaml:"services,omitempty"`
73+
// ComposeModelsTemplate generates a set of models to add to the compose project. These will replace any with
74+
// the same name already.
75+
ComposeModelsTemplate string `yaml:"models,omitempty"`
7376

7477
// InfoLogsTemplate allows the provisioner to return informational messages for the user which may help connecting or
7578
// testing the provisioned resource
@@ -268,6 +271,11 @@ func (p *Provisioner) Provision(ctx context.Context, input *provisioners.Input)
268271
return nil, fmt.Errorf("volumes template failed: %w", err)
269272
}
270273

274+
out.ComposeModels = make(map[string]compose.ModelConfig)
275+
if err := renderTemplateAndDecode(p.ComposeModelsTemplate, &data, &out.ComposeModels, true); err != nil {
276+
return nil, fmt.Errorf("models template failed: %w", err)
277+
}
278+
271279
var infoLogs []string
272280
if err := renderTemplateAndDecode(p.InfoLogsTemplate, &data, &infoLogs, false); err != nil {
273281
return nil, fmt.Errorf("info logs template failed: %w", err)

0 commit comments

Comments
 (0)