github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/geminidb/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  type FlavorOpt struct {
    11  	Num      string `json:"num" required:"true"`
    12  	Size     int    `json:"size" required:"true"`
    13  	Storage  string `json:"storage" required:"true"`
    14  	SpecCode string `json:"spec_code" required:"true"`
    15  }
    16  
    17  type BackupStrategyOpt struct {
    18  	StartTime string `json:"start_time,omitempty"`
    19  	KeepDays  string `json:"keep_days,omitempty"`
    20  }
    21  
    22  type ChargeInfoOpt struct {
    23  	ChargingMode string `json:"charge_mode,omitempty"`
    24  	PeriodType   string `json:"period_type,omitempty"`
    25  	PeriodNum    int    `json:"period_num,omitempty"`
    26  	IsAutoRenew  string `json:"is_auto_renew,omitempty"`
    27  	IsAutoPay    string `json:"is_auto_pay,omitempty"`
    28  }
    29  
    30  type CreateGeminiDBOpts struct {
    31  	Name                string             `json:"name" required:"true"`
    32  	Region              string             `json:"region" required:"true"`
    33  	AvailabilityZone    string             `json:"availability_zone" required:"true"`
    34  	VpcId               string             `json:"vpc_id" required:"true"`
    35  	SubnetId            string             `json:"subnet_id" required:"true"`
    36  	SecurityGroupId     string             `json:"security_group_id,omitempty"`
    37  	Password            string             `json:"password" required:"true"`
    38  	Mode                string             `json:"mode" required:"true"`
    39  	ConfigurationId     string             `json:"configuration_id,omitempty"`
    40  	EnterpriseProjectId string             `json:"enterprise_project_id,omitempty"`
    41  	DedicatedResourceId string             `json:"dedicated_resource_id,omitempty"`
    42  	Ssl                 string             `json:"ssl_option,omitempty"`
    43  	Port                string             `json:"port,omitempty"`
    44  	DataStore           DataStore          `json:"datastore" required:"true"`
    45  	Flavor              []FlavorOpt        `json:"flavor" required:"true"`
    46  	BackupStrategy      *BackupStrategyOpt `json:"backup_strategy,omitempty"`
    47  	ChargeInfo          *ChargeInfoOpt     `json:"charge_info,omitempty"`
    48  }
    49  
    50  type CreateGeminiDBBuilder interface {
    51  	ToInstancesCreateMap() (map[string]interface{}, error)
    52  }
    53  
    54  func (opts CreateGeminiDBOpts) ToInstancesCreateMap() (map[string]interface{}, error) {
    55  	b, err := golangsdk.BuildRequestBody(opts, "")
    56  	if err != nil {
    57  		return nil, err
    58  	}
    59  	return b, nil
    60  }
    61  
    62  func Create(client *golangsdk.ServiceClient, opts CreateGeminiDBBuilder) (r CreateResult) {
    63  	b, err := opts.ToInstancesCreateMap()
    64  	if err != nil {
    65  		r.Err = err
    66  		return
    67  	}
    68  
    69  	_, r.Err = client.Post(createURL(client), b, &r.Body, &golangsdk.RequestOpts{
    70  		OkCodes:     []int{202},
    71  		MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
    72  	})
    73  	return
    74  }
    75  
    76  type ExtendVolumeOpts struct {
    77  	Size      int    `json:"size" required:"true"`
    78  	IsAutoPay string `json:"is_auto_pay,omitempty"`
    79  }
    80  
    81  type ExtendVolumeBuilder interface {
    82  	ToVolumeExtendMap() (map[string]interface{}, error)
    83  }
    84  
    85  func (opts ExtendVolumeOpts) ToVolumeExtendMap() (map[string]interface{}, error) {
    86  	b, err := golangsdk.BuildRequestBody(opts, "")
    87  	if err != nil {
    88  		return nil, err
    89  	}
    90  	return b, nil
    91  }
    92  
    93  func ExtendVolume(client *golangsdk.ServiceClient, instanceId string, opts ExtendVolumeBuilder) (r ExtendResult) {
    94  	b, err := opts.ToVolumeExtendMap()
    95  	if err != nil {
    96  		r.Err = err
    97  		return
    98  	}
    99  
   100  	_, r.Err = client.Post(extendURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   101  		OkCodes:     []int{202},
   102  		MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
   103  	})
   104  	return
   105  }
   106  
   107  type EnlargeNodeOpts struct {
   108  	Num       int    `json:"num" required:"true"`
   109  	IsAutoPay string `json:"is_auto_pay,omitempty"`
   110  }
   111  
   112  type EnlargeNodeBuilder interface {
   113  	ToNodeEnlargeMap() (map[string]interface{}, error)
   114  }
   115  
   116  func (opts EnlargeNodeOpts) ToNodeEnlargeMap() (map[string]interface{}, error) {
   117  	b, err := golangsdk.BuildRequestBody(opts, "")
   118  	if err != nil {
   119  		return nil, err
   120  	}
   121  	return b, nil
   122  }
   123  
   124  func EnlargeNode(client *golangsdk.ServiceClient, instanceId string, opts EnlargeNodeBuilder) (r ExtendResult) {
   125  	b, err := opts.ToNodeEnlargeMap()
   126  	if err != nil {
   127  		r.Err = err
   128  		return
   129  	}
   130  
   131  	_, r.Err = client.Post(enlargeNodeURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   132  		OkCodes:     []int{202},
   133  		MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
   134  	})
   135  	return
   136  }
   137  
   138  type ReduceNodeOpts struct {
   139  	Num int `json:"num" required:"true"`
   140  }
   141  
   142  type ReduceNodeBuilder interface {
   143  	ToNodeReduceMap() (map[string]interface{}, error)
   144  }
   145  
   146  func (opts ReduceNodeOpts) ToNodeReduceMap() (map[string]interface{}, error) {
   147  	b, err := golangsdk.BuildRequestBody(opts, "")
   148  	if err != nil {
   149  		return nil, err
   150  	}
   151  	return b, nil
   152  }
   153  
   154  func ReduceNode(client *golangsdk.ServiceClient, instanceId string, opts ReduceNodeBuilder) (r ExtendResult) {
   155  	b, err := opts.ToNodeReduceMap()
   156  	if err != nil {
   157  		r.Err = err
   158  		return
   159  	}
   160  
   161  	_, r.Err = client.Post(reduceNodeURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   162  		OkCodes:     []int{202},
   163  		MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
   164  	})
   165  	return
   166  }
   167  
   168  func Delete(client *golangsdk.ServiceClient, instanceId string) (r DeleteResult) {
   169  	url := deleteURL(client, instanceId)
   170  
   171  	_, r.Err = client.Delete(url, &golangsdk.RequestOpts{
   172  		OkCodes:     []int{202},
   173  		MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
   174  	})
   175  
   176  	return
   177  }
   178  
   179  type ListGeminiDBInstanceOpts struct {
   180  	Id            string `q:"id"`
   181  	Name          string `q:"name"`
   182  	Mode          string `q:"mode"`
   183  	DataStoreType string `q:"datastore_type"`
   184  	VpcId         string `q:"vpc_id"`
   185  	SubnetId      string `q:"subnet_id"`
   186  	Offset        int    `q:"offset"`
   187  	Limit         int    `q:"limit"`
   188  }
   189  
   190  type ListGeminiDBBuilder interface {
   191  	ToGeminiDBListDetailQuery() (string, error)
   192  }
   193  
   194  func (opts ListGeminiDBInstanceOpts) ToGeminiDBListDetailQuery() (string, error) {
   195  	q, err := golangsdk.BuildQueryString(opts)
   196  	if err != nil {
   197  		return "", err
   198  	}
   199  	return q.String(), err
   200  }
   201  
   202  func List(client *golangsdk.ServiceClient, opts ListGeminiDBBuilder) pagination.Pager {
   203  	url := listURL(client)
   204  	if opts != nil {
   205  		query, err := opts.ToGeminiDBListDetailQuery()
   206  
   207  		if err != nil {
   208  			return pagination.Pager{Err: err}
   209  		}
   210  		url += query
   211  	}
   212  
   213  	pageList := pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
   214  		return GeminiDBPage{pagination.SinglePageBase(r)}
   215  	})
   216  	// Headers supplies additional HTTP headers to populate on each paged request
   217  	pageList.Headers = map[string]string{"Content-Type": "application/json"}
   218  
   219  	return pageList
   220  }
   221  
   222  func GetInstanceByID(client *golangsdk.ServiceClient, instanceId string) (GeminiDBInstance, error) {
   223  	var instance GeminiDBInstance
   224  
   225  	opts := ListGeminiDBInstanceOpts{
   226  		Id: instanceId,
   227  	}
   228  
   229  	pages, err := List(client, &opts).AllPages()
   230  	if err != nil {
   231  		return instance, err
   232  	}
   233  
   234  	all, err := ExtractGeminiDBInstances(pages)
   235  	if err != nil {
   236  		return instance, err
   237  	}
   238  	if all.TotalCount < 1 {
   239  		return instance, golangsdk.ErrDefault404{
   240  			ErrUnexpectedResponseCode: golangsdk.ErrUnexpectedResponseCode{
   241  				Body: []byte(fmt.Sprintf("the database instance (%s) does not exist", instanceId)),
   242  			},
   243  		}
   244  	}
   245  
   246  	instance = all.Instances[0]
   247  	return instance, nil
   248  }
   249  
   250  func GetInstanceByName(client *golangsdk.ServiceClient, name string) (GeminiDBInstance, error) {
   251  	var instance GeminiDBInstance
   252  
   253  	opts := ListGeminiDBInstanceOpts{
   254  		Name: name,
   255  	}
   256  
   257  	pages, err := List(client, &opts).AllPages()
   258  	if err != nil {
   259  		return instance, err
   260  	}
   261  
   262  	all, err := ExtractGeminiDBInstances(pages)
   263  	if err != nil {
   264  		return instance, err
   265  	}
   266  	if all.TotalCount < 1 {
   267  		return instance, golangsdk.ErrDefault404{
   268  			ErrUnexpectedResponseCode: golangsdk.ErrUnexpectedResponseCode{
   269  				Body: []byte(fmt.Sprintf("the database instance (%s) does not exist", name)),
   270  			},
   271  		}
   272  	}
   273  
   274  	instance = all.Instances[0]
   275  	return instance, nil
   276  }
   277  
   278  type UpdateNameOpts struct {
   279  	Name string `json:"name" required:"true"`
   280  }
   281  
   282  type UpdateNameBuilder interface {
   283  	ToNameUpdateMap() (map[string]interface{}, error)
   284  }
   285  
   286  func (opts UpdateNameOpts) ToNameUpdateMap() (map[string]interface{}, error) {
   287  	b, err := golangsdk.BuildRequestBody(opts, "")
   288  	if err != nil {
   289  		return nil, err
   290  	}
   291  	return b, nil
   292  }
   293  
   294  func UpdateName(client *golangsdk.ServiceClient, instanceId string, opts UpdateNameBuilder) (r UpdateResult) {
   295  	b, err := opts.ToNameUpdateMap()
   296  	if err != nil {
   297  		r.Err = err
   298  		return
   299  	}
   300  
   301  	_, r.Err = client.Put(updateNameURL(client, instanceId), b, nil, &golangsdk.RequestOpts{
   302  		OkCodes:     []int{204},
   303  		MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
   304  	})
   305  	return
   306  }
   307  
   308  type UpdatePassOpts struct {
   309  	Password string `json:"password" required:"true"`
   310  }
   311  
   312  type UpdatePassBuilder interface {
   313  	ToPassUpdateMap() (map[string]interface{}, error)
   314  }
   315  
   316  func (opts UpdatePassOpts) ToPassUpdateMap() (map[string]interface{}, error) {
   317  	b, err := golangsdk.BuildRequestBody(opts, "")
   318  	if err != nil {
   319  		return nil, err
   320  	}
   321  	return b, nil
   322  }
   323  
   324  func UpdatePass(client *golangsdk.ServiceClient, instanceId string, opts UpdatePassBuilder) (r UpdateResult) {
   325  	b, err := opts.ToPassUpdateMap()
   326  	if err != nil {
   327  		r.Err = err
   328  		return
   329  	}
   330  
   331  	_, r.Err = client.Put(updatePassURL(client, instanceId), b, nil, &golangsdk.RequestOpts{
   332  		OkCodes:     []int{204},
   333  		MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
   334  	})
   335  	return
   336  }
   337  
   338  type ResizeOpt struct {
   339  	InstanceID string `json:"target_id" required:"true"`
   340  	SpecCode   string `json:"target_spec_code" required:"true"`
   341  }
   342  
   343  type ResizeOpts struct {
   344  	Resize    ResizeOpt `json:"resize" required:"true"`
   345  	IsAutoPay string    `json:"is_auto_pay,omitempty"`
   346  }
   347  
   348  type ResizeBuilder interface {
   349  	ToResizeMap() (map[string]interface{}, error)
   350  }
   351  
   352  func (opts ResizeOpts) ToResizeMap() (map[string]interface{}, error) {
   353  	b, err := golangsdk.BuildRequestBody(opts, "")
   354  	if err != nil {
   355  		return nil, err
   356  	}
   357  	return b, nil
   358  }
   359  
   360  func Resize(client *golangsdk.ServiceClient, instanceId string, opts ResizeBuilder) (r ExtendResult) {
   361  	b, err := opts.ToResizeMap()
   362  	if err != nil {
   363  		r.Err = err
   364  		return
   365  	}
   366  
   367  	_, r.Err = client.Put(resizeURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   368  		OkCodes:     []int{202},
   369  		MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
   370  	})
   371  	return
   372  }
   373  
   374  type UpdateSgOpts struct {
   375  	SecurityGroupID string `json:"security_group_id" required:"true"`
   376  }
   377  
   378  type UpdateSgBuilder interface {
   379  	ToSgUpdateMap() (map[string]interface{}, error)
   380  }
   381  
   382  func (opts UpdateSgOpts) ToSgUpdateMap() (map[string]interface{}, error) {
   383  	b, err := golangsdk.BuildRequestBody(opts, "")
   384  	if err != nil {
   385  		return nil, err
   386  	}
   387  	return b, nil
   388  }
   389  
   390  func UpdateSg(client *golangsdk.ServiceClient, instanceId string, opts UpdateSgBuilder) (r ExtendResult) {
   391  	b, err := opts.ToSgUpdateMap()
   392  	if err != nil {
   393  		r.Err = err
   394  		return
   395  	}
   396  
   397  	_, r.Err = client.Put(updateSgURL(client, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   398  		OkCodes:     []int{202},
   399  		MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
   400  	})
   401  	return
   402  }
   403  
   404  func ListDeh(client *golangsdk.ServiceClient) pagination.Pager {
   405  	pageList := pagination.NewPager(client, listDehURL(client), func(r pagination.PageResult) pagination.Page {
   406  		return DehResourcePage{pagination.SinglePageBase(r)}
   407  	})
   408  	// Headers supplies additional HTTP headers to populate on each paged request
   409  	pageList.Headers = map[string]string{"Content-Type": "application/json"}
   410  
   411  	return pageList
   412  }
   413  
   414  type UpdateSslOpts struct {
   415  	Ssl string `json:"ssl_option" required:"true"`
   416  }
   417  
   418  type UpdateSslBuilder interface {
   419  	ToSslUpdateMap() (map[string]interface{}, error)
   420  }
   421  
   422  func (opts UpdateSslOpts) ToSslUpdateMap() (map[string]interface{}, error) {
   423  	b, err := golangsdk.BuildRequestBody(opts, "")
   424  	if err != nil {
   425  		return nil, err
   426  	}
   427  	return b, nil
   428  }
   429  
   430  func UpdateSsl(client *golangsdk.ServiceClient, instanceId string, opts UpdateSslBuilder) (r UpdateResult) {
   431  	b, err := opts.ToSslUpdateMap()
   432  	if err != nil {
   433  		r.Err = err
   434  		return
   435  	}
   436  
   437  	_, r.Err = client.Post(updateSslURL(client, instanceId), b, nil, &golangsdk.RequestOpts{
   438  		OkCodes:     []int{202},
   439  		MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
   440  	})
   441  	return
   442  }
   443  
   444  type UpdatePublicIpOpts struct {
   445  	Action     string `json:"action" required:"true"`
   446  	PublicIp   string `json:"public_ip,omitempty"`
   447  	PublicIpId string `json:"public_ip_id,omitempty"`
   448  }
   449  
   450  type UpdatePublicIpBuilder interface {
   451  	ToPublicIpUpdateMap() (map[string]interface{}, error)
   452  }
   453  
   454  func (opts UpdatePublicIpOpts) ToPublicIpUpdateMap() (map[string]interface{}, error) {
   455  	b, err := golangsdk.BuildRequestBody(opts, "")
   456  	if err != nil {
   457  		return nil, err
   458  	}
   459  	return b, nil
   460  }
   461  
   462  func UpdatePublicIp(client *golangsdk.ServiceClient, instanceId, nodeId string, opts UpdatePublicIpOpts) (r PublicIpResult) {
   463  	b, err := opts.ToPublicIpUpdateMap()
   464  	if err != nil {
   465  		r.Err = err
   466  		return
   467  	}
   468  
   469  	_, r.Err = client.Post(updatePublicIpURL(client, instanceId, nodeId), b, nil, &golangsdk.RequestOpts{
   470  		OkCodes:     []int{202},
   471  		MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
   472  	})
   473  	return
   474  }