computer-host/contract/snapshots.go

101 lines
3.1 KiB
Go

package host
import "time"
type SnapshotID string
type SnapshotArtifactKind string
const (
SnapshotArtifactKindMemory SnapshotArtifactKind = "memory"
SnapshotArtifactKindVMState SnapshotArtifactKind = "vmstate"
SnapshotArtifactKindDisk SnapshotArtifactKind = "disk"
SnapshotArtifactKindManifest SnapshotArtifactKind = "manifest"
)
type Snapshot struct {
ID SnapshotID `json:"id"`
MachineID MachineID `json:"machine_id"`
SourceRuntimeHost string `json:"source_runtime_host,omitempty"`
SourceTapDevice string `json:"source_tap_device,omitempty"`
CreatedAt time.Time `json:"created_at"`
}
type SnapshotArtifact struct {
ID string `json:"id"`
Kind SnapshotArtifactKind `json:"kind"`
Name string `json:"name"`
SizeBytes int64 `json:"size_bytes"`
SHA256Hex string `json:"sha256_hex,omitempty"`
ObjectKey string `json:"object_key,omitempty"`
DownloadURL string `json:"download_url,omitempty"`
}
type CreateSnapshotRequest struct {
SnapshotID SnapshotID `json:"snapshot_id"`
}
type CreateSnapshotResponse struct {
Snapshot Snapshot `json:"snapshot"`
Artifacts []SnapshotArtifact `json:"artifacts,omitempty"`
}
type GetSnapshotResponse struct {
Snapshot Snapshot `json:"snapshot"`
}
type ListSnapshotsResponse struct {
Snapshots []Snapshot `json:"snapshots"`
}
type SnapshotUploadPart struct {
PartNumber int32 `json:"part_number"`
OffsetBytes int64 `json:"offset_bytes"`
SizeBytes int64 `json:"size_bytes"`
UploadURL string `json:"upload_url"`
}
type SnapshotArtifactUploadSession struct {
ArtifactID string `json:"artifact_id"`
ObjectKey string `json:"object_key"`
UploadID string `json:"upload_id"`
Parts []SnapshotUploadPart `json:"parts"`
}
type UploadSnapshotRequest struct {
Artifacts []SnapshotArtifactUploadSession `json:"artifacts"`
}
type UploadedSnapshotPart struct {
PartNumber int32 `json:"part_number"`
ETag string `json:"etag"`
}
type UploadedSnapshotArtifact struct {
ArtifactID string `json:"artifact_id"`
CompletedParts []UploadedSnapshotPart `json:"completed_parts"`
}
type UploadSnapshotResponse struct {
Artifacts []UploadedSnapshotArtifact `json:"artifacts"`
}
type RestoreSnapshotRequest struct {
MachineID MachineID `json:"machine_id"`
Artifact ArtifactRef `json:"artifact"`
Snapshot DurableSnapshotSpec `json:"snapshot"`
GuestConfig *GuestConfig `json:"guest_config,omitempty"`
}
type DurableSnapshotSpec struct {
SnapshotID SnapshotID `json:"snapshot_id"`
MachineID MachineID `json:"machine_id"`
ImageID string `json:"image_id"`
SourceRuntimeHost string `json:"source_runtime_host,omitempty"`
SourceTapDevice string `json:"source_tap_device,omitempty"`
Artifacts []SnapshotArtifact `json:"artifacts"`
}
type RestoreSnapshotResponse struct {
Machine Machine `json:"machine"`
}