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  }