github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/taurusdb/v3/instances/requests.go (about)

     1  package instances
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/chnsz/golangsdk"
     7  	"github.com/chnsz/golangsdk/pagination"
     8  )
     9  
    10  var requestOpts golangsdk.RequestOpts = golangsdk.RequestOpts{
    11  	MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
    12  }
    13  
    14  type ChargeInfoOpt struct {
    15  	ChargingMode string `json:"charge_mode,omitempty"`
    16  	PeriodType   string `json:"period_type,omitempty"`
    17  	PeriodNum    int    `json:"period_num,omitempty"`
    18  	IsAutoRenew  string `json:"is_auto_renew,omitempty"`
    19  	IsAutoPay    string `json:"is_auto_pay,omitempty"`
    20  }
    21  
    22  type VolumeOpt struct {
    23  	Size int `json:"size" required:"true"`
    24  }
    25  
    26  type DataStoreOpt struct {
    27  	Type    string `json:"type" required:"true"`
    28  	Version string `json:"version" required:"true"`
    29  }
    30  
    31  type BackupStrategyOpt struct {
    32  	StartTime string `json:"start_time" required:"true"`
    33  	KeepDays  string `json:"keep_days" required:"true"`
    34  }
    35  
    36  type CreateTaurusDBOpts struct {
    37  	Name                string             `json:"name" required:"true"`
    38  	Region              string             `json:"region" required:"true"`
    39  	Mode                string             `json:"mode" required:"true"`
    40  	Flavor              string             `json:"flavor_ref" required:"true"`
    41  	VpcId               string             `json:"vpc_id" required:"true"`
    42  	SubnetId            string             `json:"subnet_id" required:"true"`
    43  	SecurityGroupId     string             `json:"security_group_id,omitempty"`
    44  	Password            string             `json:"password" required:"true"`
    45  	TimeZone            string             `json:"time_zone" required:"true"`
    46  	AZMode              string             `json:"availability_zone_mode" required:"true"`
    47  	SlaveCount          int                `json:"slave_count" required:"true"`
    48  	MasterAZ            string             `json:"master_availability_zone,omitempty"`
    49  	ConfigurationId     string             `json:"configuration_id,omitempty"`
    50  	EnterpriseProjectId string             `json:"enterprise_project_id,omitempty"`
    51  	DedicatedResourceId string             `json:"dedicated_resource_id,omitempty"`
    52  	LowerCaseTableNames *int               `json:"lower_case_table_names,omitempty"`
    53  	DataStore           DataStoreOpt       `json:"datastore" required:"true"`
    54  	BackupStrategy      *BackupStrategyOpt `json:"backup_strategy,omitempty"`
    55  	ChargeInfo          *ChargeInfoOpt     `json:"charge_info,omitempty"`
    56  	Volume              *VolumeOpt         `json:"volume,omitempty"`
    57  }
    58  
    59  type CreateTaurusDBBuilder interface {
    60  	ToInstancesCreateMap() (map[string]interface{}, error)
    61  }
    62  
    63  func (opts CreateTaurusDBOpts) ToInstancesCreateMap() (map[string]interface{}, error) {
    64  	b, err := golangsdk.BuildRequestBody(opts, "")
    65  	if err != nil {
    66  		return nil, err
    67  	}
    68  	return b, nil
    69  }
    70  
    71  func Create(client *golangsdk.ServiceClient, opts CreateTaurusDBBuilder) (r CreateResult) {
    72  	b, err := opts.ToInstancesCreateMap()
    73  	if err != nil {
    74  		r.Err = err
    75  		return
    76  	}
    77  
    78  	_, r.Err = client.Post(createURL(client), b, &r.Body, &golangsdk.RequestOpts{
    79  		OkCodes:     []int{201, 202},
    80  		MoreHeaders: requestOpts.MoreHeaders,
    81  	})
    82  
    83  	return
    84  }
    85  
    86  type CreateReplicaOpts struct {
    87  	Priorities []int  `json:"priorities" required:"true"`
    88  	IsAutoPay  string `json:"is_auto_pay,omitempty"`
    89  }
    90  
    91  type CreateReplicaBuilder interface {
    92  	ToReplicaCreateMap() (map[string]interface{}, error)
    93  }
    94  
    95  func (opts CreateReplicaOpts) ToReplicaCreateMap() (map[string]interface{}, error) {
    96  	b, err := golangsdk.BuildRequestBody(opts, "")
    97  	if err != nil {
    98  		return nil, err
    99  	}
   100  	return b, nil
   101  }
   102  
   103  func CreateReplica(client *golangsdk.ServiceClient, instanceId string, opts CreateReplicaBuilder) (r JobResult) {
   104  	b, err := opts.ToReplicaCreateMap()
   105  	if err != nil {
   106  		r.Err = err
   107  		return
   108  	}
   109  
   110  	_, r.Err = client.Post(enlargeURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   111  		OkCodes:     []int{201, 202},
   112  		MoreHeaders: requestOpts.MoreHeaders,
   113  	})
   114  
   115  	return
   116  }
   117  
   118  func DeleteReplica(client *golangsdk.ServiceClient, instanceId, nodeId string) (r JobResult) {
   119  	url := deleteReplicaURL(client, instanceId, nodeId)
   120  
   121  	_, r.Err = client.DeleteWithResponse(url, &r.Body, &golangsdk.RequestOpts{
   122  		OkCodes:     []int{200, 202},
   123  		MoreHeaders: requestOpts.MoreHeaders,
   124  	})
   125  
   126  	return
   127  }
   128  
   129  func Delete(client *golangsdk.ServiceClient, instanceId string) (r DeleteResult) {
   130  	url := deleteURL(client, instanceId)
   131  
   132  	_, r.Err = client.Delete(url, &golangsdk.RequestOpts{
   133  		OkCodes:     []int{200, 202},
   134  		MoreHeaders: requestOpts.MoreHeaders,
   135  	})
   136  
   137  	return
   138  }
   139  
   140  func Get(client *golangsdk.ServiceClient, instanceId string) (r GetResult) {
   141  	url := getURL(client, instanceId)
   142  
   143  	_, r.Err = client.Get(url, &r.Body, &golangsdk.RequestOpts{
   144  		MoreHeaders: requestOpts.MoreHeaders,
   145  	})
   146  
   147  	return
   148  }
   149  
   150  type ListTaurusDBInstanceOpts struct {
   151  	Id            string `q:"id"`
   152  	Name          string `q:"name"`
   153  	Type          string `q:"type"`
   154  	DataStoreType string `q:"datastore_type"`
   155  	VpcId         string `q:"vpc_id"`
   156  	SubnetId      string `q:"subnet_id"`
   157  	Offset        int    `q:"offset"`
   158  	Limit         int    `q:"limit"`
   159  }
   160  
   161  type ListTaurusDBBuilder interface {
   162  	ToTaurusDBListDetailQuery() (string, error)
   163  }
   164  
   165  func (opts ListTaurusDBInstanceOpts) ToTaurusDBListDetailQuery() (string, error) {
   166  	q, err := golangsdk.BuildQueryString(opts)
   167  	if err != nil {
   168  		return "", err
   169  	}
   170  	return q.String(), err
   171  }
   172  
   173  func List(client *golangsdk.ServiceClient, opts ListTaurusDBBuilder) pagination.Pager {
   174  	url := listURL(client)
   175  	if opts != nil {
   176  		query, err := opts.ToTaurusDBListDetailQuery()
   177  
   178  		if err != nil {
   179  			return pagination.Pager{Err: err}
   180  		}
   181  		url += query
   182  	}
   183  
   184  	pageList := pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
   185  		return TaurusDBPage{pagination.SinglePageBase(r)}
   186  	})
   187  	// Headers supplies additional HTTP headers to populate on each paged request
   188  	pageList.Headers = requestOpts.MoreHeaders
   189  
   190  	return pageList
   191  }
   192  
   193  func GetInstanceByName(client *golangsdk.ServiceClient, name string) (ListTaurusDBInstance, error) {
   194  	var instance ListTaurusDBInstance
   195  
   196  	opts := ListTaurusDBInstanceOpts{
   197  		Name: name,
   198  	}
   199  
   200  	pages, err := List(client, &opts).AllPages()
   201  	if err != nil {
   202  		return instance, err
   203  	}
   204  
   205  	all, err := ExtractTaurusDBInstances(pages)
   206  	if err != nil {
   207  		return instance, err
   208  	}
   209  	if all.TotalCount < 1 {
   210  		return instance, golangsdk.ErrDefault404{
   211  			ErrUnexpectedResponseCode: golangsdk.ErrUnexpectedResponseCode{
   212  				Body: []byte(fmt.Sprintf("the database instance (%s) does not exist", name)),
   213  			},
   214  		}
   215  	}
   216  
   217  	instance = all.Instances[0]
   218  	return instance, nil
   219  }
   220  
   221  type UpdateNameOpts struct {
   222  	Name string `json:"name" required:"true"`
   223  }
   224  
   225  type UpdateNameBuilder interface {
   226  	ToNameUpdateMap() (map[string]interface{}, error)
   227  }
   228  
   229  func (opts UpdateNameOpts) ToNameUpdateMap() (map[string]interface{}, error) {
   230  	b, err := golangsdk.BuildRequestBody(opts, "")
   231  	if err != nil {
   232  		return nil, err
   233  	}
   234  	return b, nil
   235  }
   236  
   237  func UpdateName(client *golangsdk.ServiceClient, instanceId string, opts UpdateNameBuilder) (r JobResult) {
   238  	b, err := opts.ToNameUpdateMap()
   239  	if err != nil {
   240  		r.Err = err
   241  		return
   242  	}
   243  
   244  	_, r.Err = client.Put(nameURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   245  		OkCodes:     []int{200},
   246  		MoreHeaders: requestOpts.MoreHeaders,
   247  	})
   248  
   249  	return
   250  }
   251  
   252  type UpdatePassOpts struct {
   253  	Password string `json:"password" required:"true"`
   254  }
   255  
   256  type UpdatePassBuilder interface {
   257  	ToPassUpdateMap() (map[string]interface{}, error)
   258  }
   259  
   260  func (opts UpdatePassOpts) ToPassUpdateMap() (map[string]interface{}, error) {
   261  	b, err := golangsdk.BuildRequestBody(opts, "")
   262  	if err != nil {
   263  		return nil, err
   264  	}
   265  	return b, nil
   266  }
   267  
   268  func UpdatePass(client *golangsdk.ServiceClient, instanceId string, opts UpdatePassBuilder) (r JobResult) {
   269  	b, err := opts.ToPassUpdateMap()
   270  	if err != nil {
   271  		r.Err = err
   272  		return
   273  	}
   274  
   275  	_, r.Err = client.Post(passwordURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   276  		OkCodes:     []int{200},
   277  		MoreHeaders: requestOpts.MoreHeaders,
   278  	})
   279  
   280  	return
   281  }
   282  
   283  type ExtendVolumeOpts struct {
   284  	Size      int    `json:"size" required:"true"`
   285  	IsAutoPay string `json:"is_auto_pay,omitempty"`
   286  }
   287  
   288  type ExtendVolumeBuilder interface {
   289  	ToVolumeExtendMap() (map[string]interface{}, error)
   290  }
   291  
   292  func (opts ExtendVolumeOpts) ToVolumeExtendMap() (map[string]interface{}, error) {
   293  	b, err := golangsdk.BuildRequestBody(opts, "")
   294  	if err != nil {
   295  		return nil, err
   296  	}
   297  	return b, nil
   298  }
   299  
   300  func ExtendVolume(client *golangsdk.ServiceClient, instanceId string, opts ExtendVolumeBuilder) (r JobResult) {
   301  	b, err := opts.ToVolumeExtendMap()
   302  	if err != nil {
   303  		r.Err = err
   304  		return
   305  	}
   306  
   307  	_, r.Err = client.Post(volumeURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   308  		OkCodes:     []int{201},
   309  		MoreHeaders: requestOpts.MoreHeaders,
   310  	})
   311  
   312  	return
   313  }
   314  
   315  type ResizeOpt struct {
   316  	Spec string `json:"spec_code" required:"true"`
   317  }
   318  
   319  type ResizeOpts struct {
   320  	Resize    ResizeOpt `json:"resize_flavor" required:"true"`
   321  	IsAutoPay string    `json:"is_auto_pay,omitempty"`
   322  }
   323  
   324  type ResizeBuilder interface {
   325  	ToResizeMap() (map[string]interface{}, error)
   326  }
   327  
   328  func (opts ResizeOpts) ToResizeMap() (map[string]interface{}, error) {
   329  	b, err := golangsdk.BuildRequestBody(opts, "")
   330  	if err != nil {
   331  		return nil, err
   332  	}
   333  	return b, nil
   334  }
   335  
   336  func Resize(client *golangsdk.ServiceClient, instanceId string, opts ResizeBuilder) (r JobResult) {
   337  	b, err := opts.ToResizeMap()
   338  	if err != nil {
   339  		r.Err = err
   340  		return
   341  	}
   342  
   343  	_, r.Err = client.Post(actionURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   344  		OkCodes:     []int{200},
   345  		MoreHeaders: requestOpts.MoreHeaders,
   346  	})
   347  
   348  	return
   349  }
   350  
   351  type ProxyOpts struct {
   352  	Flavor  string `json:"flavor_ref" required:"true"`
   353  	NodeNum int    `json:"node_num" required:"true"`
   354  }
   355  
   356  type ProxyBuilder interface {
   357  	ToProxyMap() (map[string]interface{}, error)
   358  }
   359  
   360  func (opts ProxyOpts) ToProxyMap() (map[string]interface{}, error) {
   361  	b, err := golangsdk.BuildRequestBody(opts, "")
   362  	if err != nil {
   363  		return nil, err
   364  	}
   365  	return b, nil
   366  }
   367  
   368  func EnableProxy(client *golangsdk.ServiceClient, instanceId string, opts ProxyBuilder) (r JobResult) {
   369  	b, err := opts.ToProxyMap()
   370  	if err != nil {
   371  		r.Err = err
   372  		return
   373  	}
   374  
   375  	_, r.Err = client.Post(proxyURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   376  		OkCodes:     []int{201},
   377  		MoreHeaders: requestOpts.MoreHeaders,
   378  	})
   379  
   380  	return
   381  }
   382  
   383  type EnlargeProxyOpts struct {
   384  	NodeNum int `json:"node_num" required:"true"`
   385  }
   386  
   387  type EnlargeProxyBuilder interface {
   388  	ToEnlargeProxyMap() (map[string]interface{}, error)
   389  }
   390  
   391  func (opts EnlargeProxyOpts) ToEnlargeProxyMap() (map[string]interface{}, error) {
   392  	b, err := golangsdk.BuildRequestBody(opts, "")
   393  	if err != nil {
   394  		return nil, err
   395  	}
   396  	return b, nil
   397  }
   398  
   399  func EnlargeProxy(client *golangsdk.ServiceClient, instanceId string, opts EnlargeProxyBuilder) (r JobResult) {
   400  	b, err := opts.ToEnlargeProxyMap()
   401  	if err != nil {
   402  		r.Err = err
   403  		return
   404  	}
   405  
   406  	_, r.Err = client.Post(proxyEnlargeURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   407  		OkCodes:     []int{201},
   408  		MoreHeaders: requestOpts.MoreHeaders,
   409  	})
   410  
   411  	return
   412  }
   413  
   414  func DeleteProxy(client *golangsdk.ServiceClient, instanceId string) (r JobResult) {
   415  	url := proxyURL(client, instanceId)
   416  
   417  	_, r.Err = client.DeleteWithResponse(url, &r.Body, &golangsdk.RequestOpts{
   418  		OkCodes:     []int{200, 202},
   419  		MoreHeaders: requestOpts.MoreHeaders,
   420  	})
   421  
   422  	return
   423  }
   424  
   425  func GetProxy(client *golangsdk.ServiceClient, instanceId string) (r GetProxyResult) {
   426  	url := proxyURL(client, instanceId)
   427  
   428  	_, r.Err = client.Get(url, &r.Body, &golangsdk.RequestOpts{
   429  		MoreHeaders: requestOpts.MoreHeaders,
   430  	})
   431  
   432  	return
   433  }
   434  
   435  func ListDeh(client *golangsdk.ServiceClient) pagination.Pager {
   436  	pageList := pagination.NewPager(client, listDehURL(client), func(r pagination.PageResult) pagination.Page {
   437  		return DehResourcePage{pagination.SinglePageBase(r)}
   438  	})
   439  	// Headers supplies additional HTTP headers to populate on each paged request
   440  	pageList.Headers = map[string]string{"Content-Type": "application/json"}
   441  
   442  	return pageList
   443  }