github.com/leeprovoost/terraform@v0.6.10-0.20160119085442-96f3f76118e7/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 }`