2018-09-14 08:06:03 +00:00
|
|
|
package egoscale
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/url"
|
|
|
|
)
|
|
|
|
|
2019-03-14 10:04:04 +00:00
|
|
|
// Command represents a generic request
|
2018-09-14 08:06:03 +00:00
|
|
|
type Command interface {
|
2019-03-14 10:04:04 +00:00
|
|
|
Response() interface{}
|
2018-09-14 08:06:03 +00:00
|
|
|
}
|
|
|
|
|
2019-03-14 10:04:04 +00:00
|
|
|
// AsyncCommand represents a async request
|
2018-09-14 08:06:03 +00:00
|
|
|
type AsyncCommand interface {
|
|
|
|
Command
|
2019-03-14 10:04:04 +00:00
|
|
|
AsyncResponse() interface{}
|
2018-09-14 08:06:03 +00:00
|
|
|
}
|
|
|
|
|
2019-03-14 10:04:04 +00:00
|
|
|
// ListCommand represents a listing request
|
2018-09-14 08:06:03 +00:00
|
|
|
type ListCommand interface {
|
2019-03-14 10:04:04 +00:00
|
|
|
Listable
|
2018-09-14 08:06:03 +00:00
|
|
|
Command
|
|
|
|
// SetPage defines the current pages
|
|
|
|
SetPage(int)
|
|
|
|
// SetPageSize defines the size of the page
|
|
|
|
SetPageSize(int)
|
2019-03-14 10:04:04 +00:00
|
|
|
// Each reads the data from the response and feeds channels, and returns true if we are on the last page
|
|
|
|
Each(interface{}, IterateItemFunc)
|
2018-09-14 08:06:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// onBeforeHook represents an action to be done on the params before sending them
|
|
|
|
//
|
|
|
|
// This little took helps with issue of relying on JSON serialization logic only.
|
|
|
|
// `omitempty` may make sense in some cases but not all the time.
|
|
|
|
type onBeforeHook interface {
|
|
|
|
onBeforeSend(params url.Values) error
|
|
|
|
}
|
|
|
|
|
|
|
|
// CommandInfo represents the meta data related to a Command
|
|
|
|
type CommandInfo struct {
|
|
|
|
Name string
|
|
|
|
Description string
|
|
|
|
RootOnly bool
|
|
|
|
}
|
|
|
|
|
|
|
|
// JobStatusType represents the status of a Job
|
|
|
|
type JobStatusType int
|
|
|
|
|
|
|
|
//go:generate stringer -type JobStatusType
|
|
|
|
const (
|
|
|
|
// Pending represents a job in progress
|
|
|
|
Pending JobStatusType = iota
|
|
|
|
// Success represents a successfully completed job
|
|
|
|
Success
|
|
|
|
// Failure represents a job that has failed to complete
|
|
|
|
Failure
|
|
|
|
)
|
|
|
|
|
|
|
|
// ErrorCode represents the CloudStack ApiErrorCode enum
|
|
|
|
//
|
2019-03-14 10:04:04 +00:00
|
|
|
// See: https://github.com/apache/cloudstack/blob/master/api/src/main/java/org/apache/cloudstack/api/ApiErrorCode.java
|
2018-09-14 08:06:03 +00:00
|
|
|
type ErrorCode int
|
|
|
|
|
|
|
|
//go:generate stringer -type ErrorCode
|
|
|
|
const (
|
|
|
|
// Unauthorized represents ... (TODO)
|
|
|
|
Unauthorized ErrorCode = 401
|
|
|
|
// MethodNotAllowed represents ... (TODO)
|
|
|
|
MethodNotAllowed ErrorCode = 405
|
|
|
|
// UnsupportedActionError represents ... (TODO)
|
|
|
|
UnsupportedActionError ErrorCode = 422
|
|
|
|
// APILimitExceeded represents ... (TODO)
|
|
|
|
APILimitExceeded ErrorCode = 429
|
|
|
|
// MalformedParameterError represents ... (TODO)
|
|
|
|
MalformedParameterError ErrorCode = 430
|
|
|
|
// ParamError represents ... (TODO)
|
|
|
|
ParamError ErrorCode = 431
|
|
|
|
|
|
|
|
// InternalError represents a server error
|
|
|
|
InternalError ErrorCode = 530
|
|
|
|
// AccountError represents ... (TODO)
|
|
|
|
AccountError ErrorCode = 531
|
|
|
|
// AccountResourceLimitError represents ... (TODO)
|
|
|
|
AccountResourceLimitError ErrorCode = 532
|
|
|
|
// InsufficientCapacityError represents ... (TODO)
|
|
|
|
InsufficientCapacityError ErrorCode = 533
|
|
|
|
// ResourceUnavailableError represents ... (TODO)
|
|
|
|
ResourceUnavailableError ErrorCode = 534
|
|
|
|
// ResourceAllocationError represents ... (TODO)
|
|
|
|
ResourceAllocationError ErrorCode = 535
|
|
|
|
// ResourceInUseError represents ... (TODO)
|
|
|
|
ResourceInUseError ErrorCode = 536
|
|
|
|
// NetworkRuleConflictError represents ... (TODO)
|
|
|
|
NetworkRuleConflictError ErrorCode = 537
|
|
|
|
)
|
|
|
|
|
|
|
|
// CSErrorCode represents the CloudStack CSExceptionErrorCode enum
|
|
|
|
//
|
|
|
|
// See: https://github.com/apache/cloudstack/blob/master/utils/src/main/java/com/cloud/utils/exception/CSExceptionErrorCode.java
|
|
|
|
type CSErrorCode int
|
|
|
|
|
|
|
|
//go:generate stringer -type CSErrorCode
|
|
|
|
const (
|
|
|
|
// CloudRuntimeException ... (TODO)
|
|
|
|
CloudRuntimeException CSErrorCode = 4250
|
|
|
|
// ExecutionException ... (TODO)
|
|
|
|
ExecutionException CSErrorCode = 4260
|
|
|
|
// HypervisorVersionChangedException ... (TODO)
|
|
|
|
HypervisorVersionChangedException CSErrorCode = 4265
|
|
|
|
// CloudException ... (TODO)
|
|
|
|
CloudException CSErrorCode = 4275
|
|
|
|
// AccountLimitException ... (TODO)
|
|
|
|
AccountLimitException CSErrorCode = 4280
|
|
|
|
// AgentUnavailableException ... (TODO)
|
|
|
|
AgentUnavailableException CSErrorCode = 4285
|
|
|
|
// CloudAuthenticationException ... (TODO)
|
|
|
|
CloudAuthenticationException CSErrorCode = 4290
|
|
|
|
// ConcurrentOperationException ... (TODO)
|
|
|
|
ConcurrentOperationException CSErrorCode = 4300
|
|
|
|
// ConflictingNetworksException ... (TODO)
|
|
|
|
ConflictingNetworkSettingsException CSErrorCode = 4305
|
|
|
|
// DiscoveredWithErrorException ... (TODO)
|
|
|
|
DiscoveredWithErrorException CSErrorCode = 4310
|
|
|
|
// HAStateException ... (TODO)
|
|
|
|
HAStateException CSErrorCode = 4315
|
|
|
|
// InsufficientAddressCapacityException ... (TODO)
|
|
|
|
InsufficientAddressCapacityException CSErrorCode = 4320
|
|
|
|
// InsufficientCapacityException ... (TODO)
|
|
|
|
InsufficientCapacityException CSErrorCode = 4325
|
|
|
|
// InsufficientNetworkCapacityException ... (TODO)
|
|
|
|
InsufficientNetworkCapacityException CSErrorCode = 4330
|
|
|
|
// InsufficientServerCapaticyException ... (TODO)
|
|
|
|
InsufficientServerCapacityException CSErrorCode = 4335
|
|
|
|
// InsufficientStorageCapacityException ... (TODO)
|
|
|
|
InsufficientStorageCapacityException CSErrorCode = 4340
|
|
|
|
// InternalErrorException ... (TODO)
|
|
|
|
InternalErrorException CSErrorCode = 4345
|
|
|
|
// InvalidParameterValueException ... (TODO)
|
|
|
|
InvalidParameterValueException CSErrorCode = 4350
|
|
|
|
// ManagementServerException ... (TODO)
|
|
|
|
ManagementServerException CSErrorCode = 4355
|
|
|
|
// NetworkRuleConflictException ... (TODO)
|
|
|
|
NetworkRuleConflictException CSErrorCode = 4360
|
|
|
|
// PermissionDeniedException ... (TODO)
|
|
|
|
PermissionDeniedException CSErrorCode = 4365
|
|
|
|
// ResourceAllocationException ... (TODO)
|
|
|
|
ResourceAllocationException CSErrorCode = 4370
|
|
|
|
// ResourceInUseException ... (TODO)
|
|
|
|
ResourceInUseException CSErrorCode = 4375
|
|
|
|
// ResourceUnavailableException ... (TODO)
|
|
|
|
ResourceUnavailableException CSErrorCode = 4380
|
|
|
|
// StorageUnavailableException ... (TODO)
|
|
|
|
StorageUnavailableException CSErrorCode = 4385
|
|
|
|
// UnsupportedServiceException ... (TODO)
|
|
|
|
UnsupportedServiceException CSErrorCode = 4390
|
|
|
|
// VirtualMachineMigrationException ... (TODO)
|
|
|
|
VirtualMachineMigrationException CSErrorCode = 4395
|
|
|
|
// AsyncCommandQueued ... (TODO)
|
|
|
|
AsyncCommandQueued CSErrorCode = 4540
|
|
|
|
// RequestLimitException ... (TODO)
|
|
|
|
RequestLimitException CSErrorCode = 4545
|
|
|
|
// ServerAPIException ... (TODO)
|
|
|
|
ServerAPIException CSErrorCode = 9999
|
|
|
|
)
|
|
|
|
|
2019-03-14 10:04:04 +00:00
|
|
|
// ErrorResponse represents the standard error response
|
2018-09-14 08:06:03 +00:00
|
|
|
type ErrorResponse struct {
|
|
|
|
CSErrorCode CSErrorCode `json:"cserrorcode"`
|
|
|
|
ErrorCode ErrorCode `json:"errorcode"`
|
|
|
|
ErrorText string `json:"errortext"`
|
|
|
|
UUIDList []UUIDItem `json:"uuidList,omitempty"` // uuid*L*ist is not a typo
|
|
|
|
}
|
|
|
|
|
|
|
|
// UUIDItem represents an item of the UUIDList part of an ErrorResponse
|
|
|
|
type UUIDItem struct {
|
|
|
|
Description string `json:"description,omitempty"`
|
|
|
|
SerialVersionUID int64 `json:"serialVersionUID,omitempty"`
|
|
|
|
UUID string `json:"uuid"`
|
|
|
|
}
|
|
|
|
|
2019-03-14 10:04:04 +00:00
|
|
|
// BooleanResponse represents a boolean response (usually after a deletion)
|
|
|
|
type BooleanResponse struct {
|
2018-09-14 08:06:03 +00:00
|
|
|
DisplayText string `json:"displaytext,omitempty"`
|
|
|
|
Success bool `json:"success"`
|
|
|
|
}
|