diff --git a/openstack/client.go b/openstack/client.go index adfb52706..34ff4c3e1 100644 --- a/openstack/client.go +++ b/openstack/client.go @@ -715,3 +715,10 @@ func NewCSBSService(client *golangsdk.ProviderClient, eo golangsdk.EndpointOpts) sc, err := initClientOpts(client, eo, "data-protect") return sc, err } + +func NewMLSV1(client *golangsdk.ProviderClient, eo golangsdk.EndpointOpts) (*golangsdk.ServiceClient, error) { + sc, err := initClientOpts(client, eo, "network") + sc.Endpoint = strings.Replace(sc.Endpoint, "vpc", "mls", 1) + sc.ResourceBase = sc.Endpoint + "v1.0/" + client.ProjectID + "/" + return sc, err +} diff --git a/openstack/csbs/v1/backup/testing/fixtures.go b/openstack/csbs/v1/backup/testing/fixtures.go index 167f743b5..4962acd1d 100644 --- a/openstack/csbs/v1/backup/testing/fixtures.go +++ b/openstack/csbs/v1/backup/testing/fixtures.go @@ -158,7 +158,7 @@ var listResponse = ` "resource_az": "eu-de-02", "image_type": "backup", "finished_at": "2018-08-14T08:31:08.720800", - "average_speed": 19, + "average_speed": 19, "copy_status": "na", "incremental": false, "taskid": "1afcab08-9f97-11e8-9526-286ed488ca8c", diff --git a/openstack/mls/v1/instances/requests.go b/openstack/mls/v1/instances/requests.go new file mode 100644 index 000000000..6cca149b7 --- /dev/null +++ b/openstack/mls/v1/instances/requests.go @@ -0,0 +1,79 @@ +package instances + +import ( + "github.com/huaweicloud/golangsdk" +) + +//CreateOptsBuilder is used for creating instance parameters. +//any struct providing the parameters should implement this interface +type CreateOptsBuilder interface { + ToInstanceCreateMap() (map[string]interface{}, error) +} + +//CreateOpts is a struct that contains all the parameters. +type CreateOpts struct { + Name string `json:"name" required:"true"` + + Version string `json:"version" required:"true"` + + Network NetworkOpts `json:"network" required:"true"` + + Agency string `json:"agency,omitempty"` + + FlavorRef string `json:"flavorRef" required:"true"` + + MrsCluster MrsClusterOpts `json:"mrsCluster" required:"true"` +} + +type NetworkOpts struct { + VpcId string `json:"vpcId" required:"true"` + SubnetId string `json:"subnetId" required:"true"` + SecurityGroupId string `json:"securityGroupId,omitempty"` + AvailableZone string `json:"availableZone" required:"true"` + PublicIP PublicIPOpts `json:"publicIP" required:"true"` +} + +type PublicIPOpts struct { + BindType string `json:"bindType" required:"true"` +} + +type MrsClusterOpts struct { + Id string `json:"id" required:"true"` + UserName string `json:"userName,omitempty"` + UserPassword string `json:"userPassword,omitempty"` +} + +func (opts CreateOpts) ToInstanceCreateMap() (map[string]interface{}, error) { + return golangsdk.BuildRequestBody(opts, "instance") +} + +//Create an instance with given parameters. +func Create(client *golangsdk.ServiceClient, opts CreateOptsBuilder) (r CreateResult) { + b, err := opts.ToInstanceCreateMap() + if err != nil { + r.Err = err + return + } + + _, r.Err = client.Post(createURL(client), b, &r.Body, &golangsdk.RequestOpts{ + OkCodes: []int{202}, + }) + return +} + +//delete an instance via id +func Delete(client *golangsdk.ServiceClient, id string) (r DeleteResult) { + _, r.Err = client.Delete(resourceURL(client, id), &golangsdk.RequestOpts{ + OkCodes: []int{202}, + }) + return +} + +//get an instance with detailed information by id +func Get(client *golangsdk.ServiceClient, id string) (r GetResult) { + + _, r.Err = client.Get(resourceURL(client, id), &r.Body, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + }) + return +} diff --git a/openstack/mls/v1/instances/results.go b/openstack/mls/v1/instances/results.go new file mode 100644 index 000000000..6f96e629e --- /dev/null +++ b/openstack/mls/v1/instances/results.go @@ -0,0 +1,62 @@ +package instances + +import "github.com/huaweicloud/golangsdk" + +type Instance struct { + ID string `json:"id"` + Name string `json:"name"` + Version string `json:"version"` + FlavorRef string `json:"flavorRef"` + Status string `json:"status"` + CurrentTask string `json:"currentTask"` + Network Network `json:"network"` + MrsCluster MrsCluster `json:"mrsCluster"` + Created string `json:"created"` + Updated string `json:"updated"` + InnerEndPoint string `json:"innerEndPoint"` + PublicEndPoint string `json:"publicEndPoint"` +} + +type Network struct { + VpcId string `json:"vpcId"` + SubnetId string `json:"subnetId"` + SecurityGroupId string `json:"securityGroupId"` + AvailableZone string `json:"availableZone"` + PublicIP PublicIP `json:"publicIP"` +} + +type PublicIP struct { + BindType string `json:"bindType"` + EipId string `json:"eipId"` +} + +type MrsCluster struct { + Id string `json:"id"` +} + +type instanceResult struct { + golangsdk.Result +} + +// Extract will get the Instance object out of the commonResult object. +func (r instanceResult) Extract() (*Instance, error) { + var s Instance + err := r.ExtractInto(&s) + return &s, err +} + +func (r instanceResult) ExtractInto(v interface{}) error { + return r.Result.ExtractIntoStructPtr(v, "instance") +} + +type CreateResult struct { + instanceResult +} + +type GetResult struct { + instanceResult +} + +type DeleteResult struct { + golangsdk.ErrResult +} diff --git a/openstack/mls/v1/instances/urls.go b/openstack/mls/v1/instances/urls.go new file mode 100644 index 000000000..180bf1a5e --- /dev/null +++ b/openstack/mls/v1/instances/urls.go @@ -0,0 +1,11 @@ +package instances + +import "github.com/huaweicloud/golangsdk" + +func createURL(c *golangsdk.ServiceClient) string { + return c.ServiceURL("instances") +} + +func resourceURL(c *golangsdk.ServiceClient, id string) string { + return c.ServiceURL("instances", id) +}