github.com/bfallik/terraform@v0.7.1-0.20160814101525-d3a4714efbf5/builtin/providers/mysql/resource_grant.go (about) 1 package mysql 2 3 import ( 4 "fmt" 5 "log" 6 "strings" 7 8 mysqlc "github.com/ziutek/mymysql/mysql" 9 10 "github.com/hashicorp/terraform/helper/schema" 11 ) 12 13 func resourceGrant() *schema.Resource { 14 return &schema.Resource{ 15 Create: CreateGrant, 16 Update: nil, 17 Read: ReadGrant, 18 Delete: DeleteGrant, 19 20 Schema: map[string]*schema.Schema{ 21 "user": &schema.Schema{ 22 Type: schema.TypeString, 23 Required: true, 24 ForceNew: true, 25 }, 26 27 "host": &schema.Schema{ 28 Type: schema.TypeString, 29 Optional: true, 30 ForceNew: true, 31 Default: "localhost", 32 }, 33 34 "database": &schema.Schema{ 35 Type: schema.TypeString, 36 Required: true, 37 ForceNew: true, 38 }, 39 40 "privileges": &schema.Schema{ 41 Type: schema.TypeSet, 42 Required: true, 43 ForceNew: true, 44 Elem: &schema.Schema{Type: schema.TypeString}, 45 Set: schema.HashString, 46 }, 47 48 "grant": &schema.Schema{ 49 Type: schema.TypeBool, 50 Optional: true, 51 ForceNew: true, 52 Default: false, 53 }, 54 }, 55 } 56 } 57 58 func CreateGrant(d *schema.ResourceData, meta interface{}) error { 59 conn := meta.(mysqlc.Conn) 60 61 // create a comma-delimited string of privileges 62 var privileges string 63 var privilegesList []string 64 vL := d.Get("privileges").(*schema.Set).List() 65 for _, v := range vL { 66 privilegesList = append(privilegesList, v.(string)) 67 } 68 privileges = strings.Join(privilegesList, ",") 69 70 stmtSQL := fmt.Sprintf("GRANT %s on %s.* TO '%s'@'%s'", 71 privileges, 72 d.Get("database").(string), 73 d.Get("user").(string), 74 d.Get("host").(string)) 75 76 if d.Get("grant").(bool) { 77 stmtSQL = " WITH GRANT OPTION" 78 } 79 80 log.Println("Executing statement:", stmtSQL) 81 _, _, err := conn.Query(stmtSQL) 82 if err != nil { 83 return err 84 } 85 86 user := fmt.Sprintf("%s@%s:%s", d.Get("user").(string), d.Get("host").(string), d.Get("database")) 87 d.SetId(user) 88 89 return ReadGrant(d, meta) 90 } 91 92 func ReadGrant(d *schema.ResourceData, meta interface{}) error { 93 // At this time, all attributes are supplied by the user 94 return nil 95 } 96 97 func DeleteGrant(d *schema.ResourceData, meta interface{}) error { 98 conn := meta.(mysqlc.Conn) 99 100 stmtSQL := fmt.Sprintf("REVOKE GRANT OPTION ON %s.* FROM '%s'@'%s'", 101 d.Get("database").(string), 102 d.Get("user").(string), 103 d.Get("host").(string)) 104 105 log.Println("Executing statement:", stmtSQL) 106 _, _, err := conn.Query(stmtSQL) 107 if err != nil { 108 return err 109 } 110 111 stmtSQL = fmt.Sprintf("REVOKE ALL ON %s.* FROM '%s'@'%s'", 112 d.Get("database").(string), 113 d.Get("user").(string), 114 d.Get("host").(string)) 115 116 log.Println("Executing statement:", stmtSQL) 117 _, _, err = conn.Query(stmtSQL) 118 if err != nil { 119 return err 120 } 121 122 return nil 123 }