Skip to content

Commit 9017bbd

Browse files
authored
Merge pull request #9658 from MrWolong/ncws
New Resource: alicloud_cms_workspace
2 parents a0195db + be1b935 commit 9017bbd

5 files changed

Lines changed: 505 additions & 0 deletions

File tree

alicloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -916,6 +916,7 @@ func Provider() terraform.ResourceProvider {
916916
"alicloud_vpc_ipam_ipams": dataSourceAliCloudVpcIpamIpams(),
917917
},
918918
ResourcesMap: map[string]*schema.Resource{
919+
"alicloud_cms_workspace": resourceAliCloudCmsWorkspace(),
919920
"alicloud_cloud_firewall_vpc_firewall_control_policy_order": resourceAliCloudCloudFirewallVpcFirewallControlPolicyOrder(),
920921
"alicloud_cloud_firewall_nat_firewall_control_policy_order": resourceAliCloudCloudFirewallNatFirewallControlPolicyOrder(),
921922
"alicloud_rds_custom_disk_attachment": resourceAliCloudRdsCustomDiskAttachment(),
Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,211 @@
1+
// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you!
2+
package alicloud
3+
4+
import (
5+
"fmt"
6+
"log"
7+
"time"
8+
9+
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
10+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
11+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
12+
)
13+
14+
func resourceAliCloudCmsWorkspace() *schema.Resource {
15+
return &schema.Resource{
16+
Create: resourceAliCloudCmsWorkspaceCreate,
17+
Read: resourceAliCloudCmsWorkspaceRead,
18+
Update: resourceAliCloudCmsWorkspaceUpdate,
19+
Delete: resourceAliCloudCmsWorkspaceDelete,
20+
Importer: &schema.ResourceImporter{
21+
State: schema.ImportStatePassthrough,
22+
},
23+
Timeouts: &schema.ResourceTimeout{
24+
Create: schema.DefaultTimeout(5 * time.Minute),
25+
Update: schema.DefaultTimeout(5 * time.Minute),
26+
Delete: schema.DefaultTimeout(5 * time.Minute),
27+
},
28+
Schema: map[string]*schema.Schema{
29+
"create_time": {
30+
Type: schema.TypeString,
31+
Computed: true,
32+
},
33+
"description": {
34+
Type: schema.TypeString,
35+
Optional: true,
36+
},
37+
"display_name": {
38+
Type: schema.TypeString,
39+
Optional: true,
40+
},
41+
"region_id": {
42+
Type: schema.TypeString,
43+
Computed: true,
44+
},
45+
"sls_project": {
46+
Type: schema.TypeString,
47+
Required: true,
48+
ForceNew: true,
49+
},
50+
"workspace_name": {
51+
Type: schema.TypeString,
52+
Required: true,
53+
ForceNew: true,
54+
},
55+
},
56+
}
57+
}
58+
59+
func resourceAliCloudCmsWorkspaceCreate(d *schema.ResourceData, meta interface{}) error {
60+
61+
client := meta.(*connectivity.AliyunClient)
62+
63+
workspaceName := d.Get("workspace_name")
64+
action := fmt.Sprintf("/workspace/%s", workspaceName)
65+
var request map[string]interface{}
66+
var response map[string]interface{}
67+
query := make(map[string]*string)
68+
body := make(map[string]interface{})
69+
var err error
70+
request = make(map[string]interface{})
71+
72+
if v, ok := d.GetOk("description"); ok {
73+
request["description"] = v
74+
}
75+
request["slsProject"] = d.Get("sls_project")
76+
if v, ok := d.GetOk("display_name"); ok {
77+
request["displayName"] = v
78+
}
79+
body = request
80+
wait := incrementalWait(3*time.Second, 0*time.Second)
81+
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
82+
response, err = client.RoaPost("Cms", "2024-03-30", action, query, nil, body, true)
83+
if err != nil {
84+
if NeedRetry(err) {
85+
wait()
86+
return resource.RetryableError(err)
87+
}
88+
return resource.NonRetryableError(err)
89+
}
90+
return nil
91+
})
92+
addDebug(action, response, request)
93+
94+
if err != nil {
95+
return WrapErrorf(err, DefaultErrorMsg, "alicloud_cms_workspace", action, AlibabaCloudSdkGoERROR)
96+
}
97+
98+
d.SetId(fmt.Sprint(response["workspaceName"]))
99+
100+
return resourceAliCloudCmsWorkspaceRead(d, meta)
101+
}
102+
103+
func resourceAliCloudCmsWorkspaceRead(d *schema.ResourceData, meta interface{}) error {
104+
client := meta.(*connectivity.AliyunClient)
105+
cmsServiceV2 := CmsServiceV2{client}
106+
107+
objectRaw, err := cmsServiceV2.DescribeCmsWorkspace(d.Id())
108+
if err != nil {
109+
if !d.IsNewResource() && NotFoundError(err) {
110+
log.Printf("[DEBUG] Resource alicloud_cms_workspace DescribeCmsWorkspace Failed!!! %s", err)
111+
d.SetId("")
112+
return nil
113+
}
114+
return WrapError(err)
115+
}
116+
117+
d.Set("create_time", objectRaw["createTime"])
118+
d.Set("description", objectRaw["description"])
119+
d.Set("display_name", objectRaw["displayName"])
120+
d.Set("region_id", objectRaw["regionId"])
121+
d.Set("sls_project", objectRaw["slsProject"])
122+
d.Set("workspace_name", objectRaw["workspaceName"])
123+
124+
return nil
125+
}
126+
127+
func resourceAliCloudCmsWorkspaceUpdate(d *schema.ResourceData, meta interface{}) error {
128+
client := meta.(*connectivity.AliyunClient)
129+
var request map[string]interface{}
130+
var response map[string]interface{}
131+
var query map[string]*string
132+
var body map[string]interface{}
133+
update := false
134+
135+
var err error
136+
workspaceName := d.Id()
137+
action := fmt.Sprintf("/workspace/%s", workspaceName)
138+
request = make(map[string]interface{})
139+
query = make(map[string]*string)
140+
body = make(map[string]interface{})
141+
142+
if d.HasChange("description") {
143+
update = true
144+
}
145+
if v, ok := d.GetOk("description"); ok || d.HasChange("description") {
146+
request["description"] = v
147+
}
148+
request["slsProject"] = d.Get("sls_project")
149+
if d.HasChange("display_name") {
150+
update = true
151+
}
152+
if v, ok := d.GetOk("display_name"); ok || d.HasChange("display_name") {
153+
request["displayName"] = v
154+
}
155+
body = request
156+
if update {
157+
wait := incrementalWait(3*time.Second, 0*time.Second)
158+
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
159+
response, err = client.RoaPost("Cms", "2024-03-30", action, query, nil, body, true)
160+
if err != nil {
161+
if NeedRetry(err) {
162+
wait()
163+
return resource.RetryableError(err)
164+
}
165+
return resource.NonRetryableError(err)
166+
}
167+
return nil
168+
})
169+
addDebug(action, response, request)
170+
if err != nil {
171+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
172+
}
173+
}
174+
175+
return resourceAliCloudCmsWorkspaceRead(d, meta)
176+
}
177+
178+
func resourceAliCloudCmsWorkspaceDelete(d *schema.ResourceData, meta interface{}) error {
179+
180+
client := meta.(*connectivity.AliyunClient)
181+
workspaceName := d.Id()
182+
action := fmt.Sprintf("/workspace/%s", workspaceName)
183+
var request map[string]interface{}
184+
var response map[string]interface{}
185+
query := make(map[string]*string)
186+
var err error
187+
request = make(map[string]interface{})
188+
189+
wait := incrementalWait(3*time.Second, 0*time.Second)
190+
err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
191+
response, err = client.RoaDelete("Cms", "2024-03-30", action, query, nil, nil, true)
192+
if err != nil {
193+
if NeedRetry(err) {
194+
wait()
195+
return resource.RetryableError(err)
196+
}
197+
return resource.NonRetryableError(err)
198+
}
199+
return nil
200+
})
201+
addDebug(action, response, request)
202+
203+
if err != nil {
204+
if IsExpectedErrors(err, []string{"WorkspaceNotExist"}) || NotFoundError(err) {
205+
return nil
206+
}
207+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
208+
}
209+
210+
return nil
211+
}
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you!
2+
package alicloud
3+
4+
import (
5+
"fmt"
6+
"testing"
7+
8+
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/acctest"
10+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
11+
)
12+
13+
// Test Cms Workspace. >>> Resource test cases, automatically generated.
14+
// Case Umodel资源测试 8476
15+
func TestAccAliCloudCmsWorkspace_basic8476(t *testing.T) {
16+
var v map[string]interface{}
17+
resourceId := "alicloud_cms_workspace.default"
18+
ra := resourceAttrInit(resourceId, AliCloudCmsWorkspaceMap8476)
19+
rc := resourceCheckInitWithDescribeMethod(resourceId, &v, func() interface{} {
20+
return &CmsServiceV2{testAccProvider.Meta().(*connectivity.AliyunClient)}
21+
}, "DescribeCmsWorkspace")
22+
rac := resourceAttrCheckInit(rc, ra)
23+
testAccCheck := rac.resourceAttrMapUpdateSet()
24+
rand := acctest.RandIntRange(10000, 99999)
25+
name := fmt.Sprintf("tfacccms%d", rand)
26+
testAccConfig := resourceTestAccConfigFunc(resourceId, name, AliCloudCmsWorkspaceBasicDependence8476)
27+
resource.Test(t, resource.TestCase{
28+
PreCheck: func() {
29+
testAccPreCheck(t)
30+
},
31+
IDRefreshName: resourceId,
32+
Providers: testAccProviders,
33+
CheckDestroy: rac.checkResourceDestroy(),
34+
Steps: []resource.TestStep{
35+
{
36+
Config: testAccConfig(map[string]interface{}{
37+
"sls_project": "${alicloud_log_project.default.project_name}",
38+
"workspace_name": name,
39+
}),
40+
Check: resource.ComposeTestCheckFunc(
41+
testAccCheck(map[string]string{
42+
"sls_project": CHECKSET,
43+
"workspace_name": name,
44+
}),
45+
),
46+
},
47+
{
48+
Config: testAccConfig(map[string]interface{}{
49+
"display_name": name,
50+
}),
51+
Check: resource.ComposeTestCheckFunc(
52+
testAccCheck(map[string]string{
53+
"display_name": name,
54+
}),
55+
),
56+
},
57+
{
58+
Config: testAccConfig(map[string]interface{}{
59+
"description": name,
60+
}),
61+
Check: resource.ComposeTestCheckFunc(
62+
testAccCheck(map[string]string{
63+
"description": name,
64+
}),
65+
),
66+
},
67+
{
68+
ResourceName: resourceId,
69+
ImportState: true,
70+
ImportStateVerify: true,
71+
ImportStateVerifyIgnore: []string{},
72+
},
73+
},
74+
})
75+
}
76+
77+
func TestAccAliCloudCmsWorkspace_basic8476_twin(t *testing.T) {
78+
var v map[string]interface{}
79+
resourceId := "alicloud_cms_workspace.default"
80+
ra := resourceAttrInit(resourceId, AliCloudCmsWorkspaceMap8476)
81+
rc := resourceCheckInitWithDescribeMethod(resourceId, &v, func() interface{} {
82+
return &CmsServiceV2{testAccProvider.Meta().(*connectivity.AliyunClient)}
83+
}, "DescribeCmsWorkspace")
84+
rac := resourceAttrCheckInit(rc, ra)
85+
testAccCheck := rac.resourceAttrMapUpdateSet()
86+
rand := acctest.RandIntRange(10000, 99999)
87+
name := fmt.Sprintf("tfacccms%d", rand)
88+
testAccConfig := resourceTestAccConfigFunc(resourceId, name, AliCloudCmsWorkspaceBasicDependence8476)
89+
resource.Test(t, resource.TestCase{
90+
PreCheck: func() {
91+
testAccPreCheck(t)
92+
},
93+
IDRefreshName: resourceId,
94+
Providers: testAccProviders,
95+
CheckDestroy: rac.checkResourceDestroy(),
96+
Steps: []resource.TestStep{
97+
{
98+
Config: testAccConfig(map[string]interface{}{
99+
"sls_project": "${alicloud_log_project.default.project_name}",
100+
"workspace_name": name,
101+
"display_name": name,
102+
"description": name,
103+
}),
104+
Check: resource.ComposeTestCheckFunc(
105+
testAccCheck(map[string]string{
106+
"sls_project": CHECKSET,
107+
"workspace_name": name,
108+
"display_name": name,
109+
"description": name,
110+
}),
111+
),
112+
},
113+
{
114+
ResourceName: resourceId,
115+
ImportState: true,
116+
ImportStateVerify: true,
117+
ImportStateVerifyIgnore: []string{},
118+
},
119+
},
120+
})
121+
}
122+
123+
var AliCloudCmsWorkspaceMap8476 = map[string]string{
124+
"create_time": CHECKSET,
125+
"region_id": CHECKSET,
126+
}
127+
128+
func AliCloudCmsWorkspaceBasicDependence8476(name string) string {
129+
return fmt.Sprintf(`
130+
variable "name" {
131+
default = "%s"
132+
}
133+
134+
resource "alicloud_log_project" "default" {
135+
project_name = var.name
136+
}
137+
`, name)
138+
}
139+
140+
// Test Cms Workspace. <<< Resource test cases, automatically generated.

0 commit comments

Comments
 (0)