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

package db

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

Index

Package Files

certificates.go config.go containers.go db.go devices.go images.go instances.mapper.go legacy.go migration.go networks.go node.go operations.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_volumes.go testing.go transaction.go

Constants

const (
    StoragePoolVolumeTypeContainer = iota
    StoragePoolVolumeTypeImage
    StoragePoolVolumeTypeCustom
)

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"
    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 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 container/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{
    0: ClusterRoleDatabase,
}

ClusterRoles maps role ids into human-readable names.

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 NetworkNodeConfigKeys = []string{
    "bridge.external_interfaces",
}

NetworkNodeConfigKeys 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 ConfigValueSet Uses

func ConfigValueSet(c *Cluster, key string, value string) error

ConfigValueSet is a convenience to set a cluster-level key/value config pair in a single transaction.

func ContainerConfigClear Uses

func ContainerConfigClear(tx *sql.Tx, id int) error

ContainerConfigClear removes any config associated with the container with the given ID.

func ContainerConfigInsert Uses

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

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

func ContainerProfilesInsert Uses

func ContainerProfilesInsert(tx *sql.Tx, id int, project string, profiles []string) error

ContainerProfilesInsert associates the container with the given ID with the profiles with the given names in the given project.

func ContainerUpdate Uses

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

ContainerUpdate updates the description, architecture and ephemeral flag of the container with the given ID.

func DevicesAdd Uses

func DevicesAdd(tx *sql.Tx, w string, cID int64, devices deviceConfig.Devices) error

DevicesAdd adds a new device.

func InstanceSnapshotUpdate Uses

func InstanceSnapshotUpdate(tx *sql.Tx, id int, description string, expiryDate time.Time) error

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

func NetworkConfigClear Uses

func NetworkConfigClear(tx *sql.Tx, networkID, nodeID int64) error

NetworkConfigClear resets the config of the network with the given ID associated with the node with the given ID.

func NetworkUpdateDescription Uses

func NetworkUpdateDescription(tx *sql.Tx, id int64, description string) error

NetworkUpdateDescription updates the description of the network with the given ID.

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 ProfileConfigAdd Uses

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

ProfileConfigAdd adds a config to the profile with the given ID.

func ProfileConfigClear Uses

func ProfileConfigClear(tx *sql.Tx, id int64) error

ProfileConfigClear resets the config of the profile with the given ID.

func ProfileDescriptionUpdate Uses

func ProfileDescriptionUpdate(tx *sql.Tx, id int64, description string) error

ProfileDescriptionUpdate updates the description of the profile with the given ID.

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 ProfilesExpandConfig Uses

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

ProfilesExpandConfig expands the given container config with the config values of the given profiles.

func ProfilesExpandDevices Uses

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

ProfilesExpandDevices expands the given container devices with the devices defined in the given profiles.

func StoragePoolConfigClear Uses

func StoragePoolConfigClear(tx *sql.Tx, poolID, nodeID int64) error

StoragePoolConfigClear deletes the storage pool config.

func StoragePoolUpdateDescription Uses

func StoragePoolUpdateDescription(tx *sql.Tx, id int64, description string) error

StoragePoolUpdateDescription updates the storage pool description.

func StoragePoolVolumeTypeToName Uses

func StoragePoolVolumeTypeToName(volumeType int) (string, error)

StoragePoolVolumeTypeToName converts a volume integer type code to its human-readable name.

func StorageVolumeConfigAdd Uses

func StorageVolumeConfigAdd(tx *sql.Tx, volumeID int64, volumeConfig map[string]string) error

StorageVolumeConfigAdd adds a new storage volume config into database.

func StorageVolumeConfigClear Uses

func StorageVolumeConfigClear(tx *sql.Tx, volumeID int64) error

StorageVolumeConfigClear deletes storage volume config.

func StorageVolumeDescriptionUpdate Uses

func StorageVolumeDescriptionUpdate(tx *sql.Tx, volumeID int64, description string) error

StorageVolumeDescriptionUpdate updates the description of a storage volume.

func TxCommit Uses

func TxCommit(tx *sql.Tx) error

TxCommit commits the given transaction.

type CertInfo Uses

type CertInfo struct {
    ID          int
    Fingerprint string
    Type        int
    Name        string
    Certificate string
}

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

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) Begin Uses

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

Begin a new transaction against the cluster database.

FIXME: legacy method.

func (*Cluster) CertDelete Uses

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

CertDelete deletes a certificate from the db.

func (*Cluster) CertSave Uses

func (c *Cluster) CertSave(cert *CertInfo) error

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

func (*Cluster) CertUpdate Uses

func (c *Cluster) CertUpdate(fingerprint string, certName string, certType int) error

CertUpdate updates the certificate with the given fingerprint.

func (*Cluster) CertificateGet Uses

func (c *Cluster) CertificateGet(fingerprint string) (cert *CertInfo, err error)

CertificateGet 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 image with a given fingerprint, as it is enforced by a UNIQUE constraint in the schema.

func (*Cluster) CertificatesGet Uses

func (c *Cluster) CertificatesGet() (certs []*CertInfo, err error)

CertificatesGet returns all certificates from the DB as CertBaseInfo objects.

func (*Cluster) Close Uses

func (c *Cluster) Close() error

Close the database facade.

func (*Cluster) ContainerBackupCreate Uses

func (c *Cluster) ContainerBackupCreate(args InstanceBackupArgs) error

ContainerBackupCreate creates a new backup

func (*Cluster) ContainerBackupID Uses

func (c *Cluster) ContainerBackupID(name string) (int, error)

ContainerBackupID returns the ID of the container backup with the given name.

func (*Cluster) ContainerBackupRemove Uses

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

ContainerBackupRemove removes the container backup with the given name from the database.

func (*Cluster) ContainerBackupRename Uses

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

ContainerBackupRename renames a container backup from the given current name to the new one.

func (*Cluster) ContainerBackupsGetExpired Uses

func (c *Cluster) ContainerBackupsGetExpired() ([]InstanceBackupArgs, error)

ContainerBackupsGetExpired returns a list of expired container backups.

func (*Cluster) ContainerConfig Uses

func (c *Cluster) ContainerConfig(id int) (map[string]string, error)

ContainerConfig gets the container configuration map from the DB

func (*Cluster) ContainerConfigGet Uses

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

ContainerConfigGet returns the value of the given key in the configuration of the container with the given ID.

func (*Cluster) ContainerConfigRemove Uses

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

ContainerConfigRemove removes the given key from the config of the container with the given ID.

func (*Cluster) ContainerCreationUpdate Uses

func (c *Cluster) ContainerCreationUpdate(id int, date time.Time) error

ContainerCreationUpdate updates the cration_date field of the container with the given ID.

func (*Cluster) ContainerGetBackup Uses

func (c *Cluster) ContainerGetBackup(project, name string) (InstanceBackupArgs, error)

ContainerGetBackup returns the backup with the given name.

func (*Cluster) ContainerGetBackups Uses

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

ContainerGetBackups returns the names of all backups of the container with the given name.

func (*Cluster) ContainerGetSnapshots Uses

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

ContainerGetSnapshots returns the names of all snapshots of the container in the given project with the given name.

func (*Cluster) ContainerID Uses

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

ContainerID returns the ID of the container with the given name.

func (*Cluster) ContainerNextSnapshot Uses

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

ContainerNextSnapshot returns the index the next snapshot of the container with the given name and pattern should have.

func (*Cluster) ContainerPool Uses

func (c *Cluster) ContainerPool(project, containerName string) (string, error)

ContainerPool returns the storage pool of a given container.

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

func (*Cluster) ContainerProfiles Uses

func (c *Cluster) ContainerProfiles(id int) ([]string, error)

ContainerProfiles returns a list of profiles for a given container ID.

func (*Cluster) ContainerProjectAndName Uses

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

ContainerProjectAndName returns the project and the name of the container with the given ID.

func (*Cluster) ContainerRemove Uses

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

ContainerRemove removes the container with the given name from the database.

func (*Cluster) ContainerSetState Uses

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

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

func (*Cluster) ContainerSetStateful Uses

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

ContainerSetStateful toggles the stateful flag of the container with the given ID.

func (*Cluster) ContainersNodeList Uses

func (c *Cluster) ContainersNodeList(instanceType instancetype.Type) ([]string, error)

ContainersNodeList returns the names of all the containers of the given type running on the local node.

func (*Cluster) ContainersResetState Uses

func (c *Cluster) ContainersResetState() error

ContainersResetState resets the power state of all containers.

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) Devices Uses

func (c *Cluster) Devices(project, qName string, isprofile bool) (deviceConfig.Devices, error)

Devices returns the devices matching the given filters.

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) GetNodeID Uses

func (c *Cluster) GetNodeID() int64

GetNodeID returns the current nodeID (0 if not set)

func (*Cluster) ImageAliasAdd Uses

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

ImageAliasAdd inserts an alias ento the database.

func (*Cluster) ImageAliasDelete Uses

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

ImageAliasDelete deletes the alias with the given name.

func (*Cluster) ImageAliasGet Uses

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

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

func (*Cluster) ImageAliasRename Uses

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

ImageAliasRename renames the alias with the given ID.

func (*Cluster) ImageAliasUpdate Uses

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

ImageAliasUpdate updates the alias with the given ID.

func (*Cluster) ImageAliasesGet Uses

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

ImageAliasesGet returns the names of the aliases of all images.

func (*Cluster) ImageAliasesMove Uses

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

ImageAliasesMove changes the image ID associated with an alias.

func (*Cluster) ImageAssociateNode Uses

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

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

func (*Cluster) ImageDelete Uses

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

ImageDelete deletes the image with the given ID.

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) ImageGet Uses

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

ImageGet gets an Image object from the database. If strictMatching is false, The fingerprint argument 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 image with a given fingerprint, as it is enforced by a UNIQUE constraint in the schema.

func (*Cluster) ImageGetFromAnyProject Uses

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

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

func (*Cluster) ImageGetNodesWithImage Uses

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

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

func (*Cluster) ImageGetNodesWithoutImage Uses

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

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

func (*Cluster) ImageGetPoolNamesFromIDs Uses

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

ImageGetPoolNamesFromIDs get the names of all storage pools on which a given image exists.

func (*Cluster) ImageGetPools Uses

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

ImageGetPools get the names of all storage pools on which a given image exists.

func (*Cluster) ImageInsert Uses

func (c *Cluster) ImageInsert(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

ImageInsert inserts a new image.

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) ImageLastAccessInit Uses

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

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

func (*Cluster) ImageLastAccessUpdate Uses

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

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

func (*Cluster) ImageLocate Uses

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

ImageLocate 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) ImageSourceGet Uses

func (c *Cluster) ImageSourceGet(imageID int) (int, api.ImageSource, error)

ImageSourceGet returns the image source with the given ID.

func (*Cluster) ImageSourceGetCachedFingerprint Uses

func (c *Cluster) ImageSourceGetCachedFingerprint(server string, protocol string, alias string, typeName string) (string, error)

ImageSourceGetCachedFingerprint 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) ImageSourceInsert Uses

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

ImageSourceInsert inserts a new image source.

func (*Cluster) ImageUpdate Uses

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

ImageUpdate updates the image with the given ID.

func (*Cluster) ImageUploadedAt Uses

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

ImageUploadedAt updates the upload_date column and an image row.

func (*Cluster) ImagesGet Uses

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

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

func (*Cluster) ImagesGetByNodeID Uses

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

ImagesGetByNodeID returns all images that the LXD node instance has with the given node id.

func (*Cluster) ImagesGetExpired Uses

func (c *Cluster) ImagesGetExpired(expiry int64) ([]string, error)

ImagesGetExpired returns the names of all images that have expired since the given time.

func (*Cluster) ImagesGetOnCurrentNode Uses

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

ImagesGetOnCurrentNode returns all images that the current LXD node instance has.

func (*Cluster) InstanceSnapshotID Uses

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

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

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) NetworkConfigGet Uses

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

NetworkConfigGet returns the config map of the network with the given ID.

func (*Cluster) NetworkCreate Uses

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

NetworkCreate creates a new network.

func (*Cluster) NetworkDelete Uses

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

NetworkDelete deletes the network with the given name.

func (*Cluster) NetworkGet Uses

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

NetworkGet returns the network with the given name.

func (*Cluster) NetworkGetInterface Uses

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

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

func (*Cluster) NetworkRename Uses

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

NetworkRename renames a network.

func (*Cluster) NetworkUpdate Uses

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

NetworkUpdate updates the network with the given name.

func (*Cluster) Networks Uses

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

Networks returns the names of existing networks.

func (*Cluster) NetworksNotPending Uses

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

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

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) ProfileCleanupLeftover Uses

func (c *Cluster) ProfileCleanupLeftover() error

ProfileCleanupLeftover removes unreferenced profiles.

func (*Cluster) ProfileConfig Uses

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

ProfileConfig gets the profile configuration map from the DB.

func (*Cluster) ProfileContainersGet Uses

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

ProfileContainersGet gets the names of the containers associated with the profile with the given name.

func (*Cluster) ProfileGet Uses

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

ProfileGet returns the profile with the given name.

func (*Cluster) Profiles Uses

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

Profiles returns a string list of profiles.

func (*Cluster) ProfilesGet Uses

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

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

func (*Cluster) SetDefaultTimeout Uses

func (c *Cluster) SetDefaultTimeout(timeout time.Duration)

SetDefaultTimeout sets the default go-dqlite driver timeout.

func (*Cluster) StoragePoolConfigGet Uses

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

StoragePoolConfigGet returns the config of a storage pool.

func (*Cluster) StoragePoolCreate Uses

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

StoragePoolCreate creates new storage pool.

func (*Cluster) StoragePoolDelete Uses

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

StoragePoolDelete deletes storage pool.

func (*Cluster) StoragePoolGet Uses

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

StoragePoolGet returns a single storage pool.

func (*Cluster) StoragePoolGetID Uses

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

StoragePoolGetID returns the id of a single storage pool.

func (*Cluster) StoragePoolInsertZfsDriver Uses

func (c *Cluster) StoragePoolInsertZfsDriver() error

StoragePoolInsertZfsDriver replaces the driver of all storage pools without a driver, setting it to 'zfs'.

func (*Cluster) StoragePoolNodeVolumeGetType Uses

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

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

func (*Cluster) StoragePoolNodeVolumeGetTypeByProject Uses

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

StoragePoolNodeVolumeGetTypeByProject 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) StoragePoolNodeVolumeGetTypeID Uses

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

StoragePoolNodeVolumeGetTypeID get the ID of a storage volume on a given storage pool of a given storage volume type, on the current node.

func (*Cluster) StoragePoolNodeVolumesGet Uses

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

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

func (*Cluster) StoragePoolNodeVolumesGetType Uses

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

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

func (*Cluster) StoragePoolUpdate Uses

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

StoragePoolUpdate updates a storage pool.

func (*Cluster) StoragePoolVolumeCreate Uses

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

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

func (*Cluster) StoragePoolVolumeDelete Uses

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

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

func (*Cluster) StoragePoolVolumeGetType Uses

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

StoragePoolVolumeGetType returns a single storage volume attached to a given storage pool of a given type, on the node with the given ID.

func (*Cluster) StoragePoolVolumeGetTypeID Uses

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

StoragePoolVolumeGetTypeID returns the ID of a storage volume on a given storage pool of a given storage volume type, on the given node.

func (*Cluster) StoragePoolVolumeRename Uses

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

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

func (*Cluster) StoragePoolVolumeSnapshotsGetType Uses

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

StoragePoolVolumeSnapshotsGetType get all snapshots of a storage volume attached to a given storage pool of a given volume type, on the given node.

func (*Cluster) StoragePoolVolumeUpdate Uses

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

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

func (*Cluster) StoragePoolVolumesGet Uses

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

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

func (*Cluster) StoragePoolVolumesGetNames Uses

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

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

func (*Cluster) StoragePoolVolumesGetType Uses

func (c *Cluster) StoragePoolVolumesGetType(project string, volumeType int, poolID, nodeID int64) ([]string, error)

StoragePoolVolumesGetType get all storage volumes attached to a given storage pool of a given volume type, on the given node.

func (*Cluster) StoragePools Uses

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

StoragePools returns the names of all storage pools.

func (*Cluster) StoragePoolsGetDrivers Uses

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

StoragePoolsGetDrivers returns the names of all storage volumes attached to a given storage pool.

func (*Cluster) StoragePoolsNotPending Uses

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

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

func (*Cluster) StorageVolumeCleanupImages Uses

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

StorageVolumeCleanupImages removes the volumes with the given fingerprints.

func (*Cluster) StorageVolumeConfigGet Uses

func (c *Cluster) StorageVolumeConfigGet(volumeID int64) (map[string]string, error)

StorageVolumeConfigGet gets the config of a storage volume.

func (*Cluster) StorageVolumeDescriptionGet Uses

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

StorageVolumeDescriptionGet gets the description of a storage volume.

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) StorageVolumeMoveToLVMThinPoolNameKey Uses

func (c *Cluster) StorageVolumeMoveToLVMThinPoolNameKey() error

StorageVolumeMoveToLVMThinPoolNameKey upgrades the config keys of LVM volumes.

func (*Cluster) StorageVolumeNextSnapshot Uses

func (c *Cluster) StorageVolumeNextSnapshot(name string, typ int) int

StorageVolumeNextSnapshot returns the index 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) StorageVolumeNodeGet Uses

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

StorageVolumeNodeGet returns the name of the node a storage volume is on.

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.

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) Config Uses

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

Config fetches all LXD cluster config keys.

func (*ClusterTx) ContainerConfigInsert Uses

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

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

func (*ClusterTx) ContainerConfigUpdate Uses

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

ContainerConfigUpdate inserts/updates/deletes the provided keys

func (*ClusterTx) ContainerGetSnapshotsFull Uses

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

ContainerGetSnapshotsFull returns all container objects for snapshots of a given container

func (*ClusterTx) ContainerLastUsedUpdate Uses

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

ContainerLastUsedUpdate updates the last_use_date field of the container with the given ID.

func (*ClusterTx) ContainerListExpanded Uses

func (c *ClusterTx) ContainerListExpanded() ([]Instance, error)

ContainerListExpanded loads all containers across all projects and expands their config and devices using the profiles they are associated to.

func (*ClusterTx) ContainerNames Uses

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

ContainerNames returns the names of all containers the given project.

func (*ClusterTx) ContainerNodeAddress Uses

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

ContainerNodeAddress returns the address of the node hosting the container with the given name in the given project.

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

func (*ClusterTx) ContainerNodeList Uses

func (c *ClusterTx) ContainerNodeList() ([]Instance, error)

ContainerNodeList returns all container objects on the local node.

func (*ClusterTx) ContainerNodeMove Uses

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

ContainerNodeMove changes the node associated with a container.

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

func (*ClusterTx) ContainerNodeProjectList Uses

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

ContainerNodeProjectList returns all container objects on the local node within the given project.

func (*ClusterTx) ContainerPool Uses

func (c *ClusterTx) ContainerPool(project, containerName string) (string, error)

ContainerPool returns the storage pool of a given container.

func (*ClusterTx) ContainerSetState Uses

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

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

func (*ClusterTx) ContainersByNodeName Uses

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

ContainersByNodeName returns a map associating each container to the name of its node.

func (*ClusterTx) ContainersListByNodeAddress Uses

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

ContainersListByNodeAddress 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) InstanceConfigRef Uses

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

InstanceConfigRef returns entities used by instances.

func (*ClusterTx) InstanceCreate Uses

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

InstanceCreate adds a new instance to the database.

func (*ClusterTx) InstanceDelete Uses

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

InstanceDelete deletes the instance matching the given key parameters.

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) InstanceGet Uses

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

InstanceGet returns the instance with the given key.

func (*ClusterTx) InstanceID Uses

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

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

func (*ClusterTx) InstanceList Uses

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

InstanceList returns all available instances.

func (*ClusterTx) InstanceProfilesRef Uses

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

InstanceProfilesRef returns entities used by instances.

func (*ClusterTx) InstanceRename Uses

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

InstanceRename renames the instance matching the given key parameters.

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) InstanceSnapshotConfigUpdate Uses

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

InstanceSnapshotConfigUpdate inserts/updates/deletes the provided config keys.

func (*ClusterTx) InstanceSnapshotCreate Uses

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

InstanceSnapshotCreate adds a new instance_snapshot to the database.

func (*ClusterTx) InstanceSnapshotDelete Uses

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

InstanceSnapshotDelete deletes the instance_snapshot matching the given key parameters.

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) InstanceSnapshotGet Uses

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

InstanceSnapshotGet returns the instance_snapshot with the given key.

func (*ClusterTx) InstanceSnapshotID Uses

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

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

func (*ClusterTx) InstanceSnapshotList Uses

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

InstanceSnapshotList returns all available instance_snapshots.

func (*ClusterTx) InstanceSnapshotRename Uses

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

InstanceSnapshotRename renames the instance_snapshot matching the given key parameters.

func (*ClusterTx) NetworkConfigAdd Uses

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

NetworkConfigAdd adds a new entry in the networks_config table

func (*ClusterTx) NetworkCreatePending Uses

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

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

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) NetworkID Uses

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

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

func (*ClusterTx) NetworkIDsNotPending Uses

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

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

Pending networks are skipped.

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) NetworksNodeConfig Uses

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

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

func (*ClusterTx) NodeAdd Uses

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

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

func (*ClusterTx) NodeAddRole Uses

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

NodeAddRole adds a role to the node.

func (*ClusterTx) NodeAddress Uses

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

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

func (*ClusterTx) NodeByAddress Uses

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

NodeByAddress returns the node with the given network address.

func (*ClusterTx) NodeByName Uses

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

NodeByName returns the node with the given name.

func (*ClusterTx) NodeClear Uses

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

NodeClear removes any container or image associated with this node.

func (*ClusterTx) NodeHeartbeat Uses

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

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

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) NodeName Uses

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

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

func (*ClusterTx) NodeOfflineThreshold Uses

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

NodeOfflineThreshold 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) NodePending Uses

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

NodePending 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) NodePendingByAddress Uses

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

NodePendingByAddress returns the pending node with the given network address.

func (*ClusterTx) NodeRemove Uses

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

NodeRemove removes the node with the given id.

func (*ClusterTx) NodeRename Uses

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

NodeRename changes the name of an existing node.

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

func (*ClusterTx) NodeUpdate Uses

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

NodeUpdate updates the name an address of a node.

func (*ClusterTx) NodeUpdateVersion Uses

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

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

func (*ClusterTx) NodeWithLeastContainers Uses

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

NodeWithLeastContainers returns the name of the non-offline node with with the least number of containers (either already created or being created with an operation).

func (*ClusterTx) Nodes Uses

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

Nodes 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) NodesCount Uses

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

NodesCount 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) OperationAdd Uses

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

OperationAdd adds a new operations to the table.

func (*ClusterTx) OperationByUUID Uses

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

OperationByUUID returns the operation with the given UUID.

func (*ClusterTx) OperationFlush Uses

func (c *ClusterTx) OperationFlush(nodeID int64) error

OperationFlush removes all operations for the given node.

func (*ClusterTx) OperationNodes Uses

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

OperationNodes returns a list of nodes that have running operations

func (*ClusterTx) OperationRemove Uses

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

OperationRemove removes the operation with the given UUID.

func (*ClusterTx) Operations Uses

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

Operations returns all operations associated with this node.

func (*ClusterTx) OperationsUUIDs Uses

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

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

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) ProfileCreate Uses

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

ProfileCreate adds a new profile to the database.

func (*ClusterTx) ProfileDelete Uses

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

ProfileDelete deletes the profile matching the given key parameters.

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) ProfileGet Uses

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

ProfileGet returns the profile with the given key.

func (*ClusterTx) ProfileID Uses

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

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

func (*ClusterTx) ProfileList Uses

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

ProfileList returns all available profiles.

func (*ClusterTx) ProfileRename Uses

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

ProfileRename renames the profile matching the given key parameters.

func (*ClusterTx) ProfileURIs Uses

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

ProfileURIs returns all available profile URIs.

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) ProjectCreate Uses

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

ProjectCreate adds a new project to the database.

func (*ClusterTx) ProjectDelete Uses

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

ProjectDelete deletes the project matching the given key parameters.

func (*ClusterTx) ProjectExists Uses

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

ProjectExists checks if a project with the given key exists.

func (*ClusterTx) ProjectGet Uses

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

ProjectGet returns the project with the given key.

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) ProjectID Uses

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

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

func (*ClusterTx) ProjectList Uses

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

ProjectList returns all available projects.

func (*ClusterTx) ProjectMap Uses

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

ProjectMap returns the names and ids of all available projects.

func (*ClusterTx) ProjectNames Uses

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

ProjectNames returns the names of all available projects.

func (*ClusterTx) ProjectRename Uses

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

ProjectRename renames the project matching the given key parameters.

func (*ClusterTx) ProjectURIs Uses

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

ProjectURIs returns all available project URIs.

func (*ClusterTx) ProjectUpdate Uses

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

ProjectUpdate updates the project matching the given key parameters.

func (*ClusterTx) ProjectUsedByRef Uses

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

ProjectUsedByRef returns entities used by projects.

func (*ClusterTx) StoragePoolConfigAdd Uses

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

StoragePoolConfigAdd adds a new entry in the storage_pools_config table

func (*ClusterTx) StoragePoolCreatePending Uses

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

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

func (*ClusterTx) StoragePoolCreated Uses

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

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

func (*ClusterTx) StoragePoolDriver Uses

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

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

func (*ClusterTx) StoragePoolErrored Uses

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

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

func (*ClusterTx) StoragePoolID Uses

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

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

func (*ClusterTx) StoragePoolIDsNotPending Uses

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

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

Pending storage pools are skipped.

func (*ClusterTx) StoragePoolNodeConfigs Uses

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

StoragePoolNodeConfigs 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) StoragePoolNodeJoin Uses

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

StoragePoolNodeJoin 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.

func (*ClusterTx) StoragePoolNodeJoinCeph Uses

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

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

func (*ClusterTx) StoragePoolsNodeConfig Uses

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

StoragePoolsNodeConfig 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) StorageVolumeNodeAddresses Uses

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

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

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

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.

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 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 a container.

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 ContainerToArgs Uses

func ContainerToArgs(container *Instance) InstanceArgs

ContainerToArgs is a convenience to convert the new Container db struct into the legacy InstanceArgs.

type InstanceBackupArgs Uses

type InstanceBackupArgs struct {
    // Don't set manually
    ID  int

    InstanceID           int
    Name                 string
    CreationDate         time.Time
    ExpiryDate           time.Time
    InstanceOnly         bool
    OptimizedStorage     bool
    CompressionAlgorithm string
}

InstanceBackupArgs 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 InstanceSnapshotList.

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) Patches Uses

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

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

func (*Node) PatchesMarkApplied Uses

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

PatchesMarkApplied 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
}

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) RaftNodeAdd Uses

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

RaftNodeAdd 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) RaftNodeAddress Uses

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

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

func (*NodeTx) RaftNodeAddresses Uses

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

RaftNodeAddresses 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) RaftNodeDelete Uses

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

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

func (*NodeTx) RaftNodeFirst Uses

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

RaftNodeFirst adds a the first node of the cluster. It ensures that the database ID is 1, to match the server ID of 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) RaftNodes Uses

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

RaftNodes 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) RaftNodesReplace Uses

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

RaftNodesReplace 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
)

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 struct {
    ID      int64  // Stable node identifier
    Address string // Network address of the node
}

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

type StorageVolumeArgs Uses

type StorageVolumeArgs struct {
    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
}

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 37 packages. Updated 2019-10-10. Refresh now. Tools for package owners.