github.com/nathanielks/terraform@v0.6.1-0.20170509030759-13e1a62319dc/builtin/providers/aws/resource_aws_ssm_maintenance_window_task_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 TestAccAWSSSMMaintenanceWindowTask_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: testAccCheckAWSSSMMaintenanceWindowTaskDestroy, 21 Steps: []resource.TestStep{ 22 { 23 Config: testAccAWSSSMMaintenanceWindowTaskBasicConfig(name), 24 Check: resource.ComposeTestCheckFunc( 25 testAccCheckAWSSSMMaintenanceWindowTaskExists("aws_ssm_maintenance_window_task.target"), 26 ), 27 }, 28 }, 29 }) 30 } 31 32 func testAccCheckAWSSSMMaintenanceWindowTaskExists(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 Task Window ID is set") 41 } 42 43 conn := testAccProvider.Meta().(*AWSClient).ssmconn 44 45 resp, err := conn.DescribeMaintenanceWindowTasks(&ssm.DescribeMaintenanceWindowTasksInput{ 46 WindowId: aws.String(rs.Primary.Attributes["window_id"]), 47 }) 48 if err != nil { 49 return err 50 } 51 52 for _, i := range resp.Tasks { 53 if *i.WindowTaskId == rs.Primary.ID { 54 return nil 55 } 56 } 57 58 return fmt.Errorf("No AWS SSM Maintenance window task found") 59 } 60 } 61 62 func testAccCheckAWSSSMMaintenanceWindowTaskDestroy(s *terraform.State) error { 63 conn := testAccProvider.Meta().(*AWSClient).ssmconn 64 65 for _, rs := range s.RootModule().Resources { 66 if rs.Type != "aws_ssm_maintenance_window_target" { 67 continue 68 } 69 70 out, err := conn.DescribeMaintenanceWindowTasks(&ssm.DescribeMaintenanceWindowTasksInput{ 71 WindowId: aws.String(rs.Primary.Attributes["window_id"]), 72 }) 73 74 if err != nil { 75 // Verify the error is what we want 76 if ae, ok := err.(awserr.Error); ok && ae.Code() == "DoesNotExistException" { 77 continue 78 } 79 return err 80 } 81 82 if len(out.Tasks) > 0 { 83 return fmt.Errorf("Expected AWS SSM Maintenance Task to be gone, but was still found") 84 } 85 86 return nil 87 } 88 89 return nil 90 } 91 92 func testAccAWSSSMMaintenanceWindowTaskBasicConfig(rName string) string { 93 return fmt.Sprintf(` 94 resource "aws_ssm_maintenance_window" "foo" { 95 name = "maintenance-window-%s" 96 schedule = "cron(0 16 ? * TUE *)" 97 duration = 3 98 cutoff = 1 99 } 100 101 resource "aws_ssm_maintenance_window_task" "target" { 102 window_id = "${aws_ssm_maintenance_window.foo.id}" 103 task_type = "RUN_COMMAND" 104 task_arn = "AWS-RunShellScript" 105 priority = 1 106 service_role_arn = "${aws_iam_role.ssm_role.arn}" 107 max_concurrency = "2" 108 max_errors = "1" 109 targets { 110 key = "InstanceIds" 111 values = ["${aws_instance.foo.id}"] 112 } 113 } 114 115 resource "aws_instance" "foo" { 116 ami = "ami-4fccb37f" 117 118 instance_type = "m1.small" 119 } 120 121 resource "aws_iam_role" "ssm_role" { 122 name = "ssm-role-%s" 123 124 assume_role_policy = <<POLICY 125 { 126 "Version": "2012-10-17", 127 "Statement": [ 128 { 129 "Action": "sts:AssumeRole", 130 "Principal": { 131 "Service": "events.amazonaws.com" 132 }, 133 "Effect": "Allow", 134 "Sid": "" 135 } 136 ] 137 } 138 POLICY 139 } 140 141 resource "aws_iam_role_policy" "bar" { 142 name = "ssm_role_policy_%s" 143 role = "${aws_iam_role.ssm_role.name}" 144 145 policy = <<EOF 146 { 147 "Version": "2012-10-17", 148 "Statement": { 149 "Effect": "Allow", 150 "Action": "ssm:*", 151 "Resource": "*" 152 } 153 } 154 EOF 155 } 156 157 `, rName, rName, rName) 158 }