Skip to content

Commit

Permalink
resource/alicloud_nas_access_rule: add new attribute ipv6_source_cidr…
Browse files Browse the repository at this point in the history
…_ip; resource/alicloud_nas_access_group: optimized code implementation.
  • Loading branch information
ChenHanZhang committed Mar 4, 2024
1 parent fc11d42 commit 08ad855
Show file tree
Hide file tree
Showing 9 changed files with 1,488 additions and 264 deletions.
1 change: 1 addition & 0 deletions alicloud/connectivity/regions.go
Original file line number Diff line number Diff line change
Expand Up @@ -289,3 +289,4 @@ var VPNSupportRegions = []Region{Huhehaote}
var VPNSingleConnectRegions = []Region{MEEast1}
var DdosBgpRegions = []Region{Beijing}
var EcsDedicatedHostRegions = []Region{Hangzhou}
var NasExtremeTypeRegions = []Region{Hangzhou}
4 changes: 2 additions & 2 deletions alicloud/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -987,8 +987,8 @@ func Provider() terraform.ResourceProvider {
"alicloud_nat_gateway": resourceAlicloudNatGateway(),
"alicloud_nas_file_system": resourceAlicloudNasFileSystem(),
"alicloud_nas_mount_target": resourceAlicloudNasMountTarget(),
"alicloud_nas_access_group": resourceAlicloudNasAccessGroup(),
"alicloud_nas_access_rule": resourceAlicloudNasAccessRule(),
"alicloud_nas_access_group": resourceAliCloudNasAccessGroup(),
"alicloud_nas_access_rule": resourceAliCloudNasAccessRule(),
"alicloud_nas_smb_acl_attachment": resourceAlicloudNasSmbAclAttachment(),
"alicloud_tag_meta_tag": resourceAlicloudTagMetaTag(),
// "alicloud_subnet" aims to match aws usage habit.
Expand Down
225 changes: 119 additions & 106 deletions alicloud/resource_alicloud_nas_access_group.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you!
package alicloud

import (
Expand All @@ -10,51 +11,41 @@ import (
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
)

func resourceAlicloudNasAccessGroup() *schema.Resource {
func resourceAliCloudNasAccessGroup() *schema.Resource {
return &schema.Resource{
Create: resourceAlicloudNasAccessGroupCreate,
Read: resourceAlicloudNasAccessGroupRead,
Update: resourceAlicloudNasAccessGroupUpdate,
Delete: resourceAlicloudNasAccessGroupDelete,
Create: resourceAliCloudNasAccessGroupCreate,
Read: resourceAliCloudNasAccessGroupRead,
Update: resourceAliCloudNasAccessGroupUpdate,
Delete: resourceAliCloudNasAccessGroupDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Timeouts: &schema.ResourceTimeout{
Create: schema.DefaultTimeout(1 * time.Minute),
Create: schema.DefaultTimeout(5 * time.Minute),
Update: schema.DefaultTimeout(5 * time.Minute),
Delete: schema.DefaultTimeout(5 * time.Minute),
},
Schema: map[string]*schema.Schema{
"access_group_name": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
ConflictsWith: []string{"name"},
},
"name": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
ConflictsWith: []string{"access_group_name"},
Type: schema.TypeString,
Optional: true,
Computed: true,
ExactlyOneOf: []string{"access_group_name", "name"},
ForceNew: true,
},
"access_group_type": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
ValidateFunc: validation.StringInSlice([]string{"Classic", "Vpc"}, false),
ConflictsWith: []string{"type"},
Type: schema.TypeString,
Optional: true,
Computed: true,
ExactlyOneOf: []string{"access_group_type", "type"},
ForceNew: true,
ValidateFunc: StringInSlice([]string{"Classic", "Vpc"}, true),
},
"type": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
ValidateFunc: validation.StringInSlice([]string{"Classic", "Vpc"}, false),
ConflictsWith: []string{"access_group_type"},
"create_time": {
Type: schema.TypeString,
Computed: true,
},
"description": {
Type: schema.TypeString,
Expand All @@ -64,51 +55,65 @@ func resourceAlicloudNasAccessGroup() *schema.Resource {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
ValidateFunc: validation.StringInSlice([]string{"extreme", "standard"}, false),
Default: "standard",
ValidateFunc: StringInSlice([]string{"standard", "extreme"}, true),
},
"name": {
Type: schema.TypeString,
Optional: true,
Computed: true,
Deprecated: "Field 'name' has been deprecated since provider version 1.218.0. New field 'access_group_name' instead.",
ForceNew: true,
},
"type": {
Type: schema.TypeString,
Optional: true,
Computed: true,
Deprecated: "Field 'type' has been deprecated since provider version 1.218.0. New field 'access_group_type' instead.",
ForceNew: true,
},
},
}
}

func resourceAlicloudNasAccessGroupCreate(d *schema.ResourceData, meta interface{}) error {
func resourceAliCloudNasAccessGroupCreate(d *schema.ResourceData, meta interface{}) error {

client := meta.(*connectivity.AliyunClient)
var response map[string]interface{}

action := "CreateAccessGroup"
request := make(map[string]interface{})
var request map[string]interface{}
var response map[string]interface{}
query := make(map[string]interface{})
conn, err := client.NewNasClient()
if err != nil {
return WrapError(err)
}
if v, ok := d.GetOk("access_group_name"); ok {
request["AccessGroupName"] = v
} else if v, ok := d.GetOk("name"); ok {
request["AccessGroupName"] = v
} else {
return WrapError(Error(`[ERROR] Argument "name" or "access_group_name" must be set one!`))
request = make(map[string]interface{})
query["AccessGroupName"] = d.Get("access_group_name")
query["FileSystemType"] = d.Get("file_system_type")

if v, ok := d.GetOk("type"); ok {
request["AccessGroupType"] = v
}

if v, ok := d.GetOk("name"); ok {
query["AccessGroupName"] = v
}

if v, ok := d.GetOk("access_group_type"); ok {
request["AccessGroupType"] = v
} else if v, ok := d.GetOk("type"); ok {
request["AccessGroupType"] = v
} else {
return WrapError(Error(`[ERROR] Argument "type" or "access_group_type" must be set one!`))
}

if v, ok := d.GetOk("description"); ok {
request["Description"] = v
}

if v, ok := d.GetOk("file_system_type"); ok {
request["FileSystemType"] = v
}

runtime := util.RuntimeOptions{}
runtime.SetAutoretry(true)
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2017-06-26"), StringPointer("AK"), nil, request, &util.RuntimeOptions{})
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2017-06-26"), StringPointer("AK"), query, request, &runtime)

if err != nil {
if IsExpectedErrors(err, []string{"InternalError", "ServiceTimeout", "ServiceUnavailable"}) || NeedRetry(err) {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
Expand All @@ -117,65 +122,73 @@ func resourceAlicloudNasAccessGroupCreate(d *schema.ResourceData, meta interface
addDebug(action, response, request)
return nil
})

if err != nil {
return WrapErrorf(err, DefaultErrorMsg, "alicloud_nas_access_group", action, AlibabaCloudSdkGoERROR)
}

d.SetId(fmt.Sprint(response["AccessGroupName"], ":", request["FileSystemType"]))
d.SetId(fmt.Sprintf("%v:%v", response["AccessGroupName"], query["FileSystemType"]))

return resourceAlicloudNasAccessGroupRead(d, meta)
return resourceAliCloudNasAccessGroupRead(d, meta)
}
func resourceAlicloudNasAccessGroupRead(d *schema.ResourceData, meta interface{}) error {

func resourceAliCloudNasAccessGroupRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
nasService := NasService{client}
if len(strings.Split(d.Id(), ":")) != 2 {
d.SetId(fmt.Sprintf("%v:%v", d.Id(), "standard"))
}
object, err := nasService.DescribeNasAccessGroup(d.Id())
nasServiceV2 := NasServiceV2{client}

objectRaw, err := nasServiceV2.DescribeNasAccessGroup(d.Id())
if err != nil {
if NotFoundError(err) {
log.Printf("[DEBUG] Resource alicloud_nas_access_group nasService.DescribeNasAccessGroup Failed!!! %s", err)
if !d.IsNewResource() && NotFoundError(err) {
log.Printf("[DEBUG] Resource alicloud_nas_access_group DescribeNasAccessGroup Failed!!! %s", err)
d.SetId("")
return nil
}
return WrapError(err)
}
parts, err := ParseResourceId(d.Id(), 2)
if err != nil {
return WrapError(err)
}

d.Set("access_group_type", objectRaw["AccessGroupType"])
d.Set("create_time", objectRaw["CreateTime"])
d.Set("description", objectRaw["Description"])
d.Set("access_group_name", objectRaw["AccessGroupName"])
d.Set("file_system_type", objectRaw["FileSystemType"])

parts := strings.Split(d.Id(), ":")
d.Set("access_group_name", parts[0])
d.Set("name", parts[0])
d.Set("file_system_type", parts[1])
d.Set("access_group_type", object["AccessGroupType"])
d.Set("type", object["AccessGroupType"])
d.Set("description", object["Description"])

d.Set("name", d.Get("access_group_name"))
d.Set("type", d.Get("access_group_type"))
return nil
}
func resourceAlicloudNasAccessGroupUpdate(d *schema.ResourceData, meta interface{}) error {

func resourceAliCloudNasAccessGroupUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
conn, err := client.NewNasClient()
if err != nil {
return WrapError(err)
}
var request map[string]interface{}
var response map[string]interface{}
if len(strings.Split(d.Id(), ":")) != 2 {
d.SetId(fmt.Sprintf("%v:%v", d.Id(), "standard"))
}
parts, err := ParseResourceId(d.Id(), 2)
var query map[string]interface{}
update := false
parts := strings.Split(d.Id(), ":")
action := "ModifyAccessGroup"
conn, err := client.NewNasClient()
if err != nil {
return WrapError(err)
}
request = make(map[string]interface{})
query = make(map[string]interface{})
query["AccessGroupName"] = parts[0]
query["FileSystemType"] = parts[1]
if d.HasChange("description") {
request := map[string]interface{}{
"AccessGroupName": parts[0],
"FileSystemType": parts[1],
}
update = true
request["Description"] = d.Get("description")
action := "ModifyAccessGroup"
wait := incrementalWait(3*time.Second, 3*time.Second)
}

if update {
runtime := util.RuntimeOptions{}
runtime.SetAutoretry(true)
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2017-06-26"), StringPointer("AK"), nil, request, &util.RuntimeOptions{})
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2017-06-26"), StringPointer("AK"), query, request, &runtime)

if err != nil {
if NeedRetry(err) {
wait()
Expand All @@ -190,31 +203,32 @@ func resourceAlicloudNasAccessGroupUpdate(d *schema.ResourceData, meta interface
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
return resourceAlicloudNasAccessGroupRead(d, meta)

return resourceAliCloudNasAccessGroupRead(d, meta)
}
func resourceAlicloudNasAccessGroupDelete(d *schema.ResourceData, meta interface{}) error {

func resourceAliCloudNasAccessGroupDelete(d *schema.ResourceData, meta interface{}) error {

client := meta.(*connectivity.AliyunClient)
if len(strings.Split(d.Id(), ":")) != 2 {
d.SetId(fmt.Sprintf("%v:%v", d.Id(), "standard"))
}
parts, err := ParseResourceId(d.Id(), 2)
if err != nil {
return WrapError(err)
}
parts := strings.Split(d.Id(), ":")
action := "DeleteAccessGroup"
var request map[string]interface{}
var response map[string]interface{}
query := make(map[string]interface{})
conn, err := client.NewNasClient()
if err != nil {
return WrapError(err)
}
request := map[string]interface{}{
"AccessGroupName": parts[0],
"FileSystemType": parts[1],
}
request = make(map[string]interface{})
query["AccessGroupName"] = parts[0]
query["FileSystemType"] = parts[1]

wait := incrementalWait(3*time.Second, 3*time.Second)
runtime := util.RuntimeOptions{}
runtime.SetAutoretry(true)
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2017-06-26"), StringPointer("AK"), nil, request, &util.RuntimeOptions{})
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2017-06-26"), StringPointer("AK"), query, request, &runtime)

if err != nil {
if NeedRetry(err) {
wait()
Expand All @@ -225,11 +239,10 @@ func resourceAlicloudNasAccessGroupDelete(d *schema.ResourceData, meta interface
addDebug(action, response, request)
return nil
})

if err != nil {
if IsExpectedErrors(err, []string{"Forbidden.NasNotFound"}) {
return nil
}
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}

return nil
}

0 comments on commit 08ad855

Please sign in to comment.