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  }