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