Back to the news overview

LXD 5.5 has been released

19th of August 2022


The LXD team is very excited to announce the release of LXD 5.5!

This release introduces quite a few new exciting features, including the beginning of object storage support in LXD, as well as a number of smaller but very welcome additions and fixes.


New features and highlights

Storage buckets (on Ceph)

LXD is getting support for object storage!

This is done by adding a whole new concept of storage buckets along with dedicated command (lxc storage bucket) and APIs.

This allows LXD users to create new storage buckets, assign them a size limit and then manage access keys to that bucket. The bucket has its own URL with an S3 API.

Our initial implementation is limited to using Ceph with its rados gateway providing the S3 API. In LXD 5.6, we will be extending this feature to all other storage drivers through the use of minio.

stgraber@dakara:~$ lxc storage create remote-object cephobject cephobject.radosgsw.endpoint=
Storage pool remote-object created

stgraber@dakara:~$ lxc storage bucket create remote-object foo
Storage bucket foo created

stgraber@dakara:~$ lxc storage bucket key create remote-object foo admin --role admin
Storage bucket key admin added
Access key: TNZAYZSYIHM243PS8337
Secret key: xbBTY8exhnXdm3uwEcsBjeBVBFzi4n4NOhtOEYa3

stgraber@dakara:~$ lxc storage bucket show remote-object foo
config: {}
description: ""
name: foo
location: ""

stgraber@dakara:~$ time s3cmd put Downloads/Win11_English_x64v1.iso s3://foo --multipart-chunk-size-mb=1000 --no-ssl --host --host-bucket --access_key TNZAYZSYIHM243PS8337 --secret_key xbBTY8exhnXdm3uwEcsBjeBVBFzi4n4NOhtOEYa3
upload: 'Downloads/Win11_English_x64v1.iso' -> 's3://foo/Win11_English_x64v1.iso'  [part 1 of 6, 1000MB] [1 of 1]
 1048576000 of 1048576000   100% in   26s    37.30 MB/s  done
upload: 'Downloads/Win11_English_x64v1.iso' -> 's3://foo/Win11_English_x64v1.iso'  [part 2 of 6, 1000MB] [1 of 1]
 1048576000 of 1048576000   100% in   25s    39.72 MB/s  done
upload: 'Downloads/Win11_English_x64v1.iso' -> 's3://foo/Win11_English_x64v1.iso'  [part 3 of 6, 1000MB] [1 of 1]
 1048576000 of 1048576000   100% in   28s    35.28 MB/s  done
upload: 'Downloads/Win11_English_x64v1.iso' -> 's3://foo/Win11_English_x64v1.iso'  [part 4 of 6, 1000MB] [1 of 1]
 1048576000 of 1048576000   100% in   31s    32.15 MB/s  done
upload: 'Downloads/Win11_English_x64v1.iso' -> 's3://foo/Win11_English_x64v1.iso'  [part 5 of 6, 1000MB] [1 of 1]
 1048576000 of 1048576000   100% in   29s    33.45 MB/s  done
upload: 'Downloads/Win11_English_x64v1.iso' -> 's3://foo/Win11_English_x64v1.iso'  [part 6 of 6, 307MB] [1 of 1]
 322172928 of 322172928   100% in    9s    33.17 MB/s  done

real    2m37.658s
user    0m20.592s
sys     0m4.383s

stgraber@dakara:~$ s3cmd get s3://foo/Win11_English_x64v1.iso --multipart-chunk-size-mb=1000 --no-ssl --host --host-bucket --access_key TNZAYZSYIHM243PS8337 --secret_key xbBTY8exhnXdm3uwEcsBjeBVBFzi4n4NOhtOEYa3
download: 's3://foo/Win11_English_x64v1.iso' -> './Win11_English_x64v1.iso'  [1 of 1]
 5565052928 of 5565052928   100% in   31s   170.59 MB/s  done

Above you can see the creation of a new bucket and its use from a standard S3 client.

Instance Ready state

A common issue facing LXD users is knowing when an instance is ready to be used.
This isn't something that LXD itself can help a lot about as the definition of "ready" is a pretty case specific one. But what LXD can do is let you tell it when ready and then expose this over the API.

The way this works is through our guest API (/dev/lxd):

stgraber@dakara:~$ lxc list u1
| NAME |  STATE  |         IPV4          |                   IPV6                    |   TYPE    | SNAPSHOTS |
| u1   | RUNNING | (eth0) | 2602:fc62:b:250:216:3eff:feb9:e5bd (eth0) | CONTAINER | 0         |

stgraber@dakara:~$ lxc exec u1 bash
root@u1:~# curl --unix-socket /dev/lxd/sock lxd/1.0
root@u1:~# curl --unix-socket /dev/lxd/sock lxd/1.0 -X PATCH -d '{"state": "Ready"}'
root@u1:~# exit

stgraber@dakara:~$ lxc list u1
| NAME | STATE |         IPV4          |                   IPV6                    |   TYPE    | SNAPSHOTS |
| u1   | READY | (eth0) | 2602:fc62:b:250:216:3eff:feb9:e5bd (eth0) | CONTAINER | 0         |

This works with both containers and virtual-machines so long as the devlxd API has not been disabled.

Configurable BGP hold time

A new bgp.peers.NAME.holdtime configuration key has been introduced.
This allows for setting a specific BGP hold time value on a peer, typically reducing it to a value much lower than the usual default of 180s.

All projects queries for storage volumes

Similar to what was done a few releases ago with the instances API, it's now possible to retrieve volume information across projects by using the ?all-projects=true keyword in the URL.

stgraber@dakara:~$ lxc query /1.0/storage-pools/default/volumes?all-projects=true

OOM kill counter in metrics

A new metrics API entry has been added to track the number of times the kernel Out Of Memory killer has been triggered.

stgraber@dakara:~$ lxc config set u1 limits.memory=64MiB
stgraber@dakara:~$ lxc query /1.0/metrics | grep lxd_memory_OOM_kills_total
# HELP lxd_memory_OOM_kills_total The number of out of memory kills.
# TYPE lxd_memory_OOM_kills_total counter
lxd_memory_OOM_kills_total{name="u1",project="default",type="container"} 0

stgraber@dakara:~$ lxc exec u1 -- apt update
Hit:1 focal InRelease
Hit:2 focal-security InRelease
Hit:3 focal-updates InRelease
stgraber@dakara:~$ ts... 56% Killed

stgraber@dakara:~$ lxc query /1.0/metrics | grep lxd_memory_OOM_kills_total
# HELP lxd_memory_OOM_kills_total The number of out of memory kills.
# TYPE lxd_memory_OOM_kills_total counter
lxd_memory_OOM_kills_total{name="u1",project="default",type="container"} 1

Database optimization

And lastly, not really a new feature but a significant focus of this release.
A lot of work has gone into reducing the number of database requests performed by LXD as well as generally optimizing those requests.

This should provide better overall performance and avoid a number of timeouts that were hitting some larger cluster users.

Complete changelog

Here is a complete list of all changes in this release:

Full commit list
  • Doc: Fix LXD volume group to LVM
  • Remove redundant LXD before ZFS pool
  • Doc: change a LVM to an LVM
  • doc/authentication: add information about a server behind NAT
  • lxc/remote: Allow specifying alternate server address for tokens
  • i18n: Update translation templates
  • lxd/db/warningtype: Move warning type definitions to warningtype package
  • lxd: Update usages of warning types
  • lxd/db/cluster/warnings: Add cluster.Warnings
  • lxd/db/warnings.mapper: Remove db.Warnings and its code generation
  • lxd/db/cluster/warnings.mapper: Update generated code
  • lxd/db/cluster/mapper: Get Images/Certificates by ID
  • shared/api/certificate: Add api.Certificate URL helper
  • lxd/warnings: Add getWarningEntityURL
  • lxd/warnings/warnings: Use cluster package helpers for Warnings
  • lxd/db/warnings.mapper: Remove db package warnings generated files
  • lxd/db/generate: Remove v1 generator
  • lxd/db/cluster: Remove version flag from generator comments
  • lxd/db/warnings: Remove unused types
  • doc/storage: add link to video about benchmarking storage drivers
  • lxd/db/storage/buckets: Fix member specific filter bug in GetNetworkLoadBalancers
  • lxd/db/cluster/projects: Move ProjectFeatures and ProjectFeaturesDefaults into cluster package
  • lxd/db/cluster/open: Update EnsureSchema to use ProjectFeaturesDefaults for default project features
  • lxd/api/project: Use cluster.ProjectFeatures and cluster.ProjectFeaturesDefaults
  • lxd/db/network/forwards: Adds context arg to GetNetworkForwards and GetNetworkForward
  • lxd/network: GetNetworkForward and GetNetworkForwards usage
  • lxd/db/network/forwards: Adds optional listenAddresses filter to GetNetworkForwards
  • lxd/db/network/load/balancers: Adds context argument to GetNetworkLoadBalancer and GetNetworkLoadBalancers
  • lxd/network: Usage of GetNetworkLoadBalancers and GetNetworkLoadBalancer
  • lxd/db/network/load/balancers: Adds optional listenAddresses filter to GetNetworkLoadBalancers
  • lxd/db/cluster/stmt: Export Stmt helper
  • lxd/db/cluster: Use exported Stmt helper
  • lxd/db/generate/db/method: Use exported Stmt helper
  • lxd/db/cluster/mapper: Update generated code
  • lxd/db/transaction: Remove Cluster/ClusterTx prepared stmts field
  • lxd/db: Use cluster.Stmt as the only statement store
  • lxd/storage/drivers/driver/lvm/volumes: Fix "lvm.stripes cannot be used with thin pool volumes" error
  • lxd/lifecycle/network/load/balancer: Fix load balancer lifecycle types
  • shared/api/event/lifecycle: Fix typo in constant
  • lxd: Update response.SyncResponseLocation URL generation to use api.NewURL() helper
  • lxd/network/load/balancers: Add missing networks segment to URL response in networkLoadBalancersPost
  • lxd/storage/volumes: Adds missing volume name to URL response in storagePoolVolumeTypePostRename
  • lxd/lifecycle: Reworks URL generation to use api.NewURL()
  • lxd/lifecycle/cluster/member: Update ClusterMemberAction.Event to use api.NewURL
  • lxd/lifecycle/instance/backup: Updates InstanceBackupAction.Event to clarify what backup name is expected
  • lxd/instance/backup: Pass full backup name to lifecycle.InstanceBackupRetrieved.Event
  • lxd/lifecycle/storage/volume: Make StorageVolumeAction.Event require volume with name and type
  • lxd/lifecycle/storage/volume/backup: Updates StorageVolumeBackupAction.Event to clarify the type of backup name required
  • lxd/storage/volumes/backup: Pass full backup name into lifecycle events
  • lxd/lifecycle/storage/volume/snapshot: Updates StorageVolumeSnapshotAction.Event to expect snapshot volume
  • doc: add spellcheck
  • doc: add spellchecking to the tests
  • doc: add an extension to allow spelling exceptions
  • doc: update word list for spellchecker
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: exclude some tags from spell checking
  • doc: allow Markdown syntax when we need markup in a link
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling daemon-behavior
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • doc: fix spelling
  • lxd: Use lifecycle URL in SyncResponseLocation
  • lxd/lifecycle/storage/pool: Remove projectName arg from StoragePoolAction.Event
  • lxd/networks: Adds project to networksPost SyncResponseLocation response
  • lxd/storage/pools: Updates storagePoolsPost to use a common lifecycle var
  • lxd/storage/pools: Fix comment typo in storagePoolsPost
  • lxd/storage/pools: Updates storagePoolPut and storagePoolDelete to use updated lifecycle function
  • lxd/storage/volumes: Adds project to SyncResponseLocation in storagePoolVolumeTypePostRename
  • lxd/db/instances: Don't use query parameters with IN statement when loading instance config in InstanceList
  • lxd/db/instances: Use query.Params in GetProjectAndInstanceNamesByNodeAddress
  • lxd/db/instances: Use query.Params in GetProjectInstanceToNodeMap
  • lxd/db/instances: Use consistent IN format
  • lxd/db/instances: Remove unused generateInClauseParams function
  • lxd/db/network/forwards: Use query.Params in GetNetworkForwards
  • lxd/db/network/load/balancers: Use query.Params in GetNetworkLoadBalancers
  • lxd/db/cluster: Don't use prepared statements in RemoveNodeFromClusterGroup and AddNodeToClusterGroup
  • lxd/db/images: Updates getImagesByFingerprintPrefix to use QueryScan rather than prepare
  • lxd/db/transaction: Removes unused prepare function
  • lxd/resources: Fix VPD parser crash
  • lxd/db/cluster/snapshots: Updates ToInstance to be more flexible
  • lxd: snapshot.ToInstance usage
  • lxd/db/instances: Refactors InstanceList into several smaller functions
  • lxd/db/instances: Adds snapshot support to InstancesToInstanceArgs and associated functions
  • lxd: Use consistent log context name for err
  • lxd/instances/get: Log instance render errors in doInstancesGet
  • lxd: Don't pass duplicate profiles into instance.Load
  • lxd/instance/drivers/driver/common: Updates Snapshots to avoid using tx.GetInstanceSnapshotsWithName
  • lxd/instance/instance/utils: Removes inefficient unused LoadFromAllProjects function
  • lxd/network/driver/ovn: Update Leases to use InstanceList
  • lxd/network/driver/bridge: Updates Leases to use InstanceList
  • lxd/instance/instance/utils: Removes unused LoadByProject function
  • lxd/instance: Reworks autoCreateInstanceSnapshots and autoCreateInstanceSnapshotsTask to use InstancesToInstanceArgs
  • lxd/daemon: Updates usage of autoCreateInstanceSnapshotsTask
  • lxd/instance: Update pruneExpiredInstanceSnapshotsTask to use tx.InstancesToInstanceArgs
  • lxd/instance: Reworks pruneExpiredInstanceSnapshotsTask to use tx.InstancesToInstanceArgs
  • lxd/instance/instance/utils: Removes unused LoadAllInternal function
  • shared/api: Add Ready state
  • shared/api: Add function to get status code from status name
  • shared/instance: Allow volatile.last_state.ready key
  • lxd/db: Add function to remove volatile.last_state.ready key
  • lxd: Unset volatile.last_state.ready on daemon init
  • lxd/instance/drivers: Set volatile.last_state.ready on stop/shutdown
  • lxd/instance/drivers: Return api.Ready when ready
  • lxd/devlxd: Add instance state to /1.0
  • lxd/devlxd: Allow setting instance state in /1.0
  • test/deps: Add ready-state subcommand
  • test: Test instance Ready state using devlxd
  • lxd/profiles/utils: Updates getProfileInstancesInfo to use tx.InstancesToInstanceArgs
  • api: Add instance_ready_state
  • doc/devlxd: Add PATCH /1.0
  • doc/devlxd: Update GET /1.0
  • docs: Update storage create pool howto
  • lxd-agent: Handle PATCH /1.0 in devlxd
  • lxd/config: Fix expanded show of instance snapshot
  • doc: update version of lxd-sphinx-extensions
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • doc: mark up default values correctly for
  • lxd/network/forwards: Add support for config patching in networkForwardPut
  • lxd/network/load/balancers: Add support for config patching in networkLoadBalancerPut
  • lxd/fsmonitor/drivers/errors: Removes unused variable ErrNotImplemented
  • lxd/storage/drivers/driver/common: Adds default "Not supported" functions
  • lxd/storage/drivers/driver/cephfs/volumes: Fall back to using common ("not supported") RefreshVolume function
  • lxd/storage/drivers/errors: Removes little used ErrNotImplemented
  • lxd/storage/backend/mock: Removes use of drivers.ErrNotImplemented
  • lxd/storage/backend/lxd: Switch to ErrNotSupported in CreateInstanceFromCopy
  • lxd/networks: Restrict network config view to admin users
  • lxd/storage/pools: Restrict storage pool config view to admin users
  • lxd/storage/drivers/driver/btrfs: Scan pool device source for BTRFS filesystems before mounting
  • lxd/db/instances: Adds snapshot support to instanceProfilesFill
  • lxd/db/instances: Adds fillProfiles argument to InstancesToInstanceArgs
  • lxd/instance/instance/utils: Switch to InstancesToInstanceArgs in LoadByProjectAndName
  • lxd/instance/instance/utils: Switch to InstancesToInstanceArgs in CreateInternal
  • lxd/instance/drivers/driver/common: Don't reload snapshot profiles in Snapshots
  • lxd/profiles/util: InstancesToInstanceArgs usage in getProfileInstancesInfo
  • lxd/db/instances: InstancesToInstanceArgs usage in InstanceList
  • lxd/instance: InstancesToInstanceArgs usage in autoCreateInstanceSnapshotsTask
  • lxd/instance: InstancesToInstanceArgs in pruneExpiredInstanceSnapshotsTask
  • lxd/db/instances: Remove inefficient InstanceToArgs function
  • test: Move devlxd-client into its own directory
  • test: Remove source/baz file at end of filemanip test
  • lxd/daemon: Add explicit instancesLoaded bool to indicate if shared mounts can be cleaned up
  • lxd/storage/drivers/utils: Adds loopDeviceSetup and loopDeviceAutoDetach functions
  • lxd/storage/drivers/driver/btrfs: Switch to loopDeviceSetup for loop device management
  • lxd/storage/drivers/driver/lvm: Switch to loopDeviceSetup for loop device management
  • lxd/storage/drivers/utils/cgo: Removes unused file
  • lxd/storage/cgo: Removes unused file
  • doc: update project description
  • doc: update Project and community section
  • shared/util/linux: Fix typo in comment of ExitStatus
  • shared/util/linux: Adds detection of RunError to ExitStatus
  • shared/validate/validate: Adds IsRequestURL function
  • test: Run proxy listener command before adding proxy device
  • test: Sleep longer when starting up proxy listener process after restart
  • client/util: Set transport.DialTLSContext in tlsHTTPClient
  • test: Add retries to udhcpc6 calls
  • test: Add retries to udhcpc calls
  • lxd/db/network/load/balancers: Fix regression in GetNetworkLoadBalancers
  • doc/reference: improve description of storage option
  • test: Keep retrying to signal to container to reboot in basic_usage
  • lxd/profiles/utils: Removes incorrect comment from doProfileUpdateInstance
  • lxd: Fixes API version for instances in project usedby.
  • lxd/db: Fix escaped slashes in storage volume URIs.
  • lxd/cluster/membership: Improve error in membershipCheckClusterStateForAccept
  • lxd/db/cluster: Improve URL generation.
  • client/lxd/cluster: No reason to use queryStruct in DeleteClusterMember
  • gomod: Update dependencies
  • workflows: Adds edge ppa's and removes make deps step.
  • lxd/storage/drivers/zfs: set atime=off and relatime=on
  • doc/reference: fix description of dir source param
  • lxd/cgroup/abstractions: Improve errors from GetIOStats
  • lxd/instance/instance/utils: Updates DeleteSnapshots to use more efficient Snapshots() function
  • lxd/instance/drivers: instance.DeleteSnapshots usage
  • shared/util: Adds context argument to RunCommandSplit, RunCommandInheritFds and RunCommandWithFds
  • shared/util: Adds RunCommandContext and deprecates RunCommand
  • lxd: RunCommand* context usage
  • shared/util: Unexports RunError fields and adds NewRunError function
  • shared/util: NewRunError usage
  • shared/util/linux: Use errors.As in ExitStatus
  • lxd/archive/archive: shared.NewRunError usage
  • lxd: RunError functions usage
  • cgo: ensure that lxd wrappers don't conflict with libc provided wrapper
  • doc/storage/zfs: include link to related YouTube video
  • doc/authentication: clarify what to specify for admin password
  • lxc/remote: the admin password prompt also accepts a token
  • i18n: Update translation templates
  • lxd/instance/drivers: Adds instance type to instance-created lifecycle event context.
  • doc/storage/zfs: {remove_snapshots,use_refquota,reserve_space} are bools
  • lxd/storage/drivers: use SI units
  • lxd/main_init_interactive: use SI units
  • lxd/storage/drivers/utils: Support CentOS 7 in loopDeviceSetup
  • test: Increase storage pool delete timeout to 20s
  • lxd/storage/storage: Adds UsedBy function
  • lxd: Use storagePools.UsedBy function
  • doc/migration: clean up "live migration" documentation
  • lxd/db/instances: Use stable sorting in GetInstanceSnapshotsWithName
  • lxd/instance/drivers: Use stable sorting
  • lxd/instances/get: Use stable sorting in doInstancesGet
  • lxd/resources/cpu: Use stable sorting in GetCPU
  • shared/api/instance: Adds GetParentAndSnapshotName function
  • shared/api/storage/pool/volume: Adds URL function to StorageVolume
  • lxd/storage/volumes: Fix volume get project resolution in storagePoolVolumeGet
  • lxd/project/project: Update StorageVolumeProjectFromRecord and StorageVolumeProject
  • lxd/db/storage/volumes: Rework GetStoragePoolVolumes to be more efficient
  • lxd/db/storage/volumes: Removes duplicate zero length check in GetStorageVolumeNodes
  • lxd/storage/volumes: Updates storagePoolVolumesGet to use tx.GetStoragePoolVolumes
  • doc: use HTTPS for links to CRIU site and inotify man
  • lxd/storage/volumes: Update storage-pools/{name}/volumes/{type} handler to use storagePoolVolumesGet
  • lxd/storage/volumes: Remove unused storagePoolVolumesTypeGet
  • lxd/storage/volumes: Fix golint error in storagePoolVolumesTypePost
  • lxd/db/storage/volumes: Adds memberSpecific support to GetStoragePoolVolumes
  • lxd/storage/volumes: Adds target member support to storagePoolVolumesGet
  • lxd/db/images: Clarifies argument name in GetImagesFingerprints
  • lxd/db/images: Adds GetProjectsUsingImage function
  • lxd/storage/storage: Reworks UsedBy to use tx.GetStoragePoolVolumes
  • lxd/storage/backend/lxd: UsedBy usage in IsUsed
  • lxd/storage/pools: storagePools.UsedBy usage in storagePoolsGet
  • api: network_bgp_holdtime
  • doc: Add bgp.peers.NAME.holdtime
  • lxd/bgp: Add configurable hold time
  • lxd/network: Add configurable BGP hold time
  • lxd/storage/pools: storagePools.UsedBy usage in storagePoolGet
  • lxd/db/storage/pools: Removes unused GetStoragePoolUsedBy function
  • shared/api/storage/pool/volume: Adds target awareness to URL
  • lxd/storage/volumes/utils: Removes unused supportedVolumeTypesInstances var
  • lxd/bgp: Only set HoldTime if set by the user
  • lxd-user: Fix use with clusters
  • shared/instance: Removes InstanceGetParentAndSnapshotName
  • lxd: api.GetParentAndSnapshotName usage
  • lxc: api.GetParentAndSnapshotName
  • lxd/db/storage/volumes: Adds support for StorageVolumeFilter to GetStoragePoolVolumes
  • lxd/storage/volumes: Updates storagePoolVolumesGet to use tx.GetStoragePoolVolumes filtering
  • lxd/db/storage/volumes: Updates GetStoragePoolVolumes to return []StorageVolume
  • lxd/storage/storage: Updates UsedBy to use updated GetStoragePoolVolumes
  • lxd/storage/volumes: Updates storagePoolVolumesGet to use updated GetStoragePoolVolumes
  • lxd/storage/volumes: Updates storagePoolVolumesGet to avoid unnecessary conversions
  • lxd/storage/volumes/utils: Updates storagePoolVolumeUsedByGet to add target param
  • lxd/db/storage/volumes: Adds GetStoragePoolVolume function
  • lxd/storage/volumes/utils: Updates storagePoolVolumeUsedByGet to accept a db.StorageVolume
  • lxd/storage/volumes: Updates storagePoolVolumeUsedByGet usage
  • lxd/storage/volumes: Fix image in use detection in storagePoolVolumeDelete
  • lxd/projects: Ensure default project has features.networks
  • api: Adds storage_volumes_all_projects extension
  • client: Adds all-projects functions for storage volumes
  • shared/api: Add Project field to StorageVolume
  • doc/rest-api: Refresh swagger YAML
  • lxc/storage/volume: Adds --all-projects flag to lxc storage volume list
  • lxd/instances/get: Replace mentions of cluster node with member
  • lxd/db/storage/volumes: Removes Project field from StorageVolume
  • shared/api/storage/pool/volume: Remove projectName from URL function
  • lxd: Unify all-projects handling
  • lxd/events: Improve error handling in eventsSocket
  • lxd/storage/storage: Update UsedBy with updated URL function usage
  • lxd/storage/volumes: Adds all-projects support to storagePoolVolumesGet
  • i18n: Update translation templates
  • lxd/db/storage/volumes: Updates GetStoragePoolVolumes to accept variadic filters
  • lxd/storage/storage: tx.GetStoragePoolVolumes usage
  • lxd/storage/volumes: tx.GetStoragePoolVolumes usage
  • lxd/network: Fix BGP without hold time
  • grafana: Only use instant queries on piechart graphs
  • lxd/instance/instance/utils: Updates MoveTemporaryName to generate missing volatile.uuid
  • lxd/instance/post: instance.MoveTemporaryName usage
  • lxd/db/cluster: Adds remote storage aware unique index to storage_volumes
  • lxd/network/driver/bridge: Include error from n.populateAutoConfig
  • lxd/network/openvswitch/ovn: Lower case DNS names
  • lxd/storage/pools: Don't use project param when deleting images before pool deletion
  • lxd/db/storage/volumes: Removes unused GetStoragePoolVolumesNames function
  • lxd/db/generate/db/method: Remove URI generation
  • go: Update go-dqlite
  • lxd/db/transaction: Move QueryScan to query package
  • lxd/db/storage/volumes: Update usages of QueryScan
  • lxd/db/generate/db/lex: Use QueryScan rowFunc in generated code
  • lxd/db/generate/db/method: Remove unnecessary stmt preparations
  • Update generated code
  • lxd/db/cluster/stmt: Remove prepare helper
  • metrics: new metric: lxd_memory_OOM_kills_total
  • Makefile: Moves shellcheck version call into static-analysis target.
  • doc/storage/ceph: remove YouTube link from content that is reused
  • lxd-generate: Allow GetOne filter to include a 'type' field.
  • doc: Split storage_configure into storage_configure_pool and storage_configure_volume
  • doc: Split storage_list into storage_view_pools and storage_view_volumes
  • doc: Split storage_resize into storage_resize_pool and storage_resize_volume
  • doc: Rename storage_move to storage_move_volume
  • doc: Rename storage_backup to storage_backup_volume
  • doc: Rename storage_add_volume to storage_create_volume
  • doc: Fix storage references
  • doc: Reworks storage sub menu
  • doc/migration: move current migration topic
  • api: metrics_memory_oom_total
  • doc: fix display of expandable sections
  • doc/migration: Add instructions for lxd-migrate
  • doc/migration: move the migration section
  • doc/migration: updates to the instance migration documentation
  • api: Adds storage_buckets extension
  • shared/api: Adds storage pool bucket API types
  • lxd/db/cluster: Adds storage buckets tables
  • lxd/db/cluster/projects: Adds "" to ProjectFeaturesDefaults
  • lxd/project/project: Adds StorageBucketProjectFromRecord and StorageBucketProject functions
  • lxd/project: Update cmdProjectList with support
  • lxd-user/lxd: Enable in projects
  • lxd/api/project: Add project setting
  • doc/projects: Adds setting
  • lxd/storage/drivers/driver/types: Adds Buckets field to Info
  • client/lxd/storage/buckets: Client functions for bucket management
  • lxc/storage/bucket: CLI commands for bucket management
  • shared/api/event/lifecycle: Add bucket constants
  • lxd/lifecycle/storage/bucket: Add lifecycle helper and types
  • lxd/storage/pool/interface: Add bucket management definitions
  • lxd/storage/drivers/bucket: Adds bucket type
  • lxd/storage/drivers/bucket: Add S3Credentials type
  • lxd/db/storage/buckets: Adds storage bucket management functions
  • lxd/storage/backend/mock: Add storage management functions
  • lxd/storage/backend/lxd: Add bucket management functions
  • lxd/storage/drivers: Adds bucket management functions
  • lxd/storage/buckets: Adds storage pool bucket management API endpoints
  • doc/rest-api: Refresh swagger YAML
  • gomod: Adds minio client and depenencies
  • lxd/storage/drivers/driver/cephobject: Adds cephobject storage pool driver type
  • lxd/storage/storage: Adds buckets to storage pool UsedBy output
  • i18n: Update translation templates
  • test: Document LXD_CEPH_CEPHFS option
  • test: Adds cephobject tests
  • doc: Adds cephobject documentation
  • lxd/network/driver_ovn: Fixes impossibility to set MTU for a pair of veths connecting uplink and ovs-system bridges
  • lxd/storage/drivers/driver/cephobject: Fix detection of missing lxd-admin radosgw user
  • lxd: Replace SelectObjects callback with QueryScan rowFunc
  • lxd/db/generate/db/method: Remove old destFunc
  • lxd/db/cluster/stmt: Add StmtString and remove panics
  • lxd/db/generate/db/method: Handle Stmt helper errors
  • lxd/db/cluster/mapper: Update generated code
  • lxd/db/cluster/nodes/cluster/groups.mapper: Add NodeClusterGroup generation
  • lxd/db/cluster/update: Add ID to nodes_cluster_groups table
  • lxd/instances/post: Use lxd-generate for cluster_groups
  • lxd/db/storage/volumes: Rename QueryScan to Scan
  • lxd/db/warnings: Remove unnecessary statement prepares
  • lxd/node/config: Removes most inefficient "convenience" functions
  • lxd/daemon: Don't load the local daemon config repeatedly in init
  • lxd/endpoints/endpoints: Use single-line contextual logging for socket bind & close
  • lxd/firewall/drivers/drivers/xtables: Use xtables locking in NetworkApplyACLRules
  • lxd/firewall/drivers/drivers/xtables: Simplify args list in iptablesAdd
  • lxd/firewall/drivers/drivers/xtables: Use long form xtables arguments in iptablesClear
  • lxd/storage/drivers/driver/cephobject/buckets: Create admin radosgw-admin user if missing in CreateBucket
  • i18n: Update translations from weblate
  • gomod: Update dependencies
  • lxd/db/generate/db/method: Fix lxd-generate typo

Try it for yourself

This new LXD release is already available for you to try on our demo service.


The release tarballs can be found on our download page.

Binary builds are also available for:

  • Linux: snap install lxd
  • MacOS: brew install lxc
  • Windows: choco install lxc