Skip to content

Commit 4d4ec6c

Browse files
ifuyivarastack72
authored andcommitted
provider/aws: Support for SES Configuration sets and Event Destinations (hashicorp#10735)
* adding configuration set * adding event destination * adding test, all tests passing * adding doccumentation
1 parent 3228bd2 commit 4d4ec6c

8 files changed

Lines changed: 708 additions & 0 deletions

builtin/providers/aws/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,8 @@ func Provider() terraform.ResourceProvider {
340340
"aws_ses_receipt_filter": resourceAwsSesReceiptFilter(),
341341
"aws_ses_receipt_rule": resourceAwsSesReceiptRule(),
342342
"aws_ses_receipt_rule_set": resourceAwsSesReceiptRuleSet(),
343+
"aws_ses_configuration_set": resourceAwsSesConfigurationSet(),
344+
"aws_ses_event_destination": resourceAwsSesEventDestination(),
343345
"aws_s3_bucket": resourceAwsS3Bucket(),
344346
"aws_s3_bucket_policy": resourceAwsS3BucketPolicy(),
345347
"aws_s3_bucket_object": resourceAwsS3BucketObject(),
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
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/ses"
9+
"github.com/hashicorp/terraform/helper/schema"
10+
)
11+
12+
func resourceAwsSesConfigurationSet() *schema.Resource {
13+
return &schema.Resource{
14+
Create: resourceAwsSesConfigurationSetCreate,
15+
Read: resourceAwsSesConfigurationSetRead,
16+
Delete: resourceAwsSesConfigurationSetDelete,
17+
Importer: &schema.ResourceImporter{
18+
State: schema.ImportStatePassthrough,
19+
},
20+
21+
Schema: map[string]*schema.Schema{
22+
"name": &schema.Schema{
23+
Type: schema.TypeString,
24+
Required: true,
25+
ForceNew: true,
26+
},
27+
},
28+
}
29+
}
30+
31+
func resourceAwsSesConfigurationSetCreate(d *schema.ResourceData, meta interface{}) error {
32+
conn := meta.(*AWSClient).sesConn
33+
34+
configurationSetName := d.Get("name").(string)
35+
36+
createOpts := &ses.CreateConfigurationSetInput{
37+
ConfigurationSet: &ses.ConfigurationSet{
38+
Name: aws.String(configurationSetName),
39+
},
40+
}
41+
42+
_, err := conn.CreateConfigurationSet(createOpts)
43+
if err != nil {
44+
return fmt.Errorf("Error creating SES configuration set: %s", err)
45+
}
46+
47+
d.SetId(configurationSetName)
48+
49+
return resourceAwsSesConfigurationSetRead(d, meta)
50+
}
51+
52+
func resourceAwsSesConfigurationSetRead(d *schema.ResourceData, meta interface{}) error {
53+
configurationSetExists, err := findConfigurationSet(d.Id(), nil, meta)
54+
55+
if !configurationSetExists {
56+
log.Printf("[WARN] SES Configuration Set (%s) not found", d.Id())
57+
d.SetId("")
58+
return nil
59+
}
60+
61+
if err != nil {
62+
return err
63+
}
64+
65+
d.Set("name", d.Id())
66+
67+
return nil
68+
}
69+
70+
func resourceAwsSesConfigurationSetDelete(d *schema.ResourceData, meta interface{}) error {
71+
conn := meta.(*AWSClient).sesConn
72+
73+
log.Printf("[DEBUG] SES Delete Configuration Rule Set: %s", d.Id())
74+
_, err := conn.DeleteConfigurationSet(&ses.DeleteConfigurationSetInput{
75+
ConfigurationSetName: aws.String(d.Id()),
76+
})
77+
78+
if err != nil {
79+
return err
80+
}
81+
82+
return nil
83+
}
84+
85+
func findConfigurationSet(name string, token *string, meta interface{}) (bool, error) {
86+
conn := meta.(*AWSClient).sesConn
87+
88+
configurationSetExists := false
89+
90+
listOpts := &ses.ListConfigurationSetsInput{
91+
NextToken: token,
92+
}
93+
94+
response, err := conn.ListConfigurationSets(listOpts)
95+
for _, element := range response.ConfigurationSets {
96+
if *element.Name == name {
97+
configurationSetExists = true
98+
}
99+
}
100+
101+
if err != nil && !configurationSetExists && response.NextToken != nil {
102+
configurationSetExists, err = findConfigurationSet(name, response.NextToken, meta)
103+
}
104+
105+
if err != nil {
106+
return false, err
107+
}
108+
109+
return configurationSetExists, nil
110+
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package aws
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/aws/aws-sdk-go/service/ses"
8+
"github.com/hashicorp/terraform/helper/resource"
9+
"github.com/hashicorp/terraform/terraform"
10+
)
11+
12+
func TestAccAWSSESConfigurationSet_basic(t *testing.T) {
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: func() {
15+
testAccPreCheck(t)
16+
},
17+
Providers: testAccProviders,
18+
CheckDestroy: testAccCheckSESConfigurationSetDestroy,
19+
Steps: []resource.TestStep{
20+
resource.TestStep{
21+
Config: testAccAWSSESConfigurationSetConfig,
22+
Check: resource.ComposeTestCheckFunc(
23+
testAccCheckAwsSESConfigurationSetExists("aws_ses_configuration_set.test"),
24+
),
25+
},
26+
},
27+
})
28+
}
29+
30+
func testAccCheckSESConfigurationSetDestroy(s *terraform.State) error {
31+
conn := testAccProvider.Meta().(*AWSClient).sesConn
32+
33+
for _, rs := range s.RootModule().Resources {
34+
if rs.Type != "aws_ses_configuration_set" {
35+
continue
36+
}
37+
38+
response, err := conn.ListConfigurationSets(&ses.ListConfigurationSetsInput{})
39+
if err != nil {
40+
return err
41+
}
42+
43+
found := false
44+
for _, element := range response.ConfigurationSets {
45+
if *element.Name == "some-configuration-set" {
46+
found = true
47+
}
48+
}
49+
50+
if found {
51+
return fmt.Errorf("The configuration set still exists")
52+
}
53+
54+
}
55+
56+
return nil
57+
58+
}
59+
60+
func testAccCheckAwsSESConfigurationSetExists(n string) resource.TestCheckFunc {
61+
return func(s *terraform.State) error {
62+
rs, ok := s.RootModule().Resources[n]
63+
if !ok {
64+
return fmt.Errorf("SES configuration set not found: %s", n)
65+
}
66+
67+
if rs.Primary.ID == "" {
68+
return fmt.Errorf("SES configuration set ID not set")
69+
}
70+
71+
conn := testAccProvider.Meta().(*AWSClient).sesConn
72+
73+
response, err := conn.ListConfigurationSets(&ses.ListConfigurationSetsInput{})
74+
if err != nil {
75+
return err
76+
}
77+
78+
found := false
79+
for _, element := range response.ConfigurationSets {
80+
if *element.Name == "some-configuration-set" {
81+
found = true
82+
}
83+
}
84+
85+
if !found {
86+
return fmt.Errorf("The configuration set was not created")
87+
}
88+
89+
return nil
90+
}
91+
}
92+
93+
const testAccAWSSESConfigurationSetConfig = `
94+
resource "aws_ses_configuration_set" "test" {
95+
name = "some-configuration-set"
96+
}
97+
`

0 commit comments

Comments
 (0)