github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/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 task_parameters { 114 name = "commands" 115 values = ["pwd"] 116 } 117 } 118 119 resource "aws_instance" "foo" { 120 ami = "ami-4fccb37f" 121 122 instance_type = "m1.small" 123 } 124 125 resource "aws_iam_role" "ssm_role" { 126 name = "ssm-role-%s" 127 128 assume_role_policy = <<POLICY 129 { 130 "Version": "2012-10-17", 131 "Statement": [ 132 { 133 "Action": "sts:AssumeRole", 134 "Principal": { 135 "Service": "events.amazonaws.com" 136 }, 137 "Effect": "Allow", 138 "Sid": "" 139 } 140 ] 141 } 142 POLICY 143 } 144 145 resource "aws_iam_role_policy" "bar" { 146 name = "ssm_role_policy_%s" 147 role = "${aws_iam_role.ssm_role.name}" 148 149 policy = <<EOF 150 { 151 "Version": "2012-10-17", 152 "Statement": { 153 "Effect": "Allow", 154 "Action": "ssm:*", 155 "Resource": "*" 156 } 157 } 158 EOF 159 } 160 161 `, rName, rName, rName) 162 }