github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/aws/resource_aws_codedeploy_deployment_config.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "log" 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/schema" 11 ) 12 13 func resourceAwsCodeDeployDeploymentConfig() *schema.Resource { 14 return &schema.Resource{ 15 Create: resourceAwsCodeDeployDeploymentConfigCreate, 16 Read: resourceAwsCodeDeployDeploymentConfigRead, 17 Delete: resourceAwsCodeDeployDeploymentConfigDelete, 18 19 Schema: map[string]*schema.Schema{ 20 "deployment_config_name": { 21 Type: schema.TypeString, 22 Required: true, 23 ForceNew: true, 24 }, 25 26 "minimum_healthy_hosts": { 27 Type: schema.TypeList, 28 Required: true, 29 ForceNew: true, 30 MaxItems: 1, 31 Elem: &schema.Resource{ 32 Schema: map[string]*schema.Schema{ 33 "type": { 34 Type: schema.TypeString, 35 Required: true, 36 ValidateFunc: validateMinimumHealtyHostsType, 37 }, 38 39 "value": { 40 Type: schema.TypeInt, 41 Optional: true, 42 }, 43 }, 44 }, 45 }, 46 47 "deployment_config_id": { 48 Type: schema.TypeString, 49 Computed: true, 50 }, 51 }, 52 } 53 } 54 55 func resourceAwsCodeDeployDeploymentConfigCreate(d *schema.ResourceData, meta interface{}) error { 56 conn := meta.(*AWSClient).codedeployconn 57 58 input := &codedeploy.CreateDeploymentConfigInput{ 59 DeploymentConfigName: aws.String(d.Get("deployment_config_name").(string)), 60 MinimumHealthyHosts: expandAwsCodeDeployConfigMinimumHealthHosts(d), 61 } 62 63 _, err := conn.CreateDeploymentConfig(input) 64 if err != nil { 65 return err 66 } 67 68 d.SetId(d.Get("deployment_config_name").(string)) 69 70 return resourceAwsCodeDeployDeploymentConfigRead(d, meta) 71 } 72 73 func resourceAwsCodeDeployDeploymentConfigRead(d *schema.ResourceData, meta interface{}) error { 74 conn := meta.(*AWSClient).codedeployconn 75 76 input := &codedeploy.GetDeploymentConfigInput{ 77 DeploymentConfigName: aws.String(d.Id()), 78 } 79 80 resp, err := conn.GetDeploymentConfig(input) 81 if err != nil { 82 if awsErr, ok := err.(awserr.Error); ok { 83 if "DeploymentConfigDoesNotExistException" == awsErr.Code() { 84 log.Printf("[DEBUG] CodeDeploy Deployment Config (%s) not found", d.Id()) 85 d.SetId("") 86 return nil 87 } 88 } 89 return err 90 } 91 92 if resp.DeploymentConfigInfo == nil { 93 return fmt.Errorf("[ERROR] Cannot find DeploymentConfig %q", d.Id()) 94 } 95 96 if err := d.Set("minimum_healthy_hosts", flattenAwsCodeDeployConfigMinimumHealthHosts(resp.DeploymentConfigInfo.MinimumHealthyHosts)); err != nil { 97 return err 98 } 99 d.Set("deployment_config_id", resp.DeploymentConfigInfo.DeploymentConfigId) 100 d.Set("deployment_config_name", resp.DeploymentConfigInfo.DeploymentConfigName) 101 102 return nil 103 } 104 105 func resourceAwsCodeDeployDeploymentConfigDelete(d *schema.ResourceData, meta interface{}) error { 106 conn := meta.(*AWSClient).codedeployconn 107 108 input := &codedeploy.DeleteDeploymentConfigInput{ 109 DeploymentConfigName: aws.String(d.Id()), 110 } 111 112 _, err := conn.DeleteDeploymentConfig(input) 113 if err != nil { 114 return err 115 } 116 117 return nil 118 } 119 120 func expandAwsCodeDeployConfigMinimumHealthHosts(d *schema.ResourceData) *codedeploy.MinimumHealthyHosts { 121 hosts := d.Get("minimum_healthy_hosts").([]interface{}) 122 host := hosts[0].(map[string]interface{}) 123 124 minimumHealthyHost := codedeploy.MinimumHealthyHosts{ 125 Type: aws.String(host["type"].(string)), 126 Value: aws.Int64(int64(host["value"].(int))), 127 } 128 129 return &minimumHealthyHost 130 } 131 132 func flattenAwsCodeDeployConfigMinimumHealthHosts(hosts *codedeploy.MinimumHealthyHosts) []map[string]interface{} { 133 result := make([]map[string]interface{}, 0) 134 135 item := make(map[string]interface{}) 136 137 item["type"] = *hosts.Type 138 item["value"] = *hosts.Value 139 140 result = append(result, item) 141 142 return result 143 } 144 145 func validateMinimumHealtyHostsType(v interface{}, k string) (ws []string, errors []error) { 146 value := v.(string) 147 if value != "FLEET_PERCENT" && value != "HOST_COUNT" { 148 errors = append(errors, fmt.Errorf( 149 "%q must be one of \"FLEET_PERCENT\" or \"HOST_COUNT\"", k)) 150 } 151 return 152 }