lxd: github.com/lxc/lxd/lxd/db Index | Files | Directories

package db

import "github.com/lxc/lxd/lxd/db"

Index

Package Files

backups.go certificates.go certificates.mapper.go config.go db.go devices.go errors.go images.go images.mapper.go instances.go instances.mapper.go legacy.go migration.go networks.go node.go operations.go operations_types.go patches.go profiles.go profiles.mapper.go projects.go projects.mapper.go raft.go schema.go snapshots.go snapshots.mapper.go storage_pools.go storage_volume_snapshots.go storage_volumes.go testing.go transaction.go

Constants

const (
    RaftVoter   = client.Voter
    RaftStandBy = client.StandBy
    RaftSpare   = client.Spare
)

RaftNode roles.

const (
    StoragePoolVolumeTypeContainer = iota
    StoragePoolVolumeTypeImage
    StoragePoolVolumeTypeCustom
    StoragePoolVolumeTypeVM
)

XXX: this was extracted from lxd/storage_volume_utils.go, we find a way to

factor it independently from both the db and main packages.
const (
    StoragePoolVolumeTypeNameContainer string = "container"
    StoragePoolVolumeTypeNameVM        string = "virtual-machine"
    StoragePoolVolumeTypeNameImage     string = "image"
    StoragePoolVolumeTypeNameCustom    string = "custom"
)

Leave the string type in here! This guarantees that go treats this is as a typed string constant. Removing it causes go to treat these as untyped string constants which is not what we want.

const (
    StoragePoolVolumeContentTypeFS = iota
    StoragePoolVolumeContentTypeBlock
)

Content types.

const (
    StoragePoolVolumeContentTypeNameFS    string = "filesystem"
    StoragePoolVolumeContentTypeNameBlock string = "block"
)

Content type names.

const ClusterRoleDatabase = ClusterRole("database")

ClusterRoleDatabase represents the database role in a cluster.

const DefaultOfflineThreshold = 20

DefaultOfflineThreshold is the default value for the cluster.offline_threshold configuration key, expressed in seconds.

Variables

var (
    // ErrAlreadyDefined hapens when the given entry already exists,
    // for example a container.
    ErrAlreadyDefined = fmt.Errorf("The instance/snapshot already exists")

    // ErrNoSuchObject is in the case of joins (and probably other) queries,
    // we don't get back sql.ErrNoRows when no rows are returned, even though we do
    // on selects without joins. Instead, you can use this error to
    // propagate up and generate proper 404s to the client when something
    // isn't found so we don't abuse sql.ErrNoRows any more than we
    // already do.
    ErrNoSuchObject = fmt.Errorf("No such object")
)
var ClusterRoles = map[int]ClusterRole{}

ClusterRoles maps role ids into human-readable names.

Note: the database role is currently stored directly in the raft configuration which acts as single source of truth for it. This map should only contain LXD-specific cluster roles.

var ErrSomeNodesAreBehind = fmt.Errorf("some nodes are behind this node's version")

ErrSomeNodesAreBehind is returned by OpenCluster if some of the nodes in the cluster have a schema or API version that is less recent than this node.

var ImageSourceProtocol = map[int]string{
    0:  "lxd",
    1:  "direct",
    2:  "simplestreams",
}

ImageSourceProtocol maps image source protocol codes to human-readable names.

var NodeSpecificNetworkConfig = []string{
    "bridge.external_interfaces",
}

NodeSpecificNetworkConfig lists all network config keys which are node-specific.

var StoragePoolNodeConfigKeys = []string{
    "size",
    "source",
    "volatile.initial_source",
    "zfs.pool_name",
    "lvm.thinpool",
    "lvm.vg_name",
}

StoragePoolNodeConfigKeys lists all storage pool config keys which are node-specific.

func CreateInstanceConfig Uses

func CreateInstanceConfig(tx *sql.Tx, id int, config map[string]string) error

CreateInstanceConfig inserts a new config for the instance with the given ID.

func ExpandInstanceConfig Uses

func ExpandInstanceConfig(config map[string]string, profiles []api.Profile) map[string]string

ExpandInstanceConfig expands the given instance config with the config values of the given profiles.

func ExpandInstanceDevices Uses

func ExpandInstanceDevices(devices deviceConfig.Devices, profiles []api.Profile) deviceConfig.Devices

ExpandInstanceDevices expands the given instance devices with the devices defined in the given profiles.

func NewTestDqliteServer Uses

func NewTestDqliteServer(t *testing.T) (string, driver.NodeStore, func())

NewTestDqliteServer creates a new test dqlite server.

Return the directory backing the test server and a newly created server store that can be used to connect to it.

func OpenNode Uses

func OpenNode(dir string, fresh func(*Node) error, legacyPatches map[int]*LegacyPatch) (*Node, *Dump, error)

OpenNode creates a new Node object.

The fresh hook parameter is used by the daemon to mark all known patch names as applied when a brand new database is created.

The legacyPatches parameter is used as a mean to apply the legacy V10, V11, V15, V29 and V30 non-db updates during the database upgrade sequence, to avoid any change in semantics wrt the old logic (see PR #3322).

Return the newly created Node object, and a Dump of the pre-clustering data if we've migrating to a cluster-aware version.

func ProfileToAPI Uses

func ProfileToAPI(profile *Profile) *api.Profile

ProfileToAPI is a convenience to convert a Profile db struct into an API profile struct.

func TxCommit Uses

func TxCommit(tx *sql.Tx) error

TxCommit commits the given transaction.

func UpdateInstance Uses

func UpdateInstance(tx *sql.Tx, id int, description string, architecture int, ephemeral bool,
    expiryDate time.Time) error

UpdateInstance updates the description, architecture and ephemeral flag of the instance with the given ID.

type Certificate Uses

type Certificate struct {
    ID          int
    Fingerprint string `db:"primary=yes&comparison=like"`
    Type        int
    Name        string
    Certificate string
}

Certificate is here to pass the certificates content from the database around

type CertificateFilter Uses

type CertificateFilter struct {
    Fingerprint string // Matched with LIKE
}

CertificateFilter can be used to filter results yielded by GetCertInfos

type Cluster Uses

type Cluster struct {
    // contains filtered or unexported fields
}

Cluster mediates access to LXD's data stored in the cluster dqlite database.

func ForLocalInspection Uses

func ForLocalInspection(db *sql.DB) *Cluster

ForLocalInspection is a aid for the hack in initializeDbObject, which sets the db-related Deamon attributes upfront, to be backward compatible with the legacy patches that need to interact with the database.

func ForLocalInspectionWithPreparedStmts Uses

func ForLocalInspectionWithPreparedStmts(db *sql.DB) (*Cluster, error)

ForLocalInspectionWithPreparedStmts is the same as ForLocalInspection but it also prepares the statements used in auto-generated database code.

func NewTestCluster Uses

func NewTestCluster(t *testing.T) (*Cluster, func())

NewTestCluster creates a new Cluster for testing purposes, along with a function that can be used to clean it up when done.

func OpenCluster Uses

func OpenCluster(name string, store driver.NodeStore, address, dir string, timeout time.Duration, dump *Dump, options ...driver.Option) (*Cluster, error)

OpenCluster creates a new Cluster object for interacting with the dqlite database.

- name: Basename of the database file holding the data. Typically "db.bin". - dialer: Function used to connect to the dqlite backend via gRPC SQL. - address: Network address of this node (or empty string). - dir: Base LXD database directory (e.g. /var/lib/lxd/database) - timeout: Give up trying to open the database after this amount of time. - dump: If not nil, a copy of 2.0 db data, for migrating to 3.0.

The address and api parameters will be used to determine if the cluster database matches our version, and possibly trigger a schema update. If the schema update can't be performed right now, because some nodes are still behind, an Upgrading error is returned.

func (*Cluster) AddImageToLocalNode Uses

func (c *Cluster) AddImageToLocalNode(project, fingerprint string) error

AddImageToLocalNode creates a new entry in the images_nodes table for tracking that the local node has the given image.

func (*Cluster) Begin Uses

func (c *Cluster) Begin() (*sql.Tx, error)

Begin a new transaction against the cluster database.

FIXME: legacy method.

func (*Cluster) Close Uses

func (c *Cluster) Close() error

Close the database facade.

func (*Cluster) CopyDefaultImageProfiles Uses

func (c *Cluster) CopyDefaultImageProfiles(id int, newID int) error

CopyDefaultImageProfiles copies default profiles from id to new_id.

func (*Cluster) CreateCertificate Uses

func (c *Cluster) CreateCertificate(cert Certificate) error

CreateCertificate stores a CertInfo object in the db, it will ignore the ID field from the CertInfo.

func (*Cluster) CreateImage Uses

func (c *Cluster) CreateImage(project, fp string, fname string, sz int64, public bool, autoUpdate bool, architecture string, createdAt time.Time, expiresAt time.Time, properties map[string]string, typeName string) error

CreateImage creates a new image.

func (*Cluster) CreateImageAlias Uses

func (c *Cluster) CreateImageAlias(project, name string, imageID int, desc string) error

CreateImageAlias inserts an alias ento the database.

func (*Cluster) CreateImageSource Uses

func (c *Cluster) CreateImageSource(id int, server string, protocol string, certificate string, alias string) error

CreateImageSource inserts a new image source.

func (*Cluster) CreateInstanceBackup Uses

func (c *Cluster) CreateInstanceBackup(args InstanceBackup) error

CreateInstanceBackup creates a new backup.

func (*Cluster) CreateNetwork Uses

func (c *Cluster) CreateNetwork(name, description string, config map[string]string) (int64, error)

CreateNetwork creates a new network.

func (*Cluster) CreateStoragePool Uses

func (c *Cluster) CreateStoragePool(poolName string, poolDescription string, poolDriver string, poolConfig map[string]string) (int64, error)

CreateStoragePool creates new storage pool.

func (*Cluster) CreateStoragePoolVolume Uses

func (c *Cluster) CreateStoragePoolVolume(project, volumeName, volumeDescription string, volumeType int, poolID int64, volumeConfig map[string]string, contentType int) (int64, error)

CreateStoragePoolVolume creates a new storage volume attached to a given storage pool.

func (*Cluster) CreateStorageVolumeSnapshot Uses

func (c *Cluster) CreateStorageVolumeSnapshot(project, volumeName, volumeDescription string, volumeType int, poolID int64, volumeConfig map[string]string, expiryDate time.Time) (int64, error)

CreateStorageVolumeSnapshot creates a new storage volume snapshot attached to a given storage pool.

func (*Cluster) DB Uses

func (c *Cluster) DB() *sql.DB

DB returns the low level database handle to the cluster database.

FIXME: this is used for compatibility with some legacy code, and should be

dropped once there are no call sites left.

func (*Cluster) DeleteCertificate Uses

func (c *Cluster) DeleteCertificate(fingerprint string) error

DeleteCertificate deletes a certificate from the db.

func (*Cluster) DeleteImage Uses

func (c *Cluster) DeleteImage(id int) error

DeleteImage deletes the image with the given ID.

func (*Cluster) DeleteImageAlias Uses

func (c *Cluster) DeleteImageAlias(project, name string) error

DeleteImageAlias deletes the alias with the given name.

func (*Cluster) DeleteInstance Uses

func (c *Cluster) DeleteInstance(project, name string) error

DeleteInstance removes the instance with the given name from the database.

func (*Cluster) DeleteInstanceBackup Uses

func (c *Cluster) DeleteInstanceBackup(name string) error

DeleteInstanceBackup removes the instance backup with the given name from the database.

func (*Cluster) DeleteInstanceConfigKey Uses

func (c *Cluster) DeleteInstanceConfigKey(id int, key string) error

DeleteInstanceConfigKey removes the given key from the config of the instance with the given ID.

func (*Cluster) DeleteNetwork Uses

func (c *Cluster) DeleteNetwork(name string) error

DeleteNetwork deletes the network with the given name.

func (*Cluster) EnterExclusive Uses

func (c *Cluster) EnterExclusive() error

EnterExclusive acquires a lock on the cluster db, so any successive call to Transaction will block until ExitExclusive has been called.

func (*Cluster) ExitExclusive Uses

func (c *Cluster) ExitExclusive(f func(*ClusterTx) error) error

ExitExclusive runs the given transaction and then releases the lock acquired with EnterExclusive.

func (*Cluster) FillMissingStoragePoolDriver Uses

func (c *Cluster) FillMissingStoragePoolDriver() error

FillMissingStoragePoolDriver fills the driver of all storage pools without a driver, setting it to 'zfs'.

func (*Cluster) GetCachedImageSourceFingerprint Uses

func (c *Cluster) GetCachedImageSourceFingerprint(server string, protocol string, alias string, typeName string, architecture int) (string, error)

GetCachedImageSourceFingerprint tries to find a source entry of a locally cached image that matches the given remote details (server, protocol and alias). Return the fingerprint linked to the matching entry, if any.

func (*Cluster) GetCertificate Uses

func (c *Cluster) GetCertificate(fingerprint string) (cert *Certificate, err error)

GetCertificate gets an CertBaseInfo object from the database. The argument fingerprint will be queried with a LIKE query, means you can pass a shortform and will get the full fingerprint. There can never be more than one certificate with a given fingerprint, as it is enforced by a UNIQUE constraint in the schema.

func (*Cluster) GetExpiredImages Uses

func (c *Cluster) GetExpiredImages(expiry int64) ([]ExpiredImage, error)

GetExpiredImages returns the names and project name of all images that have expired since the given time.

func (*Cluster) GetExpiredInstanceBackups Uses

func (c *Cluster) GetExpiredInstanceBackups() ([]InstanceBackup, error)

GetExpiredInstanceBackups returns a list of expired instance backups.

func (*Cluster) GetExpiredStorageVolumeSnapshots Uses

func (c *Cluster) GetExpiredStorageVolumeSnapshots() ([]StorageVolumeArgs, error)

GetExpiredStorageVolumeSnapshots returns a list of expired volume snapshots.

func (*Cluster) GetImage Uses

func (c *Cluster) GetImage(project, fingerprint string, public bool) (int, *api.Image, error)

GetImage gets an Image object from the database.

The fingerprint argument will be queried with a LIKE query, means you can pass a shortform and will get the full fingerprint. However in case the shortform matches more than one image, an error will be returned.

func (*Cluster) GetImageAlias Uses

func (c *Cluster) GetImageAlias(project, name string, isTrustedClient bool) (int, api.ImageAliasesEntry, error)

GetImageAlias returns the alias with the given name in the given project.

func (*Cluster) GetImageAliases Uses

func (c *Cluster) GetImageAliases(project string) ([]string, error)

GetImageAliases returns the names of the aliases of all images.

func (*Cluster) GetImageFromAnyProject Uses

func (c *Cluster) GetImageFromAnyProject(fingerprint string) (int, *api.Image, error)

GetImageFromAnyProject returns an image matching the given fingerprint, if it exists in any project.

func (*Cluster) GetImagesFingerprints Uses

func (c *Cluster) GetImagesFingerprints(project string, public bool) ([]string, error)

GetImagesFingerprints returns the names of all images (optionally only the public ones).

func (*Cluster) GetImagesOnLocalNode Uses

func (c *Cluster) GetImagesOnLocalNode() (map[string][]string, error)

GetImagesOnLocalNode returns all images that the local LXD node has.

func (*Cluster) GetImagesOnNode Uses

func (c *Cluster) GetImagesOnNode(id int64) (map[string][]string, error)

GetImagesOnNode returns all images that the node with the given id has.

func (*Cluster) GetInstanceBackup Uses

func (c *Cluster) GetInstanceBackup(project, name string) (InstanceBackup, error)

GetInstanceBackup returns the backup with the given name.

func (*Cluster) GetInstanceBackups Uses

func (c *Cluster) GetInstanceBackups(project, name string) ([]string, error)

GetInstanceBackups returns the names of all backups of the instance with the given name.

func (*Cluster) GetInstanceConfig Uses

func (c *Cluster) GetInstanceConfig(id int, key string) (string, error)

GetInstanceConfig returns the value of the given key in the configuration of the instance with the given ID.

func (*Cluster) GetInstanceID Uses

func (c *Cluster) GetInstanceID(project, name string) (int, error)

GetInstanceID returns the ID of the instance with the given name.

func (*Cluster) GetInstancePool Uses

func (c *Cluster) GetInstancePool(project, instanceName string) (string, error)

GetInstancePool returns the storage pool of a given instance.

This is a non-transactional variant of ClusterTx.GetInstancePool().

func (*Cluster) GetInstanceProjectAndName Uses

func (c *Cluster) GetInstanceProjectAndName(id int) (string, string, error)

GetInstanceProjectAndName returns the project and the name of the instance with the given ID.

func (*Cluster) GetInstanceSnapshotID Uses

func (c *Cluster) GetInstanceSnapshotID(project, instance, name string) (int, error)

GetInstanceSnapshotID returns the ID of the snapshot with the given name.

func (*Cluster) GetInstanceSnapshotsNames Uses

func (c *Cluster) GetInstanceSnapshotsNames(project, name string) ([]string, error)

GetInstanceSnapshotsNames returns the names of all snapshots of the instance in the given project with the given name.

func (*Cluster) GetInstancesWithProfile Uses

func (c *Cluster) GetInstancesWithProfile(project, profile string) (map[string][]string, error)

GetInstancesWithProfile gets the names of the instance associated with the profile with the given name in the given project.

func (*Cluster) GetLocalStoragePoolVolume Uses

func (c *Cluster) GetLocalStoragePoolVolume(project, volumeName string, volumeType int, poolID int64) (int64, *api.StorageVolume, error)

GetLocalStoragePoolVolume gets a single storage volume attached to a given storage pool of a given type, on the current node in the given project.

func (*Cluster) GetLocalStoragePoolVolumeSnapshotsWithType Uses

func (c *Cluster) GetLocalStoragePoolVolumeSnapshotsWithType(projectName string, volumeName string, volumeType int, poolID int64) ([]StorageVolumeArgs, error)

GetLocalStoragePoolVolumeSnapshotsWithType get all snapshots of a storage volume attached to a given storage pool of a given volume type, on the local node. Returns snapshots slice ordered by when they were created, oldest first.

func (*Cluster) GetLocalStoragePoolVolumes Uses

func (c *Cluster) GetLocalStoragePoolVolumes(project string, poolID int64, volumeTypes []int) ([]*api.StorageVolume, error)

GetLocalStoragePoolVolumes returns all storage volumes attached to a given storage pool on the current node.

func (*Cluster) GetLocalStoragePoolVolumesWithType Uses

func (c *Cluster) GetLocalStoragePoolVolumesWithType(projectName string, volumeType int, poolID int64) ([]string, error)

GetLocalStoragePoolVolumesWithType returns all storage volumes attached to a given storage pool of a given volume type, on the current node.

func (*Cluster) GetNetwork Uses

func (c *Cluster) GetNetwork(name string) (int64, *api.Network, error)

GetNetwork returns the network with the given name.

The network must be in the created stated, not pending.

func (*Cluster) GetNetworkInAnyState Uses

func (c *Cluster) GetNetworkInAnyState(name string) (int64, *api.Network, error)

GetNetworkInAnyState returns the network with the given name.

The network can be in any state.

func (*Cluster) GetNetworkWithInterface Uses

func (c *Cluster) GetNetworkWithInterface(devName string) (int64, *api.Network, error)

GetNetworkWithInterface returns the network associated with the interface with the given name.

func (*Cluster) GetNetworks Uses

func (c *Cluster) GetNetworks() ([]string, error)

GetNetworks returns the names of existing networks.

func (*Cluster) GetNextInstanceSnapshotIndex Uses

func (c *Cluster) GetNextInstanceSnapshotIndex(project string, name string, pattern string) int

GetNextInstanceSnapshotIndex returns the index that the next snapshot of the instance with the given name and pattern should have.

func (*Cluster) GetNextStorageVolumeSnapshotIndex Uses

func (c *Cluster) GetNextStorageVolumeSnapshotIndex(pool, name string, typ int, pattern string) int

GetNextStorageVolumeSnapshotIndex returns the index of the next snapshot of the storage volume with the given name should have.

Note, the code below doesn't deal with snapshots of snapshots. To do that, we'll need to weed out based on # slashes in names

func (*Cluster) GetNodeID Uses

func (c *Cluster) GetNodeID() int64

GetNodeID returns the current nodeID (0 if not set)

func (*Cluster) GetNodesWithImage Uses

func (c *Cluster) GetNodesWithImage(fingerprint string) ([]string, error)

GetNodesWithImage returns the addresses of online nodes which already have the image.

func (*Cluster) GetNodesWithoutImage Uses

func (c *Cluster) GetNodesWithoutImage(fingerprint string) ([]string, error)

GetNodesWithoutImage returns the addresses of online nodes which don't have the image.

func (*Cluster) GetNonPendingNetworks Uses

func (c *Cluster) GetNonPendingNetworks() ([]string, error)

GetNonPendingNetworks returns the names of all networks that are not pending.

func (*Cluster) GetNonPendingStoragePoolNames Uses

func (c *Cluster) GetNonPendingStoragePoolNames() ([]string, error)

GetNonPendingStoragePoolNames returns the names of all storage pools that are not pending.

func (*Cluster) GetPoolNamesFromIDs Uses

func (c *Cluster) GetPoolNamesFromIDs(poolIDs []int64) ([]string, error)

GetPoolNamesFromIDs get the names of the storage pools with the given IDs.

func (*Cluster) GetPoolsWithImage Uses

func (c *Cluster) GetPoolsWithImage(imageFingerprint string) ([]int64, error)

GetPoolsWithImage get the IDs of all storage pools on which a given image exists.

func (*Cluster) GetProfile Uses

func (c *Cluster) GetProfile(project, name string) (int64, *api.Profile, error)

GetProfile returns the profile with the given name.

func (*Cluster) GetProfileNames Uses

func (c *Cluster) GetProfileNames(project string) ([]string, error)

GetProfileNames returns the names of all profiles in the given project.

func (*Cluster) GetProfiles Uses

func (c *Cluster) GetProfiles(project string, names []string) ([]api.Profile, error)

GetProfiles returns the profiles with the given names in the given project.

func (*Cluster) GetStoragePool Uses

func (c *Cluster) GetStoragePool(poolName string) (int64, *api.StoragePool, error)

GetStoragePool returns a single storage pool.

The pool must be in the created stated, not pending.

func (*Cluster) GetStoragePoolDrivers Uses

func (c *Cluster) GetStoragePoolDrivers() ([]string, error)

GetStoragePoolDrivers returns the names of all storage drivers currently being used by at least one storage pool.

func (*Cluster) GetStoragePoolID Uses

func (c *Cluster) GetStoragePoolID(poolName string) (int64, error)

GetStoragePoolID returns the id of a single storage pool.

func (*Cluster) GetStoragePoolInAnyState Uses

func (c *Cluster) GetStoragePoolInAnyState(name string) (int64, *api.StoragePool, error)

GetStoragePoolInAnyState returns the storage pool with the given name.

The pool can be in any state.

func (*Cluster) GetStoragePoolNames Uses

func (c *Cluster) GetStoragePoolNames() ([]string, error)

GetStoragePoolNames returns the names of all storage pools.

func (*Cluster) GetStoragePoolNodeVolumeID Uses

func (c *Cluster) GetStoragePoolNodeVolumeID(projectName string, volumeName string, volumeType int, poolID int64) (int64, error)

GetStoragePoolNodeVolumeID gets the ID of a storage volume on a given storage pool of a given storage volume type and project, on the current node.

func (*Cluster) GetStoragePoolVolumes Uses

func (c *Cluster) GetStoragePoolVolumes(project string, poolID int64, volumeTypes []int) ([]*api.StorageVolume, error)

GetStoragePoolVolumes returns all storage volumes attached to a given storage pool on any node.

func (*Cluster) GetStoragePoolVolumesNames Uses

func (c *Cluster) GetStoragePoolVolumesNames(poolID int64) ([]string, error)

GetStoragePoolVolumesNames gets the names of all storage volumes attached to a given storage pool.

func (*Cluster) GetStoragePoolVolumesWithType Uses

func (c *Cluster) GetStoragePoolVolumesWithType(volumeType int) ([]StorageVolumeArgs, error)

GetStoragePoolVolumesWithType return a list of all volumes of the given type.

func (*Cluster) GetStorageVolumeDescription Uses

func (c *Cluster) GetStorageVolumeDescription(volumeID int64) (string, error)

GetStorageVolumeDescription gets the description of a storage volume.

func (*Cluster) GetStorageVolumeSnapshotExpiry Uses

func (c *Cluster) GetStorageVolumeSnapshotExpiry(volumeID int64) (time.Time, error)

GetStorageVolumeSnapshotExpiry gets the expiry date of a storage volume snapshot.

func (*Cluster) ImageExists Uses

func (c *Cluster) ImageExists(project string, fingerprint string) (bool, error)

ImageExists returns whether an image with the given fingerprint exists.

func (*Cluster) ImageIsReferencedByOtherProjects Uses

func (c *Cluster) ImageIsReferencedByOtherProjects(project string, fingerprint string) (bool, error)

ImageIsReferencedByOtherProjects returns true if the image with the given fingerprint is referenced by projects other than the given one.

func (*Cluster) InitImageLastUseDate Uses

func (c *Cluster) InitImageLastUseDate(fingerprint string) error

InitImageLastUseDate inits the last_use_date field of the image with the given fingerprint.

func (*Cluster) Kill Uses

func (c *Cluster) Kill()

Kill should be called upon shutdown, it will prevent retrying failed database queries.

func (*Cluster) LegacyContainersList Uses

func (c *Cluster) LegacyContainersList() ([]string, error)

LegacyContainersList returns the names of all the containers.

NOTE: this is a pre-projects legacy API that is used only by patches. Don't use it for new code.

func (*Cluster) LegacySnapshotsList Uses

func (c *Cluster) LegacySnapshotsList() ([]string, error)

LegacySnapshotsList returns the names of all the snapshots.

NOTE: this is a pre-projects legacy API that is used only by patches. Don't use it for new code.

func (*Cluster) LocateImage Uses

func (c *Cluster) LocateImage(fingerprint string) (string, error)

LocateImage returns the address of an online node that has a local copy of the given image, or an empty string if the image is already available on this node.

If the image is not available on any online node, an error is returned.

func (*Cluster) MoveImageAlias Uses

func (c *Cluster) MoveImageAlias(source int, destination int) error

MoveImageAlias changes the image ID associated with an alias.

func (*Cluster) NodeID Uses

func (c *Cluster) NodeID(id int64)

NodeID sets the the node NodeID associated with this cluster instance. It's used for backward-compatibility of all db-related APIs that were written before clustering and don't accept a node NodeID, so in those cases we automatically use this value as implicit node NodeID.

func (*Cluster) RemoveStoragePool Uses

func (c *Cluster) RemoveStoragePool(poolName string) (*api.StoragePool, error)

RemoveStoragePool deletes storage pool.

func (*Cluster) RemoveStoragePoolVolume Uses

func (c *Cluster) RemoveStoragePoolVolume(project, volumeName string, volumeType int, poolID int64) error

RemoveStoragePoolVolume deletes the storage volume attached to a given storage pool.

func (*Cluster) RemoveStorageVolumeImages Uses

func (c *Cluster) RemoveStorageVolumeImages(fingerprints []string) error

RemoveStorageVolumeImages removes the volumes associated with the images with the given fingerprints.

func (*Cluster) RemoveUnreferencedProfiles Uses

func (c *Cluster) RemoveUnreferencedProfiles() error

RemoveUnreferencedProfiles removes unreferenced profiles.

func (*Cluster) RenameCertificate Uses

func (c *Cluster) RenameCertificate(fingerprint string, name string) error

RenameCertificate updates a certificate's name.

func (*Cluster) RenameImageAlias Uses

func (c *Cluster) RenameImageAlias(id int, name string) error

RenameImageAlias renames the alias with the given ID.

func (*Cluster) RenameInstanceBackup Uses

func (c *Cluster) RenameInstanceBackup(oldName, newName string) error

RenameInstanceBackup renames an instance backup from the given current name to the new one.

func (*Cluster) RenameNetwork Uses

func (c *Cluster) RenameNetwork(oldName string, newName string) error

RenameNetwork renames a network.

func (*Cluster) RenameStoragePoolVolume Uses

func (c *Cluster) RenameStoragePoolVolume(project, oldVolumeName string, newVolumeName string, volumeType int, poolID int64) error

RenameStoragePoolVolume renames the storage volume attached to a given storage pool.

func (*Cluster) ResetInstancesPowerState Uses

func (c *Cluster) ResetInstancesPowerState() error

ResetInstancesPowerState resets the power state of all instances.

func (*Cluster) StorageVolumeIsAvailable Uses

func (c *Cluster) StorageVolumeIsAvailable(pool, volume string) (bool, error)

StorageVolumeIsAvailable checks that if a custom volume available for being attached.

Always return true for non-Ceph volumes.

For Ceph volumes, return true if the volume is either not attached to any other container, or attached to containers on this node.

func (*Cluster) Transaction Uses

func (c *Cluster) Transaction(f func(*ClusterTx) error) error

Transaction creates a new ClusterTx object and transactionally executes the cluster database interactions invoked by the given function. If the function returns no error, all database changes are committed to the cluster database database, otherwise they are rolled back.

If EnterExclusive has been called before, calling Transaction will block until ExitExclusive has been called as well to release the lock.

func (*Cluster) UpdateImage Uses

func (c *Cluster) UpdateImage(id int, fname string, sz int64, public bool, autoUpdate bool, architecture string, createdAt time.Time, expiresAt time.Time, properties map[string]string, project string, profileIds []int64) error

UpdateImage updates the image with the given ID.

func (*Cluster) UpdateImageAlias Uses

func (c *Cluster) UpdateImageAlias(id int, imageID int, desc string) error

UpdateImageAlias updates the alias with the given ID.

func (*Cluster) UpdateImageLastUseDate Uses

func (c *Cluster) UpdateImageLastUseDate(fingerprint string, date time.Time) error

UpdateImageLastUseDate updates the last_use_date field of the image with the given fingerprint.

func (*Cluster) UpdateImageUploadDate Uses

func (c *Cluster) UpdateImageUploadDate(id int, uploadedAt time.Time) error

UpdateImageUploadDate updates the upload_date column and an image row.

func (*Cluster) UpdateInstancePowerState Uses

func (c *Cluster) UpdateInstancePowerState(id int, state string) error

UpdateInstancePowerState sets the the power state of the instance with the given ID.

func (*Cluster) UpdateInstanceSnapshotCreationDate Uses

func (c *Cluster) UpdateInstanceSnapshotCreationDate(instanceID int, date time.Time) error

UpdateInstanceSnapshotCreationDate updates the creation_date field of the instance snapshot with ID.

func (*Cluster) UpdateInstanceStatefulFlag Uses

func (c *Cluster) UpdateInstanceStatefulFlag(id int, stateful bool) error

UpdateInstanceStatefulFlag toggles the stateful flag of the instance with the given ID.

func (*Cluster) UpdateNetwork Uses

func (c *Cluster) UpdateNetwork(name, description string, config map[string]string) error

UpdateNetwork updates the network with the given name.

func (*Cluster) UpdateStoragePool Uses

func (c *Cluster) UpdateStoragePool(poolName, description string, poolConfig map[string]string) error

UpdateStoragePool updates a storage pool.

func (*Cluster) UpdateStoragePoolVolume Uses

func (c *Cluster) UpdateStoragePoolVolume(project, volumeName string, volumeType int, poolID int64, volumeDescription string, volumeConfig map[string]string) error

UpdateStoragePoolVolume updates the storage volume attached to a given storage pool.

func (*Cluster) UpdateStorageVolumeSnapshot Uses

func (c *Cluster) UpdateStorageVolumeSnapshot(project, volumeName string, volumeType int, poolID int64, volumeDescription string, volumeConfig map[string]string, expiryDate time.Time) error

UpdateStorageVolumeSnapshot updates the storage volume snapshot attached to a given storage pool.

func (*Cluster) UpgradeStorageVolumConfigToLVMThinPoolNameKey Uses

func (c *Cluster) UpgradeStorageVolumConfigToLVMThinPoolNameKey() error

UpgradeStorageVolumConfigToLVMThinPoolNameKey upgrades the config keys of LVM volumes.

type ClusterRole Uses

type ClusterRole string

ClusterRole represents the role of a member in a cluster.

type ClusterTx Uses

type ClusterTx struct {
    // contains filtered or unexported fields
}

ClusterTx models a single interaction with a LXD cluster database.

It wraps low-level sql.Tx objects and offers a high-level API to fetch and update data.

func NewTestClusterTx Uses

func NewTestClusterTx(t *testing.T) (*ClusterTx, func())

NewTestClusterTx returns a fresh ClusterTx object, along with a function that can be called to cleanup state when done with it.

func (*ClusterTx) CertificateExists Uses

func (c *ClusterTx) CertificateExists(fingerprint string) (bool, error)

CertificateExists checks if a certificate with the given key exists.

func (*ClusterTx) ClearNode Uses

func (c *ClusterTx) ClearNode(id int64) error

ClearNode removes any instance or image associated with this node.

func (*ClusterTx) Config Uses

func (c *ClusterTx) Config() (map[string]string, error)

Config fetches all LXD cluster config keys.

func (*ClusterTx) CreateCertificate Uses

func (c *ClusterTx) CreateCertificate(object Certificate) (int64, error)

CreateCertificate adds a new certificate to the database.

func (*ClusterTx) CreateInstance Uses

func (c *ClusterTx) CreateInstance(object Instance) (int64, error)

CreateInstance adds a new instance to the database.

func (*ClusterTx) CreateInstanceConfig Uses

func (c *ClusterTx) CreateInstanceConfig(id int, config map[string]string) error

CreateInstanceConfig inserts a new config for the container with the given ID.

func (*ClusterTx) CreateInstanceSnapshot Uses

func (c *ClusterTx) CreateInstanceSnapshot(object InstanceSnapshot) (int64, error)

CreateInstanceSnapshot adds a new instance_snapshot to the database.

func (*ClusterTx) CreateNetworkConfig Uses

func (c *ClusterTx) CreateNetworkConfig(networkID, nodeID int64, config map[string]string) error

CreateNetworkConfig adds a new entry in the networks_config table

func (*ClusterTx) CreateNode Uses

func (c *ClusterTx) CreateNode(name string, address string) (int64, error)

CreateNode adds a node to the current list of LXD nodes that are part of the cluster. The node's architecture will be the architecture of the machine the method is being run on. It returns the ID of the newly inserted row.

func (*ClusterTx) CreateNodeRole Uses

func (c *ClusterTx) CreateNodeRole(id int64, role ClusterRole) error

CreateNodeRole adds a role to the node.

func (*ClusterTx) CreateNodeWithArch Uses

func (c *ClusterTx) CreateNodeWithArch(name string, address string, arch int) (int64, error)

CreateNodeWithArch is the same as NodeAdd, but lets setting the node architecture explicitly.

func (*ClusterTx) CreateOperation Uses

func (c *ClusterTx) CreateOperation(project, uuid string, typ OperationType) (int64, error)

CreateOperation adds a new operations to the table.

func (*ClusterTx) CreatePendingNetwork Uses

func (c *ClusterTx) CreatePendingNetwork(node, name string, conf map[string]string) error

CreatePendingNetwork creates a new pending network on the node with the given name.

func (*ClusterTx) CreatePendingStoragePool Uses

func (c *ClusterTx) CreatePendingStoragePool(node, name, driver string, conf map[string]string) error

CreatePendingStoragePool creates a new pending storage pool on the node with the given name.

func (*ClusterTx) CreateProfile Uses

func (c *ClusterTx) CreateProfile(object Profile) (int64, error)

CreateProfile adds a new profile to the database.

func (*ClusterTx) CreateProject Uses

func (c *ClusterTx) CreateProject(object api.ProjectsPost) (int64, error)

CreateProject adds a new project to the database.

func (*ClusterTx) CreateStoragePoolConfig Uses

func (c *ClusterTx) CreateStoragePoolConfig(poolID, nodeID int64, config map[string]string) error

CreateStoragePoolConfig adds a new entry in the storage_pools_config table

func (*ClusterTx) DeleteCertificate Uses

func (c *ClusterTx) DeleteCertificate(fingerprint string) error

DeleteCertificate deletes the certificate matching the given key parameters.

func (*ClusterTx) DeleteInstance Uses

func (c *ClusterTx) DeleteInstance(project string, name string) error

DeleteInstance deletes the instance matching the given key parameters.

func (*ClusterTx) DeleteInstanceConfigKey Uses

func (c *ClusterTx) DeleteInstanceConfigKey(id int64, key string) error

DeleteInstanceConfigKey removes the given key from the config of the instance with the given ID.

func (*ClusterTx) DeleteInstanceSnapshot Uses

func (c *ClusterTx) DeleteInstanceSnapshot(project string, instance string, name string) error

DeleteInstanceSnapshot deletes the instance_snapshot matching the given key parameters.

func (*ClusterTx) DeleteProfile Uses

func (c *ClusterTx) DeleteProfile(project string, name string) error

DeleteProfile deletes the profile matching the given key parameters.

func (*ClusterTx) DeleteProject Uses

func (c *ClusterTx) DeleteProject(name string) error

DeleteProject deletes the project matching the given key parameters.

func (*ClusterTx) GetCertificate Uses

func (c *ClusterTx) GetCertificate(fingerprint string) (*Certificate, error)

GetCertificate returns the certificate with the given key.

func (*ClusterTx) GetCertificateID Uses

func (c *ClusterTx) GetCertificateID(fingerprint string) (int64, error)

GetCertificateID return the ID of the certificate with the given key.

func (*ClusterTx) GetCertificates Uses

func (c *ClusterTx) GetCertificates(filter CertificateFilter) ([]Certificate, error)

GetCertificates returns all available certificates.

func (*ClusterTx) GetFailureDomainsNames Uses

func (c *ClusterTx) GetFailureDomainsNames() (map[uint64]string, error)

GetFailureDomainsNames return a map associating failure domain IDs to their names.

func (*ClusterTx) GetImage Uses

func (c *ClusterTx) GetImage(project string, fingerprint string) (*Image, error)

GetImage returns the image with the given key.

func (*ClusterTx) GetImageSource Uses

func (c *ClusterTx) GetImageSource(imageID int) (int, api.ImageSource, error)

GetImageSource returns the image source with the given ID.

func (*ClusterTx) GetImages Uses

func (c *ClusterTx) GetImages(filter ImageFilter) ([]Image, error)

GetImages returns all available images.

func (*ClusterTx) GetInstance Uses

func (c *ClusterTx) GetInstance(project string, name string) (*Instance, error)

GetInstance returns the instance with the given key.

func (*ClusterTx) GetInstanceID Uses

func (c *ClusterTx) GetInstanceID(project string, name string) (int64, error)

GetInstanceID return the ID of the instance with the given key.

func (*ClusterTx) GetInstanceNames Uses

func (c *ClusterTx) GetInstanceNames(project string) ([]string, error)

GetInstanceNames returns the names of all containers the given project.

func (*ClusterTx) GetInstanceNamesByNodeAddress Uses

func (c *ClusterTx) GetInstanceNamesByNodeAddress(project string, instanceType instancetype.Type) (map[string][]string, error)

GetInstanceNamesByNodeAddress returns the names of all containers grouped by cluster node address.

The node address of containers running on the local node is set to the empty string, to distinguish it from remote nodes.

Containers whose node is down are addeded to the special address "0.0.0.0".

func (*ClusterTx) GetInstancePool Uses

func (c *ClusterTx) GetInstancePool(project, instanceName string) (string, error)

GetInstancePool returns the storage pool of a given instance.

func (*ClusterTx) GetInstanceSnapshot Uses

func (c *ClusterTx) GetInstanceSnapshot(project string, instance string, name string) (*InstanceSnapshot, error)

GetInstanceSnapshot returns the instance_snapshot with the given key.

func (*ClusterTx) GetInstanceSnapshotID Uses

func (c *ClusterTx) GetInstanceSnapshotID(project string, instance string, name string) (int64, error)

GetInstanceSnapshotID return the ID of the instance_snapshot with the given key.

func (*ClusterTx) GetInstanceSnapshots Uses

func (c *ClusterTx) GetInstanceSnapshots(filter InstanceSnapshotFilter) ([]InstanceSnapshot, error)

GetInstanceSnapshots returns all available instance_snapshots.

func (*ClusterTx) GetInstanceSnapshotsWithName Uses

func (c *ClusterTx) GetInstanceSnapshotsWithName(project string, name string) ([]Instance, error)

GetInstanceSnapshotsWithName returns all snapshots of a given instance.

func (*ClusterTx) GetInstanceToNodeMap Uses

func (c *ClusterTx) GetInstanceToNodeMap(project string, instanceType instancetype.Type) (map[string]string, error)

GetInstanceToNodeMap returns a map associating the name of each instance in the given project to the name of the node hosting the instance.

func (*ClusterTx) GetInstances Uses

func (c *ClusterTx) GetInstances(filter InstanceFilter) ([]Instance, error)

GetInstances returns all available instances.

func (*ClusterTx) GetLocalImagesFingerprints Uses

func (c *ClusterTx) GetLocalImagesFingerprints() ([]string, error)

GetLocalImagesFingerprints returns the fingerprints of all local images.

func (*ClusterTx) GetLocalInstancesInProject Uses

func (c *ClusterTx) GetLocalInstancesInProject(project string, instanceType instancetype.Type) ([]Instance, error)

GetLocalInstancesInProject retuurns all instances of the given type on the local node within the given project.

func (*ClusterTx) GetLocalNodeAddress Uses

func (c *ClusterTx) GetLocalNodeAddress() (string, error)

GetLocalNodeAddress returns the address of the node this method is invoked on.

func (*ClusterTx) GetLocalNodeName Uses

func (c *ClusterTx) GetLocalNodeName() (string, error)

GetLocalNodeName returns the name of the node this method is invoked on.

func (*ClusterTx) GetLocalOperations Uses

func (c *ClusterTx) GetLocalOperations() ([]Operation, error)

GetLocalOperations returns all operations associated with this node.

func (*ClusterTx) GetLocalOperationsUUIDs Uses

func (c *ClusterTx) GetLocalOperationsUUIDs() ([]string, error)

GetLocalOperationsUUIDs returns the UUIDs of all operations associated with this node.

func (*ClusterTx) GetNetworkID Uses

func (c *ClusterTx) GetNetworkID(name string) (int64, error)

GetNetworkID returns the ID of the network with the given name.

func (*ClusterTx) GetNetworksLocalConfig Uses

func (c *ClusterTx) GetNetworksLocalConfig() (map[string]map[string]string, error)

GetNetworksLocalConfig returns a map associating each network name to its node-specific config values on the local node (i.e. the ones where node_id equals the ID of the local node).

func (*ClusterTx) GetNodeAddressOfInstance Uses

func (c *ClusterTx) GetNodeAddressOfInstance(project string, name string, instanceType instancetype.Type) (string, error)

GetNodeAddressOfInstance returns the address of the node hosting the instance with the given name in the given project.

It returns the empty string if the container is hosted on this node.

func (*ClusterTx) GetNodeByAddress Uses

func (c *ClusterTx) GetNodeByAddress(address string) (NodeInfo, error)

GetNodeByAddress returns the node with the given network address.

func (*ClusterTx) GetNodeByName Uses

func (c *ClusterTx) GetNodeByName(name string) (NodeInfo, error)

GetNodeByName returns the node with the given name.

func (*ClusterTx) GetNodeFailureDomain Uses

func (c *ClusterTx) GetNodeFailureDomain(id int64) (string, error)

GetNodeFailureDomain returns the failure domain associated with the node with the given ID.

func (*ClusterTx) GetNodeOfflineThreshold Uses

func (c *ClusterTx) GetNodeOfflineThreshold() (time.Duration, error)

GetNodeOfflineThreshold returns the amount of time that needs to elapse after which a series of unsuccessful heartbeat will make the node be considered offline.

func (*ClusterTx) GetNodeWithLeastInstances Uses

func (c *ClusterTx) GetNodeWithLeastInstances(archs []int) (string, error)

GetNodeWithLeastInstances returns the name of the non-offline node with with the least number of containers (either already created or being created with an operation). If archs is not empty, then return only nodes with an architecture in that list.

func (*ClusterTx) GetNodes Uses

func (c *ClusterTx) GetNodes() ([]NodeInfo, error)

GetNodes returns all LXD nodes part of the cluster.

If this LXD instance is not clustered, a list with a single node whose address is 0.0.0.0 is returned.

func (*ClusterTx) GetNodesCount Uses

func (c *ClusterTx) GetNodesCount() (int, error)

GetNodesCount returns the number of nodes in the LXD cluster.

Since there's always at least one node row, even when not-clustered, the return value is greater than zero

func (*ClusterTx) GetNodesFailureDomains Uses

func (c *ClusterTx) GetNodesFailureDomains() (map[string]uint64, error)

GetNodesFailureDomains returns a map associating each node address with its failure domain code.

func (*ClusterTx) GetNodesWithRunningOperations Uses

func (c *ClusterTx) GetNodesWithRunningOperations(project string) ([]string, error)

GetNodesWithRunningOperations returns a list of nodes that have running operations

func (*ClusterTx) GetNonPendingNetworkIDs Uses

func (c *ClusterTx) GetNonPendingNetworkIDs() (map[string]int64, error)

GetNonPendingNetworkIDs returns a map associating each network name to its ID.

Pending networks are skipped.

func (*ClusterTx) GetNonPendingStoragePoolsNamesToIDs Uses

func (c *ClusterTx) GetNonPendingStoragePoolsNamesToIDs() (map[string]int64, error)

GetNonPendingStoragePoolsNamesToIDs returns a map associating each storage pool name to its ID.

Pending storage pools are skipped.

func (*ClusterTx) GetOperationByUUID Uses

func (c *ClusterTx) GetOperationByUUID(uuid string) (Operation, error)

GetOperationByUUID returns the operation with the given UUID.

func (*ClusterTx) GetPendingNodeByAddress Uses

func (c *ClusterTx) GetPendingNodeByAddress(address string) (NodeInfo, error)

GetPendingNodeByAddress returns the pending node with the given network address.

func (*ClusterTx) GetProfile Uses

func (c *ClusterTx) GetProfile(project string, name string) (*Profile, error)

GetProfile returns the profile with the given key.

func (*ClusterTx) GetProfileID Uses

func (c *ClusterTx) GetProfileID(project string, name string) (int64, error)

GetProfileID return the ID of the profile with the given key.

func (*ClusterTx) GetProfileURIs Uses

func (c *ClusterTx) GetProfileURIs(filter ProfileFilter) ([]string, error)

GetProfileURIs returns all available profile URIs.

func (*ClusterTx) GetProfiles Uses

func (c *ClusterTx) GetProfiles(filter ProfileFilter) ([]Profile, error)

GetProfiles returns all available profiles.

func (*ClusterTx) GetProject Uses

func (c *ClusterTx) GetProject(name string) (*api.Project, error)

GetProject returns the project with the given key.

func (*ClusterTx) GetProjectID Uses

func (c *ClusterTx) GetProjectID(name string) (int64, error)

GetProjectID return the ID of the project with the given key.

func (*ClusterTx) GetProjectIDsToNames Uses

func (c *ClusterTx) GetProjectIDsToNames() (map[int64]string, error)

GetProjectIDsToNames returns a map associating each project ID to its project name.

func (*ClusterTx) GetProjectNames Uses

func (c *ClusterTx) GetProjectNames() ([]string, error)

GetProjectNames returns the names of all available projects.

func (*ClusterTx) GetProjectURIs Uses

func (c *ClusterTx) GetProjectURIs(filter ProjectFilter) ([]string, error)

GetProjectURIs returns all available project URIs.

func (*ClusterTx) GetProjects Uses

func (c *ClusterTx) GetProjects(filter ProjectFilter) ([]api.Project, error)

GetProjects returns all available projects.

func (*ClusterTx) GetStoragePoolDriver Uses

func (c *ClusterTx) GetStoragePoolDriver(id int64) (string, error)

GetStoragePoolDriver returns the driver of the pool with the given ID.

func (*ClusterTx) GetStoragePoolID Uses

func (c *ClusterTx) GetStoragePoolID(name string) (int64, error)

GetStoragePoolID returns the ID of the pool with the given name.

func (*ClusterTx) GetStoragePoolNodeConfigs Uses

func (c *ClusterTx) GetStoragePoolNodeConfigs(poolID int64) (map[string]map[string]string, error)

GetStoragePoolNodeConfigs returns the node-specific configuration of all nodes grouped by node name, for the given poolID.

If the storage pool is not defined on all nodes, an error is returned.

func (*ClusterTx) GetStoragePoolUsedBy Uses

func (c *ClusterTx) GetStoragePoolUsedBy(name string) ([]string, error)

GetStoragePoolUsedBy looks up all users of a storage pool.

func (*ClusterTx) GetStoragePoolsLocalConfig Uses

func (c *ClusterTx) GetStoragePoolsLocalConfig() (map[string]map[string]string, error)

GetStoragePoolsLocalConfig returns a map associating each storage pool name to its node-specific config values (i.e. the ones where node_id is not NULL).

func (*ClusterTx) GetStorageVolumeNodeAddresses Uses

func (c *ClusterTx) GetStorageVolumeNodeAddresses(poolID int64, project, name string, typ int) ([]string, error)

GetStorageVolumeNodeAddresses returns the addresses of all nodes on which the volume with the given name if defined.

The volume name can be either a regular name or a volume snapshot name.

The empty string is used in place of the address of the current node.

func (*ClusterTx) InitProjectWithoutImages Uses

func (c *ClusterTx) InitProjectWithoutImages(project string) error

InitProjectWithoutImages updates populates the images_profiles table with all images from the default project when a project is created with features.images=false.

func (*ClusterTx) InstanceConfigRef Uses

func (c *ClusterTx) InstanceConfigRef(filter InstanceFilter) (map[string]map[string]map[string]string, error)

InstanceConfigRef returns entities used by instances.

func (*ClusterTx) InstanceDevicesRef Uses

func (c *ClusterTx) InstanceDevicesRef(filter InstanceFilter) (map[string]map[string]map[string]map[string]string, error)

InstanceDevicesRef returns entities used by instances.

func (*ClusterTx) InstanceExists Uses

func (c *ClusterTx) InstanceExists(project string, name string) (bool, error)

InstanceExists checks if a instance with the given key exists.

func (*ClusterTx) InstanceProfilesRef Uses

func (c *ClusterTx) InstanceProfilesRef(filter InstanceFilter) (map[string]map[string][]string, error)

InstanceProfilesRef returns entities used by instances.

func (*ClusterTx) InstanceSnapshotConfigRef Uses

func (c *ClusterTx) InstanceSnapshotConfigRef(filter InstanceSnapshotFilter) (map[string]map[string]map[string]map[string]string, error)

InstanceSnapshotConfigRef returns entities used by instance_snapshots.

func (*ClusterTx) InstanceSnapshotDevicesRef Uses

func (c *ClusterTx) InstanceSnapshotDevicesRef(filter InstanceSnapshotFilter) (map[string]map[string]map[string]map[string]map[string]string, error)

InstanceSnapshotDevicesRef returns entities used by instance_snapshots.

func (*ClusterTx) InstanceSnapshotExists Uses

func (c *ClusterTx) InstanceSnapshotExists(project string, instance string, name string) (bool, error)

InstanceSnapshotExists checks if a instance_snapshot with the given key exists.

func (*ClusterTx) NetworkCreated Uses

func (c *ClusterTx) NetworkCreated(name string) error

NetworkCreated sets the state of the given network to "Created".

func (*ClusterTx) NetworkErrored Uses

func (c *ClusterTx) NetworkErrored(name string) error

NetworkErrored sets the state of the given network to "Errored".

func (*ClusterTx) NetworkNodeConfigs Uses

func (c *ClusterTx) NetworkNodeConfigs(networkID int64) (map[string]map[string]string, error)

NetworkNodeConfigs returns the node-specific configuration of all nodes grouped by node name, for the given networkID.

If the network is not defined on all nodes, an error is returned.

func (*ClusterTx) NetworkNodeJoin Uses

func (c *ClusterTx) NetworkNodeJoin(networkID, nodeID int64) error

NetworkNodeJoin adds a new entry in the networks_nodes table.

It should only be used when a new node joins the cluster, when it's safe to assume that the relevant network has already been created on the joining node, and we just need to track it.

func (*ClusterTx) NodeID Uses

func (c *ClusterTx) NodeID(id int64)

NodeID sets the the node NodeID associated with this cluster transaction.

func (*ClusterTx) NodeIsEmpty Uses

func (c *ClusterTx) NodeIsEmpty(id int64) (string, error)

NodeIsEmpty returns an empty string if the node with the given ID has no containers or images associated with it. Otherwise, it returns a message say what's left.

func (*ClusterTx) NodeIsOutdated Uses

func (c *ClusterTx) NodeIsOutdated() (bool, error)

NodeIsOutdated returns true if there's some cluster node having an API or schema version greater than the node this method is invoked on.

func (*ClusterTx) ProfileConfigRef Uses

func (c *ClusterTx) ProfileConfigRef(filter ProfileFilter) (map[string]map[string]map[string]string, error)

ProfileConfigRef returns entities used by profiles.

func (*ClusterTx) ProfileDevicesRef Uses

func (c *ClusterTx) ProfileDevicesRef(filter ProfileFilter) (map[string]map[string]map[string]map[string]string, error)

ProfileDevicesRef returns entities used by profiles.

func (*ClusterTx) ProfileExists Uses

func (c *ClusterTx) ProfileExists(project string, name string) (bool, error)

ProfileExists checks if a profile with the given key exists.

func (*ClusterTx) ProfileUsedByRef Uses

func (c *ClusterTx) ProfileUsedByRef(filter ProfileFilter) (map[string]map[string][]string, error)

ProfileUsedByRef returns entities used by profiles.

func (*ClusterTx) ProjectConfigRef Uses

func (c *ClusterTx) ProjectConfigRef(filter ProjectFilter) (map[string]map[string]string, error)

ProjectConfigRef returns entities used by projects.

func (*ClusterTx) ProjectExists Uses

func (c *ClusterTx) ProjectExists(name string) (bool, error)

ProjectExists checks if a project with the given key exists.

func (*ClusterTx) ProjectHasImages Uses

func (c *ClusterTx) ProjectHasImages(name string) (bool, error)

ProjectHasImages is a helper to check if a project has the images feature enabled.

func (*ClusterTx) ProjectHasProfiles Uses

func (c *ClusterTx) ProjectHasProfiles(name string) (bool, error)

ProjectHasProfiles is a helper to check if a project has the profiles feature enabled.

func (*ClusterTx) ProjectUsedByRef Uses

func (c *ClusterTx) ProjectUsedByRef(filter ProjectFilter) (map[string][]string, error)

ProjectUsedByRef returns entities used by projects.

func (*ClusterTx) RemoveNode Uses

func (c *ClusterTx) RemoveNode(id int64) error

RemoveNode removes the node with the given id.

func (*ClusterTx) RemoveNodeRole Uses

func (c *ClusterTx) RemoveNodeRole(id int64, role ClusterRole) error

RemoveNodeRole removes a role from the node.

func (*ClusterTx) RemoveOperation Uses

func (c *ClusterTx) RemoveOperation(uuid string) error

RemoveOperation removes the operation with the given UUID.

func (*ClusterTx) RenameCertificate Uses

func (c *ClusterTx) RenameCertificate(fingerprint string, to string) error

RenameCertificate renames the certificate matching the given key parameters.

func (*ClusterTx) RenameInstance Uses

func (c *ClusterTx) RenameInstance(project string, name string, to string) error

RenameInstance renames the instance matching the given key parameters.

func (*ClusterTx) RenameInstanceSnapshot Uses

func (c *ClusterTx) RenameInstanceSnapshot(project string, instance string, name string, to string) error

RenameInstanceSnapshot renames the instance_snapshot matching the given key parameters.

func (*ClusterTx) RenameNode Uses

func (c *ClusterTx) RenameNode(old, new string) error

RenameNode changes the name of an existing node.

Return an error if a node with the same name already exists.

func (*ClusterTx) RenameProfile Uses

func (c *ClusterTx) RenameProfile(project string, name string, to string) error

RenameProfile renames the profile matching the given key parameters.

func (*ClusterTx) RenameProject Uses

func (c *ClusterTx) RenameProject(name string, to string) error

RenameProject renames the project matching the given key parameters.

func (*ClusterTx) SetNodeHeartbeat Uses

func (c *ClusterTx) SetNodeHeartbeat(address string, heartbeat time.Time) error

SetNodeHeartbeat updates the heartbeat column of the node with the given address.

func (*ClusterTx) SetNodePendingFlag Uses

func (c *ClusterTx) SetNodePendingFlag(id int64, pending bool) error

SetNodePendingFlag toggles the pending flag for the node. A node is pending when it's been accepted in the cluster, but has not yet actually joined it.

func (*ClusterTx) SetNodeVersion Uses

func (c *ClusterTx) SetNodeVersion(id int64, version [2]int) error

SetNodeVersion updates the schema and API version of the node with the given id. This is used only in tests.

func (*ClusterTx) StoragePoolCreated Uses

func (c *ClusterTx) StoragePoolCreated(name string) error

StoragePoolCreated sets the state of the given pool to "Created".

func (*ClusterTx) StoragePoolErrored Uses

func (c *ClusterTx) StoragePoolErrored(name string) error

StoragePoolErrored sets the state of the given pool to "Errored".

func (*ClusterTx) UpdateCephStoragePoolAfterNodeJoin Uses

func (c *ClusterTx) UpdateCephStoragePoolAfterNodeJoin(poolID, nodeID int64) error

UpdateCephStoragePoolAfterNodeJoin updates internal state to reflect that nodeID is joining a cluster where poolID is a ceph pool.

func (*ClusterTx) UpdateConfig Uses

func (c *ClusterTx) UpdateConfig(values map[string]string) error

UpdateConfig updates the given LXD cluster configuration keys in the config table. Config keys set to empty values will be deleted.

func (*ClusterTx) UpdateInstance Uses

func (c *ClusterTx) UpdateInstance(project string, name string, object Instance) error

UpdateInstance updates the instance matching the given key parameters.

func (*ClusterTx) UpdateInstanceConfig Uses

func (c *ClusterTx) UpdateInstanceConfig(id int, values map[string]string) error

UpdateInstanceConfig inserts/updates/deletes the provided keys

func (*ClusterTx) UpdateInstanceLastUsedDate Uses

func (c *ClusterTx) UpdateInstanceLastUsedDate(id int, date time.Time) error

UpdateInstanceLastUsedDate updates the last_use_date field of the instance with the given ID.

func (*ClusterTx) UpdateInstanceNode Uses

func (c *ClusterTx) UpdateInstanceNode(project, oldName, newName, newNode string) error

UpdateInstanceNode changes the node hosting an instance.

It's meant to be used when moving a non-running instance backed by ceph from one cluster node to another.

func (*ClusterTx) UpdateInstancePowerState Uses

func (c *ClusterTx) UpdateInstancePowerState(id int, state string) error

UpdateInstancePowerState sets the the power state of the container with the given ID.

func (*ClusterTx) UpdateInstanceSnapshot Uses

func (c *ClusterTx) UpdateInstanceSnapshot(id int, description string, expiryDate time.Time) error

UpdateInstanceSnapshot updates the description and expiry date of the instance snapshot with the given ID.

func (*ClusterTx) UpdateInstanceSnapshotConfig Uses

func (c *ClusterTx) UpdateInstanceSnapshotConfig(id int, values map[string]string) error

UpdateInstanceSnapshotConfig inserts/updates/deletes the provided config keys.

func (*ClusterTx) UpdateNode Uses

func (c *ClusterTx) UpdateNode(id int64, name string, address string) error

UpdateNode updates the name an address of a node.

func (*ClusterTx) UpdateNodeFailureDomain Uses

func (c *ClusterTx) UpdateNodeFailureDomain(id int64, domain string) error

UpdateNodeFailureDomain changes the failure domain of a node.

func (*ClusterTx) UpdateNodeRoles Uses

func (c *ClusterTx) UpdateNodeRoles(id int64, roles []ClusterRole) error

UpdateNodeRoles changes the list of roles on a member.

func (*ClusterTx) UpdateProfile Uses

func (c *ClusterTx) UpdateProfile(project string, name string, object Profile) error

UpdateProfile updates the profile matching the given key parameters.

func (*ClusterTx) UpdateProject Uses

func (c *ClusterTx) UpdateProject(name string, object api.ProjectPut) error

UpdateProject updates the project matching the given key parameters.

func (*ClusterTx) UpdateStoragePoolAfterNodeJoin Uses

func (c *ClusterTx) UpdateStoragePoolAfterNodeJoin(poolID, nodeID int64) error

UpdateStoragePoolAfterNodeJoin adds a new entry in the storage_pools_nodes table.

It should only be used when a new node joins the cluster, when it's safe to assume that the relevant pool has already been created on the joining node, and we just need to track it.

type Dump Uses

type Dump struct {
    // Map table names to the names or their columns.
    Schema map[string][]string

    // Map a table name to all the rows it contains. Each row is a slice
    // of interfaces.
    Data map[string][][]interface{}
}

Dump is a dump of all the user data in the local db prior the migration to the cluster db.

func LoadPreClusteringData Uses

func LoadPreClusteringData(tx *sql.Tx) (*Dump, error)

LoadPreClusteringData loads all the data that before the introduction of LXD clustering used to live in the node-level database.

This is used for performing a one-off data migration when a LXD instance is upgraded from a version without clustering to a version that supports clustering, since in those version all data lives in the cluster database (regardless of whether clustering is actually on or off).

type ExpiredImage Uses

type ExpiredImage struct {
    Fingerprint string
    ProjectName string
}

ExpiredImage used to store expired image info.

type Image Uses

type Image struct {
    ID           int
    Project      string `db:"primary=yes&join=projects.name"`
    Fingerprint  string `db:"primary=yes&comparison=like"`
    Type         int
    Filename     string
    Size         int64
    Public       bool
    Architecture int
    CreationDate time.Time
    ExpiryDate   time.Time
    UploadDate   time.Time
    Cached       bool
    LastUseDate  time.Time
    AutoUpdate   bool
}

Image is a value object holding db-related details about an image.

type ImageFilter Uses

type ImageFilter struct {
    Project     string
    Fingerprint string // Matched with LIKE
    Public      bool
    Cached      bool
}

ImageFilter can be used to filter results yielded by GetImages.

type Instance Uses

type Instance struct {
    ID           int
    Project      string `db:"primary=yes&join=projects.name"`
    Name         string `db:"primary=yes"`
    Node         string `db:"join=nodes.name"`
    Type         instancetype.Type
    Snapshot     bool `db:"ignore"`
    Architecture int
    Ephemeral    bool
    CreationDate time.Time
    Stateful     bool
    LastUseDate  time.Time
    Description  string `db:"coalesce=''"`
    Config       map[string]string
    Devices      map[string]map[string]string
    Profiles     []string
    ExpiryDate   time.Time
}

Instance is a value object holding db-related details about an instance.

func InstanceSnapshotToInstance Uses

func InstanceSnapshotToInstance(instance *Instance, snapshot *InstanceSnapshot) Instance

InstanceSnapshotToInstance is a temporary convenience function to merge together an Instance struct and a SnapshotInstance struct into into a the legacy Instance struct for a snapshot.

type InstanceArgs Uses

type InstanceArgs struct {
    // Don't set manually
    ID       int
    Node     string
    Type     instancetype.Type
    Snapshot bool

    // Creation only
    Project      string
    BaseImage    string
    CreationDate time.Time

    Architecture int
    Config       map[string]string
    Description  string
    Devices      deviceConfig.Devices
    Ephemeral    bool
    LastUsedDate time.Time
    Name         string
    Profiles     []string
    Stateful     bool
    ExpiryDate   time.Time
}

InstanceArgs is a value object holding all db-related details about an instance.

func InstanceToArgs Uses

func InstanceToArgs(inst *Instance) InstanceArgs

InstanceToArgs is a convenience to convert an Instance db struct into the legacy InstanceArgs.

type InstanceBackup Uses

type InstanceBackup struct {
    ID                   int
    InstanceID           int
    Name                 string
    CreationDate         time.Time
    ExpiryDate           time.Time
    InstanceOnly         bool
    OptimizedStorage     bool
    CompressionAlgorithm string
}

InstanceBackup is a value object holding all db-related details about a backup.

type InstanceFilter Uses

type InstanceFilter struct {
    Project string
    Name    string
    Node    string
    Type    instancetype.Type
}

InstanceFilter can be used to filter results yielded by InstanceList.

type InstanceSnapshot Uses

type InstanceSnapshot struct {
    ID           int
    Project      string `db:"primary=yes&join=projects.name&via=instance"`
    Instance     string `db:"primary=yes&join=instances.name"`
    Name         string `db:"primary=yes"`
    CreationDate time.Time
    Stateful     bool
    Description  string `db:"coalesce=''"`
    Config       map[string]string
    Devices      map[string]map[string]string
    ExpiryDate   time.Time
}

InstanceSnapshot is a value object holding db-related details about a snapshot.

type InstanceSnapshotFilter Uses

type InstanceSnapshotFilter struct {
    Project  string
    Instance string
    Name     string
}

InstanceSnapshotFilter can be used to filter results yielded by GetInstanceSnapshots.

type LegacyPatch Uses

type LegacyPatch struct {
    Hook func(*sql.Tx) error // The actual patch logic
}

LegacyPatch is a "database" update that performs non-database work. They are needed for historical reasons, since there was a time were db updates could do non-db work and depend on functionality external to the db package. See UpdatesApplyAll below.

type Node Uses

type Node struct {
    // contains filtered or unexported fields
}

Node mediates access to LXD's data stored in the node-local SQLite database.

func ForLegacyPatches Uses

func ForLegacyPatches(db *sql.DB) *Node

ForLegacyPatches is a aid for the hack in initializeDbObject, which sets the db-related Deamon attributes upfront, to be backward compatible with the legacy patches that need to interact with the database.

func NewTestNode Uses

func NewTestNode(t *testing.T) (*Node, func())

NewTestNode creates a new Node for testing purposes, along with a function that can be used to clean it up when done.

func (*Node) Begin Uses

func (n *Node) Begin() (*sql.Tx, error)

Begin a new transaction against the local database. Legacy method.

func (*Node) Close Uses

func (n *Node) Close() error

Close the database facade.

func (*Node) DB Uses

func (n *Node) DB() *sql.DB

DB returns the low level database handle to the node-local SQLite database.

FIXME: this is used for compatibility with some legacy code, and should be

dropped once there are no call sites left.

func (*Node) Dir Uses

func (n *Node) Dir() string

Dir returns the directory of the underlying SQLite database file.

func (*Node) GetAppliedPatches Uses

func (n *Node) GetAppliedPatches() ([]string, error)

GetAppliedPatches returns the names of all patches currently applied on this node.

func (*Node) MarkPatchAsApplied Uses

func (n *Node) MarkPatchAsApplied(patch string) error

MarkPatchAsApplied marks the patch with the given name as applied on this node.

func (*Node) Transaction Uses

func (n *Node) Transaction(f func(*NodeTx) error) error

Transaction creates a new NodeTx object and transactionally executes the node-level database interactions invoked by the given function. If the function returns no error, all database changes are committed to the node-level database, otherwise they are rolled back.

type NodeInfo Uses

type NodeInfo struct {
    ID            int64     // Stable node identifier
    Name          string    // User-assigned name of the node
    Address       string    // Network address of the node
    Description   string    // Node description (optional)
    Schema        int       // Schema version of the LXD code running the node
    APIExtensions int       // Number of API extensions of the LXD code running on the node
    Heartbeat     time.Time // Timestamp of the last heartbeat
    Roles         []string  // List of cluster roles
    Architecture  int       // Node architecture
}

NodeInfo holds information about a single LXD instance in a cluster.

func (NodeInfo) IsOffline Uses

func (n NodeInfo) IsOffline(threshold time.Duration) bool

IsOffline returns true if the last successful heartbeat time of the node is older than the given threshold.

func (NodeInfo) Version Uses

func (n NodeInfo) Version() [2]int

Version returns the node's version, composed by its schema level and number of extensions.

type NodeTx Uses

type NodeTx struct {
    // contains filtered or unexported fields
}

NodeTx models a single interaction with a LXD node-local database.

It wraps low-level sql.Tx objects and offers a high-level API to fetch and update data.

func NewTestNodeTx Uses

func NewTestNodeTx(t *testing.T) (*NodeTx, func())

NewTestNodeTx returns a fresh NodeTx object, along with a function that can be called to cleanup state when done with it.

func (*NodeTx) Config Uses

func (n *NodeTx) Config() (map[string]string, error)

Config fetches all LXD node-level config keys.

func (*NodeTx) CreateFirstRaftNode Uses

func (n *NodeTx) CreateFirstRaftNode(address string) error

CreateFirstRaftNode adds a the first node of the cluster. It ensures that the database ID is 1, to match the server ID of the first raft log entry.

This method is supposed to be called when there are no rows in raft_nodes, and it will replace whatever existing row has ID 1.

func (*NodeTx) CreateRaftNode Uses

func (n *NodeTx) CreateRaftNode(address string) (int64, error)

CreateRaftNode adds a node to the current list of LXD nodes that are part of the dqlite Raft cluster. It returns the ID of the newly inserted row.

func (*NodeTx) GetRaftNodeAddress Uses

func (n *NodeTx) GetRaftNodeAddress(id int64) (string, error)

GetRaftNodeAddress returns the address of the LXD raft node with the given ID, if any matching row exists.

func (*NodeTx) GetRaftNodeAddresses Uses

func (n *NodeTx) GetRaftNodeAddresses() ([]string, error)

GetRaftNodeAddresses returns the addresses of all LXD nodes that are members of the dqlite Raft cluster (possibly including the local node). If this LXD instance is not running in clustered mode, an empty list is returned.

func (*NodeTx) GetRaftNodes Uses

func (n *NodeTx) GetRaftNodes() ([]RaftNode, error)

GetRaftNodes returns information about all LXD nodes that are members of the dqlite Raft cluster (possibly including the local node). If this LXD instance is not running in clustered mode, an empty list is returned.

func (*NodeTx) RemoteRaftNode Uses

func (n *NodeTx) RemoteRaftNode(id int64) error

RemoteRaftNode removes a node from the current list of LXD nodes that are part of the dqlite Raft cluster.

func (*NodeTx) ReplaceRaftNodes Uses

func (n *NodeTx) ReplaceRaftNodes(nodes []RaftNode) error

ReplaceRaftNodes replaces the current list of raft nodes.

func (*NodeTx) Tx Uses

func (n *NodeTx) Tx() *sql.Tx

Tx returns the low level database handle to the node-local SQLite transaction.

FIXME: this is a transitional method needed for compatibility with some

legacy call sites. It should be removed when there are no more
consumers.

func (*NodeTx) UpdateConfig Uses

func (n *NodeTx) UpdateConfig(values map[string]string) error

UpdateConfig updates the given LXD node-level configuration keys in the config table. Config keys set to empty values will be deleted.

type Operation Uses

type Operation struct {
    ID          int64         // Stable database identifier
    UUID        string        // User-visible identifier
    NodeAddress string        // Address of the node the operation is running on
    Type        OperationType // Type of the operation
}

Operation holds information about a single LXD operation running on a node in the cluster.

type OperationType Uses

type OperationType int64

OperationType is a numeric code indentifying the type of an Operation.

const (
    OperationUnknown OperationType = iota
    OperationClusterBootstrap
    OperationClusterJoin
    OperationBackupCreate
    OperationBackupRename
    OperationBackupRestore
    OperationBackupRemove
    OperationConsoleShow
    OperationContainerCreate
    OperationContainerUpdate
    OperationContainerRename
    OperationContainerMigrate
    OperationContainerLiveMigrate
    OperationContainerFreeze
    OperationContainerUnfreeze
    OperationContainerDelete
    OperationContainerStart
    OperationContainerStop
    OperationContainerRestart
    OperationCommandExec
    OperationSnapshotCreate
    OperationSnapshotRename
    OperationSnapshotRestore
    OperationSnapshotTransfer
    OperationSnapshotUpdate
    OperationSnapshotDelete
    OperationImageDownload
    OperationImageDelete
    OperationImageToken
    OperationImageRefresh
    OperationVolumeCopy
    OperationVolumeCreate
    OperationVolumeMigrate
    OperationVolumeMove
    OperationVolumeSnapshotCreate
    OperationVolumeSnapshotDelete
    OperationVolumeSnapshotUpdate
    OperationProjectRename
    OperationImagesExpire
    OperationImagesPruneLeftover
    OperationImagesUpdate
    OperationImagesSynchronize
    OperationLogsExpire
    OperationInstanceTypesUpdate
    OperationBackupsExpire
    OperationSnapshotsExpire
    OperationCustomVolumeSnapshotsExpire
)

Possible values for OperationType

WARNING: The type codes are stored in the database, so this list of

definitions should be normally append-only. Any other change
requires a database update.

func (OperationType) Description Uses

func (t OperationType) Description() string

Description return a human-readable description of the operation type.

func (OperationType) Permission Uses

func (t OperationType) Permission() string

Permission returns the needed RBAC permission to cancel the oepration

type Profile Uses

type Profile struct {
    ID          int
    Project     string `db:"primary=yes&join=projects.name"`
    Name        string `db:"primary=yes"`
    Description string `db:"coalesce=''"`
    Config      map[string]string
    Devices     map[string]map[string]string
    UsedBy      []string
}

Profile is a value object holding db-related details about a profile.

type ProfileFilter Uses

type ProfileFilter struct {
    Project string
    Name    string
}

ProfileFilter can be used to filter results yielded by ProfileList.

type ProjectFilter Uses

type ProjectFilter struct {
    Name string // If non-empty, return only the project with this name.
}

ProjectFilter can be used to filter results yielded by ProjectList.

type RaftNode Uses

type RaftNode = client.NodeInfo

RaftNode holds information about a single node in the dqlite raft cluster.

This is just a convenience alias for the equivalent data structure in the dqlite client package.

type RaftRole Uses

type RaftRole = client.NodeRole

RaftRole captures the role of dqlite/raft node.

type StorageVolumeArgs Uses

type StorageVolumeArgs struct {
    ID   int64
    Name string

    // At least one of Type or TypeName must be set.
    Type     int
    TypeName string

    // At least one of PoolID or PoolName must be set.
    PoolID   int64
    PoolName string

    Snapshot bool

    Config       map[string]string
    Description  string
    CreationDate time.Time
    ExpiryDate   time.Time

    // At least on of ProjectID or ProjectName must be set.
    ProjectID   int64
    ProjectName string

    ContentType string
}

StorageVolumeArgs is a value object holding all db-related details about a storage volume.

Directories

PathSynopsis
cluster
node
queryPackage query implements helpers around database/sql to execute various kinds of very common SQL queries.
schemaPackage schema offers utilities to create and maintain a database schema.

Package db imports 32 packages (graph) and is imported by 62 packages. Updated 2020-07-03. Refresh now. Tools for package owners.