alibabacloudstack/resource_apsarastack_kvstore_backup_policy.go (127 lines of code) (raw):
package alibabacloudstack
import (
"strings"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
r_kvstore "github.com/aliyun/alibaba-cloud-sdk-go/services/r-kvstore"
"github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/connectivity"
"github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/errmsgs"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func resourceAlibabacloudStackKVStoreBackupPolicy() *schema.Resource {
resource := &schema.Resource{
Schema: map[string]*schema.Schema{
"instance_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"backup_time": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice(BACKUP_TIME, false),
Optional: true,
Computed:true,
Deprecated: "Field 'backup_time' is deprecated and will be removed in a future release. Please use new field 'preferred_backup_time' instead.",
ConflictsWith: []string{"preferred_backup_time"},
},
"preferred_backup_time": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice(BACKUP_TIME, false),
Optional: true,
Computed:true,
ConflictsWith: []string{"backup_time"},
},
"backup_period": {
Type: schema.TypeSet,
Elem: &schema.Schema{Type: schema.TypeString},
Optional: true,
Computed: true,
Deprecated: "Field 'backup_period' is deprecated and will be removed in a future release. Please use new field 'preferred_backup_period' instead.",
ConflictsWith: []string{"preferred_backup_period"},
},
"preferred_backup_period": {
Type: schema.TypeSet,
Elem: &schema.Schema{Type: schema.TypeString},
Optional: true,
Computed: true,
ConflictsWith: []string{"backup_period"},
},
},
}
setResourceFunc(resource, resourceAlibabacloudStackKVStoreBackupPolicyCreate,
resourceAlibabacloudStackKVStoreBackupPolicyRead, resourceAlibabacloudStackKVStoreBackupPolicyUpdate, resourceAlibabacloudStackKVStoreBackupPolicyDelete)
return resource
}
func resourceAlibabacloudStackKVStoreBackupPolicyCreate(d *schema.ResourceData, meta interface{}) error {
d.SetId(d.Get("instance_id").(string))
return resourceAlibabacloudStackKVStoreBackupPolicyUpdate(d, meta)
}
func resourceAlibabacloudStackKVStoreBackupPolicyRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
kvstoreService := KvstoreService{client}
object, err := kvstoreService.DescribeKVstoreBackupPolicy(d.Id())
if err != nil {
if errmsgs.NotFoundError(err) {
d.SetId("")
return nil
}
return errmsgs.WrapError(err)
}
d.Set("instance_id", d.Id())
connectivity.SetResourceData(d, object.PreferredBackupTime, "preferred_backup_time", "backup_time")
connectivity.SetResourceData(d, strings.Split(object.PreferredBackupPeriod, ","), "preferred_backup_period", "backup_period")
return nil
}
func resourceAlibabacloudStackKVStoreBackupPolicyUpdate(d *schema.ResourceData, meta interface{}) error {
if d.HasChanges("preferred_backup_time", "preferred_backup_period", "backup_time", "backup_period") {
client := meta.(*connectivity.AlibabacloudStackClient)
kvstoreService := KvstoreService{client}
request := r_kvstore.CreateModifyBackupPolicyRequest()
client.InitRpcRequest(*request.RpcRequest)
request.InstanceId = d.Id()
if v, ok := connectivity.GetResourceDataOk(d, "preferred_backup_time", "backup_time"); ok {
request.PreferredBackupTime = v.(string)
} else {
//Default must be nil if computed
request.PreferredBackupTime = "02:00Z-03:00Z"
}
periodList := expandStringList(connectivity.GetResourceData(d, "preferred_backup_period", "backup_period").(*schema.Set).List())
request.PreferredBackupPeriod = strings.Join(periodList, COMMA_SEPARATED)
raw, err := client.WithRkvClient(func(rkvClient *r_kvstore.Client) (interface{}, error) {
return rkvClient.ModifyBackupPolicy(request)
})
response, ok := raw.(*r_kvstore.ModifyBackupPolicyResponse)
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(response.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
// There is a random error and need waiting some seconds to ensure the update is success
_, err = kvstoreService.DescribeKVstoreBackupPolicy(d.Id())
if err != nil {
return errmsgs.WrapError(err)
}
}
return nil
}
func resourceAlibabacloudStackKVStoreBackupPolicyDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
request := r_kvstore.CreateModifyBackupPolicyRequest()
client.InitRpcRequest(*request.RpcRequest)
request.InstanceId = d.Id()
request.PreferredBackupTime = "01:00Z-02:00Z"
request.PreferredBackupPeriod = "Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday"
raw, err := client.WithRkvClient(func(rkvClient *r_kvstore.Client) (interface{}, error) {
return rkvClient.ModifyBackupPolicy(request)
})
response, ok := raw.(*r_kvstore.ModifyBackupPolicyResponse)
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(response.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
return nil
}