Skip to content

Commit

Permalink
resource/aws_glue_trigger: Updates to address #9762, #10190, and #10891
Browse files Browse the repository at this point in the history
… complex merge and review feedback

Reference: #9762
Reference: #10190
Reference: #10891

Output from acceptance testing:

```
--- PASS: TestAccAWSGlueTrigger_WorkflowName (30.76s)
--- PASS: TestAccAWSGlueTrigger_Basic (50.13s)
--- PASS: TestAccAWSGlueTrigger_Description (54.13s)
--- PASS: TestAccAWSGlueTrigger_Predicate (65.53s)
--- PASS: TestAccAWSGlueTrigger_Schedule (79.04s)
--- PASS: TestAccAWSGlueTrigger_Crawler (85.59s)
--- PASS: TestAccAWSGlueTrigger_Enabled (117.36s)
```
  • Loading branch information
bflad committed Nov 19, 2019
1 parent f74f716 commit 4d2b505
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 82 deletions.
80 changes: 48 additions & 32 deletions aws/resource_aws_glue_trigger.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,12 @@ func resourceAwsGlueTrigger() *schema.Resource {
Optional: true,
},
"crawler_name": {
Type: schema.TypeString,
Optional: true,
ConflictsWith: []string{"actions.0.job_name"},
Type: schema.TypeString,
Optional: true,
},
"job_name": {
Type: schema.TypeString,
Optional: true,
ConflictsWith: []string{"actions.0.crawler_name"},
Type: schema.TypeString,
Optional: true,
},
"timeout": {
Type: schema.TypeInt,
Expand Down Expand Up @@ -82,14 +80,12 @@ func resourceAwsGlueTrigger() *schema.Resource {
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"job_name": {
Type: schema.TypeString,
Optional: true,
ConflictsWith: []string{"predicate.0.conditions.0.crawler_name"},
Type: schema.TypeString,
Optional: true,
},
"crawler_name": {
Type: schema.TypeString,
Optional: true,
ConflictsWith: []string{"predicate.0.conditions.0.job_name"},
Type: schema.TypeString,
Optional: true,
},
"logical_operator": {
Type: schema.TypeString,
Expand Down Expand Up @@ -405,12 +401,12 @@ func expandGlueActions(l []interface{}) []*glue.Action {

action := &glue.Action{}

if crawlerName, ok := m["crawler_name"]; ok && crawlerName != "" {
action.CrawlerName = aws.String(crawlerName.(string))
if v, ok := m["crawler_name"].(string); ok && v != "" {
action.CrawlerName = aws.String(v)
}

if jobName, ok := m["job_name"]; ok && jobName != "" {
action.JobName = aws.String(jobName.(string))
if v, ok := m["job_name"].(string); ok && v != "" {
action.JobName = aws.String(v)
}

argumentsMap := make(map[string]string)
Expand Down Expand Up @@ -439,12 +435,20 @@ func expandGlueConditions(l []interface{}) []*glue.Condition {
LogicalOperator: aws.String(m["logical_operator"].(string)),
}

if len(m["job_name"].(string)) > 0 {
condition.JobName = aws.String(m["job_name"].(string))
condition.State = aws.String(m["state"].(string))
} else if len(m["crawler_name"].(string)) > 0 {
condition.CrawlerName = aws.String(m["crawler_name"].(string))
condition.CrawlState = aws.String(m["crawl_state"].(string))
if v, ok := m["crawler_name"].(string); ok && v != "" {
condition.CrawlerName = aws.String(v)
}

if v, ok := m["crawl_state"].(string); ok && v != "" {
condition.CrawlState = aws.String(v)
}

if v, ok := m["job_name"].(string); ok && v != "" {
condition.JobName = aws.String(v)
}

if v, ok := m["state"].(string); ok && v != "" {
condition.State = aws.String(v)
}

conditions = append(conditions, condition)
Expand Down Expand Up @@ -476,11 +480,14 @@ func flattenGlueActions(actions []*glue.Action) []interface{} {
"timeout": int(aws.Int64Value(action.Timeout)),
}

if action.JobName != nil && len(*action.JobName) > 0 {
m["job_name"] = aws.StringValue(action.JobName)
} else if action.CrawlerName != nil && len(*action.CrawlerName) > 0 {
m["crawler_name"] = aws.StringValue(action.CrawlerName)
if v := aws.StringValue(action.CrawlerName); v != "" {
m["crawler_name"] = v
}

if v := aws.StringValue(action.JobName); v != "" {
m["job_name"] = v
}

l = append(l, m)
}

Expand All @@ -495,13 +502,22 @@ func flattenGlueConditions(conditions []*glue.Condition) []interface{} {
"logical_operator": aws.StringValue(condition.LogicalOperator),
}

if condition.JobName != nil && len(*condition.JobName) > 0 {
m["job_name"] = aws.StringValue(condition.JobName)
m["state"] = aws.StringValue(condition.State)
} else if condition.CrawlerName != nil && len(*condition.CrawlerName) > 0 {
m["crawler_name"] = aws.StringValue(condition.CrawlerName)
m["crawl_state"] = aws.StringValue(condition.CrawlState)
if v := aws.StringValue(condition.CrawlerName); v != "" {
m["crawler_name"] = v
}

if v := aws.StringValue(condition.CrawlState); v != "" {
m["crawl_state"] = v
}

if v := aws.StringValue(condition.JobName); v != "" {
m["job_name"] = v
}

if v := aws.StringValue(condition.State); v != "" {
m["state"] = v
}

l = append(l, m)
}

Expand Down
49 changes: 0 additions & 49 deletions aws/resource_aws_glue_trigger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,40 +135,6 @@ func TestAccAWSGlueTrigger_Crawler(t *testing.T) {
})
}

func TestAccAWSGlueTrigger_Crawler(t *testing.T) {
var trigger glue.Trigger

rName := fmt.Sprintf("tf-acc-test-%s", acctest.RandString(5))
resourceName := "aws_glue_trigger.test"

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckAWSGlueTriggerDestroy,
Steps: []resource.TestStep{
{
Config: testAccAWSGlueTriggerConfig_Crawler(rName),
Check: resource.ComposeTestCheckFunc(
testAccCheckAWSGlueTriggerExists(resourceName, &trigger),
resource.TestCheckResourceAttr(resourceName, "actions.#", "1"),
resource.TestCheckResourceAttr(resourceName, "actions.0.crawler_name", rName),
resource.TestCheckResourceAttr(resourceName, "description", ""),
resource.TestCheckResourceAttr(resourceName, "enabled", "true"),
resource.TestCheckResourceAttr(resourceName, "name", rName),
resource.TestCheckResourceAttr(resourceName, "predicate.#", "0"),
resource.TestCheckResourceAttr(resourceName, "schedule", ""),
resource.TestCheckResourceAttr(resourceName, "type", "ON_DEMAND"),
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
},
})
}

func TestAccAWSGlueTrigger_Description(t *testing.T) {
var trigger glue.Trigger

Expand Down Expand Up @@ -458,21 +424,6 @@ resource "aws_glue_trigger" "test" {
`, testAccAWSGlueJobConfig_Required(rName), rName)
}

func testAccAWSGlueTriggerConfig_Crawler(rName string) string {
return fmt.Sprintf(`
%s
resource "aws_glue_trigger" "test" {
name = "%s"
type = "ON_DEMAND"
actions {
crawler_name = "${aws_glue_crawler.test.name}"
}
}
`, testAccGlueCrawlerConfig_DynamodbTarget(rName, "table1"), rName)
}

func testAccAWSGlueTriggerConfig_Predicate(rName, state string) string {
return fmt.Sprintf(`
%s
Expand Down
2 changes: 1 addition & 1 deletion website/docs/r/glue_trigger.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ The following arguments are supported:
* `predicate` – (Optional) A predicate to specify when the new trigger should fire. Required when trigger type is `CONDITIONAL`. Defined below.
* `schedule` – (Optional) A cron expression used to specify the schedule. [Time-Based Schedules for Jobs and Crawlers](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html)
* `type` – (Required) The type of trigger. Valid values are `CONDITIONAL`, `ON_DEMAND`, and `SCHEDULED`.
* `workflow_name` - (Optional) A workflow to which the trigger should be associated to. Every workflow graph (DAG) needs a starting trigger (`ON_DEMAND` or `SCHEDULED`) and can contain multiple additional `CONDITIONAL` triggers.
* `workflow_name` - (Optional) A workflow to which the trigger should be associated to. Every workflow graph (DAG) needs a starting trigger (`ON_DEMAND` or `SCHEDULED` type) and can contain multiple additional `CONDITIONAL` triggers.

### actions Argument Reference

Expand Down

0 comments on commit 4d2b505

Please sign in to comment.