traefik/vendor/github.com/exoscale/egoscale/affinity_groups.go
2018-02-12 18:10:05 +01:00

176 lines
5.6 KiB
Go

package egoscale
import (
"net/url"
)
// AffinityGroup represents an (anti-)affinity group
type AffinityGroup struct {
ID string `json:"id,omitempty"`
Account string `json:"account,omitempty"`
Description string `json:"description,omitempty"`
Domain string `json:"domain,omitempty"`
DomainID string `json:"domainid,omitempty"`
Name string `json:"name,omitempty"`
Type string `json:"type,omitempty"`
VirtualMachineIDs []string `json:"virtualmachineIDs,omitempty"` // *I*ds is not a typo
}
// AffinityGroupType represent an affinity group type
type AffinityGroupType struct {
Type string `json:"type"`
}
// CreateAffinityGroup (Async) represents a new (anti-)affinity group
//
// CloudStack API: http://cloudstack.apache.org/api/apidocs-4.10/apis/createAffinityGroup.html
type CreateAffinityGroup struct {
Name string `json:"name"`
Type string `json:"type"`
Account string `json:"account,omitempty"`
Description string `json:"description,omitempty"`
DomainID string `json:"domainid,omitempty"`
}
func (*CreateAffinityGroup) name() string {
return "createAffinityGroup"
}
func (*CreateAffinityGroup) asyncResponse() interface{} {
return new(CreateAffinityGroupResponse)
}
// CreateAffinityGroupResponse represents the response of the creation of an (anti-)affinity group
type CreateAffinityGroupResponse struct {
AffinityGroup AffinityGroup `json:"affinitygroup"`
}
// UpdateVMAffinityGroup (Async) represents a modification of a (anti-)affinity group
//
// CloudStack API: http://cloudstack.apache.org/api/apidocs-4.10/apis/updateVMAffinityGroup.html
type UpdateVMAffinityGroup struct {
ID string `json:"id"`
AffinityGroupIDs []string `json:"affinitygroupids,omitempty"` // mutually exclusive with names
AffinityGroupNames []string `json:"affinitygroupnames,omitempty"` // mutually exclusive with ids
}
func (*UpdateVMAffinityGroup) name() string {
return "updateVMAffinityGroup"
}
func (*UpdateVMAffinityGroup) asyncResponse() interface{} {
return new(UpdateVMAffinityGroupResponse)
}
func (req *UpdateVMAffinityGroup) onBeforeSend(params *url.Values) error {
// Either AffinityGroupIDs or AffinityGroupNames must be set
if len(req.AffinityGroupIDs) == 0 && len(req.AffinityGroupNames) == 0 {
params.Set("affinitygroupids", "")
}
return nil
}
// UpdateVMAffinityGroupResponse represents the new VM
type UpdateVMAffinityGroupResponse VirtualMachineResponse
// DeleteAffinityGroup (Async) represents an (anti-)affinity group to be deleted
//
// CloudStack API: http://cloudstack.apache.org/api/apidocs-4.10/apis/deleteAffinityGroup.html
type DeleteAffinityGroup struct {
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Type string `json:"type,omitempty"`
Account string `json:"account,omitempty"`
Description string `json:"description,omitempty"`
DomainID string `json:"domainid,omitempty"`
}
func (*DeleteAffinityGroup) name() string {
return "deleteAffinityGroup"
}
func (*DeleteAffinityGroup) asyncResponse() interface{} {
return new(booleanAsyncResponse)
}
// ListAffinityGroups represents an (anti-)affinity groups search
//
// CloudStack API: http://cloudstack.apache.org/api/apidocs-4.10/apis/listAffinityGroups.html
type ListAffinityGroups struct {
Account string `json:"account,omitempty"`
DomainID string `json:"domainid,omitempty"`
ID string `json:"id,omitempty"`
IsRecursive bool `json:"isrecursive,omitempty"`
Keyword string `json:"keyword,omitempty"`
ListAll bool `json:"listall,omitempty"`
Name string `json:"name,omitempty"`
Page int `json:"page,omitempty"`
PageSize int `json:"pagesize,omitempty"`
Type string `json:"type,omitempty"`
VirtualMachineID string `json:"virtualmachineid,omitempty"`
}
func (*ListAffinityGroups) name() string {
return "listAffinityGroups"
}
func (*ListAffinityGroups) response() interface{} {
return new(ListAffinityGroupsResponse)
}
// ListAffinityGroupTypes represents an (anti-)affinity groups search
//
// CloudStack API: http://cloudstack.apache.org/api/apidocs-4.10/apis/listAffinityGroupTypes.html
type ListAffinityGroupTypes struct {
Keyword string `json:"keyword,omitempty"`
Page int `json:"page,omitempty"`
PageSize int `json:"pagesize,omitempty"`
}
func (*ListAffinityGroupTypes) name() string {
return "listAffinityGroupTypes"
}
func (*ListAffinityGroupTypes) response() interface{} {
return new(ListAffinityGroupTypesResponse)
}
// ListAffinityGroupsResponse represents a list of (anti-)affinity groups
type ListAffinityGroupsResponse struct {
Count int `json:"count"`
AffinityGroup []AffinityGroup `json:"affinitygroup"`
}
// ListAffinityGroupTypesResponse represents a list of (anti-)affinity group types
type ListAffinityGroupTypesResponse struct {
Count int `json:"count"`
AffinityGroupType []AffinityGroupType `json:"affinitygrouptype"`
}
// Legacy methods
// CreateAffinityGroup creates a group
//
// Deprecated: Use the API directly
func (exo *Client) CreateAffinityGroup(name string, async AsyncInfo) (*AffinityGroup, error) {
req := &CreateAffinityGroup{
Name: name,
}
resp, err := exo.AsyncRequest(req, async)
if err != nil {
return nil, err
}
ag := resp.(*CreateAffinityGroupResponse).AffinityGroup
return &ag, nil
}
// DeleteAffinityGroup deletes a group
//
// Deprecated: Use the API directly
func (exo *Client) DeleteAffinityGroup(name string, async AsyncInfo) error {
req := &DeleteAffinityGroup{
Name: name,
}
return exo.BooleanAsyncRequest(req, async)
}