Skip to content

Commit 90da55c

Browse files
committed
adding kong_consumer resource
1 parent 9b92a5d commit 90da55c

10 files changed

+536
-56
lines changed

kong/provider.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ func Provider() terraform.ResourceProvider {
1919
},
2020

2121
ResourcesMap: map[string]*schema.Resource{
22-
"kong_api": resourceKongApi(),
22+
"kong_api": resourceKongApi(),
23+
"kong_consumer": resourceKongConsumer(),
2324
},
2425

2526
ConfigureFunc: providerConfigure,

kong/resource_kong_api.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ func resourceKongApiUpdate(d *schema.ResourceData, meta interface{}) error {
121121
_, err := client.Apis().UpdateById(id, apiRequest)
122122

123123
if err != nil {
124-
return fmt.Errorf("Error updating kong api: %s", err)
124+
return fmt.Errorf("error updating kong api: %s", err)
125125
}
126126

127127
return resourceKongApiRead(d, meta)

kong/resource_kong_api_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"github.com/hashicorp/terraform/helper/resource"
66
"github.com/hashicorp/terraform/terraform"
77
"github.com/kevholditch/gokong"
8-
"github.com/pkg/errors"
98
"testing"
109
)
1110

@@ -73,8 +72,9 @@ func testAccCheckKongApiDestroy(state *terraform.State) error {
7372
if err != nil {
7473
return fmt.Errorf("error calling get api by id: %v", err)
7574
}
75+
7676
if response != nil {
77-
return fmt.Errorf("record %s still exists, %+v", rs.Primary.ID, response)
77+
return fmt.Errorf("api %s still exists, %+v", rs.Primary.ID, response)
7878
}
7979
}
8080

@@ -91,7 +91,7 @@ func testAccCheckKongApiExists(resourceKey string) resource.TestCheckFunc {
9191
}
9292

9393
if rs.Primary.ID == "" {
94-
return fmt.Errorf("no Record ID is set")
94+
return fmt.Errorf("no ID is set")
9595
}
9696

9797
client := testAccProvider.Meta().(*gokong.KongAdminClient)
@@ -103,7 +103,7 @@ func testAccCheckKongApiExists(resourceKey string) resource.TestCheckFunc {
103103
}
104104

105105
if api == nil {
106-
return errors.New(fmt.Sprintf("api with id %v not found", rs.Primary.ID))
106+
return fmt.Errorf("api with id %v not found", rs.Primary.ID)
107107
}
108108

109109
return nil

kong/resource_kong_consumer.go

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package kong
2+
3+
import (
4+
"fmt"
5+
"github.com/hashicorp/terraform/helper/schema"
6+
"github.com/kevholditch/gokong"
7+
)
8+
9+
func resourceKongConsumer() *schema.Resource {
10+
return &schema.Resource{
11+
Create: resourceKongConsumerCreate,
12+
Read: resourceKongConsumerRead,
13+
Delete: resourceKongConsumerDelete,
14+
Update: resourceKongConsumerUpdate,
15+
16+
Schema: map[string]*schema.Schema{
17+
"username": &schema.Schema{
18+
Type: schema.TypeString,
19+
Required: true,
20+
ForceNew: false,
21+
},
22+
"custom_id": &schema.Schema{
23+
Type: schema.TypeString,
24+
Optional: true,
25+
ForceNew: false,
26+
},
27+
},
28+
}
29+
}
30+
31+
func resourceKongConsumerCreate(d *schema.ResourceData, meta interface{}) error {
32+
client := meta.(*gokong.KongAdminClient)
33+
34+
consumerRequest := createKongConsumerRequestFromResourceData(d)
35+
36+
consumer, err := client.Consumers().Create(consumerRequest)
37+
38+
if err != nil {
39+
return fmt.Errorf("failed to create kong consumer: %v error: %v", consumerRequest, err)
40+
}
41+
42+
d.SetId(consumer.Id)
43+
44+
return resourceKongConsumerRead(d, meta)
45+
}
46+
47+
func resourceKongConsumerUpdate(d *schema.ResourceData, meta interface{}) error {
48+
d.Partial(false)
49+
50+
client := meta.(*gokong.KongAdminClient)
51+
52+
consumerRequest := createKongConsumerRequestFromResourceData(d)
53+
54+
id := d.Id()
55+
56+
_, err := client.Consumers().UpdateById(id, consumerRequest)
57+
58+
if err != nil {
59+
return fmt.Errorf("error updating kong consumer: %s", err)
60+
}
61+
62+
return resourceKongConsumerRead(d, meta)
63+
}
64+
65+
func resourceKongConsumerRead(d *schema.ResourceData, meta interface{}) error {
66+
client := meta.(*gokong.KongAdminClient)
67+
68+
id := d.Id()
69+
70+
consumer, err := client.Consumers().GetById(id)
71+
72+
if err != nil {
73+
return fmt.Errorf("could not find kong consumer: %v", err)
74+
}
75+
76+
d.Set("username", consumer.Username)
77+
d.Set("custom_id", consumer.CustomId)
78+
79+
return nil
80+
}
81+
82+
func resourceKongConsumerDelete(d *schema.ResourceData, meta interface{}) error {
83+
84+
client := meta.(*gokong.KongAdminClient)
85+
86+
id := d.Id()
87+
88+
err := client.Consumers().DeleteById(id)
89+
90+
if err != nil {
91+
return fmt.Errorf("could not delete kong consumer: %v", err)
92+
}
93+
94+
return nil
95+
}
96+
97+
func createKongConsumerRequestFromResourceData(d *schema.ResourceData) *gokong.ConsumerRequest {
98+
99+
consumerRequest := &gokong.ConsumerRequest{}
100+
101+
consumerRequest.Username = readStringFromResource(d, "username")
102+
consumerRequest.CustomId = readStringFromResource(d, "custom_id")
103+
104+
return consumerRequest
105+
}

kong/resource_kong_consumer_test.go

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package kong
2+
3+
import (
4+
"fmt"
5+
"github.com/hashicorp/terraform/helper/resource"
6+
"github.com/hashicorp/terraform/terraform"
7+
"github.com/kevholditch/gokong"
8+
"testing"
9+
)
10+
11+
func TestAccKongConsumer_basic(t *testing.T) {
12+
13+
resource.Test(t, resource.TestCase{
14+
Providers: testAccProviders,
15+
CheckDestroy: testAccCheckKongConsumerDestroy,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testCreateConsumerConfig,
19+
Check: resource.ComposeTestCheckFunc(
20+
testAccCheckKongConsumerExists("kong_consumer.consumer"),
21+
resource.TestCheckResourceAttr("kong_consumer.consumer", "username", "User1"),
22+
resource.TestCheckResourceAttr("kong_consumer.consumer", "custom_id", "123"),
23+
),
24+
},
25+
{
26+
Config: testUpdateConsumerConfig,
27+
Check: resource.ComposeTestCheckFunc(
28+
testAccCheckKongConsumerExists("kong_consumer.consumer"),
29+
resource.TestCheckResourceAttr("kong_consumer.consumer", "username", "User2"),
30+
resource.TestCheckResourceAttr("kong_consumer.consumer", "custom_id", "456"),
31+
),
32+
},
33+
},
34+
})
35+
}
36+
37+
func testAccCheckKongConsumerDestroy(state *terraform.State) error {
38+
39+
client := testAccProvider.Meta().(*gokong.KongAdminClient)
40+
41+
for _, rs := range state.RootModule().Resources {
42+
if rs.Type != "kong_api" {
43+
continue
44+
}
45+
46+
response, err := client.Consumers().GetById(rs.Primary.ID)
47+
48+
if err != nil {
49+
return fmt.Errorf("error calling get consumer by id: %v", err)
50+
}
51+
52+
if response != nil {
53+
return fmt.Errorf("consumer %s still exists, %+v", rs.Primary.ID, response)
54+
}
55+
}
56+
57+
return nil
58+
}
59+
60+
func testAccCheckKongConsumerExists(resourceKey string) resource.TestCheckFunc {
61+
62+
return func(s *terraform.State) error {
63+
rs, ok := s.RootModule().Resources[resourceKey]
64+
65+
if !ok {
66+
return fmt.Errorf("not found: %s", resourceKey)
67+
}
68+
69+
if rs.Primary.ID == "" {
70+
return fmt.Errorf("no ID is set")
71+
}
72+
73+
client := testAccProvider.Meta().(*gokong.KongAdminClient)
74+
75+
api, err := client.Consumers().GetById(rs.Primary.ID)
76+
77+
if err != nil {
78+
return err
79+
}
80+
81+
if api == nil {
82+
return fmt.Errorf("consumer with id %v not found", rs.Primary.ID)
83+
}
84+
85+
return nil
86+
}
87+
}
88+
89+
const testCreateConsumerConfig = `
90+
resource "kong_consumer" "consumer" {
91+
username = "User1"
92+
custom_id = "123"
93+
}
94+
`
95+
const testUpdateConsumerConfig = `
96+
resource "kong_consumer" "consumer" {
97+
username = "User2"
98+
custom_id = "456"
99+
}
100+
`

0 commit comments

Comments
 (0)