Skip to content

Commit 6d585ed

Browse files
committed
New Resource: alicloud_cloud_firewall_ips_config.
1 parent 736a745 commit 6d585ed

5 files changed

+393
-0
lines changed

alicloud/provider.go

+1
Original file line numberDiff line numberDiff line change
@@ -892,6 +892,7 @@ func Provider() terraform.ResourceProvider {
892892
},
893893
ResourcesMap: map[string]*schema.Resource{
894894
"alicloud_esa_https_basic_configuration": resourceAliCloudEsaHttpsBasicConfiguration(),
895+
"alicloud_cloud_firewall_ips_config": resourceAliCloudCloudFirewallIPSConfig(),
895896
"alicloud_vpc_ipam_ipam_resource_discovery": resourceAliCloudVpcIpamIpamResourceDiscovery(),
896897
"alicloud_cloud_phone_image": resourceAliCloudCloudPhoneImage(),
897898
"alicloud_cloud_phone_key_pair": resourceAliCloudCloudPhoneKeyPair(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you!
2+
package alicloud
3+
4+
import (
5+
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
7+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
8+
"log"
9+
"time"
10+
)
11+
12+
func resourceAliCloudCloudFirewallIPSConfig() *schema.Resource {
13+
return &schema.Resource{
14+
Create: resourceAliCloudCloudFirewallIPSConfigCreate,
15+
Read: resourceAliCloudCloudFirewallIPSConfigRead,
16+
Update: resourceAliCloudCloudFirewallIPSConfigUpdate,
17+
Delete: resourceAliCloudCloudFirewallIPSConfigDelete,
18+
Importer: &schema.ResourceImporter{
19+
State: schema.ImportStatePassthrough,
20+
},
21+
Timeouts: &schema.ResourceTimeout{
22+
Create: schema.DefaultTimeout(5 * time.Minute),
23+
Update: schema.DefaultTimeout(5 * time.Minute),
24+
Delete: schema.DefaultTimeout(5 * time.Minute),
25+
},
26+
Schema: map[string]*schema.Schema{
27+
"basic_rules": {
28+
Type: schema.TypeInt,
29+
Optional: true,
30+
},
31+
"cti_rules": {
32+
Type: schema.TypeInt,
33+
Optional: true,
34+
},
35+
"lang": {
36+
Type: schema.TypeString,
37+
Optional: true,
38+
},
39+
"max_sdl": {
40+
Type: schema.TypeInt,
41+
Optional: true,
42+
},
43+
"patch_rules": {
44+
Type: schema.TypeInt,
45+
Optional: true,
46+
},
47+
"rule_class": {
48+
Type: schema.TypeInt,
49+
Optional: true,
50+
},
51+
"run_mode": {
52+
Type: schema.TypeInt,
53+
Optional: true,
54+
},
55+
},
56+
}
57+
}
58+
59+
func resourceAliCloudCloudFirewallIPSConfigCreate(d *schema.ResourceData, meta interface{}) error {
60+
accountId, err := meta.(*connectivity.AliyunClient).AccountId()
61+
if err != nil {
62+
return err
63+
}
64+
d.SetId(accountId)
65+
return resourceAliCloudCloudFirewallIPSConfigUpdate(d, meta)
66+
}
67+
68+
func resourceAliCloudCloudFirewallIPSConfigRead(d *schema.ResourceData, meta interface{}) error {
69+
client := meta.(*connectivity.AliyunClient)
70+
cloudFirewallServiceV2 := CloudFirewallServiceV2{client}
71+
72+
objectRaw, err := cloudFirewallServiceV2.DescribeCloudFirewallIPSConfig(d.Id())
73+
if err != nil {
74+
if !d.IsNewResource() && NotFoundError(err) {
75+
log.Printf("[DEBUG] Resource alicloud_cloud_firewall_ips_config DescribeCloudFirewallIPSConfig Failed!!! %s", err)
76+
d.SetId("")
77+
return nil
78+
}
79+
return WrapError(err)
80+
}
81+
82+
d.Set("basic_rules", objectRaw["BasicRules"])
83+
d.Set("cti_rules", objectRaw["CtiRules"])
84+
d.Set("max_sdl", objectRaw["MaxSdl"])
85+
d.Set("patch_rules", objectRaw["PatchRules"])
86+
d.Set("rule_class", objectRaw["RuleClass"])
87+
d.Set("run_mode", objectRaw["RunMode"])
88+
89+
return nil
90+
}
91+
92+
func resourceAliCloudCloudFirewallIPSConfigUpdate(d *schema.ResourceData, meta interface{}) error {
93+
client := meta.(*connectivity.AliyunClient)
94+
var request map[string]interface{}
95+
var response map[string]interface{}
96+
var query map[string]interface{}
97+
update := false
98+
99+
var err error
100+
action := "ModifyDefaultIPSConfig"
101+
request = make(map[string]interface{})
102+
query = make(map[string]interface{})
103+
104+
if d.HasChange("cti_rules") {
105+
update = true
106+
}
107+
if v, ok := d.GetOk("cti_rules"); ok || (d.IsNewResource() || d.HasChange("cti_rules")) {
108+
query["CtiRules"] = v
109+
}
110+
if d.HasChange("patch_rules") {
111+
update = true
112+
}
113+
if v, ok := d.GetOk("patch_rules"); ok || (d.IsNewResource() || d.HasChange("patch_rules")) {
114+
query["PatchRules"] = v
115+
}
116+
if v, ok := d.GetOk("lang"); ok {
117+
query["Lang"] = v
118+
}
119+
if d.HasChange("basic_rules") {
120+
update = true
121+
}
122+
if v, ok := d.GetOk("basic_rules"); ok || (d.IsNewResource() || d.HasChange("basic_rules")) {
123+
query["BasicRules"] = v
124+
}
125+
if d.HasChange("run_mode") {
126+
update = true
127+
}
128+
query["RunMode"] = d.Get("run_mode")
129+
if d.HasChange("max_sdl") {
130+
update = true
131+
}
132+
if v, ok := d.GetOk("max_sdl"); ok || (d.IsNewResource() || d.HasChange("max_sdl")) {
133+
query["MaxSdl"] = v
134+
}
135+
if d.HasChange("rule_class") {
136+
update = true
137+
}
138+
if v, ok := d.GetOk("rule_class"); ok || (d.IsNewResource() || d.HasChange("rule_class")) {
139+
query["RuleClass"] = v
140+
}
141+
if update {
142+
wait := incrementalWait(3*time.Second, 5*time.Second)
143+
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
144+
response, err = client.RpcGet("Cloudfw", "2017-12-07", action, query, request)
145+
if err != nil {
146+
if NeedRetry(err) {
147+
wait()
148+
return resource.RetryableError(err)
149+
}
150+
return resource.NonRetryableError(err)
151+
}
152+
return nil
153+
})
154+
addDebug(action, response, request)
155+
if err != nil {
156+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
157+
}
158+
}
159+
160+
return resourceAliCloudCloudFirewallIPSConfigRead(d, meta)
161+
}
162+
163+
func resourceAliCloudCloudFirewallIPSConfigDelete(d *schema.ResourceData, meta interface{}) error {
164+
log.Printf("[WARN] Cannot destroy resource AliCloud Resource I P S Config. Terraform will remove this resource from the state file, however resources may remain.")
165+
return nil
166+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package alicloud
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
8+
"github.com/hashicorp/terraform-plugin-sdk/helper/acctest"
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
10+
)
11+
12+
// Test CloudFirewall IPSConfig. >>> Resource test cases, automatically generated.
13+
// Case 修改IPS拦截模式 10240
14+
func TestAccAliCloudCloudFirewallIPSConfig_basic10240(t *testing.T) {
15+
var v map[string]interface{}
16+
resourceId := "alicloud_cloud_firewall_ips_config.default"
17+
ra := resourceAttrInit(resourceId, AlicloudCloudFirewallIPSConfigMap10240)
18+
rc := resourceCheckInitWithDescribeMethod(resourceId, &v, func() interface{} {
19+
return &CloudFirewallServiceV2{testAccProvider.Meta().(*connectivity.AliyunClient)}
20+
}, "DescribeCloudFirewallIPSConfig")
21+
rac := resourceAttrCheckInit(rc, ra)
22+
testAccCheck := rac.resourceAttrMapUpdateSet()
23+
rand := acctest.RandIntRange(10000, 99999)
24+
name := fmt.Sprintf("tfacccloudfirewall%d", rand)
25+
testAccConfig := resourceTestAccConfigFunc(resourceId, name, AlicloudCloudFirewallIPSConfigBasicDependence10240)
26+
resource.Test(t, resource.TestCase{
27+
PreCheck: func() {
28+
testAccPreCheck(t)
29+
},
30+
IDRefreshName: resourceId,
31+
Providers: testAccProviders,
32+
Steps: []resource.TestStep{
33+
{
34+
Config: testAccConfig(map[string]interface{}{
35+
"max_sdl": "0",
36+
"basic_rules": "1",
37+
"run_mode": "1",
38+
"cti_rules": "0",
39+
"patch_rules": "0",
40+
"rule_class": "1",
41+
"lang": "zh",
42+
}),
43+
Check: resource.ComposeTestCheckFunc(
44+
testAccCheck(map[string]string{
45+
"max_sdl": "0",
46+
"basic_rules": "1",
47+
"run_mode": "1",
48+
"cti_rules": "0",
49+
"patch_rules": "0",
50+
"rule_class": "1",
51+
"lang": "zh",
52+
}),
53+
),
54+
},
55+
{
56+
ResourceName: resourceId,
57+
ImportState: true,
58+
ImportStateVerify: true,
59+
ImportStateVerifyIgnore: []string{"lang"},
60+
},
61+
},
62+
})
63+
}
64+
65+
var AlicloudCloudFirewallIPSConfigMap10240 = map[string]string{}
66+
67+
func AlicloudCloudFirewallIPSConfigBasicDependence10240(name string) string {
68+
return fmt.Sprintf(`
69+
variable "name" {
70+
default = "%s"
71+
}
72+
73+
74+
`, name)
75+
}
76+
77+
// Test CloudFirewall IPSConfig. <<< Resource test cases, automatically generated.

alicloud/service_alicloud_cloud_firewall_v2.go

+63
Original file line numberDiff line numberDiff line change
@@ -309,3 +309,66 @@ func (s *CloudFirewallServiceV2) DescribeCloudFirewallControlPolicy(id string) (
309309

310310
// Async Api <<< Encapsulated for CloudFirewall.
311311
// Async Api >>> Encapsulated.
312+
// DescribeCloudFirewallIPSConfig <<< Encapsulated get interface for CloudFirewall IPSConfig.
313+
314+
func (s *CloudFirewallServiceV2) DescribeCloudFirewallIPSConfig(id string) (object map[string]interface{}, err error) {
315+
client := s.client
316+
var request map[string]interface{}
317+
var response map[string]interface{}
318+
var query map[string]interface{}
319+
request = make(map[string]interface{})
320+
query = make(map[string]interface{})
321+
322+
action := "DescribeDefaultIPSConfig"
323+
324+
wait := incrementalWait(3*time.Second, 5*time.Second)
325+
err = resource.Retry(1*time.Minute, func() *resource.RetryError {
326+
response, err = client.RpcPost("Cloudfw", "2017-12-07", action, query, request, true)
327+
328+
if err != nil {
329+
if NeedRetry(err) {
330+
wait()
331+
return resource.RetryableError(err)
332+
}
333+
return resource.NonRetryableError(err)
334+
}
335+
return nil
336+
})
337+
addDebug(action, response, request)
338+
if err != nil {
339+
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
340+
}
341+
342+
return response, nil
343+
}
344+
345+
func (s *CloudFirewallServiceV2) CloudFirewallIPSConfigStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc {
346+
return func() (interface{}, string, error) {
347+
object, err := s.DescribeCloudFirewallIPSConfig(id)
348+
if err != nil {
349+
if NotFoundError(err) {
350+
return object, "", nil
351+
}
352+
return nil, "", WrapError(err)
353+
}
354+
355+
v, err := jsonpath.Get(field, object)
356+
currentStatus := fmt.Sprint(v)
357+
358+
if strings.HasPrefix(field, "#") {
359+
v, _ := jsonpath.Get(strings.TrimPrefix(field, "#"), object)
360+
if v != nil {
361+
currentStatus = "#CHECKSET"
362+
}
363+
}
364+
365+
for _, failState := range failStates {
366+
if currentStatus == failState {
367+
return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus))
368+
}
369+
}
370+
return object, currentStatus, nil
371+
}
372+
}
373+
374+
// DescribeCloudFirewallIPSConfig >>> Encapsulated.

0 commit comments

Comments
 (0)