github.com/chnsz/golangsdk@v0.0.0-20240506093406-85a3fbfa605b/openstack/dws/v1/cluster/requests.go (about)

     1  package cluster
     2  
     3  import (
     4  	"log"
     5  
     6  	"github.com/chnsz/golangsdk"
     7  )
     8  
     9  const (
    10  	PublicBindTypeAuto         = "auto_assign"
    11  	PublicBindTypeNotUse       = "not_use"
    12  	PublicBindTypeBindExisting = "bind_existing"
    13  )
    14  
    15  type PublicIpOpts struct {
    16  	EipID          string `json:"eip_id,omitempty"`
    17  	PublicBindType string `json:"public_bind_type,omitempty"`
    18  }
    19  
    20  type CreateOpts struct {
    21  	Name                string        `json:"name" required:"true"`
    22  	NumberOfNode        int           `json:"number_of_node" required:"true"`
    23  	AvailabilityZone    string        `json:"availability_zone,omitempty"`
    24  	SubnetID            string        `json:"subnet_id" required:"true"`
    25  	UserPwd             string        `json:"user_pwd" required:"true"`
    26  	SecurityGroupID     string        `json:"security_group_id" required:"true"`
    27  	PublicIp            *PublicIpOpts `json:"public_ip,omitempty"`
    28  	NodeType            string        `json:"node_type" required:"true"`
    29  	VpcID               string        `json:"vpc_id" required:"true"`
    30  	UserName            string        `json:"user_name" required:"true"`
    31  	Port                int           `json:"port,omitempty"`         //default:8000
    32  	NumberOfCn          *int          `json:"number_of_cn,omitempty"` //default:2
    33  	EnterpriseProjectId string        `json:"enterprise_project_id,omitempty"`
    34  }
    35  
    36  type ListOpts struct {
    37  	EnterpriseProjectId string `q:"enterprise_project_id"`
    38  }
    39  
    40  type CreateOptsBuilder interface {
    41  	ToClusterCreateMap() (map[string]interface{}, error)
    42  }
    43  
    44  type ResetPasswordOpts struct {
    45  	NewPassword string `json:"new_password" required:"true"`
    46  }
    47  
    48  var RequestOpts = golangsdk.RequestOpts{
    49  	MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"},
    50  }
    51  
    52  func (opts CreateOpts) ToClusterCreateMap() (map[string]interface{}, error) {
    53  	return golangsdk.BuildRequestBody(opts, "cluster")
    54  }
    55  
    56  func Create(c *golangsdk.ServiceClient, opts CreateOptsBuilder) (*CreateClusterRst, error) {
    57  	b, err := opts.ToClusterCreateMap()
    58  	if err != nil {
    59  		return nil, err
    60  	}
    61  	log.Printf("[DEBUG] create url:%q, body=%#v", createURL(c), b)
    62  	var rst CreateClusterRst
    63  	_, err = c.Post(createURL(c), b, &rst, &golangsdk.RequestOpts{MoreHeaders: RequestOpts.MoreHeaders})
    64  	if err == nil {
    65  		return &rst, nil
    66  	}
    67  	return nil, err
    68  }
    69  
    70  func Get(c *golangsdk.ServiceClient, id string) (*ClusterDetail, error) {
    71  	var rsp ClusterDetailsRst
    72  	_, err := c.Get(resourceURL(c, id), &rsp, &golangsdk.RequestOpts{MoreHeaders: RequestOpts.MoreHeaders})
    73  	if err == nil {
    74  		return &rsp.Cluster, nil
    75  	}
    76  
    77  	return nil, err
    78  }
    79  
    80  func Delete(c *golangsdk.ServiceClient, id string) (r DeleteResult) {
    81  	reqOpt := &golangsdk.RequestOpts{
    82  		OkCodes: []int{202},
    83  		JSONBody: map[string]interface{}{
    84  			"keep_last_manual_snapshot": 0,
    85  		},
    86  	}
    87  
    88  	_, r.Err = c.Delete(resourceURL(c, id), reqOpt)
    89  	return
    90  }
    91  
    92  func List(c *golangsdk.ServiceClient, opts ListOpts) (*ListClustersRst, error) {
    93  	var rst ListClustersRst
    94  	q, err := golangsdk.BuildQueryString(opts)
    95  	if err != nil {
    96  		return nil, err
    97  	}
    98  	url := listURL(c) + q.String()
    99  
   100  	_, err = c.Get(url, &rst, &golangsdk.RequestOpts{MoreHeaders: RequestOpts.MoreHeaders})
   101  	if err == nil {
   102  		return &rst, nil
   103  	}
   104  
   105  	return nil, err
   106  }
   107  
   108  func ResetPassword(c *golangsdk.ServiceClient, clusterId string, opts ResetPasswordOpts) (*golangsdk.Result, error) {
   109  	b, err := golangsdk.BuildRequestBody(opts, "")
   110  	if err != nil {
   111  		return nil, err
   112  	}
   113  
   114  	var r golangsdk.Result
   115  	_, err = c.Post(resetPasswordURL(c, clusterId), b, &r.Body, &golangsdk.RequestOpts{
   116  		MoreHeaders: RequestOpts.MoreHeaders,
   117  	})
   118  	return &r, err
   119  }
   120  
   121  func Resize(c *golangsdk.ServiceClient, clusterId string, scaleOutCount int) (*golangsdk.Result, error) {
   122  	var requestBody = map[string]interface{}{
   123  		"scale_out": map[string]interface{}{
   124  			"count": scaleOutCount,
   125  		},
   126  	}
   127  
   128  	var r golangsdk.Result
   129  	_, err := c.Post(resizeURL(c, clusterId), requestBody, &r.Body, &golangsdk.RequestOpts{
   130  		MoreHeaders: RequestOpts.MoreHeaders})
   131  	return &r, err
   132  }