Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit041e000

Browse files
authored
feat: support workspace tags (#223)
1 parent8fa0fbf commit041e000

File tree

5 files changed

+153
-16
lines changed

5 files changed

+153
-16
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
provider"coder" {}
2+
3+
data"coder_parameter""os_selector" {
4+
name="os_selector"
5+
display_name="Operating System"
6+
mutable=false
7+
8+
default="osx"
9+
10+
option {
11+
icon="/icons/linux.png"
12+
name="Linux"
13+
value="linux"
14+
}
15+
option {
16+
icon="/icons/osx.png"
17+
name="OSX"
18+
value="osx"
19+
}
20+
option {
21+
icon="/icons/windows.png"
22+
name="Windows"
23+
value="windows"
24+
}
25+
}
26+
27+
data"coder_parameter""feature_cache_enabled" {
28+
name="feature_cache_enabled"
29+
display_name="Enable cache?"
30+
type="bool"
31+
32+
default=false
33+
}
34+
35+
data"coder_parameter""feature_debug_enabled" {
36+
name="feature_debug_enabled"
37+
display_name="Enable debug?"
38+
type="bool"
39+
40+
default=true
41+
}
42+
43+
data"coder_workspace_tags""custom_workspace_tags" {
44+
tags={
45+
"cluster"="developers"
46+
"os"= data.coder_parameter.os_selector.value
47+
"debug"="${data.coder_parameter.feature_debug_enabled.value}+12345"
48+
"cache"= data.coder_parameter.feature_cache_enabled.value=="true"?"nix-with-cache":"no-cache"
49+
}
50+
}

‎provider/examples_test.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,25 @@ import (
1414
funcTestExamples(t*testing.T) {
1515
t.Parallel()
1616

17-
t.Run("coder_parameter",func(t*testing.T) {
18-
t.Parallel()
17+
for_,testDir:=range []string{
18+
"coder_parameter",
19+
"coder_workspace_tags",
20+
} {
21+
t.Run(testDir,func(t*testing.T) {
22+
testDir:=testDir
23+
t.Parallel()
1924

20-
resource.Test(t, resource.TestCase{
21-
Providers:map[string]*schema.Provider{
22-
"coder":provider.New(),
23-
},
24-
IsUnitTest:true,
25-
Steps: []resource.TestStep{{
26-
Config:mustReadFile(t,"../examples/resources/coder_parameter/resource.tf"),
27-
}},
25+
resource.Test(t, resource.TestCase{
26+
Providers:map[string]*schema.Provider{
27+
"coder":provider.New(),
28+
},
29+
IsUnitTest:true,
30+
Steps: []resource.TestStep{{
31+
Config:mustReadFile(t,"../examples/resources/"+testDir+"/resource.tf"),
32+
}},
33+
})
2834
})
29-
})
35+
}
3036
}
3137

3238
funcmustReadFile(t*testing.T,pathstring)string {

‎provider/provider.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,12 @@ func New() *schema.Provider {
6868
},nil
6969
},
7070
DataSourcesMap:map[string]*schema.Resource{
71-
"coder_workspace":workspaceDataSource(),
72-
"coder_provisioner":provisionerDataSource(),
73-
"coder_parameter":parameterDataSource(),
74-
"coder_git_auth":gitAuthDataSource(),
75-
"coder_external_auth":externalAuthDataSource(),
71+
"coder_workspace":workspaceDataSource(),
72+
"coder_workspace_tags":workspaceTagDataSource(),
73+
"coder_provisioner":provisionerDataSource(),
74+
"coder_parameter":parameterDataSource(),
75+
"coder_git_auth":gitAuthDataSource(),
76+
"coder_external_auth":externalAuthDataSource(),
7677
},
7778
ResourcesMap:map[string]*schema.Resource{
7879
"coder_agent":agentResource(),

‎provider/workspace_tags.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package provider
2+
3+
import (
4+
"context"
5+
6+
"github.com/google/uuid"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
)
10+
11+
typeWorkspaceTagsstruct {
12+
Tagsmap[string]string
13+
}
14+
15+
funcworkspaceTagDataSource()*schema.Resource {
16+
return&schema.Resource{
17+
Description:"Use this data source to configure workspace tags to select provisioners.",
18+
ReadContext:func(ctx context.Context,rd*schema.ResourceData,iinterface{}) diag.Diagnostics {
19+
rd.SetId(uuid.NewString())
20+
returnnil
21+
},
22+
Schema:map[string]*schema.Schema{
23+
"tags": {
24+
Type:schema.TypeMap,
25+
Description:`Key-value map with workspace tags`,
26+
ForceNew:true,
27+
Optional:true,
28+
Elem:&schema.Schema{Type:schema.TypeString},
29+
},
30+
},
31+
}
32+
}

‎provider/workspace_tags_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package provider_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
9+
"github.com/stretchr/testify/require"
10+
11+
"github.com/coder/terraform-provider-coder/provider"
12+
)
13+
14+
funcTestWorkspaceTags(t*testing.T) {
15+
resource.Test(t, resource.TestCase{
16+
Providers:map[string]*schema.Provider{
17+
"coder":provider.New(),
18+
},
19+
IsUnitTest:true,
20+
Steps: []resource.TestStep{{
21+
Config:`
22+
provider "coder" {
23+
}
24+
data "coder_parameter" "animal" {
25+
name = "animal"
26+
type = "string"
27+
default = "chris"
28+
}
29+
data "coder_workspace_tags" "wt" {
30+
tags = {
31+
"cat" = "james"
32+
"dog" = data.coder_parameter.animal.value
33+
}
34+
}`,
35+
Check:func(state*terraform.State)error {
36+
require.Len(t,state.Modules,1)
37+
require.Len(t,state.Modules[0].Resources,2)
38+
resource:=state.Modules[0].Resources["data.coder_workspace_tags.wt"]
39+
require.NotNil(t,resource)
40+
41+
attribs:=resource.Primary.Attributes
42+
require.Equal(t,"james",attribs["tags.cat"])
43+
require.Equal(t,"chris",attribs["tags.dog"])
44+
returnnil
45+
},
46+
}},
47+
})
48+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp