forked from aliyun/terraform-provider-alicloud
-
Notifications
You must be signed in to change notification settings - Fork 0
/
resource_alicloud_kvstore_backup_policy.go
143 lines (121 loc) · 4.33 KB
/
resource_alicloud_kvstore_backup_policy.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package alicloud
import (
"fmt"
"strings"
"time"
"github.com/aliyun/alibaba-cloud-sdk-go/services/r-kvstore"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
"github.com/terraform-providers/terraform-provider-alicloud/alicloud/connectivity"
)
func resourceAlicloudKVStoreBackupPolicy() *schema.Resource {
return &schema.Resource{
Create: resourceAlicloudKVStoreBackupPolicyCreate,
Read: resourceAlicloudKVStoreBackupPolicyRead,
Update: resourceAlicloudKVStoreBackupPolicyUpdate,
Delete: resourceAlicloudKVStoreBackupPolicyDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"instance_id": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"backup_time": &schema.Schema{
Type: schema.TypeString,
ValidateFunc: validateAllowedStringValue(BACKUP_TIME),
Optional: true,
Default: "02:00Z-03:00Z",
},
"backup_period": &schema.Schema{
Type: schema.TypeSet,
Elem: &schema.Schema{Type: schema.TypeString},
// terraform does not support ValidateFunc of TypeList attr
// ValidateFunc: validateAllowedStringValue([]string{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}),
Optional: true,
Computed: true,
},
},
}
}
func resourceAlicloudKVStoreBackupPolicyCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
request := r_kvstore.CreateModifyBackupPolicyRequest()
request.InstanceId = d.Get("instance_id").(string)
request.PreferredBackupTime = d.Get("backup_time").(string)
periodList := expandStringList(d.Get("backup_period").(*schema.Set).List())
backupPeriod := fmt.Sprintf("%s", strings.Join(periodList[:], COMMA_SEPARATED))
request.PreferredBackupPeriod = backupPeriod
err := resource.Retry(5*time.Minute, func() *resource.RetryError {
_, err := client.WithRkvClient(func(rkvClient *r_kvstore.Client) (interface{}, error) {
return rkvClient.ModifyBackupPolicy(request)
})
if err != nil {
return resource.NonRetryableError(fmt.Errorf("Create backup policy got an error: %#v", err))
}
return nil
})
if err != nil {
return err
}
d.SetId(request.InstanceId)
return resourceAlicloudKVStoreBackupPolicyRead(d, meta)
}
func resourceAlicloudKVStoreBackupPolicyRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
kvstoreService := KvstoreService{client}
policy, err := kvstoreService.DescribeRKVInstancebackupPolicy(d.Id())
if err != nil {
if NotFoundError(err) {
d.SetId("")
return nil
}
return err
}
d.Set("instance_id", d.Id())
d.Set("backup_time", policy.PreferredBackupTime)
d.Set("backup_period", strings.Split(policy.PreferredBackupPeriod, ","))
return nil
}
func resourceAlicloudKVStoreBackupPolicyUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
update := false
request := r_kvstore.CreateModifyBackupPolicyRequest()
request.InstanceId = d.Id()
if d.HasChange("backup_time") {
request.PreferredBackupTime = d.Get("backup_time").(string)
update = true
}
if d.HasChange("backup_period") {
periodList := expandStringList(d.Get("backup_period").(*schema.Set).List())
backupPeriod := fmt.Sprintf("%s", strings.Join(periodList[:], COMMA_SEPARATED))
request.PreferredBackupPeriod = backupPeriod
update = true
}
if update {
_, err := client.WithRkvClient(func(rkvClient *r_kvstore.Client) (interface{}, error) {
return rkvClient.ModifyBackupPolicy(request)
})
if err != nil {
return err
}
}
return resourceAlicloudKVStoreBackupPolicyRead(d, meta)
}
func resourceAlicloudKVStoreBackupPolicyDelete(d *schema.ResourceData, meta interface{}) error {
// In case of a delete we are resetting to default values which is Monday - Sunday each 3am-4am
client := meta.(*connectivity.AliyunClient)
request := r_kvstore.CreateModifyBackupPolicyRequest()
request.InstanceId = d.Id()
request.PreferredBackupTime = "01:00Z-02:00Z"
request.PreferredBackupPeriod = "Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday"
_, err := client.WithRkvClient(func(rkvClient *r_kvstore.Client) (interface{}, error) {
return rkvClient.ModifyBackupPolicy(request)
})
if err != nil {
return err
}
return nil
}