github.com/erriapo/terraform@v0.6.12-0.20160203182612-0340ea72354f/builtin/providers/google/resource_sql_database.go (about)

     1  package google
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/hashicorp/terraform/helper/schema"
     8  
     9  	"google.golang.org/api/googleapi"
    10  	"google.golang.org/api/sqladmin/v1beta4"
    11  )
    12  
    13  func resourceSqlDatabase() *schema.Resource {
    14  	return &schema.Resource{
    15  		Create: resourceSqlDatabaseCreate,
    16  		Read:   resourceSqlDatabaseRead,
    17  		Delete: resourceSqlDatabaseDelete,
    18  
    19  		Schema: map[string]*schema.Schema{
    20  			"name": &schema.Schema{
    21  				Type:     schema.TypeString,
    22  				Required: true,
    23  				ForceNew: true,
    24  			},
    25  			"instance": &schema.Schema{
    26  				Type:     schema.TypeString,
    27  				Required: true,
    28  				ForceNew: true,
    29  			},
    30  			"self_link": &schema.Schema{
    31  				Type:     schema.TypeString,
    32  				Computed: true,
    33  			},
    34  		},
    35  	}
    36  }
    37  
    38  func resourceSqlDatabaseCreate(d *schema.ResourceData, meta interface{}) error {
    39  	config := meta.(*Config)
    40  
    41  	database_name := d.Get("name").(string)
    42  	instance_name := d.Get("instance").(string)
    43  	project := config.Project
    44  
    45  	db := &sqladmin.Database{
    46  		Name:     database_name,
    47  		Instance: instance_name,
    48  	}
    49  
    50  	op, err := config.clientSqlAdmin.Databases.Insert(project, instance_name,
    51  		db).Do()
    52  
    53  	if err != nil {
    54  		return fmt.Errorf("Error, failed to insert "+
    55  			"database %s into instance %s: %s", database_name,
    56  			instance_name, err)
    57  	}
    58  
    59  	err = sqladminOperationWait(config, op, "Insert Database")
    60  
    61  	if err != nil {
    62  		return fmt.Errorf("Error, failure waiting for insertion of %s "+
    63  			"into %s: %s", database_name, instance_name, err)
    64  	}
    65  
    66  	return resourceSqlDatabaseRead(d, meta)
    67  }
    68  
    69  func resourceSqlDatabaseRead(d *schema.ResourceData, meta interface{}) error {
    70  	config := meta.(*Config)
    71  
    72  	database_name := d.Get("name").(string)
    73  	instance_name := d.Get("instance").(string)
    74  	project := config.Project
    75  
    76  	db, err := config.clientSqlAdmin.Databases.Get(project, instance_name,
    77  		database_name).Do()
    78  
    79  	if err != nil {
    80  		if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 {
    81  			log.Printf("[WARN] Removing SQL Database %q because it's gone", d.Get("name").(string))
    82  			// The resource doesn't exist anymore
    83  			d.SetId("")
    84  
    85  			return nil
    86  		}
    87  
    88  		return fmt.Errorf("Error, failed to get"+
    89  			"database %s in instance %s: %s", database_name,
    90  			instance_name, err)
    91  	}
    92  
    93  	d.Set("self_link", db.SelfLink)
    94  	d.SetId(instance_name + ":" + database_name)
    95  
    96  	return nil
    97  }
    98  
    99  func resourceSqlDatabaseDelete(d *schema.ResourceData, meta interface{}) error {
   100  	config := meta.(*Config)
   101  
   102  	database_name := d.Get("name").(string)
   103  	instance_name := d.Get("instance").(string)
   104  	project := config.Project
   105  
   106  	op, err := config.clientSqlAdmin.Databases.Delete(project, instance_name,
   107  		database_name).Do()
   108  
   109  	if err != nil {
   110  		return fmt.Errorf("Error, failed to delete"+
   111  			"database %s in instance %s: %s", database_name,
   112  			instance_name, err)
   113  	}
   114  
   115  	err = sqladminOperationWait(config, op, "Delete Database")
   116  
   117  	if err != nil {
   118  		return fmt.Errorf("Error, failure waiting for deletion of %s "+
   119  			"in %s: %s", database_name, instance_name, err)
   120  	}
   121  
   122  	return nil
   123  }