github.com/erriapo/terraform@v0.6.12-0.20160203182612-0340ea72354f/builtin/providers/aws/resource_aws_codedeploy_deployment_group_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/codedeploy"
    10  	"github.com/hashicorp/terraform/helper/resource"
    11  	"github.com/hashicorp/terraform/terraform"
    12  )
    13  
    14  func TestAccAWSCodeDeployDeploymentGroup_basic(t *testing.T) {
    15  	resource.Test(t, resource.TestCase{
    16  		PreCheck:     func() { testAccPreCheck(t) },
    17  		Providers:    testAccProviders,
    18  		CheckDestroy: testAccCheckAWSCodeDeployDeploymentGroupDestroy,
    19  		Steps: []resource.TestStep{
    20  			resource.TestStep{
    21  				Config: testAccAWSCodeDeployDeploymentGroup,
    22  				Check: resource.ComposeTestCheckFunc(
    23  					testAccCheckAWSCodeDeployDeploymentGroupExists("aws_codedeploy_deployment_group.foo"),
    24  				),
    25  			},
    26  			resource.TestStep{
    27  				Config: testAccAWSCodeDeployDeploymentGroupModified,
    28  				Check: resource.ComposeTestCheckFunc(
    29  					testAccCheckAWSCodeDeployDeploymentGroupExists("aws_codedeploy_deployment_group.foo"),
    30  				),
    31  			},
    32  		},
    33  	})
    34  }
    35  
    36  func testAccCheckAWSCodeDeployDeploymentGroupDestroy(s *terraform.State) error {
    37  	conn := testAccProvider.Meta().(*AWSClient).codedeployconn
    38  
    39  	for _, rs := range s.RootModule().Resources {
    40  		if rs.Type != "aws_codedeploy_deployment_group" {
    41  			continue
    42  		}
    43  
    44  		resp, err := conn.GetDeploymentGroup(&codedeploy.GetDeploymentGroupInput{
    45  			ApplicationName:     aws.String(rs.Primary.Attributes["app_name"]),
    46  			DeploymentGroupName: aws.String(rs.Primary.Attributes["deployment_group_name"]),
    47  		})
    48  
    49  		if ae, ok := err.(awserr.Error); ok && ae.Code() == "ApplicationDoesNotExistException" {
    50  			continue
    51  		}
    52  
    53  		if err == nil {
    54  			if resp.DeploymentGroupInfo.DeploymentGroupName != nil {
    55  				return fmt.Errorf("CodeDeploy deployment group still exists:\n%#v", *resp.DeploymentGroupInfo.DeploymentGroupName)
    56  			}
    57  		}
    58  
    59  		return err
    60  	}
    61  
    62  	return nil
    63  }
    64  
    65  func testAccCheckAWSCodeDeployDeploymentGroupExists(name string) resource.TestCheckFunc {
    66  	return func(s *terraform.State) error {
    67  		_, ok := s.RootModule().Resources[name]
    68  		if !ok {
    69  			return fmt.Errorf("Not found: %s", name)
    70  		}
    71  
    72  		return nil
    73  	}
    74  }
    75  
    76  var testAccAWSCodeDeployDeploymentGroup = `
    77  resource "aws_codedeploy_app" "foo_app" {
    78  	name = "foo_app"
    79  }
    80  
    81  resource "aws_iam_role_policy" "foo_policy" {
    82  	name = "foo_policy"
    83  	role = "${aws_iam_role.foo_role.id}"
    84  	policy = <<EOF
    85  {
    86      "Version": "2012-10-17",
    87      "Statement": [
    88          {
    89              "Effect": "Allow",
    90              "Action": [
    91                  "autoscaling:CompleteLifecycleAction",
    92                  "autoscaling:DeleteLifecycleHook",
    93  	        "autoscaling:DescribeAutoScalingGroups",
    94                  "autoscaling:DescribeLifecycleHooks",
    95                  "autoscaling:PutLifecycleHook",
    96                  "autoscaling:RecordLifecycleActionHeartbeat",
    97                  "ec2:DescribeInstances",
    98                  "ec2:DescribeInstanceStatus",
    99                  "tag:GetTags",
   100  	        "tag:GetResources"
   101              ],
   102              "Resource": "*"
   103          }
   104      ]
   105  }
   106  EOF
   107  }
   108  
   109  resource "aws_iam_role" "foo_role" {
   110  	name = "foo_role"
   111  	assume_role_policy = <<EOF
   112  {
   113    "Version": "2012-10-17",
   114    "Statement": [
   115      {
   116        "Sid": "",
   117        "Effect": "Allow",
   118        "Principal": {
   119          "Service": [
   120            "codedeploy.amazonaws.com"
   121          ]
   122        },
   123        "Action": "sts:AssumeRole"
   124      }
   125    ]
   126  }
   127  EOF
   128  }
   129  
   130  resource "aws_codedeploy_deployment_group" "foo" {
   131  	app_name = "${aws_codedeploy_app.foo_app.name}"
   132  	deployment_group_name = "foo"
   133  	service_role_arn = "${aws_iam_role.foo_role.arn}"
   134  	ec2_tag_filter {
   135  		key = "filterkey"
   136  		type = "KEY_AND_VALUE"
   137  		value = "filtervalue"
   138  	}
   139  }`
   140  
   141  var testAccAWSCodeDeployDeploymentGroupModified = `
   142  resource "aws_codedeploy_app" "foo_app" {
   143  	name = "foo_app"
   144  }
   145  
   146  resource "aws_iam_role_policy" "foo_policy" {
   147  	name = "foo_policy"
   148  	role = "${aws_iam_role.foo_role.id}"
   149  	policy = <<EOF
   150  {
   151      "Version": "2012-10-17",
   152      "Statement": [
   153          {
   154              "Effect": "Allow",
   155              "Action": [
   156                  "autoscaling:CompleteLifecycleAction",
   157                  "autoscaling:DeleteLifecycleHook",
   158  	        "autoscaling:DescribeAutoScalingGroups",
   159                  "autoscaling:DescribeLifecycleHooks",
   160                  "autoscaling:PutLifecycleHook",
   161                  "autoscaling:RecordLifecycleActionHeartbeat",
   162                  "ec2:DescribeInstances",
   163                  "ec2:DescribeInstanceStatus",
   164                  "tag:GetTags",
   165  	        "tag:GetResources"
   166              ],
   167              "Resource": "*"
   168          }
   169      ]
   170  }
   171  EOF
   172  }
   173  
   174  resource "aws_iam_role" "foo_role" {
   175  	name = "foo_role"
   176  	assume_role_policy = <<EOF
   177  {
   178    "Version": "2012-10-17",
   179    "Statement": [
   180      {
   181        "Sid": "",
   182        "Effect": "Allow",
   183        "Principal": {
   184          "Service": [
   185            "codedeploy.amazonaws.com"
   186          ]
   187        },
   188        "Action": "sts:AssumeRole"
   189      }
   190    ]
   191  }
   192  EOF
   193  }
   194  
   195  resource "aws_codedeploy_deployment_group" "foo" {
   196  	app_name = "${aws_codedeploy_app.foo_app.name}"
   197  	deployment_group_name = "bar"
   198  	service_role_arn = "${aws_iam_role.foo_role.arn}"
   199  	ec2_tag_filter {
   200  		key = "filterkey"
   201  		type = "KEY_AND_VALUE"
   202  		value = "filtervalue"
   203  	}
   204  }`