Skip to content

Add more import support for gaap resources #164

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 14, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
## 1.20.2 (Unreleased)

ENHANCEMENTS:

* Resource: `tencentcloud_gaap_http_domain` support import
* Resource: `tencentcloud_gaap_layer7_listener` support import

## 1.20.1 (October 08, 2019)

ENHANCEMENTS:
Expand Down
9 changes: 6 additions & 3 deletions tencentcloud/data_source_tc_gaap_layer7_listeners.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,10 @@ func dataSourceTencentCloudGaapLayer7ListenersRead(d *schema.ResourceData, m int
ctx := context.WithValue(context.TODO(), "logId", logId)

protocol := d.Get("protocol").(string)
proxyId := d.Get("proxy_id").(string)
var proxyId *string
if raw, ok := d.GetOk("proxy_id"); ok {
proxyId = stringToPointer(raw.(string))
}

var (
listenerId *string
Expand All @@ -168,7 +171,7 @@ func dataSourceTencentCloudGaapLayer7ListenersRead(d *schema.ResourceData, m int

switch protocol {
case "HTTP":
httpListeners, err := service.DescribeHTTPListeners(ctx, &proxyId, listenerId, name, port)
httpListeners, err := service.DescribeHTTPListeners(ctx, proxyId, listenerId, name, port)
if err != nil {
return err
}
Expand Down Expand Up @@ -206,7 +209,7 @@ func dataSourceTencentCloudGaapLayer7ListenersRead(d *schema.ResourceData, m int
}

case "HTTPS":
httpsListeners, err := service.DescribeHTTPSListeners(ctx, &proxyId, listenerId, name, port)
httpsListeners, err := service.DescribeHTTPSListeners(ctx, proxyId, listenerId, name, port)
if err != nil {
return err
}
Expand Down
34 changes: 16 additions & 18 deletions tencentcloud/resource_tc_gaap_http_domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,16 @@ resource "tencentcloud_gaap_http_domain" "foo" {
domain = "www.qq.com"
}
```

Import

GAAP http domain can be imported using the id, e.g.

-> **NOTE:** The format of tencentcloud_gaap_http_domain id is `[listener-id]+[protocol]+[domain]`.

```
$ terraform import tencentcloud_gaap_http_domain.foo listener-11112222+HTTP+www.qq.com
```
*/
package tencentcloud

Expand All @@ -43,6 +53,10 @@ func resourceTencentCloudGaapHttpDomain() *schema.Resource {
Read: resourceTencentCloudGaapHttpDomainRead,
Update: resourceTencentCloudGaapHttpDomainUpdate,
Delete: resourceTencentCloudGaapHttpDomainDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},

Schema: map[string]*schema.Schema{
"listener_id": {
Type: schema.TypeString,
Expand Down Expand Up @@ -236,7 +250,6 @@ func resourceTencentCloudGaapHttpDomainRead(d *schema.ResourceData, m interface{
id := d.Id()
var (
listenerId string
protocol string
domain string
)
split := strings.Split(id, "+")
Expand All @@ -247,7 +260,7 @@ func resourceTencentCloudGaapHttpDomainRead(d *schema.ResourceData, m interface{
return nil
}

listenerId, protocol, domain = split[0], split[1], split[2]
listenerId, _, domain = split[0], split[1], split[2]

service := GaapService{client: m.(*TencentCloudClient).apiV3Conn}

Expand All @@ -262,22 +275,7 @@ func resourceTencentCloudGaapHttpDomainRead(d *schema.ResourceData, m interface{
}

d.Set("domain", httpDomain.Domain)

if protocol == "HTTP" {
return nil
}

listeners, err := service.DescribeHTTPSListeners(ctx, nil, &listenerId, nil, nil)
if err != nil {
return err
}

// if listener doesn't exist, domain won't exist
if len(listeners) == 0 {
log.Printf("[DEBUG]%s domain listener doesn't exist", logId)
d.SetId("")
return nil
}
d.Set("listener_id", listenerId)

if httpDomain.CertificateId == nil {
httpDomain.CertificateId = stringToPointer("default")
Expand Down
10 changes: 10 additions & 0 deletions tencentcloud/resource_tc_gaap_http_domain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ func TestAccTencentCloudGaapHttpDomain_basic(t *testing.T) {
resource.TestCheckNoResourceAttr("tencentcloud_gaap_http_domain.foo", "gaap_auth_id"),
),
},
{
ResourceName: "tencentcloud_gaap_http_domain.foo",
ImportState: true,
ImportStateVerify: true,
},
},
})
}
Expand Down Expand Up @@ -66,6 +71,11 @@ func TestAccTencentCloudGaapHttpDomain_https(t *testing.T) {
resource.TestCheckNoResourceAttr("tencentcloud_gaap_http_domain.foo", "gaap_auth_id"),
),
},
{
ResourceName: "tencentcloud_gaap_http_domain.foo",
ImportState: true,
ImportStateVerify: true,
},
},
})
}
Expand Down
207 changes: 125 additions & 82 deletions tencentcloud/resource_tc_gaap_layer7_listener.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ resource "tencentcloud_gaap_layer7_listener" "foo" {
proxy_id = "${tencentcloud_gaap_proxy.foo.id}"
}
```

Import

GAAP layer7 listener can be imported using the id, e.g.

```
$ terraform import tencentcloud_gaap_layer7_listener.foo listener-11112222
```
*/
package tencentcloud

Expand All @@ -37,6 +45,10 @@ func resourceTencentCloudGaapLayer7Listener() *schema.Resource {
Read: resourceTencentCloudGaapLayer7ListenerRead,
Update: resourceTencentCloudGaapLayer7ListenerUpdate,
Delete: resourceTencentCloudGaapLayer7ListenerDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},

Schema: map[string]*schema.Schema{
"protocol": {
Type: schema.TypeString,
Expand Down Expand Up @@ -177,7 +189,6 @@ func resourceTencentCloudGaapLayer7ListenerRead(d *schema.ResourceData, m interf
ctx := context.WithValue(context.TODO(), "logId", logId)

id := d.Id()
proxyId := d.Get("proxy_id").(string)
protocol := d.Get("protocol").(string)
var (
name string
Expand All @@ -192,110 +203,142 @@ func resourceTencentCloudGaapLayer7ListenerRead(d *schema.ResourceData, m interf

service := GaapService{client: m.(*TencentCloudClient).apiV3Conn}

switch protocol {
case "HTTP":
listeners, err := service.DescribeHTTPListeners(ctx, &proxyId, &id, nil, nil)
if err != nil {
return err
}
LOOP:
for {
switch protocol {
case "HTTP":
listeners, err := service.DescribeHTTPListeners(ctx, nil, &id, nil, nil)
if err != nil {
return err
}

var listener *gaap.HTTPListener
for _, l := range listeners {
if l.ListenerId == nil {
return errors.New("listener id is nil")
var listener *gaap.HTTPListener
for _, l := range listeners {
if l.ListenerId == nil {
return errors.New("listener id is nil")
}
if *l.ListenerId == id {
listener = l
break
}
}
if *l.ListenerId == id {
listener = l
break

if listener == nil {
d.SetId("")
return nil
}
}

if listener == nil {
d.SetId("")
return nil
}
if listener.ListenerName == nil {
return errors.New("listener name is nil")
}
name = *listener.ListenerName

if listener.ListenerName == nil {
return errors.New("listener name is nil")
}
name = *listener.ListenerName
if listener.Port == nil {
return errors.New("listener port is nil")
}
port = int(*listener.Port)

if listener.Port == nil {
return errors.New("listener port is nil")
}
port = int(*listener.Port)
if listener.ListenerStatus == nil {
return errors.New("listener status is nil")
}
status = int(*listener.ListenerStatus)

if listener.ListenerStatus == nil {
return errors.New("listener status is nil")
}
status = int(*listener.ListenerStatus)
if listener.CreateTime == nil {
return errors.New("listener create time is nil")
}
createTime = formatUnixTime(*listener.CreateTime)

if listener.CreateTime == nil {
return errors.New("listener create time is nil")
}
createTime = formatUnixTime(*listener.CreateTime)
break LOOP

case "HTTPS":
listeners, err := service.DescribeHTTPSListeners(ctx, &proxyId, &id, nil, nil)
if err != nil {
return err
}
case "HTTPS":
listeners, err := service.DescribeHTTPSListeners(ctx, nil, &id, nil, nil)
if err != nil {
return err
}

var listener *gaap.HTTPSListener
for _, l := range listeners {
if l.ListenerId == nil {
return errors.New("listener id is nil")
var listener *gaap.HTTPSListener
for _, l := range listeners {
if l.ListenerId == nil {
return errors.New("listener id is nil")
}
if *l.ListenerId == id {
listener = l
break
}
}
if *l.ListenerId == id {
listener = l
break

if listener == nil {
d.SetId("")
return nil
}
}

if listener == nil {
d.SetId("")
return nil
}
if listener.ListenerName == nil {
return errors.New("listener name is nil")
}
name = *listener.ListenerName

if listener.ListenerName == nil {
return errors.New("listener name is nil")
}
name = *listener.ListenerName
if listener.Port == nil {
return errors.New("listener port is nil")
}
port = int(*listener.Port)

if listener.Port == nil {
return errors.New("listener port is nil")
}
port = int(*listener.Port)
if listener.CertificateId == nil {
return errors.New("listener certificate id is nil")
}
certificateId = *listener.CertificateId

if listener.CertificateId == nil {
return errors.New("listener certificate id is nil")
}
certificateId = *listener.CertificateId
if listener.ForwardProtocol == nil {
return errors.New("listener forward protocol is nil")
}
forwardProtocol = listener.ForwardProtocol

if listener.ForwardProtocol == nil {
return errors.New("listener forward protocol is nil")
}
forwardProtocol = listener.ForwardProtocol
if listener.AuthType == nil {
return errors.New("listener auth type is nil")
}
authType = common.IntPtr(int(*listener.AuthType))

if listener.AuthType == nil {
return errors.New("listener auth type is nil")
}
authType = common.IntPtr(int(*listener.AuthType))
if listener.ClientCertificateId != nil {
clientCertificateId = *listener.ClientCertificateId
}

if listener.ClientCertificateId != nil {
clientCertificateId = *listener.ClientCertificateId
}
if listener.ListenerStatus == nil {
return errors.New("listener status is nil")
}
status = int(*listener.ListenerStatus)

if listener.ListenerStatus == nil {
return errors.New("listener status is nil")
}
status = int(*listener.ListenerStatus)
if listener.CreateTime == nil {
return errors.New("listener create time is nil")
}
createTime = formatUnixTime(*listener.CreateTime)

if listener.CreateTime == nil {
return errors.New("listener create time is nil")
break LOOP

case "":
// import mode, need check protocol
httpListeners, err := service.DescribeHTTPListeners(ctx, nil, &id, nil, nil)
if err != nil {
return err
}
if len(httpListeners) > 0 {
protocol = "HTTP"
continue
}

httpsListeners, err := service.DescribeHTTPSListeners(ctx, nil, &id, nil, nil)
if err != nil {
return err
}
if len(httpsListeners) > 0 {
protocol = "HTTPS"
continue
}

// layer7 listener is not found
d.SetId("")
return nil
}
createTime = formatUnixTime(*listener.CreateTime)
}
d.Set("protocol", protocol)

d.Set("name", name)
d.Set("port", port)
Expand Down
Loading