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

     1  package instances
     2  
     3  import (
     4  	"github.com/chnsz/golangsdk"
     5  	"github.com/chnsz/golangsdk/openstack/dcs/v2/tags"
     6  )
     7  
     8  var RequestOpts = golangsdk.RequestOpts{
     9  	MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
    10  }
    11  
    12  type CreateOpts struct {
    13  	Name                  string   `json:"name" required:"true"`
    14  	Engine                string   `json:"engine" required:"true"`
    15  	EngineVersion         string   `json:"engine_version,omitempty"`
    16  	Capacity              float64  `json:"capacity" required:"true"`
    17  	SpecCode              string   `json:"spec_code" required:"true"`
    18  	AzCodes               []string `json:"az_codes" required:"true"`
    19  	VpcId                 string   `json:"vpc_id" required:"true"`
    20  	SubnetId              string   `json:"subnet_id" required:"true"`
    21  	SecurityGroupId       string   `json:"security_group_id,omitempty"`
    22  	PublicIpId            string   `json:"publicip_id,omitempty"`
    23  	EnterpriseProjectId   string   `json:"enterprise_project_id,omitempty"`
    24  	EnterpriseProjectName string   `json:"enterprise_project_name,omitempty"`
    25  	Description           string   `json:"description,omitempty"`
    26  	EnableSsl             *bool    `json:"enable_ssl,omitempty"`
    27  	PrivateIp             string   `json:"private_ip,omitempty"`
    28  	// instance number, the value range is 1-100.
    29  	InstanceNum      int                       `json:"instance_num,omitempty"`
    30  	MaintainBegin    string                    `json:"maintain_begin,omitempty"`
    31  	MaintainEnd      string                    `json:"maintain_end,omitempty"`
    32  	Password         string                    `json:"password,omitempty"`
    33  	NoPasswordAccess *bool                     `json:"no_password_access,omitempty"`
    34  	BssParam         DcsBssParam               `json:"bss_param,omitempty"`
    35  	BackupPolicy     *InstanceBackupPolicyOpts `json:"instance_backup_policy,omitempty"`
    36  	Tags             []tags.ResourceTag        `json:"tags,omitempty"`
    37  	AccessUser       string                    `json:"access_user,omitempty"`
    38  	EnablePublicIp   *bool                     `json:"enable_publicip,omitempty"`
    39  	Port             int                       `json:"port,omitempty"`
    40  	RenameCommands   RedisCommand              `json:"rename_commands,omitempty"`
    41  	TemplateId       string                    `json:"template_id,omitempty"`
    42  }
    43  
    44  type RedisCommand struct {
    45  	Command  string `json:"command,omitempty"`
    46  	Keys     string `json:"keys,omitempty"`
    47  	Flushdb  string `json:"flushdb,omitempty"`
    48  	Flushall string `json:"flushall,omitempty"`
    49  	Hgetall  string `json:"hgetall,omitempty"`
    50  }
    51  
    52  type InstanceBackupPolicyOpts struct {
    53  	BackupType           string     `json:"backup_type" required:"true"`
    54  	SaveDays             int        `json:"save_days,omitempty"`
    55  	PeriodicalBackupPlan BackupPlan `json:"periodical_backup_plan,omitempty"`
    56  }
    57  
    58  type BackupPlan struct {
    59  	TimezoneOffset string `json:"timezone_offset,omitempty"`
    60  	BackupAt       []int  `json:"backup_at" required:"true"`
    61  	PeriodType     string `json:"period_type" required:"true"`
    62  	BeginAt        string `json:"begin_at" required:"true"`
    63  }
    64  
    65  type DcsBssParam struct {
    66  	ChargingMode string `json:"charging_mode" required:"true"`
    67  	PeriodType   string `json:"period_type,omitempty"`
    68  	// period number, the value range is 1-9.
    69  	PeriodNum   int    `json:"period_num,omitempty"`
    70  	IsAutoRenew string `json:"is_auto_renew,omitempty"`
    71  	IsAutoPay   string `json:"is_auto_pay,omitempty"`
    72  }
    73  
    74  func Create(c *golangsdk.ServiceClient, opts CreateOpts) (*CreateResponse, error) {
    75  	b, err := golangsdk.BuildRequestBody(opts, "")
    76  	if err != nil {
    77  		return nil, err
    78  	}
    79  
    80  	var rst golangsdk.Result
    81  	_, err = c.Post(rootURL(c), b, &rst.Body, &golangsdk.RequestOpts{
    82  		OkCodes:     []int{200},
    83  		MoreHeaders: RequestOpts.MoreHeaders,
    84  	})
    85  	if err == nil {
    86  		var r CreateResponse
    87  		rst.ExtractInto(&r)
    88  		return &r, nil
    89  	}
    90  	return nil, err
    91  }
    92  
    93  type ModifyInstanceOpt struct {
    94  	Name            string                    `json:"name,omitempty"`
    95  	Description     *string                   `json:"description,omitempty"`
    96  	Port            int                       `json:"port,omitempty"`
    97  	MaintainBegin   string                    `json:"maintain_begin,omitempty"`
    98  	MaintainEnd     string                    `json:"maintain_end,omitempty"`
    99  	SecurityGroupId *string                   `json:"security_group_id,omitempty"`
   100  	BackupPolicy    *InstanceBackupPolicyOpts `json:"instance_backup_policy,omitempty"`
   101  	RenameCommands  *RedisCommand             `json:"rename_commands,omitempty"`
   102  }
   103  
   104  func Update(c *golangsdk.ServiceClient, id string, opts ModifyInstanceOpt) (*golangsdk.Result, error) {
   105  	b, err := golangsdk.BuildRequestBody(opts, "")
   106  	if err != nil {
   107  		return nil, err
   108  	}
   109  
   110  	var r golangsdk.Result
   111  	_, err = c.Put(resourceURL(c, id), b, &r.Body, &golangsdk.RequestOpts{
   112  		OkCodes:     []int{204},
   113  		MoreHeaders: RequestOpts.MoreHeaders,
   114  	})
   115  	return &r, err
   116  }
   117  
   118  type ResizeInstanceOpts struct {
   119  	SpecCode       string          `json:"spec_code" required:"true"`
   120  	NewCapacity    float64         `json:"new_capacity" required:"true"`
   121  	BssParam       DcsBssParamOpts `json:"bss_param,omitempty"`
   122  	ReservedIp     []string        `json:"reserved_ip,omitempty"`
   123  	ChangeType     string          `json:"change_type,omitempty"`
   124  	AvailableZones []string        `json:"available_zones,omitempty"`
   125  	NodeList       []string        `json:"node_list,omitempty"`
   126  }
   127  
   128  type DcsBssParamOpts struct {
   129  	IsAutoPay string `json:"is_auto_pay,omitempty"`
   130  }
   131  
   132  func ResizeInstance(c *golangsdk.ServiceClient, id string, opts ResizeInstanceOpts) (*ResizeResponse, error) {
   133  	b, err := golangsdk.BuildRequestBody(opts, "")
   134  	if err != nil {
   135  		return nil, err
   136  	}
   137  
   138  	var rst golangsdk.Result
   139  	_, err = c.Post(resizeResourceURL(c, id), b, &rst.Body, &golangsdk.RequestOpts{
   140  		OkCodes:     []int{200, 204},
   141  		MoreHeaders: RequestOpts.MoreHeaders,
   142  	})
   143  	if err == nil {
   144  		var r ResizeResponse
   145  		rst.ExtractInto(&r)
   146  		return &r, nil
   147  	}
   148  	return nil, err
   149  }
   150  
   151  type ResizePrePaidInstanceOpts struct {
   152  	AutoOpenSecurityGroupRule bool    `json:"auto_open_security_group_rule,omitempty"`
   153  	ExecuteImmediately        bool    `json:"execute_immediately,omitempty"`
   154  	NewCapacity               float64 `json:"new_capacity,omitempty"`
   155  	Password                  string  `json:"password,omitempty"`
   156  	SpecCode                  string  `json:"spec_code,omitempty"`
   157  }
   158  
   159  func ResizePrePaidInstance(c *golangsdk.ServiceClient, id string, opts ResizePrePaidInstanceOpts) (*ResizePrePaidResponse, error) {
   160  	b, err := golangsdk.BuildRequestBody(opts, "")
   161  	if err != nil {
   162  		return nil, err
   163  	}
   164  
   165  	var rst golangsdk.Result
   166  	_, err = c.Post(resizePrePaidResourceURL(c, id), b, &rst.Body, &golangsdk.RequestOpts{
   167  		MoreHeaders: RequestOpts.MoreHeaders,
   168  	})
   169  	if err == nil {
   170  		var r ResizePrePaidResponse
   171  		rst.ExtractInto(&r)
   172  		return &r, nil
   173  	}
   174  	return nil, err
   175  }
   176  
   177  func Get(c *golangsdk.ServiceClient, id string) (*DcsInstance, error) {
   178  	var rst golangsdk.Result
   179  	_, err := c.Get(resourceURL(c, id), &rst.Body, &golangsdk.RequestOpts{
   180  		MoreHeaders: RequestOpts.MoreHeaders,
   181  	})
   182  	if err == nil {
   183  		var r DcsInstance
   184  		rst.ExtractInto(&r)
   185  		return &r, nil
   186  	}
   187  	return nil, err
   188  }
   189  
   190  func Delete(c *golangsdk.ServiceClient, id string) error {
   191  	_, err := c.Delete(resourceURL(c, id), &golangsdk.RequestOpts{
   192  		MoreHeaders: RequestOpts.MoreHeaders,
   193  	})
   194  	return err
   195  }
   196  
   197  type UpdatePasswordOpts struct {
   198  	OldPassword string `json:"old_password,omitempty"`
   199  	NewPassword string `json:"new_password,omitempty"`
   200  }
   201  
   202  func UpdatePassword(c *golangsdk.ServiceClient, id string, opts UpdatePasswordOpts) (*golangsdk.Result, error) {
   203  	b, err := golangsdk.BuildRequestBody(opts, "")
   204  	if err != nil {
   205  		return nil, err
   206  	}
   207  
   208  	var r golangsdk.Result
   209  	_, err = c.Put(updatePasswordURL(c, id), b, &r.Body, &golangsdk.RequestOpts{
   210  		OkCodes:     []int{200},
   211  		MoreHeaders: RequestOpts.MoreHeaders,
   212  	})
   213  	return &r, err
   214  }
   215  
   216  type RestartOrFlushInstanceOpts struct {
   217  	Instances []string `json:"instances,omitempty"`
   218  	Action    string   `json:"action,omitempty"`
   219  }
   220  
   221  func RestartOrFlushInstance(c *golangsdk.ServiceClient, opts RestartOrFlushInstanceOpts) (*RestartResponse, error) {
   222  	b, err := golangsdk.BuildRequestBody(opts, "")
   223  	if err != nil {
   224  		return nil, err
   225  	}
   226  
   227  	var rst golangsdk.Result
   228  	_, err = c.Put(restartOrFlushInstanceURL(c), b, &rst.Body, &golangsdk.RequestOpts{
   229  		MoreHeaders: RequestOpts.MoreHeaders,
   230  	})
   231  	if err == nil {
   232  		var r RestartResponse
   233  		rst.ExtractInto(&r)
   234  		return &r, nil
   235  	}
   236  	return nil, err
   237  }
   238  
   239  type ModifyRedisConfigOpts struct {
   240  	RedisConfig []RedisConfigOpt `json:"redis_config"`
   241  }
   242  
   243  type RedisConfigOpt struct {
   244  	ParamId    string `json:"param_id" required:"true"`
   245  	ParamName  string `json:"param_name" required:"true"`
   246  	ParamValue string `json:"param_value" required:"true"`
   247  }
   248  
   249  func ModifyConfiguration(c *golangsdk.ServiceClient, instanceId string, opts ModifyRedisConfigOpts) (*golangsdk.Result, error) {
   250  	b, err := golangsdk.BuildRequestBody(opts, "")
   251  	if err != nil {
   252  		return nil, err
   253  	}
   254  
   255  	var r golangsdk.Result
   256  	_, err = c.Put(configurationsURL(c, instanceId), b, &r.Body, &golangsdk.RequestOpts{
   257  		OkCodes:     []int{204},
   258  		MoreHeaders: RequestOpts.MoreHeaders,
   259  	})
   260  	return &r, err
   261  }
   262  
   263  func GetConfigurations(c *golangsdk.ServiceClient, instanceID string) (*Configuration, error) {
   264  	var rst golangsdk.Result
   265  	_, err := c.Get(configurationsURL(c, instanceID), &rst.Body, &golangsdk.RequestOpts{
   266  		MoreHeaders: RequestOpts.MoreHeaders,
   267  	})
   268  	if err == nil {
   269  		var r Configuration
   270  		rst.ExtractInto(&r)
   271  		return &r, nil
   272  	}
   273  	return nil, err
   274  }
   275  
   276  type SslOpts struct {
   277  	Enable *bool `json:"enabled" required:"true"`
   278  }
   279  
   280  func UpdateSsl(client *golangsdk.ServiceClient, id string, opts SslOpts) (*golangsdk.Result, error) {
   281  	b, err := golangsdk.BuildRequestBody(opts, "")
   282  	if err != nil {
   283  		return nil, err
   284  	}
   285  
   286  	var r golangsdk.Result
   287  	_, err = client.Put(sslURL(client, id), b, &r.Body, &golangsdk.RequestOpts{
   288  		MoreHeaders: RequestOpts.MoreHeaders,
   289  	})
   290  	return &r, err
   291  }
   292  
   293  func GetSsl(client *golangsdk.ServiceClient, id string) (*GetSslResponse, error) {
   294  	var rst golangsdk.Result
   295  	_, err := client.Get(sslURL(client, id), &rst.Body, &golangsdk.RequestOpts{
   296  		OkCodes:     []int{200, 204},
   297  		MoreHeaders: RequestOpts.MoreHeaders,
   298  	})
   299  	if err == nil {
   300  		var r GetSslResponse
   301  		rst.ExtractInto(&r)
   302  		return &r, nil
   303  	}
   304  	return nil, err
   305  }