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 }