github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/dataarts/v1.1/cluster/Create.go (about) 1 package cluster 2 3 import ( 4 "net/http" 5 6 golangsdk "github.com/opentelekomcloud/gophertelekomcloud" 7 "github.com/opentelekomcloud/gophertelekomcloud/internal/build" 8 "github.com/opentelekomcloud/gophertelekomcloud/internal/extract" 9 tag "github.com/opentelekomcloud/gophertelekomcloud/openstack/common/tags" 10 ) 11 12 type CreateOpts struct { 13 Cluster Cluster `json:"cluster" required:"true"` 14 AutoRemind *bool `json:"auto_remind,omitempty"` 15 PhoneNum string `json:"phone_num,omitempty"` 16 Email string `json:"email,omitempty"` 17 } 18 19 type Cluster struct { 20 ScheduleBootTime string `json:"scheduleBootTime,omitempty"` 21 IsScheduleBootOff *bool `json:"isScheduleBootOff,omitempty"` 22 Instances []Instance `json:"instances,omitempty"` 23 DataStore *Datastore `json:"datastore,omitempty"` 24 ExtendedProperties *ExtendedProp `json:"extended_properties,omitempty"` 25 ScheduleOffTime string `json:"scheduleOffTime,omitempty"` 26 VpcId string `json:"vpcId,omitempty"` 27 Name string `json:"name,omitempty"` 28 SysTags []tag.ResourceTag `json:"sys_tags,omitempty"` 29 IsAutoOff *bool `json:"isAutoOff"` 30 } 31 32 type Instance struct { 33 AZ string `json:"availability_zone" required:"true"` 34 Nics []Nic `json:"nics" required:"true"` 35 FlavorRef string `json:"flavorRef" required:"true"` 36 Type string `json:"type" required:"true"` 37 } 38 39 type Datastore struct { 40 Type string `json:"type,omitempty"` 41 Version string `json:"version,omitempty"` 42 } 43 44 type ExtendedProp struct { 45 WorkSpaceId string `json:"workSpaceId,omitempty"` 46 ResourceId string `json:"resourceId,omitempty"` 47 Trial string `json:"trial,omitempty"` 48 } 49 50 type Nic struct { 51 SecurityGroupId string `json:"securityGroupId" required:"true"` 52 NetId string `json:"net-id" required:"true"` 53 } 54 55 func Create(client *golangsdk.ServiceClient, opts CreateOpts) (*ClusterResponse, error) { 56 b, err := build.RequestBody(opts, "") 57 if err != nil { 58 return nil, err 59 } 60 61 // POST /v1.1/{project_id}/clusters 62 raw, err := client.Post(client.ServiceURL("clusters"), b, nil, &golangsdk.RequestOpts{ 63 MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en"}, 64 }) 65 return extra(err, raw) 66 } 67 68 type ClusterResponse struct { 69 Name string `json:"name"` 70 Id string `json:"id"` 71 Task Task `json:"task"` 72 Datastore Datastore `json:"datastore"` 73 Instances []InstanceResp `json:"instances"` 74 } 75 76 type Task struct { 77 Id string `json:"id"` 78 Name string `json:"name"` 79 } 80 81 type InstanceResp struct { 82 Name string `json:"name"` 83 Id string `json:"id"` 84 Type string `json:"type"` 85 ShardId string `json:"shard_id"` 86 } 87 88 func extra(err error, raw *http.Response) (*ClusterResponse, error) { 89 if err != nil { 90 return nil, err 91 } 92 93 var res ClusterResponse 94 err = extract.Into(raw.Body, &res) 95 return &res, err 96 }