Skip to content

Commit 11180f5

Browse files
authored
Merge pull request #5514 from saravanan30erd/issue-5374
Issue #5374 New Datasource: aws_db_event_categories
2 parents 80811b7 + 5ca4239 commit 11180f5

5 files changed

+245
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package aws
2+
3+
import (
4+
"fmt"
5+
"log"
6+
7+
"github.com/aws/aws-sdk-go/aws"
8+
"github.com/aws/aws-sdk-go/service/rds"
9+
"github.com/hashicorp/terraform/helper/resource"
10+
"github.com/hashicorp/terraform/helper/schema"
11+
)
12+
13+
func dataSourceAwsDbEventCategories() *schema.Resource {
14+
return &schema.Resource{
15+
Read: dataSourceAwsDbEventCategoriesRead,
16+
17+
Schema: map[string]*schema.Schema{
18+
"source_type": {
19+
Type: schema.TypeString,
20+
Optional: true,
21+
},
22+
"event_categories": {
23+
Type: schema.TypeSet,
24+
Computed: true,
25+
Elem: &schema.Schema{Type: schema.TypeString},
26+
Set: schema.HashString,
27+
},
28+
},
29+
}
30+
}
31+
32+
func dataSourceAwsDbEventCategoriesRead(d *schema.ResourceData, meta interface{}) error {
33+
conn := meta.(*AWSClient).rdsconn
34+
35+
req := &rds.DescribeEventCategoriesInput{}
36+
37+
if sourceType := d.Get("source_type").(string); sourceType != "" {
38+
req.SourceType = aws.String(sourceType)
39+
}
40+
41+
log.Printf("[DEBUG] Describe Event Categories %s\n", req)
42+
resp, err := conn.DescribeEventCategories(req)
43+
if err != nil {
44+
return err
45+
}
46+
47+
if resp == nil || len(resp.EventCategoriesMapList) == 0 {
48+
return fmt.Errorf("Event Categories not found")
49+
}
50+
51+
eventCategories := make([]string, 0)
52+
53+
for _, eventMap := range resp.EventCategoriesMapList {
54+
for _, v := range eventMap.EventCategories {
55+
eventCategories = append(eventCategories, aws.StringValue(v))
56+
}
57+
}
58+
59+
d.SetId(resource.UniqueId())
60+
if err := d.Set("event_categories", eventCategories); err != nil {
61+
return fmt.Errorf("Error setting Event Categories: %s", err)
62+
}
63+
64+
return nil
65+
66+
}
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package aws
2+
3+
import (
4+
"fmt"
5+
"reflect"
6+
"regexp"
7+
"sort"
8+
"strconv"
9+
"testing"
10+
11+
"github.com/hashicorp/terraform/helper/resource"
12+
"github.com/hashicorp/terraform/terraform"
13+
)
14+
15+
func TestAccAWSDbEventCategories_basic(t *testing.T) {
16+
resource.Test(t, resource.TestCase{
17+
PreCheck: func() { testAccPreCheck(t) },
18+
Providers: testAccProviders,
19+
Steps: []resource.TestStep{
20+
{
21+
Config: testAccCheckAwsDbEventCategoriesConfig,
22+
Check: resource.ComposeTestCheckFunc(
23+
testAccAwsDbEventCategoriesAttrCheck("data.aws_db_event_categories.example",
24+
completeEventCategoriesList),
25+
),
26+
},
27+
},
28+
})
29+
}
30+
31+
func TestAccAWSDbEventCategories_sourceType(t *testing.T) {
32+
resource.Test(t, resource.TestCase{
33+
PreCheck: func() { testAccPreCheck(t) },
34+
Providers: testAccProviders,
35+
Steps: []resource.TestStep{
36+
{
37+
Config: testAccCheckAwsDbEventCategoriesConfig_sourceType,
38+
Check: resource.ComposeTestCheckFunc(
39+
testAccAwsDbEventCategoriesAttrCheck("data.aws_db_event_categories.example",
40+
DbSnapshotEventCategoriesList),
41+
),
42+
},
43+
},
44+
})
45+
}
46+
47+
func testAccAwsDbEventCategoriesAttrCheck(n string, expected []string) resource.TestCheckFunc {
48+
return func(s *terraform.State) error {
49+
rs, ok := s.RootModule().Resources[n]
50+
if !ok {
51+
return fmt.Errorf("Can't find DB Event Categories: %s", n)
52+
}
53+
54+
if rs.Primary.ID == "" {
55+
return fmt.Errorf("DB Event Categories resource ID not set.")
56+
}
57+
58+
actual, err := testAccCheckAwsDbEventCategoriesBuild(rs.Primary.Attributes)
59+
if err != nil {
60+
return err
61+
}
62+
63+
sort.Strings(actual)
64+
sort.Strings(expected)
65+
if reflect.DeepEqual(expected, actual) != true {
66+
return fmt.Errorf("DB Event Categories not matched: expected %v, got %v", expected, actual)
67+
}
68+
69+
return nil
70+
}
71+
}
72+
73+
func testAccCheckAwsDbEventCategoriesBuild(attrs map[string]string) ([]string, error) {
74+
v, ok := attrs["event_categories.#"]
75+
if !ok {
76+
return nil, fmt.Errorf("DB Event Categories list is missing.")
77+
}
78+
79+
qty, err := strconv.Atoi(v)
80+
if err != nil {
81+
return nil, err
82+
}
83+
if qty < 1 {
84+
return nil, fmt.Errorf("No DB Event Categories found.")
85+
}
86+
87+
var eventCategories []string
88+
for k, v := range attrs {
89+
matched, _ := regexp.MatchString("event_categories.[0-9]+", k)
90+
if matched {
91+
eventCategories = append(eventCategories, v)
92+
}
93+
}
94+
95+
return eventCategories, nil
96+
}
97+
98+
var testAccCheckAwsDbEventCategoriesConfig = `
99+
data "aws_db_event_categories" "example" {}
100+
`
101+
102+
var completeEventCategoriesList = []string{
103+
"notification",
104+
"deletion",
105+
"failover",
106+
"maintenance",
107+
"availability",
108+
"read replica",
109+
"failure",
110+
"configuration change",
111+
"recovery",
112+
"low storage",
113+
"backup",
114+
"creation",
115+
"backtrack",
116+
"restoration",
117+
}
118+
119+
var testAccCheckAwsDbEventCategoriesConfig_sourceType = `
120+
data "aws_db_event_categories" "example" {
121+
source_type = "db-snapshot"
122+
}
123+
`
124+
125+
var DbSnapshotEventCategoriesList = []string{
126+
"notification",
127+
"deletion",
128+
"creation",
129+
"restoration",
130+
}

aws/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ func Provider() terraform.ResourceProvider {
182182
"aws_cognito_user_pools": dataSourceAwsCognitoUserPools(),
183183
"aws_codecommit_repository": dataSourceAwsCodeCommitRepository(),
184184
"aws_db_cluster_snapshot": dataSourceAwsDbClusterSnapshot(),
185+
"aws_db_event_categories": dataSourceAwsDbEventCategories(),
185186
"aws_db_instance": dataSourceAwsDbInstance(),
186187
"aws_db_snapshot": dataSourceAwsDbSnapshot(),
187188
"aws_dx_gateway": dataSourceAwsDxGateway(),

website/aws.erb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@
108108
<li<%= sidebar_current("docs-aws-datasource-db-cluster-snapshot") %>>
109109
<a href="/docs/providers/aws/d/db_cluster_snapshot.html">aws_db_cluster_snapshot</a>
110110
</li>
111+
<li<%= sidebar_current("docs-aws-datasource-db-event-categories") %>>
112+
<a href="/docs/providers/aws/d/db_event_categories.html">aws_db_event_categories</a>
113+
</li>
111114
<li<%= sidebar_current("docs-aws-datasource-db-instance") %>>
112115
<a href="/docs/providers/aws/d/db_instance.html">aws_db_instance</a>
113116
</li>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
layout: "aws"
3+
page_title: "AWS: aws_db_event_categories"
4+
sidebar_current: "docs-aws-datasource-db-event-categories"
5+
description: |-
6+
Provides a list of DB Event Categories which can be used to pass values into DB Event Subscription.
7+
---
8+
9+
# Data Source: aws_db_event_categories
10+
11+
## Example Usage
12+
13+
List the event categories of all the RDS resources.
14+
15+
```hcl
16+
data "aws_db_event_categories" "example" {}
17+
18+
output "example" {
19+
value = "${data.aws_db_event_categories.example.event_categories}"
20+
}
21+
```
22+
23+
List the event categories specific to the RDS resource `db-snapshot`.
24+
25+
```hcl
26+
data "aws_db_event_categories" "example" {
27+
source_type = "db-snapshot"
28+
}
29+
30+
output "example" {
31+
value = "${data.aws_db_event_categories.example.event_categories}"
32+
}
33+
```
34+
35+
## Argument Reference
36+
37+
The following arguments are supported:
38+
39+
* `source_type` - (Optional) The type of source that will be generating the events. Valid options are db-instance, db-security-group, db-parameter-group, db-snapshot, db-cluster or db-cluster-snapshot.
40+
41+
## Attributes Reference
42+
43+
In addition to all arguments above, the following attributes are exported:
44+
45+
* `event_categories` - A list of the event categories.

0 commit comments

Comments
 (0)