mirror of
https://github.com/lxc/incus
synced 2026-08-02 05:26:46 +00:00
282 lines
7.9 KiB
Go
282 lines
7.9 KiB
Go
package api
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// StorageVolumesPost represents the fields of a new storage pool volume
|
|
//
|
|
// swagger:model
|
|
//
|
|
// API extension: storage.
|
|
type StorageVolumesPost struct {
|
|
StorageVolumePut `yaml:",inline"`
|
|
|
|
// Volume name
|
|
// Example: foo
|
|
Name string `json:"name" yaml:"name"`
|
|
|
|
// Volume type (container, custom, image or virtual-machine)
|
|
// Example: custom
|
|
Type string `json:"type" yaml:"type"`
|
|
|
|
// Migration source
|
|
//
|
|
// API extension: storage_api_local_volume_handling
|
|
Source StorageVolumeSource `json:"source" yaml:"source"`
|
|
|
|
// Volume content type (filesystem or block)
|
|
// Example: filesystem
|
|
//
|
|
// API extension: custom_block_volumes
|
|
ContentType string `json:"content_type" yaml:"content_type"`
|
|
}
|
|
|
|
// StorageVolumePost represents the fields required to rename a storage pool volume
|
|
//
|
|
// swagger:model
|
|
//
|
|
// API extension: storage_api_volume_rename.
|
|
type StorageVolumePost struct {
|
|
// New volume name
|
|
// Example: foo
|
|
Name string `json:"name" yaml:"name"`
|
|
|
|
// New storage pool
|
|
// Example: remote
|
|
//
|
|
// API extension: storage_api_local_volume_handling
|
|
Pool string `json:"pool,omitempty" yaml:"pool,omitempty"`
|
|
|
|
// Initiate volume migration
|
|
// Example: false
|
|
//
|
|
// API extension: storage_api_remote_volume_handling
|
|
Migration bool `json:"migration" yaml:"migration"`
|
|
|
|
// Migration target (for push mode)
|
|
//
|
|
// API extension: storage_api_remote_volume_handling
|
|
Target *StorageVolumePostTarget `json:"target" yaml:"target"`
|
|
|
|
// Whether snapshots should be discarded (migration only)
|
|
// Example: false
|
|
//
|
|
// API extension: storage_api_remote_volume_snapshots
|
|
VolumeOnly bool `json:"volume_only" yaml:"volume_only"`
|
|
|
|
// New project name
|
|
// Example: foo
|
|
//
|
|
// API extension: storage_volume_project_move
|
|
Project string `json:"project,omitempty" yaml:"project,omitempty"`
|
|
|
|
// Migration source
|
|
//
|
|
// API extension: cluster_internal_custom_volume_copy
|
|
Source StorageVolumeSource `json:"source" yaml:"source"`
|
|
}
|
|
|
|
// StorageVolumePostTarget represents the migration target host and operation
|
|
//
|
|
// swagger:model
|
|
//
|
|
// API extension: storage_api_remote_volume_handling.
|
|
type StorageVolumePostTarget struct {
|
|
// The certificate of the migration target
|
|
// Example: X509 PEM certificate
|
|
Certificate string `json:"certificate" yaml:"certificate"`
|
|
|
|
// Remote operation URL (for migration)
|
|
// Example: https://1.2.3.4:8443/1.0/operations/1721ae08-b6a8-416a-9614-3f89302466e1
|
|
Operation string `json:"operation,omitempty" yaml:"operation,omitempty"`
|
|
|
|
// Migration websockets credentials
|
|
// Example: {"migration": "random-string"}
|
|
Websockets map[string]string `json:"secrets,omitempty" yaml:"secrets,omitempty"`
|
|
}
|
|
|
|
// StorageVolumeFull is a combination of StorageVolume, StorageVolumeBackup, StorageVolumeSnapshot and StorageVolumeState.
|
|
//
|
|
// swagger:model
|
|
//
|
|
// API extension: storage_volume_full.
|
|
type StorageVolumeFull struct {
|
|
StorageVolume `yaml:",inline"`
|
|
|
|
// List of backups.
|
|
Backups []StorageVolumeBackup `json:"backups" yaml:"backups"`
|
|
|
|
// List of snapshots.
|
|
Snapshots []StorageVolumeSnapshot `json:"snapshots" yaml:"snapshots"`
|
|
|
|
// State.
|
|
State *StorageVolumeState `json:"state" yaml:"state"`
|
|
}
|
|
|
|
// StorageVolume represents the fields of a storage volume.
|
|
//
|
|
// swagger:model
|
|
//
|
|
// API extension: storage.
|
|
type StorageVolume struct {
|
|
StorageVolumePut `yaml:",inline"`
|
|
|
|
// Volume name
|
|
// Example: foo
|
|
Name string `json:"name" yaml:"name"`
|
|
|
|
// Volume type
|
|
// Example: custom
|
|
Type string `json:"type" yaml:"type"`
|
|
|
|
// List of URLs of objects using this storage volume
|
|
// Example: ["/1.0/instances/blah"]
|
|
UsedBy []string `json:"used_by" yaml:"used_by"`
|
|
|
|
// What cluster member this record was found on
|
|
// Example: server01
|
|
//
|
|
// API extension: clustering
|
|
Location string `json:"location" yaml:"location"`
|
|
|
|
// Volume content type (filesystem or block)
|
|
// Example: filesystem
|
|
//
|
|
// API extension: custom_block_volumes
|
|
ContentType string `json:"content_type" yaml:"content_type"`
|
|
|
|
// Project containing the volume.
|
|
// Example: default
|
|
//
|
|
// API extension: storage_volumes_all_projects
|
|
Project string `json:"project" yaml:"project"`
|
|
|
|
// Volume creation timestamp
|
|
// Example: 2021-03-23T20:00:00-04:00
|
|
// API extension: storage_volumes_created_at
|
|
CreatedAt time.Time `json:"created_at" yaml:"created_at"`
|
|
}
|
|
|
|
// URL returns the URL for the volume.
|
|
func (v *StorageVolume) URL(apiVersion string, poolName string) *URL {
|
|
u := NewURL()
|
|
|
|
volName, snapName, isSnap := GetParentAndSnapshotName(v.Name)
|
|
if isSnap {
|
|
u = u.Path(apiVersion, "storage-pools", poolName, "volumes", v.Type, volName, "snapshots", snapName)
|
|
} else {
|
|
u = u.Path(apiVersion, "storage-pools", poolName, "volumes", v.Type, volName)
|
|
}
|
|
|
|
return u.Project(v.Project).Target(v.Location)
|
|
}
|
|
|
|
// StorageVolumePut represents the modifiable fields of a storage volume
|
|
//
|
|
// swagger:model
|
|
//
|
|
// API extension: storage.
|
|
type StorageVolumePut struct {
|
|
// Storage volume configuration map (refer to doc/storage.md)
|
|
// Example: {"zfs.remove_snapshots": "true", "size": "50GiB"}
|
|
Config ConfigMap `json:"config" yaml:"config"`
|
|
|
|
// Description of the storage volume
|
|
// Example: My custom volume
|
|
//
|
|
// API extension: entity_description
|
|
Description string `json:"description" yaml:"description"`
|
|
|
|
// Name of a snapshot to restore
|
|
// Example: snap0
|
|
//
|
|
// API extension: storage_api_volume_snapshots
|
|
Restore string `json:"restore,omitempty" yaml:"restore,omitempty"`
|
|
}
|
|
|
|
// StorageVolumeSource represents the creation source for a new storage volume
|
|
//
|
|
// swagger:model
|
|
//
|
|
// API extension: storage_api_local_volume_handling.
|
|
type StorageVolumeSource struct {
|
|
// Source volume name (for copy)
|
|
// Example: foo
|
|
Name string `json:"name" yaml:"name"`
|
|
|
|
// Source type (copy or migration)
|
|
// Example: copy
|
|
Type string `json:"type" yaml:"type"`
|
|
|
|
// Source storage pool (for copy)
|
|
// Example: local
|
|
Pool string `json:"pool" yaml:"pool"`
|
|
|
|
// Certificate (for migration)
|
|
// Example: X509 PEM certificate
|
|
//
|
|
// API extension: storage_api_remote_volume_handling
|
|
Certificate string `json:"certificate" yaml:"certificate"`
|
|
|
|
// Whether to use pull or push mode (for migration)
|
|
// Example: pull
|
|
//
|
|
// API extension: storage_api_remote_volume_handling
|
|
Mode string `json:"mode,omitempty" yaml:"mode,omitempty"`
|
|
|
|
// Remote operation URL (for migration)
|
|
// Example: https://1.2.3.4:8443/1.0/operations/1721ae08-b6a8-416a-9614-3f89302466e1
|
|
//
|
|
// API extension: storage_api_remote_volume_handling
|
|
Operation string `json:"operation,omitempty" yaml:"operation,omitempty"`
|
|
|
|
// Map of migration websockets (for migration)
|
|
// Example: {"rsync": "RANDOM-STRING"}
|
|
//
|
|
// API extension: storage_api_remote_volume_handling
|
|
Websockets map[string]string `json:"secrets,omitempty" yaml:"secrets,omitempty"`
|
|
|
|
// Whether snapshots should be discarded (for migration)
|
|
// Example: false
|
|
//
|
|
// API extension: storage_api_volume_snapshots
|
|
VolumeOnly bool `json:"volume_only" yaml:"volume_only"`
|
|
|
|
// Whether existing destination volume should be refreshed
|
|
// Example: false
|
|
//
|
|
// API extension: custom_volume_refresh
|
|
Refresh bool `json:"refresh" yaml:"refresh"`
|
|
|
|
// Whether to exclude source snapshots earlier than latest target snapshot
|
|
// Example: false
|
|
//
|
|
// API extension: custom_volume_refresh_exclude_older_snapshots
|
|
RefreshExcludeOlder bool `json:"refresh_exclude_older" yaml:"refresh_exclude_older"`
|
|
|
|
// Source project name
|
|
// Example: foo
|
|
//
|
|
// API extension: storage_api_project
|
|
Project string `json:"project,omitempty" yaml:"project,omitempty"`
|
|
|
|
// What cluster member this record was found on
|
|
// Example: server01
|
|
//
|
|
// API extension: cluster_internal_custom_volume_copy
|
|
Location string `json:"location" yaml:"location"`
|
|
}
|
|
|
|
// Writable converts a full StorageVolume struct into a StorageVolumePut struct (filters read-only fields).
|
|
func (v *StorageVolume) Writable() StorageVolumePut {
|
|
return v.StorageVolumePut
|
|
}
|
|
|
|
// StorageVolumeRebuildPost represents the fields available for a storage volume rebuild request.
|
|
//
|
|
// swagger:model
|
|
//
|
|
// API extension: storage_volumes_rebuild.
|
|
type StorageVolumeRebuildPost struct{}
|