github.com/ottenhoff/terraform@v0.7.0-rc1.0.20160607213102-ac2d195cc560/builtin/providers/aws/resource_aws_codedeploy_deployment_group_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "reflect" 6 "regexp" 7 "sort" 8 "testing" 9 10 "github.com/aws/aws-sdk-go/aws" 11 "github.com/aws/aws-sdk-go/aws/awserr" 12 "github.com/aws/aws-sdk-go/service/codedeploy" 13 "github.com/hashicorp/terraform/helper/resource" 14 "github.com/hashicorp/terraform/helper/schema" 15 "github.com/hashicorp/terraform/terraform" 16 ) 17 18 func TestAccAWSCodeDeployDeploymentGroup_basic(t *testing.T) { 19 var group codedeploy.DeploymentGroupInfo 20 21 resource.Test(t, resource.TestCase{ 22 PreCheck: func() { testAccPreCheck(t) }, 23 Providers: testAccProviders, 24 CheckDestroy: testAccCheckAWSCodeDeployDeploymentGroupDestroy, 25 Steps: []resource.TestStep{ 26 resource.TestStep{ 27 Config: testAccAWSCodeDeployDeploymentGroup, 28 Check: resource.ComposeTestCheckFunc( 29 testAccCheckAWSCodeDeployDeploymentGroupExists("aws_codedeploy_deployment_group.foo", &group), 30 resource.TestCheckResourceAttr( 31 "aws_codedeploy_deployment_group.foo", "app_name", "foo_app"), 32 resource.TestCheckResourceAttr( 33 "aws_codedeploy_deployment_group.foo", "deployment_group_name", "foo"), 34 resource.TestCheckResourceAttr( 35 "aws_codedeploy_deployment_group.foo", "deployment_config_name", "CodeDeployDefault.OneAtATime"), 36 37 resource.TestCheckResourceAttr( 38 "aws_codedeploy_deployment_group.foo", "ec2_tag_filter.#", "1"), 39 resource.TestCheckResourceAttr( 40 "aws_codedeploy_deployment_group.foo", "ec2_tag_filter.2916377465.key", "filterkey"), 41 resource.TestCheckResourceAttr( 42 "aws_codedeploy_deployment_group.foo", "ec2_tag_filter.2916377465.type", "KEY_AND_VALUE"), 43 resource.TestCheckResourceAttr( 44 "aws_codedeploy_deployment_group.foo", "ec2_tag_filter.2916377465.value", "filtervalue"), 45 ), 46 }, 47 resource.TestStep{ 48 Config: testAccAWSCodeDeployDeploymentGroupModified, 49 Check: resource.ComposeTestCheckFunc( 50 testAccCheckAWSCodeDeployDeploymentGroupExists("aws_codedeploy_deployment_group.foo", &group), 51 resource.TestCheckResourceAttr( 52 "aws_codedeploy_deployment_group.foo", "app_name", "foo_app"), 53 resource.TestCheckResourceAttr( 54 "aws_codedeploy_deployment_group.foo", "deployment_group_name", "bar"), 55 resource.TestCheckResourceAttr( 56 "aws_codedeploy_deployment_group.foo", "deployment_config_name", "CodeDeployDefault.OneAtATime"), 57 58 resource.TestCheckResourceAttr( 59 "aws_codedeploy_deployment_group.foo", "ec2_tag_filter.#", "1"), 60 resource.TestCheckResourceAttr( 61 "aws_codedeploy_deployment_group.foo", "ec2_tag_filter.2369538975.key", "filterkey"), 62 resource.TestCheckResourceAttr( 63 "aws_codedeploy_deployment_group.foo", "ec2_tag_filter.2369538975.type", "KEY_AND_VALUE"), 64 resource.TestCheckResourceAttr( 65 "aws_codedeploy_deployment_group.foo", "ec2_tag_filter.2369538975.value", "anotherfiltervalue"), 66 ), 67 }, 68 }, 69 }) 70 } 71 72 func TestAccAWSCodeDeployDeploymentGroup_onPremiseTag(t *testing.T) { 73 var group codedeploy.DeploymentGroupInfo 74 75 resource.Test(t, resource.TestCase{ 76 PreCheck: func() { testAccPreCheck(t) }, 77 Providers: testAccProviders, 78 CheckDestroy: testAccCheckAWSCodeDeployDeploymentGroupDestroy, 79 Steps: []resource.TestStep{ 80 resource.TestStep{ 81 Config: testAccAWSCodeDeployDeploymentGroupOnPremiseTags, 82 Check: resource.ComposeTestCheckFunc( 83 testAccCheckAWSCodeDeployDeploymentGroupExists("aws_codedeploy_deployment_group.foo", &group), 84 resource.TestCheckResourceAttr( 85 "aws_codedeploy_deployment_group.foo", "app_name", "foo_app"), 86 resource.TestCheckResourceAttr( 87 "aws_codedeploy_deployment_group.foo", "deployment_group_name", "foo"), 88 resource.TestCheckResourceAttr( 89 "aws_codedeploy_deployment_group.foo", "deployment_config_name", "CodeDeployDefault.OneAtATime"), 90 91 resource.TestCheckResourceAttr( 92 "aws_codedeploy_deployment_group.foo", "on_premises_instance_tag_filter.#", "1"), 93 resource.TestCheckResourceAttr( 94 "aws_codedeploy_deployment_group.foo", "on_premises_instance_tag_filter.2916377465.key", "filterkey"), 95 resource.TestCheckResourceAttr( 96 "aws_codedeploy_deployment_group.foo", "on_premises_instance_tag_filter.2916377465.type", "KEY_AND_VALUE"), 97 resource.TestCheckResourceAttr( 98 "aws_codedeploy_deployment_group.foo", "on_premises_instance_tag_filter.2916377465.value", "filtervalue"), 99 ), 100 }, 101 }, 102 }) 103 } 104 105 func TestAccAWSCodeDeployDeploymentGroup_triggerConfiguration_basic(t *testing.T) { 106 var group codedeploy.DeploymentGroupInfo 107 108 resource.Test(t, resource.TestCase{ 109 PreCheck: func() { testAccPreCheck(t) }, 110 Providers: testAccProviders, 111 CheckDestroy: testAccCheckAWSCodeDeployDeploymentGroupDestroy, 112 Steps: []resource.TestStep{ 113 resource.TestStep{ 114 Config: testAccAWSCodeDeployDeploymentGroup_triggerConfiguration_create, 115 Check: resource.ComposeTestCheckFunc( 116 testAccCheckAWSCodeDeployDeploymentGroupExists("aws_codedeploy_deployment_group.foo_group", &group), 117 resource.TestCheckResourceAttr( 118 "aws_codedeploy_deployment_group.foo_group", "app_name", "foo-app"), 119 resource.TestCheckResourceAttr( 120 "aws_codedeploy_deployment_group.foo_group", "deployment_group_name", "foo-group"), 121 testAccCheckTriggerEvents(&group, "foo-trigger", []string{ 122 "DeploymentFailure", 123 }), 124 ), 125 }, 126 resource.TestStep{ 127 Config: testAccAWSCodeDeployDeploymentGroup_triggerConfiguration_update, 128 Check: resource.ComposeTestCheckFunc( 129 testAccCheckAWSCodeDeployDeploymentGroupExists("aws_codedeploy_deployment_group.foo_group", &group), 130 resource.TestCheckResourceAttr( 131 "aws_codedeploy_deployment_group.foo_group", "app_name", "foo-app"), 132 resource.TestCheckResourceAttr( 133 "aws_codedeploy_deployment_group.foo_group", "deployment_group_name", "foo-group"), 134 testAccCheckTriggerEvents(&group, "foo-trigger", []string{ 135 "DeploymentFailure", 136 "DeploymentSuccess", 137 }), 138 ), 139 }, 140 }, 141 }) 142 } 143 144 func TestAccAWSCodeDeployDeploymentGroup_triggerConfiguration_multiple(t *testing.T) { 145 var group codedeploy.DeploymentGroupInfo 146 147 resource.Test(t, resource.TestCase{ 148 PreCheck: func() { testAccPreCheck(t) }, 149 Providers: testAccProviders, 150 CheckDestroy: testAccCheckAWSCodeDeployDeploymentGroupDestroy, 151 Steps: []resource.TestStep{ 152 resource.TestStep{ 153 Config: testAccAWSCodeDeployDeploymentGroup_triggerConfiguration_createMultiple, 154 Check: resource.ComposeTestCheckFunc( 155 testAccCheckAWSCodeDeployDeploymentGroupExists("aws_codedeploy_deployment_group.foo_group", &group), 156 resource.TestCheckResourceAttr( 157 "aws_codedeploy_deployment_group.foo_group", "app_name", "foo-app"), 158 resource.TestCheckResourceAttr( 159 "aws_codedeploy_deployment_group.foo_group", "deployment_group_name", "foo-group"), 160 testAccCheckTriggerEvents(&group, "foo-trigger", []string{ 161 "DeploymentFailure", 162 }), 163 testAccCheckTriggerEvents(&group, "bar-trigger", []string{ 164 "InstanceFailure", 165 }), 166 testAccCheckTriggerTargetArn(&group, "bar-trigger", 167 regexp.MustCompile("^arn:aws:sns:[^:]+:[0-9]{12}:bar-topic$")), 168 ), 169 }, 170 resource.TestStep{ 171 Config: testAccAWSCodeDeployDeploymentGroup_triggerConfiguration_updateMultiple, 172 Check: resource.ComposeTestCheckFunc( 173 testAccCheckAWSCodeDeployDeploymentGroupExists("aws_codedeploy_deployment_group.foo_group", &group), 174 resource.TestCheckResourceAttr( 175 "aws_codedeploy_deployment_group.foo_group", "app_name", "foo-app"), 176 resource.TestCheckResourceAttr( 177 "aws_codedeploy_deployment_group.foo_group", "deployment_group_name", "foo-group"), 178 testAccCheckTriggerEvents(&group, "foo-trigger", []string{ 179 "DeploymentFailure", 180 "DeploymentStart", 181 "DeploymentStop", 182 "DeploymentSuccess", 183 }), 184 testAccCheckTriggerEvents(&group, "bar-trigger", []string{ 185 "InstanceFailure", 186 }), 187 testAccCheckTriggerTargetArn(&group, "bar-trigger", 188 regexp.MustCompile("^arn:aws:sns:[^:]+:[0-9]{12}:baz-topic$")), 189 ), 190 }, 191 }, 192 }) 193 } 194 195 func TestValidateAWSCodeDeployTriggerEvent(t *testing.T) { 196 cases := []struct { 197 Value string 198 ErrCount int 199 }{ 200 { 201 Value: "DeploymentStart", 202 ErrCount: 0, 203 }, 204 { 205 Value: "DeploymentStop", 206 ErrCount: 0, 207 }, 208 { 209 Value: "DeploymentSuccess", 210 ErrCount: 0, 211 }, 212 { 213 Value: "DeploymentFailure", 214 ErrCount: 0, 215 }, 216 { 217 Value: "InstanceStart", 218 ErrCount: 0, 219 }, 220 { 221 Value: "InstanceSuccess", 222 ErrCount: 0, 223 }, 224 { 225 Value: "InstanceFailure", 226 ErrCount: 0, 227 }, 228 { 229 Value: "DeploymentStarts", 230 ErrCount: 1, 231 }, 232 { 233 Value: "InstanceFail", 234 ErrCount: 1, 235 }, 236 { 237 Value: "Foo", 238 ErrCount: 1, 239 }, 240 { 241 Value: "", 242 ErrCount: 1, 243 }, 244 } 245 246 for _, tc := range cases { 247 _, errors := validateTriggerEvent(tc.Value, "trigger_event") 248 if len(errors) != tc.ErrCount { 249 t.Fatalf("Trigger event validation failed for event type %q: %q", tc.Value, errors) 250 } 251 } 252 } 253 254 func TestBuildTriggerConfigs(t *testing.T) { 255 input := []interface{}{ 256 map[string]interface{}{ 257 "trigger_events": schema.NewSet(schema.HashString, []interface{}{ 258 "DeploymentFailure", 259 }), 260 "trigger_name": "foo-trigger", 261 "trigger_target_arn": "arn:aws:sns:us-west-2:123456789012:foo-topic", 262 }, 263 } 264 265 expected := []*codedeploy.TriggerConfig{ 266 &codedeploy.TriggerConfig{ 267 TriggerEvents: []*string{ 268 aws.String("DeploymentFailure"), 269 }, 270 TriggerName: aws.String("foo-trigger"), 271 TriggerTargetArn: aws.String("arn:aws:sns:us-west-2:123456789012:foo-topic"), 272 }, 273 } 274 275 actual := buildTriggerConfigs(input) 276 277 if !reflect.DeepEqual(actual, expected) { 278 t.Fatalf("buildTriggerConfigs output is not correct.\nGot:\n%#v\nExpected:\n%#v\n", 279 actual, expected) 280 } 281 } 282 283 func TestTriggerConfigsToMap(t *testing.T) { 284 input := []*codedeploy.TriggerConfig{ 285 &codedeploy.TriggerConfig{ 286 TriggerEvents: []*string{ 287 aws.String("DeploymentFailure"), 288 aws.String("InstanceFailure"), 289 }, 290 TriggerName: aws.String("bar-trigger"), 291 TriggerTargetArn: aws.String("arn:aws:sns:us-west-2:123456789012:bar-topic"), 292 }, 293 } 294 295 expected := map[string]interface{}{ 296 "trigger_events": schema.NewSet(schema.HashString, []interface{}{ 297 "DeploymentFailure", 298 "InstanceFailure", 299 }), 300 "trigger_name": "bar-trigger", 301 "trigger_target_arn": "arn:aws:sns:us-west-2:123456789012:bar-topic", 302 } 303 304 actual := triggerConfigsToMap(input)[0] 305 306 fatal := false 307 308 if actual["trigger_name"] != expected["trigger_name"] { 309 fatal = true 310 } 311 312 if actual["trigger_target_arn"] != expected["trigger_target_arn"] { 313 fatal = true 314 } 315 316 actualEvents := actual["trigger_events"].(*schema.Set) 317 expectedEvents := expected["trigger_events"].(*schema.Set) 318 if !actualEvents.Equal(expectedEvents) { 319 fatal = true 320 } 321 322 if fatal { 323 t.Fatalf("triggerConfigsToMap output is not correct.\nGot:\n%#v\nExpected:\n%#v\n", 324 actual, expected) 325 } 326 } 327 328 func testAccCheckTriggerEvents(group *codedeploy.DeploymentGroupInfo, triggerName string, expectedEvents []string) resource.TestCheckFunc { 329 return func(s *terraform.State) error { 330 331 for _, actual := range group.TriggerConfigurations { 332 if *actual.TriggerName == triggerName { 333 334 numberOfEvents := len(actual.TriggerEvents) 335 if numberOfEvents != len(expectedEvents) { 336 return fmt.Errorf("Trigger events do not match. Expected: %d. Got: %d.", 337 len(expectedEvents), numberOfEvents) 338 } 339 340 actualEvents := make([]string, 0, numberOfEvents) 341 for _, event := range actual.TriggerEvents { 342 actualEvents = append(actualEvents, *event) 343 } 344 sort.Strings(actualEvents) 345 346 if !reflect.DeepEqual(actualEvents, expectedEvents) { 347 return fmt.Errorf("Trigger events do not match.\nExpected: %v\nGot: %v\n", 348 expectedEvents, actualEvents) 349 } 350 break 351 } 352 } 353 return nil 354 } 355 } 356 357 func testAccCheckTriggerTargetArn(group *codedeploy.DeploymentGroupInfo, triggerName string, r *regexp.Regexp) resource.TestCheckFunc { 358 return func(s *terraform.State) error { 359 for _, actual := range group.TriggerConfigurations { 360 if *actual.TriggerName == triggerName { 361 if !r.MatchString(*actual.TriggerTargetArn) { 362 return fmt.Errorf("Trigger target arn does not match regular expression.\nRegex: %v\nTriggerTargetArn: %v\n", 363 r, *actual.TriggerTargetArn) 364 } 365 break 366 } 367 } 368 return nil 369 } 370 } 371 372 func testAccCheckAWSCodeDeployDeploymentGroupDestroy(s *terraform.State) error { 373 conn := testAccProvider.Meta().(*AWSClient).codedeployconn 374 375 for _, rs := range s.RootModule().Resources { 376 if rs.Type != "aws_codedeploy_deployment_group" { 377 continue 378 } 379 380 resp, err := conn.GetDeploymentGroup(&codedeploy.GetDeploymentGroupInput{ 381 ApplicationName: aws.String(rs.Primary.Attributes["app_name"]), 382 DeploymentGroupName: aws.String(rs.Primary.Attributes["deployment_group_name"]), 383 }) 384 385 if ae, ok := err.(awserr.Error); ok && ae.Code() == "ApplicationDoesNotExistException" { 386 continue 387 } 388 389 if err == nil { 390 if resp.DeploymentGroupInfo.DeploymentGroupName != nil { 391 return fmt.Errorf("CodeDeploy deployment group still exists:\n%#v", *resp.DeploymentGroupInfo.DeploymentGroupName) 392 } 393 } 394 395 return err 396 } 397 398 return nil 399 } 400 401 func testAccCheckAWSCodeDeployDeploymentGroupExists(name string, group *codedeploy.DeploymentGroupInfo) resource.TestCheckFunc { 402 return func(s *terraform.State) error { 403 rs, ok := s.RootModule().Resources[name] 404 if !ok { 405 return fmt.Errorf("Not found: %s", name) 406 } 407 408 conn := testAccProvider.Meta().(*AWSClient).codedeployconn 409 410 resp, err := conn.GetDeploymentGroup(&codedeploy.GetDeploymentGroupInput{ 411 ApplicationName: aws.String(rs.Primary.Attributes["app_name"]), 412 DeploymentGroupName: aws.String(rs.Primary.Attributes["deployment_group_name"]), 413 }) 414 415 if err != nil { 416 return err 417 } 418 419 *group = *resp.DeploymentGroupInfo 420 421 return nil 422 } 423 } 424 425 var testAccAWSCodeDeployDeploymentGroup = ` 426 resource "aws_codedeploy_app" "foo_app" { 427 name = "foo_app" 428 } 429 430 resource "aws_iam_role_policy" "foo_policy" { 431 name = "foo_policy" 432 role = "${aws_iam_role.foo_role.id}" 433 policy = <<EOF 434 { 435 "Version": "2012-10-17", 436 "Statement": [ 437 { 438 "Effect": "Allow", 439 "Action": [ 440 "autoscaling:CompleteLifecycleAction", 441 "autoscaling:DeleteLifecycleHook", 442 "autoscaling:DescribeAutoScalingGroups", 443 "autoscaling:DescribeLifecycleHooks", 444 "autoscaling:PutLifecycleHook", 445 "autoscaling:RecordLifecycleActionHeartbeat", 446 "ec2:DescribeInstances", 447 "ec2:DescribeInstanceStatus", 448 "tag:GetTags", 449 "tag:GetResources" 450 ], 451 "Resource": "*" 452 } 453 ] 454 } 455 EOF 456 } 457 458 resource "aws_iam_role" "foo_role" { 459 name = "foo_role" 460 assume_role_policy = <<EOF 461 { 462 "Version": "2012-10-17", 463 "Statement": [ 464 { 465 "Sid": "", 466 "Effect": "Allow", 467 "Principal": { 468 "Service": [ 469 "codedeploy.amazonaws.com" 470 ] 471 }, 472 "Action": "sts:AssumeRole" 473 } 474 ] 475 } 476 EOF 477 } 478 479 resource "aws_codedeploy_deployment_group" "foo" { 480 app_name = "${aws_codedeploy_app.foo_app.name}" 481 deployment_group_name = "foo" 482 service_role_arn = "${aws_iam_role.foo_role.arn}" 483 ec2_tag_filter { 484 key = "filterkey" 485 type = "KEY_AND_VALUE" 486 value = "filtervalue" 487 } 488 }` 489 490 var testAccAWSCodeDeployDeploymentGroupModified = ` 491 resource "aws_codedeploy_app" "foo_app" { 492 name = "foo_app" 493 } 494 495 resource "aws_iam_role_policy" "foo_policy" { 496 name = "foo_policy" 497 role = "${aws_iam_role.foo_role.id}" 498 policy = <<EOF 499 { 500 "Version": "2012-10-17", 501 "Statement": [ 502 { 503 "Effect": "Allow", 504 "Action": [ 505 "autoscaling:CompleteLifecycleAction", 506 "autoscaling:DeleteLifecycleHook", 507 "autoscaling:DescribeAutoScalingGroups", 508 "autoscaling:DescribeLifecycleHooks", 509 "autoscaling:PutLifecycleHook", 510 "autoscaling:RecordLifecycleActionHeartbeat", 511 "ec2:DescribeInstances", 512 "ec2:DescribeInstanceStatus", 513 "tag:GetTags", 514 "tag:GetResources" 515 ], 516 "Resource": "*" 517 } 518 ] 519 } 520 EOF 521 } 522 523 resource "aws_iam_role" "foo_role" { 524 name = "foo_role" 525 assume_role_policy = <<EOF 526 { 527 "Version": "2012-10-17", 528 "Statement": [ 529 { 530 "Sid": "", 531 "Effect": "Allow", 532 "Principal": { 533 "Service": [ 534 "codedeploy.amazonaws.com" 535 ] 536 }, 537 "Action": "sts:AssumeRole" 538 } 539 ] 540 } 541 EOF 542 } 543 544 resource "aws_codedeploy_deployment_group" "foo" { 545 app_name = "${aws_codedeploy_app.foo_app.name}" 546 deployment_group_name = "bar" 547 service_role_arn = "${aws_iam_role.foo_role.arn}" 548 ec2_tag_filter { 549 key = "filterkey" 550 type = "KEY_AND_VALUE" 551 value = "anotherfiltervalue" 552 } 553 }` 554 555 var testAccAWSCodeDeployDeploymentGroupOnPremiseTags = ` 556 resource "aws_codedeploy_app" "foo_app" { 557 name = "foo_app" 558 } 559 560 resource "aws_iam_role_policy" "foo_policy" { 561 name = "foo_policy" 562 role = "${aws_iam_role.foo_role.id}" 563 policy = <<EOF 564 { 565 "Version": "2012-10-17", 566 "Statement": [ 567 { 568 "Effect": "Allow", 569 "Action": [ 570 "autoscaling:CompleteLifecycleAction", 571 "autoscaling:DeleteLifecycleHook", 572 "autoscaling:DescribeAutoScalingGroups", 573 "autoscaling:DescribeLifecycleHooks", 574 "autoscaling:PutLifecycleHook", 575 "autoscaling:RecordLifecycleActionHeartbeat", 576 "ec2:DescribeInstances", 577 "ec2:DescribeInstanceStatus", 578 "tag:GetTags", 579 "tag:GetResources" 580 ], 581 "Resource": "*" 582 } 583 ] 584 } 585 EOF 586 } 587 588 resource "aws_iam_role" "foo_role" { 589 name = "foo_role" 590 assume_role_policy = <<EOF 591 { 592 "Version": "2012-10-17", 593 "Statement": [ 594 { 595 "Sid": "", 596 "Effect": "Allow", 597 "Principal": { 598 "Service": [ 599 "codedeploy.amazonaws.com" 600 ] 601 }, 602 "Action": "sts:AssumeRole" 603 } 604 ] 605 } 606 EOF 607 } 608 609 resource "aws_codedeploy_deployment_group" "foo" { 610 app_name = "${aws_codedeploy_app.foo_app.name}" 611 deployment_group_name = "foo" 612 service_role_arn = "${aws_iam_role.foo_role.arn}" 613 on_premises_instance_tag_filter { 614 key = "filterkey" 615 type = "KEY_AND_VALUE" 616 value = "filtervalue" 617 } 618 }` 619 620 const baseCodeDeployConfig = ` 621 resource "aws_codedeploy_app" "foo_app" { 622 name = "foo-app" 623 } 624 625 resource "aws_iam_role_policy" "foo_policy" { 626 name = "foo-policy" 627 role = "${aws_iam_role.foo_role.id}" 628 policy = <<EOF 629 { 630 "Version": "2012-10-17", 631 "Statement": [ 632 { 633 "Effect": "Allow", 634 "Action": [ 635 "autoscaling:CompleteLifecycleAction", 636 "autoscaling:DeleteLifecycleHook", 637 "autoscaling:DescribeAutoScalingGroups", 638 "autoscaling:DescribeLifecycleHooks", 639 "autoscaling:PutLifecycleHook", 640 "autoscaling:RecordLifecycleActionHeartbeat", 641 "ec2:DescribeInstances", 642 "ec2:DescribeInstanceStatus", 643 "tag:GetTags", 644 "tag:GetResources", 645 "sns:Publish" 646 ], 647 "Resource": "*" 648 } 649 ] 650 } 651 EOF 652 } 653 654 resource "aws_iam_role" "foo_role" { 655 name = "foo-role" 656 assume_role_policy = <<EOF 657 { 658 "Version": "2012-10-17", 659 "Statement": [ 660 { 661 "Sid": "", 662 "Effect": "Allow", 663 "Principal": { 664 "Service": "codedeploy.amazonaws.com" 665 }, 666 "Action": "sts:AssumeRole" 667 } 668 ] 669 } 670 EOF 671 } 672 673 resource "aws_sns_topic" "foo_topic" { 674 name = "foo-topic" 675 } 676 677 ` 678 679 const testAccAWSCodeDeployDeploymentGroup_triggerConfiguration_create = baseCodeDeployConfig + ` 680 resource "aws_codedeploy_deployment_group" "foo_group" { 681 app_name = "${aws_codedeploy_app.foo_app.name}" 682 deployment_group_name = "foo-group" 683 service_role_arn = "${aws_iam_role.foo_role.arn}" 684 685 trigger_configuration { 686 trigger_events = ["DeploymentFailure"] 687 trigger_name = "foo-trigger" 688 trigger_target_arn = "${aws_sns_topic.foo_topic.arn}" 689 } 690 }` 691 692 const testAccAWSCodeDeployDeploymentGroup_triggerConfiguration_update = baseCodeDeployConfig + ` 693 resource "aws_codedeploy_deployment_group" "foo_group" { 694 app_name = "${aws_codedeploy_app.foo_app.name}" 695 deployment_group_name = "foo-group" 696 service_role_arn = "${aws_iam_role.foo_role.arn}" 697 698 trigger_configuration { 699 trigger_events = ["DeploymentSuccess", "DeploymentFailure"] 700 trigger_name = "foo-trigger" 701 trigger_target_arn = "${aws_sns_topic.foo_topic.arn}" 702 } 703 }` 704 705 const testAccAWSCodeDeployDeploymentGroup_triggerConfiguration_createMultiple = baseCodeDeployConfig + ` 706 resource "aws_sns_topic" "bar_topic" { 707 name = "bar-topic" 708 } 709 710 resource "aws_codedeploy_deployment_group" "foo_group" { 711 app_name = "${aws_codedeploy_app.foo_app.name}" 712 deployment_group_name = "foo-group" 713 service_role_arn = "${aws_iam_role.foo_role.arn}" 714 715 trigger_configuration { 716 trigger_events = ["DeploymentFailure"] 717 trigger_name = "foo-trigger" 718 trigger_target_arn = "${aws_sns_topic.foo_topic.arn}" 719 } 720 721 trigger_configuration { 722 trigger_events = ["InstanceFailure"] 723 trigger_name = "bar-trigger" 724 trigger_target_arn = "${aws_sns_topic.bar_topic.arn}" 725 } 726 }` 727 728 const testAccAWSCodeDeployDeploymentGroup_triggerConfiguration_updateMultiple = baseCodeDeployConfig + ` 729 resource "aws_sns_topic" "bar_topic" { 730 name = "bar-topic" 731 } 732 733 resource "aws_sns_topic" "baz_topic" { 734 name = "baz-topic" 735 } 736 737 resource "aws_codedeploy_deployment_group" "foo_group" { 738 app_name = "${aws_codedeploy_app.foo_app.name}" 739 deployment_group_name = "foo-group" 740 service_role_arn = "${aws_iam_role.foo_role.arn}" 741 742 trigger_configuration { 743 trigger_events = ["DeploymentStart", "DeploymentSuccess", "DeploymentFailure", "DeploymentStop"] 744 trigger_name = "foo-trigger" 745 trigger_target_arn = "${aws_sns_topic.foo_topic.arn}" 746 } 747 748 trigger_configuration { 749 trigger_events = ["InstanceFailure"] 750 trigger_name = "bar-trigger" 751 trigger_target_arn = "${aws_sns_topic.baz_topic.arn}" 752 } 753 }`