in alicloud/resource_alicloud_nas_file_system.go [424:873]
func resourceAliCloudNasFileSystemUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
var request map[string]interface{}
var response map[string]interface{}
var query map[string]interface{}
update := false
d.Partial(true)
if d.HasChange("recycle_bin.0.status") {
var err error
target := d.Get("recycle_bin.0.status").(string)
enableEnableRecycleBin := false
checkValue01 := d.Get("file_system_type")
if checkValue01 == "standard" {
enableEnableRecycleBin = true
}
if enableEnableRecycleBin && target == "Enable" {
action := "EnableRecycleBin"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["FileSystemId"] = d.Id()
if v, ok := d.GetOkExists("recycle_bin"); ok {
jsonPathResult, err := jsonpath.Get("$[0].reserved_days", v)
if err == nil && jsonPathResult != "" {
request["ReservedDays"] = jsonPathResult
}
}
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("NAS", "2017-06-26", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
enableDisableAndCleanRecycleBin := false
checkValue01 = d.Get("file_system_type")
if checkValue01 == "standard" {
enableDisableAndCleanRecycleBin = true
}
if enableDisableAndCleanRecycleBin && target == "Disable" {
action := "DisableAndCleanRecycleBin"
request = make(map[string]interface{})
query = make(map[string]interface{})
query["FileSystemId"] = d.Id()
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcGet("NAS", "2017-06-26", action, query, request)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
}
if d.HasChange("nfs_acl.0.enabled") {
var err error
target := d.Get("nfs_acl.0.enabled").(bool)
enableEnableNfsAcl := false
checkValue00 := d.Get("file_system_type")
checkValue02 := d.Get("protocol_type")
if (checkValue00 == "standard") && (checkValue02 == "NFS") {
enableEnableNfsAcl = true
}
if enableEnableNfsAcl && target == true {
action := "EnableNfsAcl"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["FileSystemId"] = d.Id()
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("NAS", "2017-06-26", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
enableDisableNfsAcl := false
checkValue00 = d.Get("file_system_type")
checkValue02 = d.Get("protocol_type")
if (checkValue00 == "standard") && (checkValue02 == "NFS") {
enableDisableNfsAcl = true
}
if enableDisableNfsAcl && target == false {
action := "DisableNfsAcl"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["FileSystemId"] = d.Id()
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("NAS", "2017-06-26", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
}
if d.HasChange("smb_acl.0.enabled") {
var err error
target := d.Get("smb_acl.0.enabled").(bool)
enableEnableSmbAcl := false
checkValue00 := d.Get("file_system_type")
checkValue01 := d.Get("protocol_type")
if (checkValue00 == "standard") && (checkValue01 == "SMB") {
enableEnableSmbAcl = true
}
if enableEnableSmbAcl && target == true {
action := "EnableSmbAcl"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["FileSystemId"] = d.Id()
request["KeytabMd5"] = d.Get("keytab_md5")
request["Keytab"] = d.Get("keytab")
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("NAS", "2017-06-26", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
enableDisableSmbAcl := false
checkValue00 = d.Get("file_system_type")
checkValue01 = d.Get("protocol_type")
if (checkValue00 == "standard") && (checkValue01 == "SMB") {
enableDisableSmbAcl = true
}
if enableDisableSmbAcl && target == false {
action := "DisableSmbAcl"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["FileSystemId"] = d.Id()
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("NAS", "2017-06-26", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
}
var err error
action := "ModifyFileSystem"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["FileSystemId"] = d.Id()
if d.HasChange("options") {
update = true
objectDataLocalMap := make(map[string]interface{})
if v := d.Get("options"); v != nil {
enableOplock1, _ := jsonpath.Get("$[0].enable_oplock", v)
if enableOplock1 != nil && (d.HasChange("options.0.enable_oplock") || enableOplock1 != "") {
objectDataLocalMap["EnableOplock"] = enableOplock1
}
objectDataLocalMapJson, err := json.Marshal(objectDataLocalMap)
if err != nil {
return WrapError(err)
}
request["Options"] = string(objectDataLocalMapJson)
}
}
if !d.IsNewResource() && d.HasChange("description") {
update = true
request["Description"] = d.Get("description")
}
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("NAS", "2017-06-26", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
update = false
enableUpgradeFileSystem := false
checkValue00 := d.Get("file_system_type")
if !(checkValue00 == "standard") {
enableUpgradeFileSystem = true
}
action = "UpgradeFileSystem"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["FileSystemId"] = d.Id()
request["ClientToken"] = buildClientToken(action)
if !d.IsNewResource() && d.HasChange("capacity") {
update = true
}
request["Capacity"] = d.Get("capacity")
request["DryRun"] = "false"
if update && enableUpgradeFileSystem {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("NAS", "2017-06-26", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
nasServiceV2 := NasServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"Running"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, nasServiceV2.NasFileSystemStateRefreshFunc(d.Id(), "Status", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
}
update = false
action = "ChangeResourceGroup"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["ResourceId"] = d.Id()
request["RegionId"] = client.RegionId
if _, ok := d.GetOk("resource_group_id"); ok && !d.IsNewResource() && d.HasChange("resource_group_id") {
update = true
}
request["NewResourceGroupId"] = d.Get("resource_group_id")
request["ResourceType"] = "filesystem"
if update {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("NAS", "2017-06-26", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
update = false
enableUpdateRecycleBinAttribute := false
checkValue00 = d.Get("recycle_bin.0.status")
checkValue01 := d.Get("file_system_type")
if (checkValue00 == "Enable") && (checkValue01 == "standard") {
enableUpdateRecycleBinAttribute = true
}
action = "UpdateRecycleBinAttribute"
request = make(map[string]interface{})
query = make(map[string]interface{})
query["FileSystemId"] = d.Id()
if d.HasChange("recycle_bin.0.reserved_days") {
update = true
}
if v, ok := d.GetOk("recycle_bin.0.reserved_days"); ok {
query["ReservedDays"] = strconv.Itoa(v.(int))
}
if update && enableUpdateRecycleBinAttribute {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcGet("NAS", "2017-06-26", action, query, request)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
update = false
enableModifySmbAcl := false
checkValue00 = d.Get("file_system_type")
checkValue01 = d.Get("protocol_type")
checkValue02 := d.Get("smb_acl.0.enabled")
if (checkValue00 == "standard") && (checkValue01 == "SMB") && (checkValue02 == true) {
enableModifySmbAcl = true
}
action = "ModifySmbAcl"
request = make(map[string]interface{})
query = make(map[string]interface{})
request["FileSystemId"] = d.Id()
if d.HasChange("smb_acl.0.super_admin_sid") {
update = true
jsonPathResult, err := jsonpath.Get("$[0].super_admin_sid", d.Get("smb_acl"))
if err == nil {
request["SuperAdminSid"] = jsonPathResult
}
}
if d.HasChange("smb_acl.0.home_dir_path") {
update = true
jsonPathResult1, err := jsonpath.Get("$[0].home_dir_path", d.Get("smb_acl"))
if err == nil {
request["HomeDirPath"] = jsonPathResult1
}
}
if v, ok := d.GetOk("keytab_md5"); ok {
request["KeytabMd5"] = v
}
if d.HasChange("smb_acl.0.enable_anonymous_access") {
update = true
jsonPathResult3, err := jsonpath.Get("$[0].enable_anonymous_access", d.Get("smb_acl"))
if err == nil {
request["EnableAnonymousAccess"] = jsonPathResult3
}
}
if d.HasChange("smb_acl.0.encrypt_data") {
update = true
jsonPathResult4, err := jsonpath.Get("$[0].encrypt_data", d.Get("smb_acl"))
if err == nil {
request["EncryptData"] = jsonPathResult4
}
}
if d.HasChange("smb_acl.0.reject_unencrypted_access") {
update = true
jsonPathResult5, err := jsonpath.Get("$[0].reject_unencrypted_access", d.Get("smb_acl"))
if err == nil {
request["RejectUnencryptedAccess"] = jsonPathResult5
}
}
if v, ok := d.GetOk("keytab"); ok {
request["Keytab"] = v
}
if update && enableModifySmbAcl {
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("NAS", "2017-06-26", action, query, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
if d.HasChange("tags") {
nasServiceV2 := NasServiceV2{client}
if err := nasServiceV2.SetResourceTags(d, "filesystem"); err != nil {
return WrapError(err)
}
}
d.Partial(false)
return resourceAliCloudNasFileSystemRead(d, meta)
}