Skip to content

Commit 3ba1425

Browse files
committed
New Resource: alicloud_oss_bucket_referer; New Resource: alicloud_oss_bucket_policy; New Resource: alicloud_oss_https_config.
1 parent 747199c commit 3ba1425

15 files changed

+1772
-2
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Requirements
1717
------------
1818

1919
- [Terraform](https://www.terraform.io/downloads.html) 0.12.x
20-
- [Go](https://golang.org/doc/install) 1.18 (to build the provider plugin)
20+
- [Go](https://golang.org/doc/install) 1.20 (to build the provider plugin)
2121
- [goimports](https://godoc.org/golang.org/x/tools/cmd/goimports):
2222
```
2323
go get golang.org/x/tools/cmd/goimports

alicloud/common.go

+26
Original file line numberDiff line numberDiff line change
@@ -1677,6 +1677,32 @@ func genXmlParam(action, method, version, path string) *openapi.Params {
16771677
}
16781678
}
16791679

1680+
func genJsonXmlParam(action, method, version, path string) *openapi.Params {
1681+
return &openapi.Params{
1682+
Action: tea.String(action),
1683+
Version: tea.String(version),
1684+
Protocol: tea.String("HTTPS"),
1685+
Pathname: tea.String(path),
1686+
Method: tea.String(method),
1687+
AuthType: tea.String("AK"),
1688+
ReqBodyType: tea.String("json"),
1689+
BodyType: tea.String("xml"),
1690+
}
1691+
}
1692+
1693+
func genXmlJsonParam(action, method, version, path string) *openapi.Params {
1694+
return &openapi.Params{
1695+
Action: tea.String(action),
1696+
Version: tea.String(version),
1697+
Protocol: tea.String("HTTPS"),
1698+
Pathname: tea.String(path),
1699+
Method: tea.String(method),
1700+
AuthType: tea.String("AK"),
1701+
ReqBodyType: tea.String("xml"),
1702+
BodyType: tea.String("json"),
1703+
}
1704+
}
1705+
16801706
type MyMap map[string]interface{}
16811707

16821708
type xmlMapEntry struct {

alicloud/provider.go

+3
Original file line numberDiff line numberDiff line change
@@ -864,6 +864,9 @@ func Provider() terraform.ResourceProvider {
864864
"alicloud_quotas_template_applications": dataSourceAliCloudQuotasTemplateApplications(),
865865
},
866866
ResourcesMap: map[string]*schema.Resource{
867+
"alicloud_oss_bucket_policy": resourceAliCloudOssBucketPolicy(),
868+
"alicloud_oss_bucket_https_config": resourceAliCloudOssBucketHttpsConfig(),
869+
"alicloud_oss_bucket_referer": resourceAliCloudOssBucketReferer(),
867870
"alicloud_oss_bucket_acl": resourceAliCloudOssBucketAcl(),
868871
"alicloud_wafv3_defense_template": resourceAliCloudWafv3DefenseTemplate(),
869872
"alicloud_dfs_vsc_mount_point": resourceAliCloudDfsVscMountPoint(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
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/PaesslerAG/jsonpath"
10+
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
11+
util "github.com/alibabacloud-go/tea-utils/v2/service"
12+
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
13+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
14+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
15+
)
16+
17+
func resourceAliCloudOssBucketHttpsConfig() *schema.Resource {
18+
return &schema.Resource{
19+
Create: resourceAliCloudOssBucketHttpsConfigCreate,
20+
Read: resourceAliCloudOssBucketHttpsConfigRead,
21+
Update: resourceAliCloudOssBucketHttpsConfigUpdate,
22+
Delete: resourceAliCloudOssBucketHttpsConfigDelete,
23+
Importer: &schema.ResourceImporter{
24+
State: schema.ImportStatePassthrough,
25+
},
26+
Timeouts: &schema.ResourceTimeout{
27+
Create: schema.DefaultTimeout(5 * time.Minute),
28+
Update: schema.DefaultTimeout(5 * time.Minute),
29+
Delete: schema.DefaultTimeout(5 * time.Minute),
30+
},
31+
Schema: map[string]*schema.Schema{
32+
"bucket": {
33+
Type: schema.TypeString,
34+
Required: true,
35+
ForceNew: true,
36+
},
37+
"enable": {
38+
Type: schema.TypeBool,
39+
Required: true,
40+
},
41+
"tls_versions": {
42+
Type: schema.TypeSet,
43+
Optional: true,
44+
Elem: &schema.Schema{Type: schema.TypeString},
45+
},
46+
},
47+
}
48+
}
49+
50+
func resourceAliCloudOssBucketHttpsConfigCreate(d *schema.ResourceData, meta interface{}) error {
51+
52+
client := meta.(*connectivity.AliyunClient)
53+
54+
action := fmt.Sprintf("/?httpsConfig")
55+
var request map[string]interface{}
56+
var response map[string]interface{}
57+
query := make(map[string]*string)
58+
body := make(map[string]interface{})
59+
hostMap := make(map[string]*string)
60+
conn, err := client.NewOssClient()
61+
if err != nil {
62+
return WrapError(err)
63+
}
64+
request = make(map[string]interface{})
65+
hostMap["bucket"] = StringPointer(d.Get("bucket").(string))
66+
67+
objectDataLocalMap := make(map[string]interface{})
68+
69+
tLS := make(map[string]interface{})
70+
nodeNative1, _ := jsonpath.Get("$", d.Get("tls_versions"))
71+
tLS["TLSVersion"] = make([]interface{}, 0)
72+
if nodeNative1 != nil && nodeNative1 != "" {
73+
tLS["TLSVersion"] = nodeNative1.(*schema.Set).List()
74+
}
75+
tLS["Enable"] = d.Get("enable")
76+
77+
objectDataLocalMap["TLS"] = tLS
78+
request["HttpsConfiguration"] = objectDataLocalMap
79+
body = request
80+
runtime := util.RuntimeOptions{}
81+
runtime.SetAutoretry(true)
82+
wait := incrementalWait(3*time.Second, 5*time.Second)
83+
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
84+
response, err = conn.Execute(genXmlParam("PutBucketHttpsConfig", "PUT", "2019-05-17", action), &openapi.OpenApiRequest{Query: query, Body: body, HostMap: hostMap}, &util.RuntimeOptions{})
85+
86+
if err != nil {
87+
if NeedRetry(err) {
88+
wait()
89+
return resource.RetryableError(err)
90+
}
91+
return resource.NonRetryableError(err)
92+
}
93+
addDebug(action, response, request)
94+
return nil
95+
})
96+
97+
if err != nil {
98+
return WrapErrorf(err, DefaultErrorMsg, "alicloud_oss_bucket_https_config", action, AlibabaCloudSdkGoERROR)
99+
}
100+
101+
d.SetId(fmt.Sprint(*hostMap["bucket"]))
102+
103+
return resourceAliCloudOssBucketHttpsConfigRead(d, meta)
104+
}
105+
106+
func resourceAliCloudOssBucketHttpsConfigRead(d *schema.ResourceData, meta interface{}) error {
107+
client := meta.(*connectivity.AliyunClient)
108+
ossServiceV2 := OssServiceV2{client}
109+
110+
objectRaw, err := ossServiceV2.DescribeOssBucketHttpsConfig(d.Id())
111+
if err != nil {
112+
if !d.IsNewResource() && NotFoundError(err) {
113+
log.Printf("[DEBUG] Resource alicloud_oss_bucket_https_config DescribeOssBucketHttpsConfig Failed!!! %s", err)
114+
d.SetId("")
115+
return nil
116+
}
117+
return WrapError(err)
118+
}
119+
120+
d.Set("enable", objectRaw["Enable"])
121+
122+
tLSVersion1Raw := make([]interface{}, 0)
123+
if objectRaw["TLSVersion"] != nil {
124+
tLSVersion1Raw = objectRaw["TLSVersion"].([]interface{})
125+
}
126+
if len(tLSVersion1Raw) > 0 {
127+
d.Set("tls_versions", tLSVersion1Raw)
128+
129+
}
130+
d.Set("bucket", d.Id())
131+
132+
return nil
133+
}
134+
135+
func resourceAliCloudOssBucketHttpsConfigUpdate(d *schema.ResourceData, meta interface{}) error {
136+
client := meta.(*connectivity.AliyunClient)
137+
var request map[string]interface{}
138+
var response map[string]interface{}
139+
var query map[string]*string
140+
var body map[string]interface{}
141+
update := false
142+
action := fmt.Sprintf("/?httpsConfig")
143+
conn, err := client.NewOssClient()
144+
if err != nil {
145+
return WrapError(err)
146+
}
147+
request = make(map[string]interface{})
148+
query = make(map[string]*string)
149+
body = make(map[string]interface{})
150+
hostMap := make(map[string]*string)
151+
hostMap["bucket"] = StringPointer(d.Id())
152+
objectDataLocalMap := make(map[string]interface{})
153+
154+
if d.HasChanges("enable", "tls_versions") {
155+
update = true
156+
}
157+
tLS := make(map[string]interface{})
158+
tLS["TLSVersion"] = make([]interface{}, 0)
159+
nodeNative1, _ := jsonpath.Get("$", d.Get("tls_versions"))
160+
if nodeNative1 != nil && nodeNative1 != "" {
161+
tLS["TLSVersion"] = nodeNative1.(*schema.Set).List()
162+
}
163+
tLS["Enable"] = d.Get("enable")
164+
165+
objectDataLocalMap["TLS"] = tLS
166+
request["HttpsConfiguration"] = objectDataLocalMap
167+
body = request
168+
if update {
169+
runtime := util.RuntimeOptions{}
170+
runtime.SetAutoretry(true)
171+
wait := incrementalWait(3*time.Second, 5*time.Second)
172+
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
173+
response, err = conn.Execute(genXmlParam("PutBucketHttpsConfig", "PUT", "2019-05-17", action), &openapi.OpenApiRequest{Query: query, Body: body, HostMap: hostMap}, &util.RuntimeOptions{})
174+
175+
if err != nil {
176+
if NeedRetry(err) {
177+
wait()
178+
return resource.RetryableError(err)
179+
}
180+
return resource.NonRetryableError(err)
181+
}
182+
addDebug(action, response, request)
183+
return nil
184+
})
185+
if err != nil {
186+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
187+
}
188+
}
189+
190+
return resourceAliCloudOssBucketHttpsConfigRead(d, meta)
191+
}
192+
193+
func resourceAliCloudOssBucketHttpsConfigDelete(d *schema.ResourceData, meta interface{}) error {
194+
log.Printf("[WARN] Cannot destroy resource AliCloud Resource Bucket Https Config. Terraform will remove this resource from the state file, however resources may remain.")
195+
return nil
196+
}

0 commit comments

Comments
 (0)