Skip to content

Commit 6354863

Browse files
committed
update structure of display_apps
1 parent f14f186 commit 6354863

File tree

3 files changed

+213
-36
lines changed

3 files changed

+213
-36
lines changed

provider/agent.go

Lines changed: 76 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,44 @@ func agentResource() *schema.Resource {
2323
if err != nil {
2424
return diag.FromErr(err)
2525
}
26+
27+
if _, ok := resourceData.GetOk("display_apps"); !ok {
28+
err = resourceData.Set("display_apps", []interface{}{
29+
map[string]bool{
30+
"vscode": true,
31+
"vscode_insiders": false,
32+
"web_terminal": true,
33+
"ssh_helper": true,
34+
"port_forwarding_helper": true,
35+
},
36+
})
37+
if err != nil {
38+
return diag.FromErr(err)
39+
}
40+
}
41+
2642
return updateInitScript(resourceData, i)
2743
},
2844
ReadWithoutTimeout: func(ctx context.Context, resourceData *schema.ResourceData, i interface{}) diag.Diagnostics {
2945
err := resourceData.Set("token", uuid.NewString())
3046
if err != nil {
3147
return diag.FromErr(err)
3248
}
49+
if _, ok := resourceData.GetOk("display_apps"); !ok {
50+
err = resourceData.Set("display_apps", []interface{}{
51+
map[string]bool{
52+
"vscode": true,
53+
"vscode_insiders": false,
54+
"web_terminal": true,
55+
"ssh_helper": true,
56+
"port_forwarding_helper": true,
57+
},
58+
})
59+
if err != nil {
60+
return diag.FromErr(err)
61+
}
62+
}
63+
3364
return updateInitScript(resourceData, i)
3465
},
3566
DeleteContext: func(ctx context.Context, resourceData *schema.ResourceData, i interface{}) diag.Diagnostics {
@@ -198,13 +229,51 @@ func agentResource() *schema.Resource {
198229
},
199230
},
200231
},
201-
"default_apps": {
202-
Type: schema.TypeList,
203-
Description: "The list of built-in apps to display in the UI. Defaults to all apps.",
204-
ForceNew: true,
205-
Optional: true,
206-
Elem: &schema.Schema{
207-
Type: schema.TypeString,
232+
"display_apps": {
233+
Type: schema.TypeSet,
234+
Description: "The list of built-in apps to display in the agent bar.",
235+
ForceNew: true,
236+
Optional: true,
237+
MaxItems: 1,
238+
Computed: true,
239+
Elem: &schema.Resource{
240+
Schema: map[string]*schema.Schema{
241+
"vscode": {
242+
Type: schema.TypeBool,
243+
Description: "Display the VSCode Desktop app in the agent bar.",
244+
ForceNew: true,
245+
Optional: true,
246+
Default: true,
247+
},
248+
"vscode_insiders": {
249+
Type: schema.TypeBool,
250+
Description: "Display the VSCode Insiders app in the agent bar.",
251+
ForceNew: true,
252+
Optional: true,
253+
Default: false,
254+
},
255+
"web_terminal": {
256+
Type: schema.TypeBool,
257+
Description: "Display the web terminal app in the agent bar.",
258+
ForceNew: true,
259+
Optional: true,
260+
Default: true,
261+
},
262+
"port_forwarding_helper": {
263+
Type: schema.TypeBool,
264+
Description: "Display port-forwarding helper button in the agent bar.",
265+
ForceNew: true,
266+
Optional: true,
267+
Default: true,
268+
},
269+
"ssh_helper": {
270+
Type: schema.TypeBool,
271+
Description: "Display port-forwarding helper button in the agent bar.",
272+
ForceNew: true,
273+
Optional: true,
274+
Default: true,
275+
},
276+
},
208277
},
209278
},
210279
},

provider/agent_test.go

Lines changed: 136 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -251,46 +251,154 @@ func TestAgent_Metadata(t *testing.T) {
251251

252252
func TestAgent_DefaultApps(t *testing.T) {
253253
t.Parallel()
254-
resource.Test(t, resource.TestCase{
255-
Providers: map[string]*schema.Provider{
256-
"coder": provider.New(),
257-
},
258-
IsUnitTest: true,
259-
Steps: []resource.TestStep{{
260-
Config: `
254+
t.Run("OK", func(t *testing.T) {
255+
resource.Test(t, resource.TestCase{
256+
Providers: map[string]*schema.Provider{
257+
"coder": provider.New(),
258+
},
259+
IsUnitTest: true,
260+
Steps: []resource.TestStep{{
261+
// Test the fields with non-default values.
262+
Config: `
261263
provider "coder" {
262264
url = "https://example.com"
263265
}
264266
resource "coder_agent" "dev" {
265267
os = "linux"
266268
arch = "amd64"
267-
default_apps = ["web-terminal", "vscode-desktop", "code-server", "port-forward"]
269+
display_apps {
270+
vscode = false
271+
vscode_insiders = true
272+
web_terminal = false
273+
port_forwarding_helper = false
274+
ssh_helper = false
275+
}
268276
}
269277
`,
270-
Check: func(state *terraform.State) error {
271-
require.Len(t, state.Modules, 1)
272-
require.Len(t, state.Modules[0].Resources, 1)
278+
Check: func(state *terraform.State) error {
279+
require.Len(t, state.Modules, 1)
280+
require.Len(t, state.Modules[0].Resources, 1)
273281

274-
resource := state.Modules[0].Resources["coder_agent.dev"]
275-
require.NotNil(t, resource)
282+
resource := state.Modules[0].Resources["coder_agent.dev"]
283+
require.NotNil(t, resource)
276284

277-
t.Logf("resource: %v", resource.Primary.Attributes)
285+
t.Logf("resource: %v", resource.Primary.Attributes)
278286

279-
numElements, ok := resource.Primary.Attributes["default_apps.#"]
280-
require.True(t, ok)
281-
require.Equal(t, "4", numElements)
287+
for _, app := range []string{
288+
"web_terminal",
289+
"vscode_insiders",
290+
"vscode",
291+
"port_forwarding_helper",
292+
"ssh_helper",
293+
} {
294+
key := fmt.Sprintf("display_apps.0.%s", app)
295+
if app == "vscode_insiders" {
296+
require.Equal(t, "true", resource.Primary.Attributes[key])
297+
} else {
298+
require.Equal(t, "false", resource.Primary.Attributes[key])
299+
}
300+
}
301+
return nil
302+
},
303+
}},
304+
})
282305

283-
for i, app := range []string{
284-
"web-terminal",
285-
"vscode-desktop",
286-
"code-server",
287-
"port-forward",
288-
} {
289-
key := fmt.Sprintf("default_apps.%d", i)
290-
require.Equal(t, resource.Primary.Attributes[key], app)
291-
}
292-
return nil
306+
})
307+
308+
// Assert all the defaults are set correctly.
309+
t.Run("Omitted", func(t *testing.T) {
310+
resource.Test(t, resource.TestCase{
311+
Providers: map[string]*schema.Provider{
312+
"coder": provider.New(),
293313
},
294-
}},
314+
IsUnitTest: true,
315+
Steps: []resource.TestStep{{
316+
Config: `
317+
provider "coder" {
318+
url = "https://example.com"
319+
}
320+
resource "coder_agent" "dev" {
321+
os = "linux"
322+
arch = "amd64"
323+
}
324+
`,
325+
Check: func(state *terraform.State) error {
326+
require.Len(t, state.Modules, 1)
327+
require.Len(t, state.Modules[0].Resources, 1)
328+
329+
resource := state.Modules[0].Resources["coder_agent.dev"]
330+
require.NotNil(t, resource)
331+
332+
t.Logf("resource: %v", resource.Primary.Attributes)
333+
334+
for _, app := range []string{
335+
"web_terminal",
336+
"vscode_insiders",
337+
"vscode",
338+
"port_forwarding_helper",
339+
"ssh_helper",
340+
} {
341+
key := fmt.Sprintf("display_apps.0.%s", app)
342+
if app == "vscode_insiders" {
343+
require.Equal(t, "false", resource.Primary.Attributes[key])
344+
} else {
345+
require.Equal(t, "true", resource.Primary.Attributes[key])
346+
}
347+
}
348+
return nil
349+
},
350+
}},
351+
})
352+
})
353+
354+
t.Run("Empty", func(t *testing.T) {
355+
resource.Test(t, resource.TestCase{
356+
Providers: map[string]*schema.Provider{
357+
"coder": provider.New(),
358+
},
359+
IsUnitTest: true,
360+
Steps: []resource.TestStep{{
361+
Config: `
362+
provider "coder" {
363+
url = "https://example.com"
364+
}
365+
resource "coder_agent" "dev" {
366+
os = "linux"
367+
arch = "amd64"
368+
display_apps {
369+
vscode = false
370+
}
371+
}
372+
`,
373+
Check: func(state *terraform.State) error {
374+
require.Len(t, state.Modules, 1)
375+
require.Len(t, state.Modules[0].Resources, 1)
376+
377+
resource := state.Modules[0].Resources["coder_agent.dev"]
378+
require.NotNil(t, resource)
379+
380+
t.Logf("resource: %v", resource.Primary.Attributes)
381+
382+
for _, app := range []string{
383+
"web_terminal",
384+
"vscode_insiders",
385+
"vscode",
386+
"port_forwarding_helper",
387+
"ssh_helper",
388+
} {
389+
key := fmt.Sprintf("display_apps.0.%s", app)
390+
if app == "vscode_insiders" {
391+
require.Equal(t, "false", resource.Primary.Attributes[key])
392+
} else {
393+
require.Equal(t, "true", resource.Primary.Attributes[key])
394+
}
395+
}
396+
397+
return nil
398+
},
399+
}},
400+
})
401+
295402
})
403+
296404
}

provider/workspace.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ func workspaceDataSource() *schema.Resource {
137137
"owner_session_token": {
138138
Type: schema.TypeString,
139139
Computed: true,
140-
Description: "Session token for interfacing with a Coder deployment. It is regenerated everytime a workspace is started.",
140+
Description: "Session token for authenticating with a Coder deployment. It is regenerated everytime a workspace is started.",
141141
},
142142
},
143143
}

0 commit comments

Comments
 (0)