2018-02-12 17:10:05 +00:00
package egoscale
2018-09-14 08:06:03 +00:00
// SnapshotState represents the Snapshot.State enum
//
// See: https://github.com/apache/cloudstack/blob/master/api/src/main/java/com/cloud/storage/Snapshot.java
2019-03-14 10:04:04 +00:00
type SnapshotState string
2018-09-14 08:06:03 +00:00
const (
// Allocated ... (TODO)
2019-03-14 10:04:04 +00:00
Allocated SnapshotState = "Allocated"
2018-09-14 08:06:03 +00:00
// Creating ... (TODO)
2019-03-14 10:04:04 +00:00
Creating SnapshotState = "Creating"
2018-09-14 08:06:03 +00:00
// CreatedOnPrimary ... (TODO)
2019-03-14 10:04:04 +00:00
CreatedOnPrimary SnapshotState = "CreatedOnPrimary"
2018-09-14 08:06:03 +00:00
// BackingUp ... (TODO)
2019-03-14 10:04:04 +00:00
BackingUp SnapshotState = "BackingUp"
2018-09-14 08:06:03 +00:00
// BackedUp ... (TODO)
2019-03-14 10:04:04 +00:00
BackedUp SnapshotState = "BackedUp"
2018-09-14 08:06:03 +00:00
// Copying ... (TODO)
2019-03-14 10:04:04 +00:00
Copying SnapshotState = "Copying"
2018-09-14 08:06:03 +00:00
// Destroying ... (TODO)
2019-03-14 10:04:04 +00:00
Destroying SnapshotState = "Destroying"
2018-09-14 08:06:03 +00:00
// Destroyed ... (TODO)
2019-03-14 10:04:04 +00:00
Destroyed SnapshotState = "Destroyed"
2018-09-14 08:06:03 +00:00
// Error is a state where the user can't see the snapshot while the snapshot may still exist on the storage
2019-03-14 10:04:04 +00:00
Error SnapshotState = "Error"
2018-09-14 08:06:03 +00:00
)
2018-02-12 17:10:05 +00:00
// Snapshot represents a volume snapshot
type Snapshot struct {
2018-09-14 08:06:03 +00:00
Account string ` json:"account,omitempty" doc:"the account associated with the snapshot" `
AccountID * UUID ` json:"accountid,omitempty" doc:"the account ID associated with the snapshot" `
Created string ` json:"created,omitempty" doc:"the date the snapshot was created" `
ID * UUID ` json:"id,omitempty" doc:"ID of the snapshot" `
IntervalType string ` json:"intervaltype,omitempty" doc:"valid types are hourly, daily, weekly, monthy, template, and none." `
Name string ` json:"name,omitempty" doc:"name of the snapshot" `
PhysicalSize int64 ` json:"physicalsize,omitempty" doc:"physical size of the snapshot on image store" `
Revertable * bool ` json:"revertable,omitempty" doc:"indicates whether the underlying storage supports reverting the volume to this snapshot" `
Size int64 ` json:"size,omitempty" doc:"the size of original volume" `
SnapshotType string ` json:"snapshottype,omitempty" doc:"the type of the snapshot" `
2019-03-14 10:04:04 +00:00
State string ` json:"state,omitempty" doc:"the state of the snapshot. BackedUp means that snapshot is ready to be used; Creating - the snapshot is being allocated on the primary storage; BackingUp - the snapshot is being backed up on secondary storage" `
2018-09-14 08:06:03 +00:00
Tags [ ] ResourceTag ` json:"tags,omitempty" doc:"the list of resource tags associated with snapshot" `
VolumeID * UUID ` json:"volumeid,omitempty" doc:"ID of the disk volume" `
VolumeName string ` json:"volumename,omitempty" doc:"name of the disk volume" `
VolumeType string ` json:"volumetype,omitempty" doc:"type of the disk volume" `
ZoneID * UUID ` json:"zoneid,omitempty" doc:"id of the availability zone" `
2018-02-12 17:10:05 +00:00
}
// ResourceType returns the type of the resource
2018-09-14 08:06:03 +00:00
func ( Snapshot ) ResourceType ( ) string {
2018-02-12 17:10:05 +00:00
return "Snapshot"
}
2018-09-14 08:06:03 +00:00
// CreateSnapshot (Async) creates an instant snapshot of a volume
2018-02-12 17:10:05 +00:00
type CreateSnapshot struct {
2019-03-14 10:04:04 +00:00
VolumeID * UUID ` json:"volumeid" doc:"The ID of the disk volume" `
QuiesceVM * bool ` json:"quiescevm,omitempty" doc:"quiesce vm if true" `
_ bool ` name:"createSnapshot" description:"Creates an instant snapshot of a volume." `
2018-02-12 17:10:05 +00:00
}
2019-03-14 10:04:04 +00:00
// Response returns the struct to unmarshal
func ( CreateSnapshot ) Response ( ) interface { } {
2018-09-14 08:06:03 +00:00
return new ( AsyncJobResult )
2018-02-12 17:10:05 +00:00
}
2019-03-14 10:04:04 +00:00
// AsyncResponse returns the struct to unmarshal the async job
func ( CreateSnapshot ) AsyncResponse ( ) interface { } {
2018-09-14 08:06:03 +00:00
return new ( Snapshot )
2018-02-12 17:10:05 +00:00
}
2019-03-14 10:04:04 +00:00
// ListRequest builds the ListSnapshot request
func ( ss Snapshot ) ListRequest ( ) ( ListCommand , error ) {
// Restricted cannot be applied here because it really has three states
req := & ListSnapshots {
ID : ss . ID ,
Name : ss . Name ,
VolumeID : ss . VolumeID ,
SnapshotType : ss . SnapshotType ,
ZoneID : ss . ZoneID ,
// TODO: tags
}
return req , nil
}
//go:generate go run generate/main.go -interface=Listable ListSnapshots
2018-02-12 17:10:05 +00:00
// ListSnapshots lists the volume snapshots
type ListSnapshots struct {
2018-09-14 08:06:03 +00:00
ID * UUID ` json:"id,omitempty" doc:"lists snapshot by snapshot ID" `
IntervalType string ` json:"intervaltype,omitempty" doc:"valid values are HOURLY, DAILY, WEEKLY, and MONTHLY." `
Keyword string ` json:"keyword,omitempty" doc:"List by keyword" `
Name string ` json:"name,omitempty" doc:"lists snapshot by snapshot name" `
2018-02-12 17:10:05 +00:00
Page int ` json:"page,omitempty" `
PageSize int ` json:"pagesize,omitempty" `
2018-09-14 08:06:03 +00:00
SnapshotType string ` json:"snapshottype,omitempty" doc:"valid values are MANUAL or RECURRING." `
Tags [ ] ResourceTag ` json:"tags,omitempty" doc:"List resources by tags (key/value pairs)" `
VolumeID * UUID ` json:"volumeid,omitempty" doc:"the ID of the disk volume" `
ZoneID * UUID ` json:"zoneid,omitempty" doc:"list snapshots by zone id" `
_ bool ` name:"listSnapshots" description:"Lists all available snapshots for the account." `
2018-02-12 17:10:05 +00:00
}
// ListSnapshotsResponse represents a list of volume snapshots
type ListSnapshotsResponse struct {
Count int ` json:"count" `
Snapshot [ ] Snapshot ` json:"snapshot" `
}
2018-09-14 08:06:03 +00:00
// DeleteSnapshot (Async) deletes a snapshot of a disk volume
2018-02-12 17:10:05 +00:00
type DeleteSnapshot struct {
2018-09-14 08:06:03 +00:00
ID * UUID ` json:"id" doc:"The ID of the snapshot" `
_ bool ` name:"deleteSnapshot" description:"Deletes a snapshot of a disk volume." `
2018-02-12 17:10:05 +00:00
}
2019-03-14 10:04:04 +00:00
// Response returns the struct to unmarshal
func ( DeleteSnapshot ) Response ( ) interface { } {
2018-09-14 08:06:03 +00:00
return new ( AsyncJobResult )
2018-02-12 17:10:05 +00:00
}
2019-03-14 10:04:04 +00:00
// AsyncResponse returns the struct to unmarshal the async job
func ( DeleteSnapshot ) AsyncResponse ( ) interface { } {
return new ( BooleanResponse )
2018-02-12 17:10:05 +00:00
}
2018-09-14 08:06:03 +00:00
// RevertSnapshot (Async) reverts a volume snapshot
2018-02-12 17:10:05 +00:00
type RevertSnapshot struct {
2018-09-14 08:06:03 +00:00
ID * UUID ` json:"id" doc:"The ID of the snapshot" `
_ bool ` name:"revertSnapshot" description:"revert a volume snapshot." `
2018-02-12 17:10:05 +00:00
}
2019-03-14 10:04:04 +00:00
// Response returns the struct to unmarshal
func ( RevertSnapshot ) Response ( ) interface { } {
2018-09-14 08:06:03 +00:00
return new ( AsyncJobResult )
2018-02-12 17:10:05 +00:00
}
2019-03-14 10:04:04 +00:00
// AsyncResponse returns the struct to unmarshal the async job
func ( RevertSnapshot ) AsyncResponse ( ) interface { } {
return new ( BooleanResponse )
2018-02-12 17:10:05 +00:00
}