alicloud/resource_alicloud_ssl_vpn_client_cert.go (155 lines of code) (raw):
package alicloud
import (
"time"
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
"github.com/aliyun/alibaba-cloud-sdk-go/services/vpc"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)
func resourceAliyunSslVpnClientCert() *schema.Resource {
return &schema.Resource{
Create: resourceAliyunSslVpnClientCertCreate,
Read: resourceAliyunSslVpnClientCertRead,
Update: resourceAliyunSslVpnClientCertUpdate,
Delete: resourceAliyunSslVpnClientCertDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"ssl_vpn_server_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"name": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.StringLenBetween(2, 128),
},
"status": {
Type: schema.TypeString,
Computed: true,
},
"ca_cert": {
Type: schema.TypeString,
Computed: true,
Sensitive: true,
},
"client_cert": {
Type: schema.TypeString,
Computed: true,
Sensitive: true,
},
"client_key": {
Type: schema.TypeString,
Computed: true,
Sensitive: true,
},
"client_config": {
Type: schema.TypeString,
Computed: true,
Sensitive: true,
},
},
}
}
func resourceAliyunSslVpnClientCertCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
vpnGatewayService := VpnGatewayService{client}
request := vpc.CreateCreateSslVpnClientCertRequest()
request.RegionId = string(client.Region)
request.SslVpnServerId = d.Get("ssl_vpn_server_id").(string)
if v := d.Get("name").(string); v != "" {
request.Name = v
}
request.ClientToken = buildClientToken(request.GetActionName())
var response *vpc.CreateSslVpnClientCertResponse
err := resource.Retry(3*time.Minute, func() *resource.RetryError {
args := *request
raw, err := client.WithVpcClient(func(vpcClient *vpc.Client) (interface{}, error) {
return vpcClient.CreateSslVpnClientCert(&args)
})
if err != nil {
if IsExpectedErrors(err, []string{"VpnGateway.Configuring"}) {
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
response, _ = raw.(*vpc.CreateSslVpnClientCertResponse)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, "alicloud_ssl_vpn_client_cert", request.GetActionName(), AlibabaCloudSdkGoERROR)
}
d.SetId(response.SslVpnClientCertId)
err = vpnGatewayService.WaitForSslVpnClientCert(d.Id(), Ssl_Cert_Normal, DefaultTimeout)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), request.GetActionName(), AlibabaCloudSdkGoERROR)
}
return resourceAliyunSslVpnClientCertRead(d, meta)
}
func resourceAliyunSslVpnClientCertRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
vpnGatewayService := VpnGatewayService{client}
object, err := vpnGatewayService.DescribeSslVpnClientCert(d.Id())
if err != nil {
if NotFoundError(err) {
d.SetId("")
return nil
}
return WrapError(err)
}
d.Set("name", object.Name)
d.Set("status", object.Status)
d.Set("ssl_vpn_server_id", object.SslVpnServerId)
d.Set("ca_cert", object.CaCert)
d.Set("client_cert", object.ClientCert)
d.Set("client_key", object.ClientKey)
d.Set("client_config", object.ClientConfig)
return nil
}
func resourceAliyunSslVpnClientCertUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
request := vpc.CreateModifySslVpnClientCertRequest()
request.RegionId = client.RegionId
request.SslVpnClientCertId = d.Id()
request.Name = d.Get("name").(string)
raw, err := client.WithVpcClient(func(vpcClient *vpc.Client) (interface{}, error) {
return vpcClient.ModifySslVpnClientCert(request)
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), request.GetActionName(), AlibabaCloudSdkGoERROR)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
return resourceAliyunSslVpnClientCertRead(d, meta)
}
func resourceAliyunSslVpnClientCertDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
vpnGatewayService := VpnGatewayService{client}
request := vpc.CreateDeleteSslVpnClientCertRequest()
request.RegionId = client.RegionId
request.SslVpnClientCertId = d.Id()
err := resource.Retry(5*time.Minute, func() *resource.RetryError {
raw, err := client.WithVpcClient(func(vpcClient *vpc.Client) (interface{}, error) {
return vpcClient.DeleteSslVpnClientCert(request)
})
if err != nil {
if IsExpectedErrors(err, []string{"VpnGateway.Configuring"}) {
return resource.RetryableError(err)
} else {
return resource.NonRetryableError(err)
}
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
return nil
})
if err != nil {
if IsExpectedErrors(err, []string{"InvalidSslVpnClientCertId.NotFound"}) {
return nil
}
return WrapErrorf(err, DefaultErrorMsg, d.Id(), request.GetActionName(), AlibabaCloudSdkGoERROR)
}
return WrapError(vpnGatewayService.WaitForSslVpnClientCert(d.Id(), Deleted, DefaultTimeout))
}