alibabacloudstack/service_apsarastack_polardb.go (1,073 lines of code) (raw):

package alibabacloudstack import ( "encoding/json" "fmt" "strconv" "strings" "time" "github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses" "github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/connectivity" "github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/errmsgs" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) type PolardbService struct { client *connectivity.AlibabacloudStackClient } type PolardbCheckaccountnameavailableResponse struct { RequestId string `json:"RequestId"` } func (s *PolardbService) DoPolardbCheckaccountnameavailableRequest(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient) (*PolardbCheckaccountnameavailableResponse, error) { // api: polardb - 2024-01-30 - CheckAccountNameAvailable request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "CheckAccountNameAvailable", "") PolardbCheckaccountnameavailableResponse := &PolardbCheckaccountnameavailableResponse{} bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "CheckAccountNameAvailable", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbCheckaccountnameavailableResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "CheckAccountNameAvailable", errmsgs.AlibabacloudStackSdkGoERROR) } return PolardbCheckaccountnameavailableResponse, nil } type PolardbDescribeaccountsResponse struct { Accounts struct { DBInstanceAccount []struct { DatabasePrivileges struct { DatabasePrivilege []struct { DBName string `json:"DBName"` AccountPrivilege string `json:"AccountPrivilege"` AccountPrivilegeDetail string `json:"AccountPrivilegeDetail"` } `json:"DatabasePrivilege"` } `json:"DatabasePrivileges"` DBInstanceId string `json:"DBInstanceId"` AccountName string `json:"AccountName"` AccountStatus string `json:"AccountStatus"` AccountType string `json:"AccountType"` AccountDescription string `json:"AccountDescription"` PrivExceeded string `json:"PrivExceeded"` ValidUntil string `json:"ValidUntil"` CreateDB string `json:"CreateDB"` Replication string `json:"Replication"` CreateRole string `json:"CreateRole"` BypassRLS string `json:"BypassRLS"` } `json:"DBInstanceAccount"` } `json:"Accounts"` RequestId string `json:"RequestId"` SystemAdminAccountStatus string `json:"SystemAdminAccountStatus"` SystemAdminAccountFirstActivationTime string `json:"SystemAdminAccountFirstActivationTime"` } func (s *PolardbService) DescribeDBAccount(id string) (*PolardbDescribeaccountsResponse, error) { parts, _ := ParseResourceId(id, 2) // api: polardb - 2024-01-30 - DescribeAccounts request := s.client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeAccounts", "") PolardbDescribeaccountsResponse := &PolardbDescribeaccountsResponse{} request.QueryParams["AccountName"] = parts[1] // 常规参数填充 request.QueryParams["DBInstanceId"] = parts[0] bresponse, err := s.client.ProcessCommonRequest(request) if err != nil { if errmsgs.IsExpectedErrors(err, []string{"InternalError", "OperationDenied.DBInstanceStatus"}) { return nil, nil } if errmsgs.NotFoundError(err) || errmsgs.IsExpectedErrors(err, []string{"InvalidDBName.NotFound"}) { return nil, errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackSdkGoERROR) } if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeAccounts", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribeaccountsResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeAccounts", errmsgs.AlibabacloudStackSdkGoERROR) } if len(PolardbDescribeaccountsResponse.Accounts.DBInstanceAccount) < 1 { return PolardbDescribeaccountsResponse, errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("accounts", "")), errmsgs.NotFoundMsg, errmsgs.ProviderERROR) } return PolardbDescribeaccountsResponse, nil } func (s *PolardbService) DoPolardbDescribeaccountsRequest(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient) (*PolardbDescribeaccountsResponse, error) { // api: polardb - 2024-01-30 - DescribeAccounts request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeAccounts", "") PolardbDescribeaccountsResponse := &PolardbDescribeaccountsResponse{} //调用request_params_handler // 常规参数填充 if v, ok := d.GetOk("account_name"); ok && v != "" { //调用requestin_handler request.QueryParams["AccountName"] = v.(string) } // 常规参数填充 if v, ok := d.GetOk("data_base_instance_id"); ok && v != "" { //调用requestin_handler request.QueryParams["DBInstanceId"] = v.(string) } else { return nil, fmt.Errorf("DataBaseInstanceId is required") } // 常规参数填充 if v, ok := d.GetOk("page_number"); ok { //调用requestin_handler request.QueryParams["PageNumber"] = strconv.Itoa(v.(int)) } // 常规参数填充 if v, ok := d.GetOk("page_size"); ok { //调用requestin_handler request.QueryParams["PageSize"] = strconv.Itoa(v.(int)) } bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeAccounts", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribeaccountsResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeAccounts", errmsgs.AlibabacloudStackSdkGoERROR) } if len(PolardbDescribeaccountsResponse.Accounts.DBInstanceAccount) < 1 { return PolardbDescribeaccountsResponse, errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("accounts", "")), errmsgs.NotFoundMsg, errmsgs.ProviderERROR) } return PolardbDescribeaccountsResponse, nil } type PolardbDescribedatabasesResponse struct { Databases struct { Database []struct { Accounts struct { AccountPrivilegeInfo []struct { Account string `json:"Account"` AccountPrivilege string `json:"AccountPrivilege"` } `json:"AccountPrivilegeInfo"` } `json:"Accounts"` DBName string `json:"DBName"` DBInstanceId string `json:"DBInstanceId"` Engine string `json:"Engine"` DBStatus string `json:"DBStatus"` CharacterSetName string `json:"CharacterSetName"` DBDescription string `json:"DBDescription"` Collate string `json:"Collate"` Ctype string `json:"Ctype"` ConnLimit int `json:"ConnLimit"` Tablespace string `json:"Tablespace"` } `json:"Database"` } `json:"Databases"` RequestId string `json:"RequestId"` } func (s *PolardbService) DescribeDBDatabase(id string) (*PolardbDescribedatabasesResponse, error) { // api: polardb - 2024-01-30 - DescribeDatabases request := s.client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeDatabases", "") PolardbDescribedatabasesResponse := &PolardbDescribedatabasesResponse{} parts, err := ParseResourceId(id, 2) request.QueryParams["DBInstanceId"] = parts[0] request.QueryParams["DBName"] = parts[1] bresponse, err := s.client.ProcessCommonRequest(request) if err != nil { if errmsgs.IsExpectedErrors(err, []string{"InternalError", "OperationDenied.DBInstanceStatus"}) { return nil, nil } if errmsgs.NotFoundError(err) || errmsgs.IsExpectedErrors(err, []string{"InvalidDBName.NotFound"}) { return nil, errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackSdkGoERROR) } if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeDatabases", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribedatabasesResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeDatabases", errmsgs.AlibabacloudStackSdkGoERROR) } if len(PolardbDescribedatabasesResponse.Databases.Database) < 1 { return PolardbDescribedatabasesResponse, errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("Databases", "")), errmsgs.NotFoundMsg, errmsgs.ProviderERROR) } return PolardbDescribedatabasesResponse, nil } func (s *PolardbService) DoPolardbDescribedatabasesRequest(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient) (*PolardbDescribedatabasesResponse, error) { // api: polardb - 2024-01-30 - DescribeDatabases request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeDatabases", "") PolardbDescribedatabasesResponse := &PolardbDescribedatabasesResponse{} //调用request_params_handler // 常规参数填充 if v, ok := d.GetOk("data_base_instance_id"); ok && v != "" { //调用requestin_handler request.QueryParams["DBInstanceId"] = v.(string) } else { return nil, fmt.Errorf("DataBaseInstanceId is required") } // 常规参数填充 if v, ok := d.GetOk("data_base_name"); ok && v != "" { //调用requestin_handler request.QueryParams["DBName"] = v.(string) } // 常规参数填充 if v, ok := d.GetOk("page_number"); ok { //调用requestin_handler request.QueryParams["PageNumber"] = strconv.Itoa(v.(int)) } // 常规参数填充 if v, ok := d.GetOk("page_size"); ok { //调用requestin_handler request.QueryParams["PageSize"] = strconv.Itoa(v.(int)) } // 常规参数填充 if v, ok := d.GetOk("status"); ok && v != "" { //调用requestin_handler request.QueryParams["DBStatus"] = v.(string) } bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeDatabases", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribedatabasesResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeDatabases", errmsgs.AlibabacloudStackSdkGoERROR) } if len(PolardbDescribedatabasesResponse.Databases.Database) < 1 { return PolardbDescribedatabasesResponse, errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("Databases", "")), errmsgs.NotFoundMsg, errmsgs.ProviderERROR) } return PolardbDescribedatabasesResponse, nil } type PolardbDescribebackuppolicyResponse struct { RequestId string `json:"RequestId"` BackupRetentionPeriod int `json:"BackupRetentionPeriod"` PreferredNextBackupTime string `json:"PreferredNextBackupTime"` MaxRetention int `json:"MaxRetention"` PreferredBackupTime string `json:"PreferredBackupTime"` PreferredBackupPeriod string `json:"PreferredBackupPeriod"` BackupLog string `json:"BackupLog"` LogBackupRetentionPeriod string `json:"LogBackupRetentionPeriod"` EnableBackupLog string `json:"EnableBackupLog"` LocalLogRetentionHours string `json:"LocalLogRetentionHours"` LocalLogRetentionSpace string `json:"LocalLogRetentionSpace"` CompressType string `json:"CompressType"` Duplication string `json:"Duplication"` DuplicationContent string `json:"DuplicationContent"` HighSpaceUsageProtection string `json:"HighSpaceUsageProtection"` LogBackupFrequency string `json:"LogBackupFrequency"` ArchiveBackupRetentionPeriod int `json:"ArchiveBackupRetentionPeriod"` ArchiveBackupKeepPolicy int `json:"ArchiveBackupKeepPolicy"` ArchiveBackupKeepCount int `json:"ArchiveBackupKeepCount"` ReleasedKeepPolicy string `json:"ReleasedKeepPolicy"` LogBackupLocalRetentionNumber int `json:"LogBackupLocalRetentionNumber"` BackupMethod string `json:"BackupMethod"` DuplicationLocation struct { Sotrage string `json:"Sotrage"` Location struct { Endpoint string `json:"Endpoint"` Bucket string `json:"Bucket"` } `json:"Location"` } `json:"DuplicationLocation"` } func (s *PolardbService) DoPolardbDescribebackuppolicyRequest(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient) (*PolardbDescribebackuppolicyResponse, error) { // api: polardb - 2024-01-30 - DescribeBackupPolicy request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeBackupPolicy", "") PolardbDescribebackuppolicyResponse := &PolardbDescribebackuppolicyResponse{} //调用request_params_handler if v, ok := d.GetOk("backup_policy_mode"); ok { //调用requestin_handler request.QueryParams["BackupPolicyMode"] = v.(string) } if v, ok := d.GetOk("db_instance_id"); ok { //调用requestin_handler request.QueryParams["DBInstanceId"] = v.(string) } else { return nil, fmt.Errorf("DBInstanceId is required") } bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeBackupPolicy", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribebackuppolicyResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeBackupPolicy", errmsgs.AlibabacloudStackSdkGoERROR) } return PolardbDescribebackuppolicyResponse, nil } type PolardbDescriberegionsResponse struct { Regions struct { RDSRegion []struct { RegionId string `json:"RegionId"` ZoneId string `json:"ZoneId"` SubDomain string `json:"SubDomain"` SubZoneId string `json:"SubZoneId"` } `json:"RDSRegion"` } `json:"Regions"` RequestId string `json:"RequestId"` } func (s *PolardbService) DoPolardbDescriberegionsRequest(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient) (*PolardbDescriberegionsResponse, error) { // api: polardb - 2024-01-30 - DescribeRegions request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeRegions", "") PolardbDescriberegionsResponse := &PolardbDescriberegionsResponse{} bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeRegions", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescriberegionsResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeRegions", errmsgs.AlibabacloudStackSdkGoERROR) } return PolardbDescriberegionsResponse, nil } type PolardbDescribedbinstancenetinfoResponse struct { DBInstanceNetInfos struct { DBInstanceNetInfo []struct { SecurityIPGroups struct { securityIPGroup []struct { SecurityIPGroupName string `json:"SecurityIPGroupName"` SecurityIPs string `json:"SecurityIPs"` } `json:"securityIPGroup"` } `json:"SecurityIPGroups"` DBInstanceWeights struct { DBInstanceWeight []struct { DBInstanceId string `json:"DBInstanceId"` DBInstanceType string `json:"DBInstanceType"` Availability string `json:"Availability"` Weight string `json:"Weight"` } `json:"DBInstanceWeight"` } `json:"DBInstanceWeights"` Upgradeable string `json:"Upgradeable"` ExpiredTime string `json:"ExpiredTime"` ConnectionString string `json:"ConnectionString"` IPAddress string `json:"IPAddress"` IPType string `json:"IPType"` Port string `json:"Port"` VPCId string `json:"VPCId"` VSwitchId string `json:"VSwitchId"` ConnectionStringType string `json:"ConnectionStringType"` MaxDelayTime string `json:"MaxDelayTime"` DistributionType string `json:"DistributionType"` } `json:"DBInstanceNetInfo"` } `json:"DBInstanceNetInfos"` RequestId string `json:"RequestId"` InstanceNetworkType string `json:"InstanceNetworkType"` SecurityIPMode string `json:"SecurityIPMode"` } func (s *PolardbService) DoPolardbDescribedbinstancenetinfoRequest(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient, id string) (*PolardbDescribedbinstancenetinfoResponse, error) { // api: polardb - 2024-01-30 - DescribeDBInstanceNetInfo request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeDBInstanceNetInfo", "") PolardbDescribedbinstancenetinfoResponse := &PolardbDescribedbinstancenetinfoResponse{} //调用request_params_handler request.QueryParams["DBInstanceId"] = id bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeDBInstanceNetInfo", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribedbinstancenetinfoResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeDBInstanceNetInfo", errmsgs.AlibabacloudStackSdkGoERROR) } if len(PolardbDescribedbinstancenetinfoResponse.DBInstanceNetInfos.DBInstanceNetInfo) < 1 { return PolardbDescribedbinstancenetinfoResponse, errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("DBInstanceNetInfo", id)), errmsgs.NotFoundMsg, errmsgs.ProviderERROR) } return PolardbDescribedbinstancenetinfoResponse, nil } type PolardbDescribedbinstanceattributeResponse struct { Items struct { DBInstanceAttribute []struct { SlaveZones struct { SlaveZone []struct { ZoneId string `json:"ZoneId"` } `json:"SlaveZone"` } `json:"SlaveZones"` ReadOnlyDBInstanceIds struct { ReadOnlyDBInstanceId []struct { DBInstanceId string `json:"DBInstanceId"` } `json:"ReadOnlyDBInstanceId"` } `json:"ReadOnlyDBInstanceIds"` IPType string `json:"IPType"` DBInstanceDiskUsed string `json:"DBInstanceDiskUsed"` GuardDBInstanceName string `json:"GuardDBInstanceName"` CanTempUpgrade bool `json:"CanTempUpgrade"` TempUpgradeTimeStart string `json:"TempUpgradeTimeStart"` TempUpgradeTimeEnd string `json:"TempUpgradeTimeEnd"` TempUpgradeRecoveryTime string `json:"TempUpgradeRecoveryTime"` TempUpgradeRecoveryClass string `json:"TempUpgradeRecoveryClass"` TempUpgradeRecoveryCpu int `json:"TempUpgradeRecoveryCpu"` TempUpgradeRecoveryMemory int `json:"TempUpgradeRecoveryMemory"` TempUpgradeRecoveryMaxIOPS string `json:"TempUpgradeRecoveryMaxIOPS"` SqlGrammarCompatibility string `json:"SqlGrammarCompatibility"` TempUpgradeRecoveryMaxConnections string `json:"TempUpgradeRecoveryMaxConnections"` InsId int `json:"InsId"` DBInstanceId string `json:"DBInstanceId"` PayType string `json:"PayType"` DBInstanceClassType string `json:"DBInstanceClassType"` DBInstanceType string `json:"DBInstanceType"` RegionId string `json:"RegionId"` ConnectionString string `json:"ConnectionString"` SlaveConnectionString string `json:"SlaveConnectionString"` Port string `json:"Port"` Engine string `json:"Engine"` EngineVersion string `json:"EngineVersion"` DBInstanceClass string `json:"DBInstanceClass"` DBInstanceMemory int `json:"DBInstanceMemory"` DBInstanceStorage int `json:"DBInstanceStorage"` VpcCloudInstanceId string `json:"VpcCloudInstanceId"` DBInstanceNetType interface{} `json:"DBInstanceNetType"` DBInstanceStatus string `json:"DBInstanceStatus"` DBInstanceDescription string `json:"DBInstanceDescription"` LockMode string `json:"LockMode"` LockReason string `json:"LockReason"` ReadDelayTime string `json:"ReadDelayTime"` DBMaxQuantity int `json:"DBMaxQuantity"` AccountMaxQuantity int `json:"AccountMaxQuantity"` CreationTime string `json:"CreationTime"` ExpireTime string `json:"ExpireTime"` MaintainTime string `json:"MaintainTime"` AvailabilityValue string `json:"AvailabilityValue"` MaxIOPS int `json:"MaxIOPS"` MaxConnections int `json:"MaxConnections"` MasterInstanceId string `json:"MasterInstanceId"` DBInstanceCPU string `json:"DBInstanceCPU"` IncrementSourceDBInstanceId string `json:"IncrementSourceDBInstanceId"` GuardDBInstanceId string `json:"GuardDBInstanceId"` ReplicateId string `json:"ReplicateId"` TempDBInstanceId string `json:"TempDBInstanceId"` SecurityIPList string `json:"SecurityIPList"` ZoneId string `json:"ZoneId"` InstanceNetworkType string `json:"InstanceNetworkType"` DBInstanceStorageType string `json:"DBInstanceStorageType"` EncryptionKey string `json:"EncryptionKey"` AdvancedFeatures string `json:"AdvancedFeatures"` Category string `json:"Category"` AccountType string `json:"AccountType"` SupportUpgradeAccountType string `json:"SupportUpgradeAccountType"` SupportCreateSuperAccount string `json:"SupportCreateSuperAccount"` VpcId string `json:"VpcId"` VSwitchId string `json:"VSwitchId"` ConnectionMode string `json:"ConnectionMode"` CurrentKernelVersion string `json:"CurrentKernelVersion"` LatestKernelVersion string `json:"LatestKernelVersion"` CurrentKernelShowVersion string `json:"CurrentKernelShowVersion"` ResourceGroupId string `json:"ResourceGroupId"` ReadonlyInstanceSQLDelayedTime string `json:"ReadonlyInstanceSQLDelayedTime"` SecurityIPMode string `json:"SecurityIPMode"` TimeZone string `json:"TimeZone"` Collation string `json:"Collation"` DispenseMode string `json:"DispenseMode"` MasterZone string `json:"MasterZone"` AutoUpgradeMinorVersion string `json:"AutoUpgradeMinorVersion"` ProxyType int `json:"ProxyType"` ConsoleVersion string `json:"ConsoleVersion"` CpuType string `json:"CpuType"` Vip string `json:"Vip"` Vip_v6 string `json:"Vip_v6"` Vport string `json:"Vport"` Extra struct { DBInstanceId struct { DBInstanceId []string `json:"DBInstanceId"` } `json:"DBInstanceId"` ReplicaGroupID string `json:"ReplicaGroupID"` ReplicaGroupStatus string `json:"ReplicaGroupStatus"` ActiveReplicaDBInstanceID string `json:"ActiveReplicaDBInstanceID"` } `json:"Extra"` } `json:"DBInstanceAttribute"` } `json:"Items"` RequestId string `json:"RequestId"` } func (s *PolardbService) DoPolardbDescribedbinstanceattributeRequest(id string, client *connectivity.AlibabacloudStackClient) (*PolardbDescribedbinstanceattributeResponse, error) { // api: polardb - 2024-01-30 - DescribeDBInstanceAttribute request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeDBInstanceAttribute", "") PolardbDescribedbinstanceattributeResponse := &PolardbDescribedbinstanceattributeResponse{} //调用request_params_handler request.QueryParams["DBInstanceId"] = id bresponse, err := client.ProcessCommonRequest(request) if err != nil { if errmsgs.IsExpectedErrors(err, []string{"InvalidDBInstanceId.NotFound"}) { return nil, errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackSdkGoERROR) } if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeDBInstanceAttribute", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribedbinstanceattributeResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeDBInstanceAttribute", errmsgs.AlibabacloudStackSdkGoERROR) } if len(PolardbDescribedbinstanceattributeResponse.Items.DBInstanceAttribute) < 1 { return PolardbDescribedbinstanceattributeResponse, errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("PolardbInstance", id)), errmsgs.NotFoundMsg, errmsgs.ProviderERROR) } return PolardbDescribedbinstanceattributeResponse, nil } type PolardbDescribedbinstancemonitorResponse struct { RequestId string `json:"RequestId"` Period string `json:"Period"` } func (s *PolardbService) DoPolardbDescribedbinstancemonitorRequest(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient) (*PolardbDescribedbinstancemonitorResponse, error) { // api: polardb - 2024-01-30 - DescribeDBInstanceMonitor request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeDBInstanceMonitor", "") PolardbDescribedbinstancemonitorResponse := &PolardbDescribedbinstancemonitorResponse{} request.QueryParams["DBInstanceId"] = d.Id() bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeDBInstanceMonitor", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribedbinstancemonitorResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeDBInstanceMonitor", errmsgs.AlibabacloudStackSdkGoERROR) } return PolardbDescribedbinstancemonitorResponse, nil } type PolardbDescribeparametersResponse struct { ConfigParameters struct { DBInstanceParameter []struct { ParameterName string `json:"ParameterName"` ParameterValue string `json:"ParameterValue"` ParameterDescription string `json:"ParameterDescription"` } `json:"DBInstanceParameter"` } `json:"ConfigParameters"` RunningParameters struct { DBInstanceParameter []struct { ParameterName string `json:"ParameterName"` ParameterValue string `json:"ParameterValue"` ParameterDescription string `json:"ParameterDescription"` } `json:"DBInstanceParameter"` } `json:"RunningParameters"` RequestId string `json:"RequestId"` Engine string `json:"Engine"` EngineVersion string `json:"EngineVersion"` } func (s *PolardbService) DoPolardbDescribeparametersRequest(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient) (*PolardbDescribeparametersResponse, error) { // api: polardb - 2024-01-30 - DescribeParameters request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeParameters", "") PolardbDescribeparametersResponse := &PolardbDescribeparametersResponse{} //调用request_params_handler request.QueryParams["DBInstanceId"] = d.Id() bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeParameters", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribeparametersResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeParameters", errmsgs.AlibabacloudStackSdkGoERROR) } return PolardbDescribeparametersResponse, nil } type PolardbDescribedbinstanceiparraylistResponse struct { Items struct { DBInstanceIPArray []struct { DBInstanceIPArrayName string `json:"DBInstanceIPArrayName"` DBInstanceIPArrayAttribute string `json:"DBInstanceIPArrayAttribute"` SecurityIPType string `json:"SecurityIPType"` SecurityIPList string `json:"SecurityIPList"` WhitelistNetworkType string `json:"WhitelistNetworkType"` } `json:"DBInstanceIPArray"` } `json:"Items"` RequestId string `json:"RequestId"` } func (s *PolardbService) DoPolardbDescribedbinstanceiparraylistRequest(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient) (*PolardbDescribedbinstanceiparraylistResponse, error) { // api: polardb - 2024-01-30 - DescribeDBInstanceIPArrayList request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeDBInstanceIPArrayList", "") PolardbDescribedbinstanceiparraylistResponse := &PolardbDescribedbinstanceiparraylistResponse{} //调用request_params_handler request.QueryParams["DBInstanceId"] = d.Id() bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeDBInstanceIPArrayList", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribedbinstanceiparraylistResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeDBInstanceIPArrayList", errmsgs.AlibabacloudStackSdkGoERROR) } return PolardbDescribedbinstanceiparraylistResponse, nil } // not finish func (s *PolardbService) WaitForPolardbConnection(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) for { parts, err := ParseResourceId(d.Id(), 2) object, err := s.DoPolardbDescribedbinstancenetinfoRequest(d, client, parts[0]) if err != nil { if errmsgs.NotFoundError(err) { if status == Deleted { return nil } } else { return errmsgs.WrapError(err) } } if object != nil && object.DBInstanceNetInfos.DBInstanceNetInfo[0].ConnectionString != "" { return nil } if time.Now().After(deadline) { return errmsgs.WrapErrorf(err, errmsgs.WaitTimeoutMsg, d.Id(), GetFunc(1), timeout, object.DBInstanceNetInfos.DBInstanceNetInfo[0].ConnectionString, d.Id(), errmsgs.ProviderERROR) } } } func (s *PolardbService) WaitForDBInstance(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) for { object, err := s.DoPolardbDescribedbinstancesRequest(d.Id(), client) if err != nil { if errmsgs.NotFoundError(err) { if status == Deleted { return nil } } else { return errmsgs.WrapError(err) } } if object != nil { if status == Deleted && len(object.Items.DBInstance) == 0 { break } else if strings.ToLower(object.Items.DBInstance[0].DBInstanceStatus) == strings.ToLower(string(status)) { break } } time.Sleep(DefaultIntervalShort * time.Second) if time.Now().After(deadline) { return errmsgs.WrapErrorf(err, errmsgs.WaitTimeoutMsg, d.Id(), GetFunc(1), timeout, object.Items.DBInstance[0].DBInstanceStatus, status, errmsgs.ProviderERROR) } } return nil } func (s *PolardbService) GetSecurityIps(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient) ([]string, error) { object, err := s.DoPolardbDescribedbinstanceiparraylistRequest(d, client) if err != nil { return nil, errmsgs.WrapError(err) } var ips, separator string ipsMap := make(map[string]string) for _, ip := range object.Items.DBInstanceIPArray { if ip.DBInstanceIPArrayAttribute == "hidden" { continue } ips += separator + ip.SecurityIPList separator = COMMA_SEPARATED } for _, ip := range strings.Split(ips, COMMA_SEPARATED) { ipsMap[ip] = ip } var finalIps []string if len(ipsMap) > 0 { for key := range ipsMap { finalIps = append(finalIps, key) } } return finalIps, nil } func (s *PolardbService) RefreshParameters(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient, attribute string) error { var param []map[string]interface{} documented, ok := d.GetOk(attribute) if !ok { d.Set(attribute, param) return nil } object, err := s.DoPolardbDescribeparametersRequest(d, client) if err != nil { return errmsgs.WrapError(err) } var parameters = make(map[string]interface{}) for _, i := range object.RunningParameters.DBInstanceParameter { if i.ParameterName != "" { parameter := map[string]interface{}{ "name": i.ParameterName, "value": i.ParameterValue, } parameters[i.ParameterName] = parameter } } for _, i := range object.ConfigParameters.DBInstanceParameter { if i.ParameterName != "" { parameter := map[string]interface{}{ "name": i.ParameterName, "value": i.ParameterValue, } parameters[i.ParameterName] = parameter } } for _, parameter := range documented.(*schema.Set).List() { name := parameter.(map[string]interface{})["name"] for _, value := range parameters { if value.(map[string]interface{})["name"] == name { param = append(param, value.(map[string]interface{})) break } } } if err := d.Set(attribute, param); err != nil { return errmsgs.WrapError(err) } return nil } func (s *PolardbService) ModifyDBSecurityIps(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient, ips string) error { request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifySecurityIps", "") PolardbModifysecurityipsResponse := PolardbModifysecurityipsResponse{} request.QueryParams["DBInstanceId"] = d.Id() request.QueryParams["SecurityIps"] = ips bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_polardb_db_instance", "ModifySecurityIps", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbModifysecurityipsResponse) if err != nil { return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "alibabacloudstack_polardb_db_instance", "ModifySecurityIps", errmsgs.AlibabacloudStackSdkGoERROR) } return nil } type PolardbDescribeinstanceautorenewalattributeResponse struct { Items struct { Item []struct { DBInstanceId string `json:"DBInstanceId"` RegionId string `json:"RegionId"` Duration int `json:"Duration"` Status string `json:"Status"` AutoRenew string `json:"AutoRenew"` } `json:"Item"` } `json:"Items"` RequestId string `json:"RequestId"` PageNumber int `json:"PageNumber"` TotalRecordCount int `json:"TotalRecordCount"` PageRecordCount int `json:"PageRecordCount"` } func (s *PolardbService) DoPolardbDescribeinstanceautorenewalattributeRequest(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient) (*PolardbDescribeinstanceautorenewalattributeResponse, error) { // api: polardb - 2024-01-30 - DescribeInstanceAutoRenewalAttribute request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeInstanceAutoRenewalAttribute", "") PolardbDescribeinstanceautorenewalattributeResponse := &PolardbDescribeinstanceautorenewalattributeResponse{} request.QueryParams["DBInstanceId"] = d.Id() bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeInstanceAutoRenewalAttribute", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribeinstanceautorenewalattributeResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeInstanceAutoRenewalAttribute", errmsgs.AlibabacloudStackSdkGoERROR) } return PolardbDescribeinstanceautorenewalattributeResponse, nil } func (s *PolardbService) ModifyParameters(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient, attribute string) error { request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "ModifyParameters", "") request.QueryParams["DBInstanceId"] = d.Id() request.QueryParams["Forcerestart"] = d.Get("force_restart").(string) config := make(map[string]string) allConfig := make(map[string]string) o, n := d.GetChange(attribute) os, ns := o.(*schema.Set), n.(*schema.Set) add := ns.Difference(os).List() if len(add) > 0 { for _, i := range add { key := i.(map[string]interface{})["name"].(string) value := i.(map[string]interface{})["value"].(string) config[key] = value } cfg, _ := json.Marshal(config) request.QueryParams["Parameters"] = string(cfg) // wait instance status is Normal before modifying if err := s.WaitForDBInstance(d, client, Running, DefaultLongTimeout); err != nil { return errmsgs.WrapError(err) } // Need to check whether some parameter needs restart if !d.Get("force_restart").(bool) { req := client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeParameterTemplates", "") req.QueryParams["DBInstanceId"] = d.Id() req.QueryParams["Engine"] = d.Get("engine").(string) req.QueryParams["EngineVersion"] = d.Get("engine_version").(string) req.QueryParams["ClientToken"] = buildClientToken(req.GetActionName()) forceRestartMap := make(map[string]string) bresponse, err := client.ProcessCommonRequest(req) DescribeParameterTemplatesResponse := DescribeParameterTemplatesResponse{} if err != nil { if bresponse == nil { return errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_polardb_db_instance", "CreateReadOnlyDBInstance", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &DescribeParameterTemplatesResponse) if err != nil { return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "alibabacloudstack_polardb_db_instance", "CreateReadOnlyDBInstance", errmsgs.AlibabacloudStackSdkGoERROR) } for _, para := range DescribeParameterTemplatesResponse.Parameters.TemplateRecord { if para.ForceRestart == "true" { forceRestartMap[para.ParameterName] = para.ForceRestart } } if len(forceRestartMap) > 0 { for key, _ := range config { if _, ok := forceRestartMap[key]; ok { return errmsgs.WrapError(fmt.Errorf("Modifying RDS instance's parameter '%s' requires setting 'force_restart = true'.", key)) } } } } bresponse, err := client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_polardb_db_instance", "CreateReadOnlyDBInstance", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } if err != nil { return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "alibabacloudstack_polardb_db_instance", "CreateReadOnlyDBInstance", errmsgs.AlibabacloudStackSdkGoERROR) } // wait instance parameter expect after modifying for _, i := range ns.List() { key := i.(map[string]interface{})["name"].(string) value := i.(map[string]interface{})["value"].(string) allConfig[key] = value } //待实现 // if err := s.WaitForDBParameter(d.Id(), DefaultTimeoutMedium, allConfig); err != nil { // return errmsgs.WrapError(err) // } } //d.SetPartial(attribute) return nil } type DescribeParameterTemplatesResponse struct { *responses.BaseResponse RequestId string `json:"RequestId" xml:"RequestId"` Engine string `json:"Engine" xml:"Engine"` ParameterCount string `json:"ParameterCount" xml:"ParameterCount"` EngineVersion string `json:"EngineVersion" xml:"EngineVersion"` Parameters Parameters `json:"Parameters" xml:"Parameters"` } type Parameters struct { TemplateRecord []TemplateRecord `json:"TemplateRecord" xml:"TemplateRecord"` } type TemplateRecord struct { CheckingCode string `json:"CheckingCode" xml:"CheckingCode"` ParameterName string `json:"ParameterName" xml:"ParameterName"` ParameterValue string `json:"ParameterValue" xml:"ParameterValue"` ForceModify string `json:"ForceModify" xml:"ForceModify"` ForceRestart string `json:"ForceRestart" xml:"ForceRestart"` ParameterDescription string `json:"ParameterDescription" xml:"ParameterDescription"` } func (s *PolardbService) PolardbDBInstanceStateRefreshFunc(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient, id string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DoPolardbDescribedbinstancesRequest(d.Id(), client) if err != nil { if errmsgs.NotFoundError(err) { // Set this to nil as if we didn't find anything. return nil, "", nil } return nil, "", errmsgs.WrapError(err) } for _, failState := range failStates { if object.Items.DBInstance[0].DBInstanceStatus == failState { return object, object.Items.DBInstance[0].DBInstanceStatus, errmsgs.WrapError(errmsgs.Error(errmsgs.FailedToReachTargetStatus, object.Items.DBInstance[0].DBInstanceStatus)) } } return object, object.Items.DBInstance[0].DBInstanceStatus, nil } } func (s *PolardbService) PolardbDBInstanceTdeStateRefreshFunc(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient, id string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeDBInstanceTDE(d.Id()) if err != nil { if errmsgs.NotFoundError(err) { // Set this to nil as if we didn't find anything. return nil, "", nil } return nil, "", errmsgs.WrapError(err) } for _, failState := range failStates { if object["TDEStatus"].(string) == failState { return object, object["TDEStatus"].(string), errmsgs.WrapError(errmsgs.Error(errmsgs.FailedToReachTargetStatus, object["TDEStatus"].(string))) } } return object, object["TDEStatus"].(string), nil } } func (s *PolardbService) DescribeDBInstanceTDE(id string) (map[string]interface{}, error) { request := s.client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeDBInstanceTDE", "") request.QueryParams["DBInstanceId"] = id bresponse, err := s.client.ProcessCommonRequest(request) addDebug(request.GetActionName(), bresponse, request, request.QueryParams) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeDBInstanceTDE", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } result := make(map[string]interface{}) _ = json.Unmarshal(bresponse.GetHttpContentBytes(), &result) return result, nil } func (s *PolardbService) PolardbDBInstanceSslStateRefreshFunc(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient, id string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeDBInstanceSSL(d.Id()) if err != nil { if errmsgs.NotFoundError(err) { // Set this to nil as if we didn't find anything. return nil, "", nil } return nil, "", errmsgs.WrapError(err) } for _, failState := range failStates { if object["SSLEnabled"].(string) == failState { return object, object["SSLEnabled"].(string), errmsgs.WrapError(errmsgs.Error(errmsgs.FailedToReachTargetStatus, object["SSLEnabled"].(string))) } } return object, object["SSLEnabled"].(string), nil } } func (s *PolardbService) DescribeDBInstanceSSL(id string) (map[string]interface{}, error) { request := s.client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeDBInstanceSSL", "") request.QueryParams["DBInstanceId"] = id bresponse, err := s.client.ProcessCommonRequest(request) addDebug(request.GetActionName(), bresponse, request, request.QueryParams) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeDBInstanceSSL", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } result := make(map[string]interface{}) _ = json.Unmarshal(bresponse.GetHttpContentBytes(), &result) return result, nil } func (s *PolardbService) WaitForDBConnection(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient, id string, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) for { response, err := s.DescribeDBConnection(id) if err != nil { if errmsgs.NotFoundError(err) { if status == Deleted { return nil } } else { return errmsgs.WrapError(err) } } data := response if data != nil && data.DBInstanceNetInfos.DBInstanceNetInfo[0].ConnectionString != "" { return nil } if time.Now().After(deadline) { return errmsgs.WrapErrorf(err, errmsgs.WaitTimeoutMsg, id, GetFunc(1), timeout, "", id, errmsgs.ProviderERROR) } } } func (s *PolardbService) WaitForConnectionDBInstance(d *schema.ResourceData, client *connectivity.AlibabacloudStackClient, id string, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) for { object, err := s.DoPolardbDescribedbinstancesRequest(id, client) if err != nil { if errmsgs.NotFoundError(err) { if status == Deleted { return nil } } else { return errmsgs.WrapError(err) } } if object != nil && strings.ToLower(object.Items.DBInstance[0].DBInstanceStatus) == strings.ToLower(string(status)) { break } time.Sleep(DefaultIntervalShort * time.Second) if time.Now().After(deadline) { return errmsgs.WrapErrorf(err, errmsgs.WaitTimeoutMsg, id, GetFunc(1), timeout, object.Items.DBInstance[0].DBInstanceStatus, status, errmsgs.ProviderERROR) } } return nil } func (s *PolardbService) DoPolardbDescribedbinstancesRequest(id string, client *connectivity.AlibabacloudStackClient) (*PolardbDescribedbinstancesResponse, error) { // api: polardb - 2024-01-30 - DescribeDBInstances request := client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeDBInstances", "") PolardbDescribedbinstancesResponse := &PolardbDescribedbinstancesResponse{} request.QueryParams["DBInstanceId"] = id request.QueryParams["InstanceLevel"] = "1" request.QueryParams["PageNumber"] = "1" request.QueryParams["PageSize"] = "1" bresponse, err := client.ProcessCommonRequest(request) addDebug(request.GetActionName(), bresponse, request, request.QueryParams) if err != nil { if errmsgs.IsExpectedErrors(err, []string{"InvalidDBInstanceId.NotFound"}) { return PolardbDescribedbinstancesResponse, errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackSdkGoERROR) } if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeDBInstances", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribedbinstancesResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeDBInstances", errmsgs.AlibabacloudStackSdkGoERROR) } if len(PolardbDescribedbinstancesResponse.Items.DBInstance) < 1 { return PolardbDescribedbinstancesResponse, errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("PolardbInstance", id)), errmsgs.NotFoundMsg, errmsgs.ProviderERROR) } return PolardbDescribedbinstancesResponse, nil } func (s *PolardbService) Describedbinstances(id string) (*PolardbDescribedbinstancesResponse, error) { // api: polardb - 2024-01-30 - DescribeDBInstances request := s.client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeDBInstances", "") PolardbDescribedbinstancesResponse := &PolardbDescribedbinstancesResponse{} request.QueryParams["DBInstanceId"] = id bresponse, err := s.client.ProcessCommonRequest(request) if err != nil { if errmsgs.IsExpectedErrors(err, []string{"InvalidDBInstanceId.NotFound"}) { return PolardbDescribedbinstancesResponse, errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackSdkGoERROR) } if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeDBInstances", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribedbinstancesResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeDBInstances", errmsgs.AlibabacloudStackSdkGoERROR) } if len(PolardbDescribedbinstancesResponse.Items.DBInstance) < 1 { return PolardbDescribedbinstancesResponse, errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("PolardbInstance", id)), errmsgs.NotFoundMsg, errmsgs.ProviderERROR) } return PolardbDescribedbinstancesResponse, nil } func (s *PolardbService) DescribeDBSecurityIps(instanceId string) (*PolardbDescribedbinstanceiparraylistResponse, error) { request := s.client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeDBInstanceIPArrayList", "") PolardbDescribedbinstanceiparraylistResponse := &PolardbDescribedbinstanceiparraylistResponse{} //调用request_params_handler request.QueryParams["DBInstanceId"] = instanceId bresponse, err := s.client.ProcessCommonRequest(request) if err != nil { if bresponse == nil { return nil, errmsgs.WrapErrorf(err, "Process Common Request Failed") } errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) return nil, errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "", "DescribeDBInstanceIPArrayList", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribedbinstanceiparraylistResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeDBInstanceIPArrayList", errmsgs.AlibabacloudStackSdkGoERROR) } return PolardbDescribedbinstanceiparraylistResponse, nil } func (s *PolardbService) flattenDBSecurityIPs(resp *PolardbDescribedbinstanceiparraylistResponse) []map[string]interface{} { list := resp.Items.DBInstanceIPArray result := make([]map[string]interface{}, 0, len(list)) for _, i := range list { l := map[string]interface{}{ "security_ips": i.SecurityIPList, } result = append(result, l) } return result } func (s *PolardbService) DescribeDBConnection(id string) (*PolardbDescribedbinstancenetinfoResponse, error) { parts, _ := ParseResourceId(id, 2) request := s.client.NewCommonRequest("POST", "polardb", "2024-01-30", "DescribeDBInstanceNetInfo", "") PolardbDescribedbinstancenetinfoResponse := &PolardbDescribedbinstancenetinfoResponse{} //调用request_params_handler request.QueryParams["DBInstanceId"] = parts[0] bresponse, err := s.client.ProcessCommonRequest(request) if err != nil { if errmsgs.IsExpectedErrors(err, []string{"InvalidCurrentConnectionString.NotFound"}) { return PolardbDescribedbinstancenetinfoResponse, errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackSdkGoERROR) } return PolardbDescribedbinstancenetinfoResponse, errmsgs.WrapError(err) } err = json.Unmarshal(bresponse.GetHttpContentBytes(), &PolardbDescribedbinstancenetinfoResponse) if err != nil { return nil, errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "", "DescribeDBInstanceNetInfo", errmsgs.AlibabacloudStackSdkGoERROR) } if len(PolardbDescribedbinstancenetinfoResponse.DBInstanceNetInfos.DBInstanceNetInfo) < 1 { return PolardbDescribedbinstancenetinfoResponse, errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("DBInstanceNetInfo", id)), errmsgs.NotFoundMsg, errmsgs.ProviderERROR) } object := PolardbDescribedbinstancenetinfoResponse.DBInstanceNetInfos.DBInstanceNetInfo if object != nil { for _, o := range object { if strings.HasPrefix(o.ConnectionString, parts[1]) { return PolardbDescribedbinstancenetinfoResponse, nil } } } return PolardbDescribedbinstancenetinfoResponse, errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("DBConnection", id)), errmsgs.NotFoundMsg, errmsgs.ProviderERROR) }