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  }