github.com/nathanielks/terraform@v0.6.1-0.20170509030759-13e1a62319dc/builtin/providers/aws/resource_aws_ssm_maintenance_window_target_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/aws/awserr" 9 "github.com/aws/aws-sdk-go/service/ssm" 10 "github.com/hashicorp/terraform/helper/acctest" 11 "github.com/hashicorp/terraform/helper/resource" 12 "github.com/hashicorp/terraform/terraform" 13 ) 14 15 func TestAccAWSSSMMaintenanceWindowTarget_basic(t *testing.T) { 16 name := acctest.RandString(10) 17 resource.Test(t, resource.TestCase{ 18 PreCheck: func() { testAccPreCheck(t) }, 19 Providers: testAccProviders, 20 CheckDestroy: testAccCheckAWSSSMMaintenanceWindowTargetDestroy, 21 Steps: []resource.TestStep{ 22 { 23 Config: testAccAWSSSMMaintenanceWindowTargetBasicConfig(name), 24 Check: resource.ComposeTestCheckFunc( 25 testAccCheckAWSSSMMaintenanceWindowTargetExists("aws_ssm_maintenance_window_target.target"), 26 ), 27 }, 28 }, 29 }) 30 } 31 32 func testAccCheckAWSSSMMaintenanceWindowTargetExists(n string) resource.TestCheckFunc { 33 return func(s *terraform.State) error { 34 rs, ok := s.RootModule().Resources[n] 35 if !ok { 36 return fmt.Errorf("Not found: %s", n) 37 } 38 39 if rs.Primary.ID == "" { 40 return fmt.Errorf("No SSM Maintenance Window Target Window ID is set") 41 } 42 43 conn := testAccProvider.Meta().(*AWSClient).ssmconn 44 45 resp, err := conn.DescribeMaintenanceWindowTargets(&ssm.DescribeMaintenanceWindowTargetsInput{ 46 WindowId: aws.String(rs.Primary.Attributes["window_id"]), 47 Filters: []*ssm.MaintenanceWindowFilter{ 48 { 49 Key: aws.String("WindowTargetId"), 50 Values: []*string{aws.String(rs.Primary.ID)}, 51 }, 52 }, 53 }) 54 if err != nil { 55 return err 56 } 57 58 for _, i := range resp.Targets { 59 if *i.WindowTargetId == rs.Primary.ID { 60 return nil 61 } 62 } 63 64 return fmt.Errorf("No AWS SSM Maintenance window target found") 65 } 66 } 67 68 func testAccCheckAWSSSMMaintenanceWindowTargetDestroy(s *terraform.State) error { 69 conn := testAccProvider.Meta().(*AWSClient).ssmconn 70 71 for _, rs := range s.RootModule().Resources { 72 if rs.Type != "aws_ssm_maintenance_window_target" { 73 continue 74 } 75 76 out, err := conn.DescribeMaintenanceWindowTargets(&ssm.DescribeMaintenanceWindowTargetsInput{ 77 WindowId: aws.String(rs.Primary.Attributes["window_id"]), 78 Filters: []*ssm.MaintenanceWindowFilter{ 79 { 80 Key: aws.String("WindowTargetId"), 81 Values: []*string{aws.String(rs.Primary.ID)}, 82 }, 83 }, 84 }) 85 86 if err != nil { 87 // Verify the error is what we want 88 if ae, ok := err.(awserr.Error); ok && ae.Code() == "DoesNotExistException" { 89 continue 90 } 91 return err 92 } 93 94 if len(out.Targets) > 0 { 95 return fmt.Errorf("Expected AWS SSM Maintenance Target to be gone, but was still found") 96 } 97 98 return nil 99 } 100 101 return nil 102 } 103 104 func testAccAWSSSMMaintenanceWindowTargetBasicConfig(rName string) string { 105 return fmt.Sprintf(` 106 resource "aws_ssm_maintenance_window" "foo" { 107 name = "maintenance-window-%s" 108 schedule = "cron(0 16 ? * TUE *)" 109 duration = 3 110 cutoff = 1 111 } 112 113 resource "aws_ssm_maintenance_window_target" "target" { 114 window_id = "${aws_ssm_maintenance_window.foo.id}" 115 resource_type = "INSTANCE" 116 targets { 117 key = "tag:Name" 118 values = ["acceptance_test"] 119 } 120 } 121 `, rName) 122 }