github.com/IBM-Cloud/terraform@v0.6.4-0.20170726051544-8872b87621df/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 op, err := config.clientSqlAdmin.Databases.Insert(project, instance_name, 61 db).Do() 62 63 if err != nil { 64 return fmt.Errorf("Error, failed to insert "+ 65 "database %s into instance %s: %s", database_name, 66 instance_name, err) 67 } 68 69 err = sqladminOperationWait(config, op, "Insert Database") 70 71 if err != nil { 72 return fmt.Errorf("Error, failure waiting for insertion of %s "+ 73 "into %s: %s", database_name, instance_name, err) 74 } 75 76 return resourceSqlDatabaseRead(d, meta) 77 } 78 79 func resourceSqlDatabaseRead(d *schema.ResourceData, meta interface{}) error { 80 config := meta.(*Config) 81 82 project, err := getProject(d, config) 83 if err != nil { 84 return err 85 } 86 87 database_name := d.Get("name").(string) 88 instance_name := d.Get("instance").(string) 89 90 db, err := config.clientSqlAdmin.Databases.Get(project, instance_name, 91 database_name).Do() 92 93 if err != nil { 94 return handleNotFoundError(err, d, fmt.Sprintf("SQL Database %q in instance %q", database_name, instance_name)) 95 } 96 97 d.Set("self_link", db.SelfLink) 98 d.SetId(instance_name + ":" + database_name) 99 100 return nil 101 } 102 103 func resourceSqlDatabaseDelete(d *schema.ResourceData, meta interface{}) error { 104 config := meta.(*Config) 105 106 project, err := getProject(d, config) 107 if err != nil { 108 return err 109 } 110 111 database_name := d.Get("name").(string) 112 instance_name := d.Get("instance").(string) 113 114 op, err := config.clientSqlAdmin.Databases.Delete(project, instance_name, 115 database_name).Do() 116 117 if err != nil { 118 return fmt.Errorf("Error, failed to delete"+ 119 "database %s in instance %s: %s", database_name, 120 instance_name, err) 121 } 122 123 err = sqladminOperationWait(config, op, "Delete Database") 124 125 if err != nil { 126 return fmt.Errorf("Error, failure waiting for deletion of %s "+ 127 "in %s: %s", database_name, instance_name, err) 128 } 129 130 return nil 131 }