forked from aliyun/terraform-provider-alicloud
-
Notifications
You must be signed in to change notification settings - Fork 0
/
resource_alicloud_slb_ca_certificate.go
133 lines (111 loc) · 3.95 KB
/
resource_alicloud_slb_ca_certificate.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
package alicloud
import (
"fmt"
"time"
"github.com/aliyun/alibaba-cloud-sdk-go/services/slb"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
"github.com/terraform-providers/terraform-provider-alicloud/alicloud/connectivity"
)
func resourceAlicloudSlbCACertificate() *schema.Resource {
return &schema.Resource{
Create: resourceAlicloudSlbCACertificateCreate,
Read: resourceAlicloudSlbCACertificateRead,
Update: resourceAlicloudSlbCACertificateUpdate,
Delete: resourceAlicloudSlbCACertificateDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Optional: true,
ForceNew: false,
},
"ca_certificate": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
},
}
}
func resourceAlicloudSlbCACertificateCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
slbService := SlbService{client}
request := slb.CreateUploadCACertificateRequest()
if val, ok := d.GetOk("name"); ok && val.(string) != "" {
request.CACertificateName = val.(string)
}
if val, ok := d.GetOk("ca_certificate"); ok && val.(string) != "" {
request.CACertificate = val.(string)
} else {
return fmt.Errorf("UploadCACertificate got an error, ca_certificate should be not null")
}
raw, err := slbService.client.WithSlbClient(func(slbClient *slb.Client) (interface{}, error) {
return slbClient.UploadCACertificate(request)
})
if err != nil {
return fmt.Errorf("UploadCACertificate got an error: %#v", err)
}
response := raw.(*slb.UploadCACertificateResponse)
d.SetId(response.CACertificateId)
return resourceAlicloudSlbCACertificateUpdate(d, meta)
}
func resourceAlicloudSlbCACertificateRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
slbService := SlbService{client}
caCertificate, err := slbService.describeSlbCACertificate(d.Id())
if err != nil {
if NotFoundError(err) {
d.SetId("")
return nil
}
return err
}
if error := d.Set("name", caCertificate.CACertificateName); error != nil {
return error
}
return nil
}
func resourceAlicloudSlbCACertificateUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
slbService := SlbService{client}
if !d.IsNewResource() && d.HasChange("name") {
request := slb.CreateSetCACertificateNameRequest()
request.CACertificateId = d.Id()
request.CACertificateName = d.Get("name").(string)
_, err := slbService.client.WithSlbClient(func(slbClient *slb.Client) (interface{}, error) {
return slbClient.SetCACertificateName(request)
})
if err != nil {
return fmt.Errorf("SetCACertificateName set %s name %s got an error: %#v",
d.Id(), request.CACertificateName, err)
}
}
return resourceAlicloudSlbCACertificateRead(d, meta)
}
func resourceAlicloudSlbCACertificateDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
slbService := SlbService{client}
return resource.Retry(5*time.Minute, func() *resource.RetryError {
request := slb.CreateDeleteCACertificateRequest()
request.CACertificateId = d.Id()
_, err := slbService.client.WithSlbClient(func(slbClient *slb.Client) (interface{}, error) {
return slbClient.DeleteCACertificate(request)
})
if err != nil {
if IsExceptedError(err, SlbCACertificateIdNotFound) || NotFoundError(err) {
return nil
}
return resource.RetryableError(fmt.Errorf("DeleteCACertificate %s got an error: %#v.", d.Id(), err))
}
if _, err := slbService.describeSlbCACertificate(d.Id()); err != nil {
if NotFoundError(err) {
return nil
}
return resource.RetryableError(fmt.Errorf("While DeleteCACertificate,DescribeCACertificates %s got an error: %#v.", d.Id(), err))
}
return resource.RetryableError(fmt.Errorf("DeleteCACertificate %s timeout.", d.Id()))
})
}