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