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  }