github.com/cbroglie/terraform@v0.7.0-rc3.0.20170410193827-735dfc416d46/builtin/providers/alicloud/service_alicloud_rds.go (about) 1 package alicloud 2 3 import ( 4 "github.com/denverdino/aliyungo/common" 5 "github.com/denverdino/aliyungo/rds" 6 "strings" 7 ) 8 9 // when getInstance is empty, then throw InstanceNotfound error 10 func (client *AliyunClient) DescribeDBInstanceById(id string) (instance *rds.DBInstanceAttribute, err error) { 11 arrtArgs := rds.DescribeDBInstancesArgs{ 12 DBInstanceId: id, 13 } 14 resp, err := client.rdsconn.DescribeDBInstanceAttribute(&arrtArgs) 15 if err != nil { 16 return nil, err 17 } 18 19 attr := resp.Items.DBInstanceAttribute 20 21 if len(attr) <= 0 { 22 return nil, common.GetClientErrorFromString(InstanceNotfound) 23 } 24 25 return &attr[0], nil 26 } 27 28 func (client *AliyunClient) CreateAccountByInfo(instanceId, username, pwd string) error { 29 conn := client.rdsconn 30 args := rds.CreateAccountArgs{ 31 DBInstanceId: instanceId, 32 AccountName: username, 33 AccountPassword: pwd, 34 } 35 36 if _, err := conn.CreateAccount(&args); err != nil { 37 return err 38 } 39 40 if err := conn.WaitForAccount(instanceId, username, rds.Available, 200); err != nil { 41 return err 42 } 43 return nil 44 } 45 46 func (client *AliyunClient) CreateDatabaseByInfo(instanceId, dbName, charset, desp string) error { 47 conn := client.rdsconn 48 args := rds.CreateDatabaseArgs{ 49 DBInstanceId: instanceId, 50 DBName: dbName, 51 CharacterSetName: charset, 52 DBDescription: desp, 53 } 54 _, err := conn.CreateDatabase(&args) 55 return err 56 } 57 58 func (client *AliyunClient) DescribeDatabaseByName(instanceId, dbName string) (ds []rds.Database, err error) { 59 conn := client.rdsconn 60 args := rds.DescribeDatabasesArgs{ 61 DBInstanceId: instanceId, 62 DBName: dbName, 63 } 64 65 resp, err := conn.DescribeDatabases(&args) 66 if err != nil { 67 return nil, err 68 } 69 70 return resp.Databases.Database, nil 71 } 72 73 func (client *AliyunClient) GrantDBPrivilege2Account(instanceId, username, dbName string) error { 74 conn := client.rdsconn 75 pargs := rds.GrantAccountPrivilegeArgs{ 76 DBInstanceId: instanceId, 77 AccountName: username, 78 DBName: dbName, 79 AccountPrivilege: rds.ReadWrite, 80 } 81 if _, err := conn.GrantAccountPrivilege(&pargs); err != nil { 82 return err 83 } 84 85 if err := conn.WaitForAccountPrivilege(instanceId, username, dbName, rds.ReadWrite, 200); err != nil { 86 return err 87 } 88 return nil 89 } 90 91 func (client *AliyunClient) AllocateDBPublicConnection(instanceId, port string) error { 92 conn := client.rdsconn 93 args := rds.AllocateInstancePublicConnectionArgs{ 94 DBInstanceId: instanceId, 95 ConnectionStringPrefix: instanceId + "o", 96 Port: port, 97 } 98 99 if _, err := conn.AllocateInstancePublicConnection(&args); err != nil { 100 return err 101 } 102 103 if err := conn.WaitForPublicConnection(instanceId, 600); err != nil { 104 return err 105 } 106 return nil 107 } 108 109 func (client *AliyunClient) ConfigDBBackup(instanceId, backupTime, backupPeriod string, retentionPeriod int) error { 110 bargs := rds.BackupPolicy{ 111 PreferredBackupTime: backupTime, 112 PreferredBackupPeriod: backupPeriod, 113 BackupRetentionPeriod: retentionPeriod, 114 } 115 args := rds.ModifyBackupPolicyArgs{ 116 DBInstanceId: instanceId, 117 BackupPolicy: bargs, 118 } 119 120 if _, err := client.rdsconn.ModifyBackupPolicy(&args); err != nil { 121 return err 122 } 123 124 if err := client.rdsconn.WaitForInstance(instanceId, rds.Running, 600); err != nil { 125 return err 126 } 127 return nil 128 } 129 130 func (client *AliyunClient) ModifyDBSecurityIps(instanceId, ips string) error { 131 sargs := rds.DBInstanceIPArray{ 132 SecurityIps: ips, 133 } 134 135 args := rds.ModifySecurityIpsArgs{ 136 DBInstanceId: instanceId, 137 DBInstanceIPArray: sargs, 138 } 139 140 if _, err := client.rdsconn.ModifySecurityIps(&args); err != nil { 141 return err 142 } 143 144 if err := client.rdsconn.WaitForInstance(instanceId, rds.Running, 600); err != nil { 145 return err 146 } 147 return nil 148 } 149 150 func (client *AliyunClient) DescribeDBSecurityIps(instanceId string) (ips []rds.DBInstanceIPList, err error) { 151 args := rds.DescribeDBInstanceIPsArgs{ 152 DBInstanceId: instanceId, 153 } 154 155 resp, err := client.rdsconn.DescribeDBInstanceIPs(&args) 156 if err != nil { 157 return nil, err 158 } 159 return resp.Items.DBInstanceIPArray, nil 160 } 161 162 func (client *AliyunClient) GetSecurityIps(instanceId string) ([]string, error) { 163 arr, err := client.DescribeDBSecurityIps(instanceId) 164 if err != nil { 165 return nil, err 166 } 167 ips := "" 168 for i, ip := range arr { 169 if i == 0 { 170 ips += ip.SecurityIPList 171 } else { 172 ips += COMMA_SEPARATED + ip.SecurityIPList 173 } 174 } 175 return strings.Split(ips, COMMA_SEPARATED), nil 176 } 177 178 func (client *AliyunClient) ModifyDBClassStorage(instanceId, class, storage string) error { 179 conn := client.rdsconn 180 args := rds.ModifyDBInstanceSpecArgs{ 181 DBInstanceId: instanceId, 182 PayType: rds.Postpaid, 183 DBInstanceClass: class, 184 DBInstanceStorage: storage, 185 } 186 187 if _, err := conn.ModifyDBInstanceSpec(&args); err != nil { 188 return err 189 } 190 191 if err := conn.WaitForInstance(instanceId, rds.Running, 600); err != nil { 192 return err 193 } 194 return nil 195 } 196 197 // turn period to TimeType 198 func TransformPeriod2Time(period int, chargeType string) (ut int, tt common.TimeType) { 199 if chargeType == string(rds.Postpaid) { 200 return 1, common.Day 201 } 202 203 if period >= 1 && period <= 9 { 204 return period, common.Month 205 } 206 207 if period == 12 { 208 return 1, common.Year 209 } 210 211 if period == 24 { 212 return 2, common.Year 213 } 214 return 0, common.Day 215 216 } 217 218 // turn TimeType to Period 219 func TransformTime2Period(ut int, tt common.TimeType) (period int) { 220 if tt == common.Year { 221 return 12 * ut 222 } 223 224 return ut 225 226 } 227 228 // Flattens an array of databases into a []map[string]interface{} 229 func flattenDatabaseMappings(list []rds.Database) []map[string]interface{} { 230 result := make([]map[string]interface{}, 0, len(list)) 231 for _, i := range list { 232 l := map[string]interface{}{ 233 "db_name": i.DBName, 234 "character_set_name": i.CharacterSetName, 235 "db_description": i.DBDescription, 236 } 237 result = append(result, l) 238 } 239 return result 240 } 241 242 func flattenDBBackup(list []rds.BackupPolicy) []map[string]interface{} { 243 result := make([]map[string]interface{}, 0, len(list)) 244 for _, i := range list { 245 l := map[string]interface{}{ 246 "preferred_backup_period": i.PreferredBackupPeriod, 247 "preferred_backup_time": i.PreferredBackupTime, 248 "backup_retention_period": i.LogBackupRetentionPeriod, 249 } 250 result = append(result, l) 251 } 252 return result 253 } 254 255 func flattenDBSecurityIPs(list []rds.DBInstanceIPList) []map[string]interface{} { 256 result := make([]map[string]interface{}, 0, len(list)) 257 for _, i := range list { 258 l := map[string]interface{}{ 259 "security_ips": i.SecurityIPList, 260 } 261 result = append(result, l) 262 } 263 return result 264 } 265 266 // Flattens an array of databases connection into a []map[string]interface{} 267 func flattenDBConnections(list []rds.DBInstanceNetInfo) []map[string]interface{} { 268 result := make([]map[string]interface{}, 0, len(list)) 269 for _, i := range list { 270 l := map[string]interface{}{ 271 "connection_string": i.ConnectionString, 272 "ip_type": i.IPType, 273 "ip_address": i.IPAddress, 274 } 275 result = append(result, l) 276 } 277 return result 278 }