Skip to content

Commit 1c64809

Browse files
authored
fix(api): default env vars should always be merged for docker model (#5293)
1 parent d177c8f commit 1c64809

File tree

3 files changed

+36
-9
lines changed

3 files changed

+36
-9
lines changed

engine/api/workermodel/dao.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,8 @@ func Insert(ctx context.Context, db gorp.SqlExecutor, model *sdk.Model) error {
199199
dbmodel.UserLastModified = time.Now()
200200
dbmodel.NeedRegistration = true
201201

202+
mergeModelEnvsWithDefaultEnvs(&dbmodel)
203+
202204
needSaveRegistryPassword, dockerRegistryPassword, err := replaceDockerRegistryPassword(db, &dbmodel)
203205
if err != nil {
204206
return err
@@ -232,6 +234,8 @@ func UpdateDB(ctx context.Context, db gorp.SqlExecutor, model *sdk.Model) error
232234
return err
233235
}
234236

237+
mergeModelEnvsWithDefaultEnvs(&dbmodel)
238+
235239
needSaveRegistryPassword, dockerRegistryPassword, err := replaceDockerRegistryPassword(db, &dbmodel)
236240
if err != nil {
237241
return err

engine/api/workermodel/dao_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,29 @@ func TestInsert(t *testing.T) {
135135
assert.EqualValues(t, *src, *res)
136136
}
137137

138+
func TestMergeModelEnvsWithDefaultEnvs(t *testing.T) {
139+
db, _ := test.SetupPG(t, bootstrap.InitiliazeDB)
140+
141+
g := assets.InsertGroup(t, db)
142+
143+
m := sdk.Model{
144+
Name: sdk.RandomString(10),
145+
Type: sdk.Docker,
146+
ModelDocker: sdk.ModelDocker{
147+
Image: "foo/bar:3.4",
148+
},
149+
GroupID: g.ID,
150+
}
151+
require.NoError(t, workermodel.Insert(context.TODO(), db, &m))
152+
require.Len(t, m.ModelDocker.Envs, 6, "all default vars should be added by insert")
153+
154+
m.ModelDocker.Envs = map[string]string{
155+
"myvar": "myvalue",
156+
}
157+
require.NoError(t, workermodel.UpdateDB(context.TODO(), db, &m))
158+
require.Len(t, m.ModelDocker.Envs, 7, "all default vars should be merged to given vars by update")
159+
}
160+
138161
func TestLoadByNameAndGroupID(t *testing.T) {
139162
db, _ := test.SetupPG(t, bootstrap.InitiliazeDB)
140163

engine/api/workermodel/utils.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,19 @@ var defaultEnvs = map[string]string{
1616
"CDS_GRAYLOG_EXTRA_VALUE": "{{.GraylogExtraValue}}",
1717
}
1818

19-
func MergeModelEnvsWithDefaultEnvs(envs map[string]string) map[string]string {
20-
if envs == nil {
21-
return defaultEnvs
19+
func mergeModelEnvsWithDefaultEnvs(m *workerModel) {
20+
if m.Type != sdk.Docker {
21+
return
22+
}
23+
24+
if m.ModelDocker.Envs == nil {
25+
m.ModelDocker.Envs = make(map[string]string)
2226
}
2327
for envName := range defaultEnvs {
24-
if _, ok := envs[envName]; !ok {
25-
envs[envName] = defaultEnvs[envName]
28+
if _, ok := m.ModelDocker.Envs[envName]; !ok {
29+
m.ModelDocker.Envs[envName] = defaultEnvs[envName]
2630
}
2731
}
28-
29-
return envs
3032
}
3133

3234
const registryPasswordSecretName = "secrets.registry_password"
@@ -48,8 +50,6 @@ func replaceDockerRegistryPassword(db gorp.SqlExecutor, dbmodel *workerModel) (b
4850
return false, "", nil
4951
}
5052

51-
dbmodel.ModelDocker.Envs = MergeModelEnvsWithDefaultEnvs(dbmodel.ModelDocker.Envs)
52-
5353
// Password not changed
5454
if dbmodel.ModelDocker.Password == "{{."+registryPasswordSecretName+"}}" {
5555
return false, "", nil

0 commit comments

Comments
 (0)