| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370 |
- // Copyright 2019 Yunion
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package oceanbase
- import (
- "context"
- "fmt"
- "net/url"
- "strings"
- "time"
- "yunion.io/x/jsonutils"
- "yunion.io/x/pkg/errors"
- billing_api "yunion.io/x/cloudmux/pkg/apis/billing"
- api "yunion.io/x/cloudmux/pkg/apis/compute"
- "yunion.io/x/cloudmux/pkg/cloudprovider"
- "yunion.io/x/cloudmux/pkg/multicloud"
- )
- type SDBInstance struct {
- multicloud.SDBInstanceBase
- region *SRegion
- AvailableZones []string
- DeployMode string
- DeployType string
- NodeNum int
- CreateTime time.Time
- Status string
- Vpc string
- StopTime time.Time
- PayType string
- CloudProvider string
- CPU int
- Mem int
- CPUArchitecture string
- DiskType string
- Resource struct {
- Cpu struct {
- TotalCpu float64
- UsedCpu float64
- }
- Memory struct {
- TotalMemory float64
- UsedMemory float64
- }
- Disk struct {
- TotalDataSize float64
- TotalDiskSize float64
- UsedDiskSize float64
- }
- }
- InstanceName string
- InstanceId string
- InstanceType string
- InstanceClass string
- SaleChannel string
- Series string
- StandbyInstanceIds []string
- State string
- StorageArchitecture string
- TagList []string
- UsedDiskSize float64
- Version string
- VpcId string
- DiskSize int
- Region string
- }
- func (region *SRegion) GetDBInstances() ([]SDBInstance, error) {
- params := url.Values{}
- params.Set("pageSize", "10")
- pageNum := 1
- ret := []SDBInstance{}
- for {
- params.Set("pageNumber", fmt.Sprintf("%d", pageNum))
- resp, err := region.list("/api/v2/instances", params)
- if err != nil {
- return nil, err
- }
- part := struct {
- Data struct {
- DataList []SDBInstance
- Total int
- }
- }{}
- err = resp.Unmarshal(&part)
- if err != nil {
- return nil, err
- }
- ret = append(ret, part.Data.DataList...)
- if len(ret) >= part.Data.Total || len(part.Data.DataList) == 0 {
- break
- }
- pageNum++
- }
- return ret, nil
- }
- func (region *SRegion) GetDBInstance(id string) (*SDBInstance, error) {
- resp, err := region.list(fmt.Sprintf("/api/v2/instances/%s", id), url.Values{})
- if err != nil {
- return nil, err
- }
- dbinstance := &SDBInstance{region: region}
- err = resp.Unmarshal(&dbinstance, "data")
- if err != nil {
- return nil, err
- }
- return dbinstance, nil
- }
- func (region *SRegion) DeleteDBInstance(id string) error {
- _, err := region.delete("/api/v2/instances", map[string]interface{}{"instanceId": id})
- return err
- }
- func (region *SRegion) StartDBInstance(id string) error {
- _, err := region.put(fmt.Sprintf("/api/v2/instances/%s/startCluster", id), nil)
- return err
- }
- func (region *SRegion) StopDBInstance(id string) error {
- _, err := region.put(fmt.Sprintf("/api/v2/instances/%s/stopCluster", id), nil)
- return err
- }
- func (rds *SDBInstance) GetGlobalId() string {
- return rds.InstanceId
- }
- func (rds *SDBInstance) GetName() string {
- return rds.InstanceName
- }
- func (rds *SDBInstance) GetStatus() string {
- switch rds.Status {
- case "ONLINE":
- return api.DBINSTANCE_RUNNING
- case "PENDING_STOP", "STOPPED", "PENDING_START":
- return api.DBINSTANCE_REBOOTING
- case "PENDING_DELETE":
- return api.DBINSTANCE_DELETING
- case "PENDING_CREATE":
- return api.DBINSTANCE_DEPLOYING
- default:
- return api.DBINSTANCE_UNKNOWN
- }
- }
- func (rds *SDBInstance) GetCreatedAt() time.Time {
- return rds.CreateTime
- }
- func (rds *SDBInstance) GetExpiredAt() time.Time {
- return time.Time{}
- }
- func (rds *SDBInstance) GetBillingType() string {
- if rds.PayType == "POSTPAY" {
- return billing_api.BILLING_TYPE_POSTPAID
- }
- return billing_api.BILLING_TYPE_PREPAID
- }
- func (rds *SDBInstance) GetProjectId() string {
- return ""
- }
- // ICloudResource 接口方法
- func (rds *SDBInstance) GetId() string {
- return rds.InstanceId
- }
- func (rds *SDBInstance) GetDescription() string {
- return ""
- }
- func (rds *SDBInstance) Refresh() error {
- instance, err := rds.region.GetDBInstance(rds.InstanceId)
- if err != nil {
- return err
- }
- return jsonutils.Update(rds, instance)
- }
- func (rds *SDBInstance) GetSysTags() map[string]string {
- return map[string]string{}
- }
- func (rds *SDBInstance) GetTags() (map[string]string, error) {
- return map[string]string{}, nil
- }
- func (rds *SDBInstance) SetTags(tags map[string]string, replace bool) error {
- return cloudprovider.ErrNotSupported
- }
- // 资源相关方法
- func (rds *SDBInstance) GetVcpuCount() int {
- return rds.CPU
- }
- func (rds *SDBInstance) GetVmemSizeMB() int {
- return rds.Mem * 1024
- }
- func (rds *SDBInstance) GetDiskSizeGB() int {
- return rds.DiskSize
- }
- func (rds *SDBInstance) GetDiskSizeUsedMB() int {
- return int(rds.UsedDiskSize * 1024)
- }
- func (rds *SDBInstance) GetInstanceType() string {
- return rds.InstanceClass
- }
- // 网络相关方法
- func (rds *SDBInstance) GetPort() int {
- return 2881 // OceanBase 默认端口
- }
- func (rds *SDBInstance) GetConnectionStr() string {
- return ""
- }
- func (rds *SDBInstance) GetInternalConnectionStr() string {
- return ""
- }
- func (rds *SDBInstance) GetIVpcId() string {
- return rds.VpcId
- }
- // 可用区相关方法
- func (rds *SDBInstance) GetZone1Id() string {
- if len(rds.AvailableZones) > 0 {
- return fmt.Sprintf("%s-%s", rds.Region, rds.AvailableZones[0])
- }
- return ""
- }
- func (rds *SDBInstance) GetZone2Id() string {
- if len(rds.AvailableZones) > 1 {
- return fmt.Sprintf("%s-%s", rds.Region, rds.AvailableZones[1])
- }
- return ""
- }
- func (rds *SDBInstance) GetZone3Id() string {
- if len(rds.AvailableZones) > 2 {
- return fmt.Sprintf("%s-%s", rds.Region, rds.AvailableZones[2])
- }
- return ""
- }
- // 引擎相关方法
- func (rds *SDBInstance) GetEngine() string {
- return "OceanBase"
- }
- func (rds *SDBInstance) GetEngineVersion() string {
- return rds.Version
- }
- func (rds *SDBInstance) GetCategory() string {
- return strings.ToLower(rds.InstanceType)
- }
- func (rds *SDBInstance) GetStorageType() string {
- return rds.DiskType
- }
- func (rds *SDBInstance) GetMaintainTime() string {
- return ""
- }
- func (rds *SDBInstance) GetIops() int {
- return 0
- }
- // 操作相关方法
- func (rds *SDBInstance) Reboot() error {
- return errors.Wrapf(cloudprovider.ErrNotImplemented, "Reboot")
- }
- func (rds *SDBInstance) Delete() error {
- return rds.region.DeleteDBInstance(rds.InstanceId)
- }
- func (rds *SDBInstance) ChangeConfig(ctx context.Context, config *cloudprovider.SManagedDBInstanceChangeConfig) error {
- return errors.Wrapf(cloudprovider.ErrNotImplemented, "ChangeConfig")
- }
- func (rds *SDBInstance) Update(ctx context.Context, input cloudprovider.SDBInstanceUpdateOptions) error {
- return errors.Wrapf(cloudprovider.ErrNotImplemented, "Update")
- }
- // 管理相关方法
- func (rds *SDBInstance) GetMasterInstanceId() string {
- return ""
- }
- func (rds *SDBInstance) GetSecurityGroupIds() ([]string, error) {
- return []string{}, nil
- }
- func (rds *SDBInstance) SetSecurityGroups(ids []string) error {
- return errors.Wrapf(cloudprovider.ErrNotImplemented, "SetSecurityGroups")
- }
- func (rds *SDBInstance) GetDBNetworks() ([]cloudprovider.SDBInstanceNetwork, error) {
- return nil, errors.Wrapf(cloudprovider.ErrNotImplemented, "GetDBNetworks")
- }
- func (rds *SDBInstance) GetIDBInstanceParameters() ([]cloudprovider.ICloudDBInstanceParameter, error) {
- return nil, errors.Wrapf(cloudprovider.ErrNotImplemented, "GetIDBInstanceParameters")
- }
- func (rds *SDBInstance) GetIDBInstanceDatabases() ([]cloudprovider.ICloudDBInstanceDatabase, error) {
- return nil, errors.Wrapf(cloudprovider.ErrNotImplemented, "GetIDBInstanceDatabases")
- }
- func (rds *SDBInstance) GetIDBInstanceAccounts() ([]cloudprovider.ICloudDBInstanceAccount, error) {
- return nil, errors.Wrapf(cloudprovider.ErrNotImplemented, "GetIDBInstanceAccounts")
- }
- func (rds *SDBInstance) GetIDBInstanceBackups() ([]cloudprovider.ICloudDBInstanceBackup, error) {
- return nil, errors.Wrapf(cloudprovider.ErrNotImplemented, "GetIDBInstanceBackups")
- }
- func (rds *SDBInstance) OpenPublicConnection() error {
- return errors.Wrapf(cloudprovider.ErrNotImplemented, "OpenPublicConnection")
- }
- func (rds *SDBInstance) ClosePublicConnection() error {
- return errors.Wrapf(cloudprovider.ErrNotImplemented, "ClosePublicConnection")
- }
- func (rds *SDBInstance) CreateDatabase(conf *cloudprovider.SDBInstanceDatabaseCreateConfig) error {
- return errors.Wrapf(cloudprovider.ErrNotImplemented, "CreateDatabase")
- }
- func (rds *SDBInstance) CreateAccount(conf *cloudprovider.SDBInstanceAccountCreateConfig) error {
- return errors.Wrapf(cloudprovider.ErrNotImplemented, "CreateAccount")
- }
- func (rds *SDBInstance) CreateIBackup(conf *cloudprovider.SDBInstanceBackupCreateConfig) (string, error) {
- return "", errors.Wrapf(cloudprovider.ErrNotImplemented, "CreateIBackup")
- }
- func (rds *SDBInstance) RecoveryFromBackup(conf *cloudprovider.SDBInstanceRecoveryConfig) error {
- return errors.Wrapf(cloudprovider.ErrNotImplemented, "RecoveryFromBackup")
- }
|