func (lt *opsworksLayerType) Update(d *schema.ResourceData, client *opsworks.OpsWorks) error { req := &opsworks.UpdateLayerInput{ LayerId: aws.String(d.Id()), AutoAssignElasticIps: aws.Bool(d.Get("auto_assign_elastic_ips").(bool)), AutoAssignPublicIps: aws.Bool(d.Get("auto_assign_public_ips").(bool)), CustomInstanceProfileArn: aws.String(d.Get("custom_instance_profile_arn").(string)), CustomRecipes: lt.CustomRecipes(d), CustomSecurityGroupIds: makeAwsStringSet(d.Get("custom_security_group_ids").(*schema.Set)), EnableAutoHealing: aws.Bool(d.Get("auto_healing").(bool)), InstallUpdatesOnBoot: aws.Bool(d.Get("install_updates_on_boot").(bool)), LifecycleEventConfiguration: lt.LifecycleEventConfiguration(d), Name: aws.String(d.Get("name").(string)), Packages: makeAwsStringSet(d.Get("system_packages").(*schema.Set)), UseEbsOptimizedInstances: aws.Bool(d.Get("use_ebs_optimized_instances").(bool)), Attributes: lt.AttributeMap(d), VolumeConfigurations: lt.VolumeConfigurations(d), } if lt.CustomShortName { req.Shortname = aws.String(d.Get("short_name").(string)) } else { req.Shortname = aws.String(lt.TypeName) } log.Printf("[DEBUG] Updating OpsWorks layer: %s", d.Id()) _, err := client.UpdateLayer(req) if err != nil { return err } return lt.Read(d, client) }
func OpsworksInstanceStateRefreshFunc(conn *opsworks.OpsWorks, instanceID string) resource.StateRefreshFunc { return func() (interface{}, string, error) { resp, err := conn.DescribeInstances(&opsworks.DescribeInstancesInput{ InstanceIds: []*string{aws.String(instanceID)}, }) if err != nil { if awserr, ok := err.(awserr.Error); ok && awserr.Code() == "ResourceNotFoundException" { // Set this to nil as if we didn't find anything. resp = nil } else { log.Printf("Error on OpsworksInstanceStateRefresh: %s", err) return nil, "", err } } if resp == nil || len(resp.Instances) == 0 { // Sometimes AWS just has consistency issues and doesn't see // our instance yet. Return an empty state. return nil, "", nil } i := resp.Instances[0] return i, *i.Status, nil } }
func (lt *opsworksLayerType) Delete(d *schema.ResourceData, client *opsworks.OpsWorks) error { req := &opsworks.DeleteLayerInput{ LayerId: aws.String(d.Id()), } log.Printf("[DEBUG] Deleting OpsWorks layer: %s", d.Id()) _, err := client.DeleteLayer(req) return err }
func (lt *opsworksLayerType) Create(d *schema.ResourceData, client *opsworks.OpsWorks) error { req := &opsworks.CreateLayerInput{ AutoAssignElasticIps: aws.Bool(d.Get("auto_assign_elastic_ips").(bool)), AutoAssignPublicIps: aws.Bool(d.Get("auto_assign_public_ips").(bool)), CustomInstanceProfileArn: aws.String(d.Get("custom_instance_profile_arn").(string)), CustomRecipes: lt.CustomRecipes(d), CustomSecurityGroupIds: expandStringSet(d.Get("custom_security_group_ids").(*schema.Set)), EnableAutoHealing: aws.Bool(d.Get("auto_healing").(bool)), InstallUpdatesOnBoot: aws.Bool(d.Get("install_updates_on_boot").(bool)), LifecycleEventConfiguration: lt.LifecycleEventConfiguration(d), Name: aws.String(d.Get("name").(string)), Packages: expandStringSet(d.Get("system_packages").(*schema.Set)), Type: aws.String(lt.TypeName), StackId: aws.String(d.Get("stack_id").(string)), UseEbsOptimizedInstances: aws.Bool(d.Get("use_ebs_optimized_instances").(bool)), Attributes: lt.AttributeMap(d), VolumeConfigurations: lt.VolumeConfigurations(d), } if lt.CustomShortName { req.Shortname = aws.String(d.Get("short_name").(string)) } else { req.Shortname = aws.String(lt.TypeName) } req.CustomJson = aws.String(d.Get("custom_json").(string)) log.Printf("[DEBUG] Creating OpsWorks layer: %s", d.Id()) resp, err := client.CreateLayer(req) if err != nil { return err } layerId := *resp.LayerId d.SetId(layerId) d.Set("id", layerId) loadBalancer := aws.String(d.Get("elastic_load_balancer").(string)) if loadBalancer != nil && *loadBalancer != "" { log.Printf("[DEBUG] Attaching load balancer: %s", *loadBalancer) _, err := client.AttachElasticLoadBalancer(&opsworks.AttachElasticLoadBalancerInput{ ElasticLoadBalancerName: loadBalancer, LayerId: &layerId, }) if err != nil { return err } } return lt.Read(d, client) }
func (lt *opsworksLayerType) Read(d *schema.ResourceData, client *opsworks.OpsWorks) error { req := &opsworks.DescribeLayersInput{ LayerIds: []*string{ aws.String(d.Id()), }, } log.Printf("[DEBUG] Reading OpsWorks layer: %s", d.Id()) resp, err := client.DescribeLayers(req) if err != nil { if awserr, ok := err.(awserr.Error); ok { if awserr.Code() == "ResourceNotFoundException" { d.SetId("") return nil } } return err } layer := resp.Layers[0] d.Set("id", layer.LayerId) d.Set("auto_assign_elastic_ips", layer.AutoAssignElasticIps) d.Set("auto_assign_public_ips", layer.AutoAssignPublicIps) d.Set("custom_instance_profile_arn", layer.CustomInstanceProfileArn) d.Set("custom_security_group_ids", unwrapAwsStringList(layer.CustomSecurityGroupIds)) d.Set("auto_healing", layer.EnableAutoHealing) d.Set("install_updates_on_boot", layer.InstallUpdatesOnBoot) d.Set("name", layer.Name) d.Set("system_packages", unwrapAwsStringList(layer.Packages)) d.Set("stack_id", layer.StackId) d.Set("use_ebs_optimized_instances", layer.UseEbsOptimizedInstances) if lt.CustomShortName { d.Set("short_name", layer.Shortname) } lt.SetAttributeMap(d, layer.Attributes) lt.SetLifecycleEventConfiguration(d, layer.LifecycleEventConfiguration) lt.SetCustomRecipes(d, layer.CustomRecipes) lt.SetVolumeConfigurations(d, layer.VolumeConfigurations) return nil }