News

LXD 5.12 has been released

20th of March 2023

Introduction

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

This release contains a LOT of fixes, especially around storage and instance migration.
On top of all those fixes, it also contains three small but rather useful new features.

Enjoy!

New features and highlights

Device wipe when creating storage pools

It's now possible to instruct LXD to wipe the source device of a storage pool prior to creation. This should be used with extreme care as setting the wrong source value will cause the disk in question to have its header wiped clean by LXD.

This was added for use by MicroCloud where all of the disks are accounted for and this can be safely performed. For other use cases, you'll want to make sure that there can't possibly be useful data on the disk prior to using this.

To use it, just set source.wipe=true at storage pool creation time.

VM generation id

LXD now implements VM generation IDs.

This is a feature available on x86_64 VMs which has LXD expose a UUID that the guest can consume and compare with the UUID used at boot time. Any change in value will indicate that the guest has been restored to a former state and that sensitive cryptographic functions like the random number generator should be seeded again.

On LXD, the initial value of the generation ID will be the same as the VM UUID.
The generation ID will follow the same reset rules as the VM UUID with the exception that a snapshot restore will also trigger a generation ID reset whereas the instance UUID will be kept the same.

For users, there's really nothing to do about this, it's purely an additional security feature that the guest OS may or may not use. As a result, this is done by default for all LXD VMs on architectures that support it (currently x86_64 only).

VM block cache mode

A new disk device configuration option, io.cache has been introduced.
This option can be used to control the caching behavior for the disk in virtual machines.

The default value (none) will have LXD configure no caching and setup the use of Direct I/O when supported by the underlying storage pool. An alternative is to use writeback which will cache writes, flushing them to the backing pool when the guest sends a flush request. The last option is unsafe which works the same as writeback but ignores guest requests to flush the cache to disk.

Complete changelog

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

Full commit list
  • lxd/storage/drivers/generic/vfs: Improve logging in genericVFSCreateVolumeFromMigration
  • lxd/migrate/instance: Improve migrationSourceWs errors
  • lxd/migrate/instance: Improve migrationSink errors and logging
  • lxd/migrate/storage/volumes: Improve migrationSink errors
  • lxd/operations: Improves operationWebsocketGet error
  • lxd/instance/snapshot: Fix wrapping and quoting of errors in snapshotPost
  • lxd/migrate: Improve errors in {migrationSourceWs,migrationSink}.Connect
  • lxd/migrate/instance: Clean up operation on failure
  • lxd/main/forkmigrate: Improve error in cmdForkmigrate
  • lxd/instance/drivers/driver/common: Allow onStopOperationSetup to inherit Start operation
  • lxd/instance/drivers/driver/common: Adds validateStartup function
  • lxd/instance/drivers/driver/qemu: Call d.common.validateStartup from validateStartup
  • lxd/instance/drivers: d.validateStartup usage
  • lxd/instance: Removes unused SaveConfigFile functions
  • lxd/migrate/instance: Update checkForPreDumpSupport to not depend on liblxc
  • lxd/instance/instance/interface: Adds operation lock to CriuMigrationArgs
  • lxd/instance/drivers/driver/lxc: Adds reverter to initLXC
  • lxd/instance/drivers/driver/lxc: Call d.UpdateBackupFile from startCommon
  • lxd/instance/drivers/driver/lxc: Comment endings
  • lxd/instance/drivers/driver/lxc: Simplify ctx var creation in Start
  • lxd/instance/drivers/driver/lxc: Rework the way Start calls Migrate when doing stateful start
  • lxd/instance/drivers/driver/lxc: Rework Stop to fix stateful stop
  • lxd/instance/drivers/driver/lxc: Rework Snapshot to fix stateful snapshots
  • lxd/instance/drivers/driver/lxc: Cleanup Restore
  • lxd/instance/drivers/driver/lxc: Removes unused liblxc.MIGRATE_FEATURE_CHECK check
  • lxd/instance/drivers/driver/lxc: Remove UpdateBackupFile call from Migrate when restoring stateful checkpoint
  • lxd/instance/drivers/driver/lxc: Fix liblxc initialisation in Migrate
  • client: Don't indicate live migration when copying snapshots in CopyInstanceSnapshot
  • test: Update CRIU tests
  • lxd/instance: Improve stateful copy error message
  • Move C and therefore CGO out of shared package
  • doc: fix in documentation for physical NIC with the network option
  • doc: add a page about troubleshooting failing instances
  • doc/devices/disk: add video link and clarify content
  • doc/devices/unix-*: add link to YouTube video
  • doc/devices/unix-*: add title for YouTube video
  • Move socket to linux
  • doc/storage: Document zfs.block_mode
  • lxd/instance/drivers/driver/lxc: Prevent panic in cgroup if liblxc not initialized
  • lxd/instance/drivers/driver/lxc: Adds is running check to Metrics
  • lxd/api/metrics: Detect and ignore ErrInstanceIsStopped error from inst.Metrics()
  • lxd/instance/drivers/driver/lxc: Only intialise cgroup reader/writer when needed
  • lxc/query: Also handle json UnmarshalTypeError
  • lxc/query: Validate actions
  • i18n: Update translation templates
  • lxd/device/nic/ipvlan: Configure host-side routes and neighbour proxy entries with LXD
  • lxd/instances: Fix incorrect alias path in instanceSFTPCmd
  • lxd/instances/get: Correct comment terminology and endings
  • lxd/instances/get: Use if/else if for clarity
  • lxd/instances/get: Lose unnecessary recursionStr var
  • lxd/instances/get: Fix filtering in non-recursive mode
  • lxd/instance/filter: Removes unused function Filter
  • doc/clustering: add link to scriptlet specification
  • doc/storage: add link to ZFS block mode spec
  • doc/projects: add link to projects tutorial
  • lxd/db/instances: Add Instance type and rework GetProjectAndInstanceNamesByNodeAddress into GetInstancesByMemberAddress to return them
  • lxd/db/instances: Remove unused GetProjectInstanceToNodeMap function
  • lxd/instances/get: Reworks doInstancesGet to use tx.GetInstancesByMemberAddress
  • lxd/instances: Update instanceLoadNodeProjectAll to accept a context
  • lxd/scriptlet/starlark: No need to check all map key types
  • lxd/scriptlet/starlark: Use predictable ordering of Starlark dict keys
  • lxd/instances/get: Limit the scope of localInstancesByID
  • lxd/instances/get: Keep recursion and clauses logic together in doInstancesGet
  • lxd/instances/get: Sort the result by project and then name in doInstancesGet
  • lxd/instances/get: Simplify non-recursive URL output in doInstancesGet
  • doc/explanation/clustering: Show use of fail() in instance placement scriptlet
  • lxd/storage/backend/lxd: Pass volume config into SetVolumeQuota in SetInstanceQuota
  • lxd/storage/drivers/driver/ceph/volumes: Log volume name during mount
  • lxd/storage/drivers/driver/lvm/volumes: Log volume name during mount
  • lxd/storage/drivers/zfs: don't force atime to on
  • lxd/storage/drivers/driver/zfs/volumes: Adds activateVolume and deactiveVolume functions
  • lxd/storage/drivers/driver/zfs/volumes: Improve mount and unmount logging consistency
  • lxc/storage/drivers/driver/zfs/volumes: Only call InUse once during SetVolumeQuota
  • lxd/storage/drivers/driver/zfs/volumes: Fix block mode filesystem volume resize in SetVolumeQuota
  • test: Update zfs block mode tests
  • lxd-agent: Retry getting vsock client
  • test: test overlapping addresses between proxy device and network forward
  • instance: Check that there is no collisions between proxy device and a network fwd listenAddr
  • refactor: create ProxyParseAddr as part of the network pkg
  • refactor: update ProxyParseAddr references
  • refactor: remove old ProxyParseAddr func in device pkg
  • doc/debugging: remove information about lxd --debug
  • doc/troubleshooting: move example for instance troubleshooting
  • lxd/ip/link: Add support for applying Link setings atomically at Add time
  • lxd-agent/network: ip.Link usage in reconfigureNetworkInterfaces
  • lxd/device/device/utils/network: ip.Link usage in NetworkSetDevMTU
  • lxd/device/device/utils/network: ip.Link usage in networkSRIOVSetupContainerVFNIC
  • lxd/device/infiniband/physical: ip.Link usage in Start
  • lxd/device/infiniband/sriov: ip.Link usage in startContainer
  • lxd/device/nic/macvlan: ip.Link usage in Start
  • lxd/device/nic/physical: ip.Link usage in Start
  • lxd/network/driver/bridge: ip.Link usage for setting MTU
  • lxd/network/driver/physical: ip.Link usage for setting MTU
  • lxd/ip/link/veth: Restructure Veth type to replace PeerName with Peer Link field
  • lxd/network/driver/ovn: ip.Link usage for setting MTU
  • lxd/network/driver/ovn: ip.Veth Peer usage
  • lxd/device/device/utils/network: Reworks networkCreateVethPair to use ip.Veth settings
  • lxd/device/nic/macvlan: Update macvlan to apply settings to host interface atomically
  • lxd/device/device/utils/network: Updates networkCreateTap to support queue.tx.length setting
  • lxd/network/openvswitch/ovs: Update BridgeAdd to accept MAC and MTU settings
  • lxd/network/driver/ovn: ovs.BridgeAdd usage
  • lxd/network/driver/bridge: Create and apply bridge interface settings atomically
  • lxd: Indent swagger docs to indicate preformatted blocks.
  • lxd/sys: Updates comments to ensure they are properly gofmt'd.
  • lxd/storage: Updates comments to ensure they are properly gofmt'd.
  • lxd/storage/drivers: Updates comments to ensure they are properly gofmt'd.
  • lxd/node: Updates comments to ensure they are properly gofmt'd.
  • lxd/firewall/drivers: Updates comments to ensure they are properly gofmt'd.
  • lxd/endpoints: Updates comments to ensure they are properly gofmt'd.
  • lxd/db/schema: Updates comments to ensure they are properly gofmt'd.
  • lxd/db/operationtype: Updates comments to ensure they are properly gofmt'd.
  • lxd/db: Updates comments to ensure they are properly gofmt'd.
  • lxd/ip/link: Update SetAddress to take net.HardwareAddr
  • lxd/device: link.SetAddress usage
  • lxd/network/driver/bridge: bridge.SetAddress usage
  • lxd/storage/backend/lxd: No need to activate VM's block volume in UpdateInstanceBackupFile
  • lxd/device/none: Allow hot plugging for VMs
  • lxd/instance/drivers/driver/qemu: Don't collect metrics unless VM is running
  • client/lxd: Handle error responses from LXD in rawWebsocket
  • lxd-agent/server: Correct error handling in createCmd
  • lxd/daemon: Correct error handling in createCmd
  • lxd/storage/drivers: Match ceph keyring lookup logic
  • lxd/storage/s3/types: Adds ErrorInvalidRequest constant
  • lxd/api: Fixes storageBucketsServer to parse URL to properly extract bucket name from path
  • lxd/storage/zfs: Don't force the zpool creation
  • api: storage_pool_source_wipe
  • lxd/storage: Add support for source.wipe
  • doc: add sphinx-copybutton extension
  • doc: fix documentation warnings
  • doc/cloud-init: move content around
  • doc/cloud-init: add information from Advanced Guide on website
  • instance: add support for VM generation ID
  • test: test if the instance UUID is different after restoring its snapshot
  • zfs: Regenerate UUID on optimized migration
  • api: Add zfs_block_mode API extension
  • lxd/main_interactive: Tweak LVM thin pool error
  • doc/faq: provide the path to the client.crt for snap users too
  • doc/authentication: provide the path to the client config for snap users too
  • doc/debugging: mention path for snap users
  • doc: use RFC5737 (reserved for doc) IPv4 instead of RFC1918
  • Parameterize dig and explain origin of the port
  • doc/cloud-init: clean up existing documentation
  • doc/faq: add a section explaining where lxc stores its config
  • lxd/storage/zfs: Also pass -f to zpool create on source.wipe=true
  • lxd/storage/drivers/zfs: remove redundant ZFS version detection
  • lxd/storage/drivers/driver/lvm: Improve error in Create
  • lxd/storage/drivers/driver/common: Adds filesystemFreeze function
  • lxd/storage/drivers/driver/ceph/volumes: Updates CreateVolumeSnapshot to use filesystemFreeze
  • lxd/storage/drivers/zfs/volumes: Freeze source filesystem volume when taking temporary snapshot in CreateVolumeFromCopy
  • lxd: tweak do_move_forkmount()
  • doc/installing: add link to side-loading tutorial
  • doc/lxd.benchmark: fix instructions for delete command
  • test: Use per-instance storage pool VG for clustering tests
  • doc/devices/tpm: add video link and general explanation
  • GitHub actions: cancel running tests
  • shared/network: Comments
  • lxd/apparmor: Don't use deprecated io/ioutil
  • lxd/instance/drivers/driver/lxc: Use internal migrate function
  • lxd/instance/instance/interface: Split Migrate into MigrateSend and MigrateReceive
  • lxd/instance/drivers/driver/qemu: Implement MigrateSend and MigrateReceive
  • lxd/instance/drivers/driver/lxc: Implement MigrateSend and MigrateReceive
  • lxd/migrate/instance: Use MigrateSend and MigrateReceive
  • lxd/apparmor: fix AppArmor instance_qemu profile
  • lxd/instance/instance/interface: Update MigrateSend to accept MigrateSendArgs
  • lxd/instance/instance/utils: Move SnapshotToProtobuf into instance package
  • lxd/instance/drivers/driver/lxc: Move container migration send logic into lxc driver
  • lxd/instance/drivers/driver/qemu: Move VM migration send logic into qemu driver
  • lxd/migrate/instance: Removes container migration logic from migrationSourceWs
  • shared/network: Make sure subsequent reads after close block until next message in WebsocketIO
  • lxd/instance/drivers/driver/qemu: Fix stateful error message in Snapshot
  • lxd/instance/instance/utils: Adds SnapshotProtobufToInstanceArgs function
  • lxd/migration/utils: Adds ControlResponse type
  • lxd/migrate: migration.ControlResponse usage
  • lxd/migrate/storage/volumes: migration.ControlResponse usage
  • lxd/migrate: Removes unused migrationControlResponse type
  • lxd/storage/migration: Removes unused snapshotProtobufToInstanceArgs
  • lxd/instance/instance/interface: Update MigrateReceive to accept MigrateReceiveArgs
  • lxd/instance/drivers/driver/lxc: Move container migration receive logic into lxc driver
  • lxd/instance/drivers/driver/qemu: Adds start function
  • lxd/instance/drivers/driver/qemu: Move VM migration receive logic into qemu driver
  • lxd/storage: Removes unused resetContainerDiskIdmap function
  • lxd/migrate/instance: Removes instance type specific migration receive logic from migrationSink
  • lxd/instances/post: Persist operation for duration of createFromMigration
  • lxd/device/disk: Use explicit args and pass charset to mkisofs in generateVMConfigDrive
  • doc: enable an extension for terminal output
  • doc: add terminal output where suitable
  • test: Shorten boot.host_shutdown_timeout in clustering_evacuation tests
  • Revert "instance: add support for VM generation ID"
  • test: UUID should remain the same after back/snap restore
  • test: UUID should be the same after instance move to other server
  • lxd/migrate: Add send timeout to send function
  • lxd/migrate/instance: Add error sending synchronisation in migrationSourceWs.Do
  • lxd/instance/drivers/driver/qemu: Improve migration protocol error handling in MigrateReceive
  • lxd/instance/drivers/driver/lxc: Improve migration protocol error handling in MigrateReceive
  • lxd/migrate/instance: Removes control socket error response from migrationSink.Do
  • lxd/instance/qemu: Fix SMP on s390x
  • instance: Add volatile.uuid.generation to VM instance config
  • lxd/devices: Updates deviceTaskBalance to check the container's InitPID as running indicator
  • test: check generation UUID with snap/backup restore
  • lxd/instances/get: Fix clustered instances list
  • doc: Add volatile.uuid.generation and instance_generation_id extension to doc
  • lxd/shared/version: Add the instance_generation_id API extension
  • zfs: Ensure snapdev=visible is set correctly
  • zfs: Add private mountVolumeSnapshot function
  • zfs: Add "noload" mount option for ext4 mounts
  • zfs: Always mount volume snapshots read-only
  • zfs: Use mountVolumeSnapshot in readonlySnapshot
  • zfs: Regenerate UUID on volume restore
  • test: Test different filesystems for zfs block mode
  • zfs: Properly clean up clone
  • lxd/migrate: Unexport migrationSinkArgs
  • lxd/instances/post: migrationSinkArgs usage
  • lxd/migrate/instance: Add live field to logging
  • lxd/instance/drivers: Clarify logging of control response sending
  • lxd/migrate: Adds 30s send timeout to disconnect
  • doc/devices/usb: add link to video and some explanation
  • doc/images: link to Discourse post on LXD image servers
  • lxd/instance/instance/interface: Adds Disconnect function to MigrateArgs
  • lxd/migrate/instance: Setup Disconnect function
  • lxd/instance/drivers: Disconnect all sockets on MigrateReceieve error
  • lxd/instances/post: Fix incorrect redirection logic in instancesPost
  • lxd/instance/drivers: Update comments for accuracy
  • lxd/instances/post: Update comment for accuracy
  • lxd/instance/instance/interface: Rename DataConn and LiveConn to FilesystemConn and StateConn
  • lxd: Replace criuConn and dataConn references with stateConn and filesystemConn
  • shared/api/migration: Define the migration secret names used in the migration protocol
  • client: api.SecretName* usage
  • lxc-to-lxd/utils: api.SecretName* usage
  • lxd-agent/exec: api.SecretName* usage
  • lxd-migrate/utils: api.SecretName* usage
  • lxd: api.SecretName* usage
  • lxd/instance/drivers/driver/lxc: Use correct constant CRIUType_NONE in comment
  • lxd/migrate: Fix panic in migrationFields.send
  • gomod: Adds golang.org/x/sync/errgroup
  • lxd/instance/drivers/driver/lxc: Reworks MigrateSend to use errgroup and separate control monitor routine
  • lxd/instance/drivers/driver/qemu: Reworks MigrateSend to use errgroup separate control monitor routine
  • lxd/instance/drivers/driver/lxc: Rework MigrateReceive to use errgroup
  • lxd/instance/drivers/driver/qemu: Rework MigrateReceive to use errgroup
  • lxd/migrate/instance: Removes end control message exchange in migrationSourceWs.Do
  • lxd/instance/qemu: Default to writeback for RBD
  • api: disk_io_cache
  • shared/simplestream: Don't write zero length cache files in cachedDownload
  • doc: enable the extension for config options
  • doc: add a cheat sheet for config options
  • lxd/device/disk: Add io.mode
  • lxd/instance/qemu: Add support for io.cache
  • doc: Add io.cache to disk devices
  • lxd/storage/drivers/driver/zfs/volumes: Add cleanup in createVolumeFromMigrationOptimized
  • lxd/instance/drivers/driver/lxc: Fix possible panic on error in MigrateSend
  • lxd/storage/backend/lxd: Allow migrating running VMs stateless using rsync+dd when specifying --allow-inconsistent mode
  • lxd/instance/instance/utils: Return error when failing to delete instance snapshot in DeleteSnapshots
  • lxd/migrate/storage/volumes: Fix incorrect error message in newStorageMigrationSource
  • zfs: Ensure source FS is synced before migrating
  • lxd/db/instances: Updates UpdateInstanceNode to accept poolID
  • lxd/instance/instance/interface: Adds ClusterSameNameMove hint field to MigrateReceiveArgs
  • lxd/instance/post: Update internalClusterInstanceMovedPost to support deleting local instance volumes
  • lxd/instance/post: Reworks instancePostClusteringMigrate to use full migration protocol
  • lxd/instance/post: tx.UpdateInstanceNode usage
  • lxd/instance/post: instancePostClusteringMigrate usage
  • lxd/migrate: Adds cluster move hint to migration sink
  • lxd/instances/post: Update createFromMigration to use cluster notification as instance move hint
  • lxd/storage/backend/lxd: Update DeleteInstance to only check for existing snapshot volume DB records
  • lxd/instance/drivers/driver/lxc: Update MigrateReceive to support cluster moves
  • lxd/instance/drivers/driver/qemu: Update MigrateReceive to support cluster moves
  • lxd/instance/post: instancePostClusteringMigrate
  • test: Update clustering containers tests to check for live migration support
  • lxd/migrate: Improve error messages
  • lxd/migrate: Prevent reconnect attempts in migrationSourceWs.Connect and migrationSink.Connect
  • lxd/migrate: Prevent panics if allConnected is closed multiple times by using a Canceller
  • lxd/instance/drivers/driver/qemu: Improve operation cleanup and error reporting
  • lxd/instance/drivers/qmp/command: Differentiate errors
  • lxd/network: disable dnsmasq negative query cache
  • Documentation: fixed typo
  • gomod: Update dependencies
  • i18n: Update translations from weblate

Try it for yourself

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

Downloads

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

LXD 5.11 has been released

17th of February 2023

Introduction

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

This is a pretty packed release with a couple of big highlight features, specifically the instance placement scriptlet and ZFS zvol support but also included are quite a few other smaller features, performance improvements and bugfixes.

Enjoy!

New features and highlights

Instance placement scriptlet

A common request from cluster users has been to provide a better alternative to LXD's default placement algorithm.

By default LXD will quite simply look at all suitable cluster members and select whichever is currently hosting the fewest instances. It doesn't care about whether they're containers or VMs, whether they're currently running or not, how much resources the same may have and how much of it may be in use at the time.

As there are about as many opinions on placement as there are clusters out there, we decided to go with something that's both very flexible, yet very fast and reliable.
Instead of a potentially pretty complex internal scheduler which may not fit everyone's needs or an external scheduler which can go down, we went with something that's new for LXD.

Enter scriptlets. Scriptlets as the name may suggest are little scripts.
In LXD's case, we're using Starlark scripts specifically which is a very limited dialect of Python. Those scripts are directly loaded into the application, in this case LXD and can be provided with some data and functions to call.

Pretty importantly, those scriptlets cannot access any local data, hit the network or even perform complex time consuming actions (no loops and the like).

In LXD's case, we're introducing a new config key, instances.placement.scriptlet which can be set to a Starlark scriptlet. Then whenever LXD needs to place an instance, it will call that scriptlet, provide it with a list of candidate cluster members, the instance creation request itself and expose some functions that can be used to retrieve additional information about cluster members.

Specification: https://discuss.linuxcontainers.org/t/lxd-scriptlet-based-instance-placement-scheduler/15728
Documentation: https://linuxcontainers.org/lxd/docs/latest/explanation/clustering/#instance-placement-scriptlet

Block storage mode on ZFS pools

Something that was requested over 5 years ago now but recently caught our attention thanks to Docker and Android is the interest for using ZFS as a storage backend but not store data within ZFS datasets but rather use ZFS volumes.

This leads to an experience that's very similar to LVM or Ceph but on the very capable ZFS backend. It can also be used to mix and match, having some specific custom volumes use zvol while the rest of the data uses datasets.

This is interesting for both Android containers and for Docker storage as in both cases, ZFS isn't compatible with the way they expect to store data. With this feature it's now possible to flip the storage mode to zvol for Android containers, getting them running on the expected ext4 filesystem, and for Docker, one can now carve out a custom storage volume that's formatted as ext4 for use as /var/lib/docker, allowing for the use of the much faster overlay2 vfs driver.

Specification: https://discuss.linuxcontainers.org/t/lxd-zfs-block-mode/15872
Documentation: https://linuxcontainers.org/lxd/docs/latest/reference/storage_zfs/#storage-volume-configuration

lxc cluster info command

As part of the placement scriptlet work described above, one thing we needed was for an easy way to retrieve load information about a cluster member.

Rather than only having this available as an internal function, we decided to also make it available over the API and provide a CLI command for it.

stgraber@dakara:~$ lxc cluster info s-shf-cluster:athos
sysinfo:
  uptime: 30219
  load_averages:
  - 12.13
  - 9.77
  - 9.62
  total_ram: 676309450752
  free_ram: 319631790080
  shared_ram: 123550392320
  buffered_ram: 32219648000
  total_swap: 8589926400
  free_swap: 8589926400
  processes: 4330
storage_pools:
  hdd:
    space:
      used: 23882062033615
      total: 30893314601679
  ssd:
    space:
      used: 2452640672159
      total: 10217284610463

It provides pretty raw data about the system load, memory and disk usage and number of processes.

Support for attaching managed physical networks to instances

physical managed LXD networks were first introduced to serve as uplink for OVN networks. But seeing how LXD also supports attaching to physical network interfaces, there was no good reason not to allow their use through the network property.

Documentation: https://linuxcontainers.org/lxd/docs/latest/reference/devices_nic/#nic-physical

Reworked image documentation

Continuing with our documentation rework, in this release we now have the images documentation re-organized to match the rest of our docs.

https://linuxcontainers.org/lxd/docs/latest/images/

Complete changelog

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

Full commit list
  • test: Fix race against snapshot prune task in test_storage_volume_snapshots
  • lxd/db/storage/pools: Adds GetStoragePools in the style of GetNetworkForwards
  • lxd/db/storage/pools: Update GetStoragePoolInAnyState and GetStoragePool to use GetStoragePools
  • lxd/cluster/resolve: Update ResolveTarget to avoid starting transaction if target is local server
  • lxd/state/state: Adds StartTime to State
  • lxd/response: Updates forwardedResponseToNode and forwardedResponseIfTargetIsRemote to accept state
  • lxd/api/1.0: forwardedResponseIfTargetIsRemote usage
  • lxd/api/metrics: forwardedResponseIfTargetIsRemote usage
  • lxd/api/cluster: clusterNodeStatePost usage of forwardedResponseToNode
  • lxd/network/forwards: forwardedResponseIfTargetIsRemote usage
  • lxd/network/load/balancers: forwardedResponseIfTargetIsRemote usage
  • lxd/network/peer: forwardedResponseIfTargetIsRemote usage
  • lxd/networks: forwardedResponseIfTargetIsRemote usage
  • lxd/resources: forwardedResponseIfTargetIsRemote usage
  • lxd/storage/buckets: forwardedResponseIfTargetIsRemote usage
  • lxd/storage/pools: forwardedResponseIfTargetIsRemote usage
  • lxd/storage/volumes: forwardedResponseIfTargetIsRemote usage
  • lxd/storage/volumes/backup: forwardedResponseIfTargetIsRemote usage
  • lxd/storage/volumes/snapshots: forwardedResponseIfTargetIsRemote usage
  • lxd/acme: Reduce calls to d.State()
  • lxd/api: Reduce calls to d.State()
  • lxd/api/1.0: Reduce calls to d.State()
  • lxd/api/cluster: Reduce calls to d.State()
  • lxd/api/internal: Reduce calls to d.State()
  • lxd/api/internal/recover: Reduce calls to d.State()
  • lxd/api/metrics: Reduce calls to d.State()
  • lxd/api/project: Reduce calls to d.State()
  • lxd/api/vsock: Reduce calls to d.State()
  • lxd/backup: Reduce calls to d.State()
  • lxd/certificates: Reduce calls to d.State()
  • lxd/daemon: Adds StartTime to State
  • lxd/daemon: Reduce calls to d.State()
  • lxd/daemon/images: Decouple imageOperationLock and ImageDownload from daemon
  • lxd/devlxd: Assign d.State() to own variable
  • lxd/events: Assign d.State() to own variable
  • lxd: Update image functions to accept state.State rather than Daemon
  • lxd/network/forwards: Reduce calls to d.State()
  • lxd/network/load/balancers: Reduce calls to d.State()
  • lxd/network/peer: Reduce calls to d.State()
  • lxd/networks: Reduce calls to d.State()
  • lxd/resources: Reduce calls to d.State()
  • lxd/storage/buckets: Reduce calls to d.State()
  • lxd/storage/pools: Reduce calls to d.State()
  • lxd/storage/volume: Reduce calls to d.State()
  • lxd/storage/volumes/backups: Reduce calls to d.State()
  • lxd/storage/volumes/snapshot: Reduce calls to d.State()
  • doc/ref/devices_nic: Add queue.tx.length
  • lxd: liblxc.HasAPIExtension usage
  • lxd/instance/drivers/driver/lxc: Simplify Shutdown timeout handling
  • api: Adds cluster_member_state extension
  • shared/api: Adds StoragePoolState, ClusterMemberSysInfo and ClusterMemberState struct types
  • lxd/db/storage/pools: Exports StoragePoolCreated and StoragePoolPending constants
  • lxd/db: Storage pool state constant usage
  • lxd/storage/pool/load: Adds LoadByRecord and updates LoadByName to use it
  • lxd/cluster/member/state: Adds MemberState function
  • lxd/api/cluster: Adds clusterNodeStateGet handler
  • client: Adds GetClusterMemberState function
  • doc/rest-api: Refresh swagger YAML
  • lxc/cluster: Adds lxc cluster <member> info command
  • i18n: Update translation templates
  • test: Add basic test for lxc cluster info <member> command
  • lxd/db/images: Use explicit type for each argument in getNodesByImageFingerprint
  • lxd/db/instances: Remove use of c.GetNodeOfflineThreshold in GetProjectAndInstanceNamesByNodeAddress
  • lxd/instances/get: tx.GetProjectAndInstanceNamesByNodeAddress usage
  • lxd/operations: Remove use of tx.GetNodeOfflineThreshold
  • lxd/instances/get: Pass request context to transaction in doInstancesGet
  • lxd/instances/get: Don't pass daemon to doInstancesGet
  • lxd/api: Auto-forward to the UI if accessed from browser
  • lxd/api: Handle UI sub-paths
  • lxd/instances_post: Fix copying profiles during instance copy
  • lxc/migrate: Make live migration error message more helpful
  • doc/clustering: add link to YouTube video about cluster groups
  • Add mipsle and mips64le architecture aliases
  • lxd/cluster/member/state: Fix TotalRAM field in MemberState output
  • lxd/instance/drivers/driver/lxc: Comment typo and spacing
  • shared/util: Update RunCommandCLocale to pass LANGUAGE=en env var
  • doc/images: move out unrelated docs
  • test: Make unix device checks less flaky
  • lxd/api/cluster: Adds evacuateHostShutdownDefaultTimeout constant
  • lxd/api/cluster: Adds instance already stopped detection to restoreClusterMember
  • lxd/instance/drivers/driver/lxc: Switch log level to warn in networkState
  • lxd/instance/operationlock: Add support for never expiring timeouts
  • lxd/instance/drivers/driver/common: Adds more debug logging to onStopOperationSetup
  • lxd/instance/drivers/driver/lxc: Don't wait in liblxc for container to stop in Shutdown
  • lxd/instance/drivers/driver/lxc: Extend operation lock in onStopNS and onStop
  • lxd/instance/drivers/driver/lxc: Don't report intermediate state during ongoing operations
  • lxd/instance/drivers/driver/qemu: Avoid extra go routine to keep operationlock alive in Shutdown
  • lxd/instance/drivers/driver/qemu: Use constants in statusCode
  • lxc/action: Clarify --timeout and --force flags to lxc stop command
  • i18n: Update translation templates
  • drivers: Unify allowed filesystems variable
  • lxd/migration: Remove leftover stats definitions
  • doc/clustering: document lxc cluster info
  • lxd/instance/drivers/driver/qemu: Add QEMUDefaultCPUCores and export QEMUDefaultMemSize constants
  • lxd/storage: Exports DefaultBlockSize constant
  • lxd/api/cluster: Consistent import of github.com/lxc/lxd/lxd/instance/drivers
  • api: Adds instances_placement_scriptlet extension
  • gomod: Adds go.starlark.net/starlark
  • shared/api/scriptlet: Adds InstanceResources type
  • lxd/scriptlet/starlark: Adds StarlarkMarshal function
  • lxd/scriptlet: Adds instance placement scriptlet functions
  • lxd/cluster/config/config: Adds instances.placement.scriptlet global config option
  • lxd/cluster/config/config: Adds InstancesPlacementScriptlet function
  • lxd/api/1.0: Adds handler for loading scriptlet when instances.placement.scriptlet changes
  • lxd/daemon: Load instance placement scriptlet at start up
  • lxd/instances/post: Integrate instance placement scriptlet into instancesPost
  • lxd/api/cluster: Improve errors in evacuateClusterMember
  • lxd/api/cluster: Restructure evacuateClusterMember to accomodate future instance placement scriptlet integration
  • lxd/api/cluster: Integrate instance placement scriptlet into evacuateClusterMember
  • test: Adds instance placement scriptlet tests
  • doc: Rename clustering-assignment to clustering-instance-placement
  • doc: Adds instance placement scriptlet documentation
  • lxd/instance/drivers: Add location to instance creation event.
  • lxd/ip/link: Adds SetAllMulticast function
  • lxd/device/nic/macvlan: Enable all multicast processing on VM macvtap host interface
  • lxd/storage: Add location to local volume creation event.
  • lxd/storage/filesystem: Moves ResolveMountOptions to filesystem package
  • lxd/storage/drivers: filesystem.ResolveMountOptions usage
  • lxd/storage/drivers/utils: Removes unused resolveMountOptions function
  • lxd/device/disk: Fix incorrect splitting of raw.mount.options in createDevice
  • lxd/device/device/utils/disk: Removes readonly argument from DiskMount
  • lxd/device/device/utils/unix: DiskMount usage
  • lxd/instance/drivers/driver/qemu: device.DiskMount usage in Start
  • lxd/device/disk: DiskMount usage in createDevice
  • client: add TransportWrapper to ConnectionArgs
  • test: Update disk device tests to check for mount flag support in raw.mount.options
  • client: fix cast to http.Transport when using TransportWrapper
  • doc/server: bring back doc for net.core.bpf_jit_limit
  • doc/images: draft new structure for the images section
  • doc/images: move content
  • doc/metrics: greatly simplify the cluster's scrape_configs
  • lxd/db/node: s/containers/instances/
  • lxd/db/node/test: s/containers/instances/
  • lxd/db/node/test: s/container/instance/ in comments
  • lxd/backup : update the error message when "backup/index.yaml" can't be found
  • drivers: Add source indicator to Volume
  • storage: Add hasSource option to VolumeDBCreate
  • storage: Update VolumeDBCreate usage
  • lxd/storage/drivers/driver/btrfs/utils: Only check for minimum number of columns in btrfs qgroup show command
  • doc/storage: explain how optimized instance transfer works
  • doc/api: add related link to blog post about the LXD API
  • doc/index: give a better introduction to the online demo
  • doc/architectures: clean up architecture reference
  • lxd: allow IdmappedStorage() to detect filesystems
  • shared/api/scriptlet/instance: Adds InstancePlacement type and reason constants
  • lxd/scriptlet/instance/placement: Updates InstancePlacementRun to accept scriptlet.InstancePlacement argument
  • lxd/scriptlet/instance/placement: Removes unused constants
  • lxd/api/cluster: Avoid calling inst.Project() multiple times
  • lxd/api/cluster: Pass apiScriptlet.InstancePlacement to InstancePlacementRun
  • lxd/api/cluster: instProject.Name usage
  • lxd/instances/post: Pass apiScriptlet.InstancePlacement to InstancePlacementRun
  • test: Updates instance_placement tests for new function signature
  • doc: Updates instance placement scriptlet documentation for new placement function signature
  • lxd: Scriptlet API constant usage
  • lxd/cluster/gateway: Removes unimplemented Snapshot function
  • lxd/api/internal: Avoid calling d.gateway.Snapshot in internalRAFTSnapshot
  • lxd/scriptlet/instance/placement: Tweak error prefix when scriptlet fails
  • doc: use "entity" instead of "object" to avoid confusion
  • doc: use "directory" instead of "folder" for consistency reasons
  • drivers: Add Volume.Clone function
  • test: Updates instance placement tests to show usage of fail() call to end scriptlet with error
  • storage: Use Volume.Clone() in Pool.GetVolume()
  • test: Updates instance placement tests to check for config in embedded struct
  • lxd/scriptlet/starlark: Updates StarlarkMarshal to handle more starlark.Value types
  • lxd/scriptler/starlark: Update StarlarkMarshal to sort map keys
  • lxd/scriptlet/starlark: Update StarlarkMarshal to support anonymous non-struct fields
  • lxd/scriptlet/starlark/test: Adds tests for StarlarkMarshal function
  • doc/images: Clean up "About images"
  • lxd: hotplug mounts
  • Makefile: Immediately fail on lint errors
  • lxd: User friendly error for missing volume.
  • backend_lxd: Pass config when creating instance from backup
  • backend_lxd: Pass config when renaming instances and custom volumes
  • volume: Update IsBlockBacked
  • backend_lxd: Check vol.IsBlockBacked
  • lvm: Fix logging
  • ceph: Set mountFilesystemProbe to true in ListVolumes
  • lvm: Set mountFilesystemProbe to true in ListVolumes
  • storage: Drop call to Volume.SetMountFilesystemProbe
  • doc/images: Clean up "How to use remote images"
  • doc/images: Clean up "Remote image servers"
  • lxd/scriptlet/starlark: Updates StarlarkMarshal to handle multi-level embedded structs
  • client: Allow empty target if storage location is 'none'.
  • lxc/storage_volume: Fixes --destination-server flag when copying between remotes.
  • i18n: Updates translations.
  • lxd/apparmor: fix AppArmor forkproxy profile
  • lxd/db: Remove needless semi-colons in queries
  • lxd/instance/drivers/driver/lxc: s/container/instance/
  • backend_lxd: Handle zvols in EnsureImage
  • zfs: Support block mode
  • test: Add zfs storage tests
  • lxc/migration: Update protobuf with zfs zvol support
  • lxd/migration: Add HeaderZvols feature
  • migration,storage: Check zvol support
  • lxd/scriptlet/starlark: Updates StarlarkMarshal to marshal structs to Starlark objects
  • lxd/scriptlet/starlark/test: Updates StarlarkMarshal tests to account for struct->object conversion
  • test: Updates test_clustering_instance_placement_scriptlet to account for struct->object conversion
  • doc: Updates instance placement scriptlet documentation to account for struct->object conversion
  • lxd/api/1.0: Improve errors
  • lxd/db/images: Removes unused GetExpiredImagesInProject function
  • lxd/images: Reworks pruneExpiredImages to not remove image files/volumes until image is expired in all projects
  • device: managed network support physical nic
  • doc: managed network support physical nic
  • test: managed network support physical nic
  • lxd/instance/drivers/driver/lxc: Remove erroneous empty log error
  • device/disk: Don't use RBD for FS custom volumes
  • cgroup: properly set soft mem limit for cgroup-v2
  • test: Updates image expiry tests to check for proper project handling
  • instance: differentiate msg for creation/deletion of snapshots
  • lxd/storage/backend/lxd: Fixed incorrect logic in EnsureImage that was breaking BTRFS tests
  • lxd/storage/backend/lxd: Improve log message in EnsureImage
  • lxd/storage/backend/lxd: Don't update image volume's description to pool's description in EnsureImage
  • btrfs: Restructure optimized refresh
  • btrfs: Set parent correctly for optimized refresh
  • lxd/db/db/cluster: Fixes incorrect UNIQUE index on name field of networks_zones_records
  • lxd/network/zones/records: Fix zone record management for non-default project zones
  • test: Updates dns zones tests to check for non-default project zone records
  • test: basic: skip seccomp tests if we are under seccomp filter
  • tests: syscall_interception: disable if seccomp filtering is active
  • doc/images: Clean up "Manage images"
  • doc/images: Clean up "Create images"
  • doc/images: Clean up "Copy and import images"
  • doc/images: Clean up "Associate profiles" section
  • doc/images: Clean up "Image format"
  • ceph: Check ceph config file for key
  • lxd/apparmor: Add microceph to ceph paths
  • lxd/db/network/forwards: Updates GetProjectNetworkForwardListenAddressesByUplink to handle forwards defined on uplink network itself
  • lxd/db/network/load/balancers: Updates GetProjectNetworkLoadBalancerListenAddressesByUplink to handle load balancers defined on the uplink network itself
  • lxd/network/driver/common: Adds shared getExternalSubnetInUse function
  • lxd/network/driver/bridge: Updates getExternalSubnetInUse to use common getExternalSubnetInUse function
  • lxd/network/driver/ovn: Updates getExternalSubnetInUse to use n.common.getExternalSubnetInUse
  • lxd/network/driver/ovn: Clarify address conflict errors
  • lxd/main_init_interactive: Remove trust passwords
  • gomod: Update dependencies
  • i18n: Update translations from weblate

Try it for yourself

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

Downloads

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

LXD 5.0.2 LTS has been released

20th of January 2023

Introduction

The LXD team is pleased to announce the release of LXD 5.0.2!

This is the second bugfix release for LXD 5.0 which is supported until June 2027.

Bugfixes and improvements

This release includes a couple of months worth of bugfixes and minor improvements from the development branch.

Some of the highlights include:
- Support for cluster token expiry
- Support for remote token expiry
- Extended image filtering in the CLI
- Support for overriding the devices list during lxc init and lxc launch
- Support for restricting a project to a set of networks
- Support for VM CPU hotplug

As usual, all of those are considered to be minor usability improvements or relevant to LXD's security. Major features such as those requiring data migration or database changes are never backported as part of an LTS point release.

The full list of commits is available below:

Detailed changelog
  • 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
  • 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
  • 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
  • shared/api: Adds storage pool bucket API types
  • client/lxd/storage/buckets: Client functions for bucket management
  • shared/api/event/lifecycle: Add bucket constants
  • doc/rest-api: Refresh swagger YAML
  • test: Document LXD_CEPH_CEPHFS option
  • lxd/network/driver_ovn: Fixes impossibility to set MTU for a pair of veths connecting uplink and ovs-system bridges
  • 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/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
  • gomod: Update dependencies
  • lxd/db/generate/db/method: Fix lxd-generate typo
  • Revert "lxd/instances/post: Use lxd-generate for cluster_groups"
  • lxd/db/cluster: cluster.Stmt usage
  • Revert "lxd/db/cluster/nodes/cluster/groups.mapper: Add NodeClusterGroup generation"
  • Doc: Fix typo in howto/storage_backup
  • gomod: Update dependencies
  • Makefile: Pin xgettext-go to working version
  • doc: backquote true and NO_PROXY in doc/server.md
  • doc: backquote instance types in events.md
  • doc: backqoute cloud-init in doc/cloud-init.md
  • Doc: replace Pongo with Pongo2 in doc/image-handling.md
  • doc: Capitalize fuse to FUSE in doc/instances.md
  • doc: Capitalize candid in doc/api-extensions.md
  • doc: Use more backquotes in documents
  • doc: Capitalize MAC filtering in doc/instances.md
  • doc: Improve uses of backquotes in documents
  • Doc: update using backquotes by review suggestions
  • lxd/instance/drivers: Adds storage pool to instance-created lifecycle context.
  • doc: Note AIO requirement
  • lxd/db/generate/db/stmt: Add braces around WHERE clause
  • lxd/db/cluster/devices: Add Filter structs to Config/Devices
  • lxd/db/generate/db/parse: Generate queries with multiple filters
  • lxd/db/cluster/mapper: Update generated code
  • lxd/instance/instancetype/instance/type: Add instancetype.Filter
  • lxd: Remove usage of empty filter structs
  • doc/storage: group the pool/volume/bucket information
  • doc: remove FAQ about live migration
  • doc/migration: add link to lxd-migrate tutorial on Discourse
  • doc/upgrading: clarify database updates
  • doc/storage/btrfs: add YouTube link
  • doc/storage/lvm: add YouTube link
  • client: Update CreateStoragePoolBucket to return create-time admin key
  • doc/storage: make navigation titles more consistent
  • api: metric: lxd_cpu_seconds_total: fix help text, floats
  • lxd/db/generate/db/method: Fix external package support
  • lxd/db/generate/db/stmt: Add joinon tag
  • lxd/db/generate/db/stmt: Don't allow joins and leftjoins at the same time
  • lxd/db/generate/db/stmt: Use joinon tag for ID query generation
  • lxd-generate: Adds method to get table and column from join config.
  • lxd-generate: Use join table in order by clause.
  • lxd-generate: Use join table config in create statement subselect.
  • lxd-generate: Use join table config in update statement subselect.
  • lxd-generate: Updates whereClause to use join config.
  • lxd/db/generate: Use joinTable
  • lxd: Change project rename response to operation in swagger.
  • doc: Regenerate swagger.
  • lxd/storage/utils: Improve errors
  • lxd/storage/utils: Return explicit nil on error in VolumeDBGet
  • lxd/storage/utils: Prevent using VolumeDBCreate to create bucket volume records
  • lxd/storage/drivers/volume: Adds VolumeTypeBucket type
  • lxd/storage/drivers/bucket: Adds bucket type
  • lxd/storage/drivers/bucket: Add S3Credentials type
  • lxd/storage/drivers: Adds bucket management functions
  • lxd/storage/drivers/driver/cephobject: Adds cephobject storage pool driver type
  • lxd/storage/drivers/driver/cephobject: Fix detection of missing lxd-admin radosgw user
  • lxd/storage/drivers/driver/cephobject/buckets: Create admin radosgw-admin user if missing in CreateBucket
  • lxd/storage/drivers/interface: Use Volume type for bucket functions
  • lxd/storage/drivers/driver/common: Updates bucket functions to accept Volume type
  • lxd/storage/drivers/driver/cephobject/buckets: Use consistent minio s3 client context names
  • lxd/storage/drivers/driver/cephobject: Improved comments
  • lxd/storage/drivers/driver/cephobject/buckets: Updates to use Volume type for bucket config
  • lxd/storage/drivers/bucket: Removes unused Bucket type
  • doc/requirements: correct statement about AIO
  • lxd/storage/drivers/driver/zfs: Adds ensureInitialDatasets function
  • lxd/storage/drivers/driver/cephobject/buckets: Ensure context cancel is run after revert.Fail
  • doc: improve systemd-resolved integration by adding stop command
  • doc: resolvectl status doesn't require sudo
  • doc: remove sentence about disk support for VMs
  • doc/network: add note that static leases require MAC as identifier
  • doc/storage/volumes: add --all-projects to documentation
  • lxd/apparmor: Deref compress commands
  • shared/api/event/lifecycle: Add instance ready constant
  • doc: add configuration and script for markdownlint
  • doc: add a target for running markdownlint
  • doc: add an action to run markdownlint on the docs
  • doc: fix markdown errors for MD022
  • doc: fix markdown errors for MD004-MD007
  • doc: fix markdown errors for MD034
  • doc: fix markdown errors for MD032
  • doc: fix markdown errors for MD012
  • doc: fix markdown errors for MD031
  • doc: fix markdown errors for MD027
  • doc: do not use emphasis
  • doc: fix markdown errors for MD026
  • doc: fix markdown errors for MD038
  • doc: fix markdown errors for MD010
  • doc: fix markdown errors for MD038
  • doc: fix markdown errors for MD002
  • lxd/device: Support physical infiniband for VMs
  • doc: add related links to the start page
  • test: Add 60s timeout to lxc commands
  • test: Add clean up of storage buckets in kill_lxd
  • scripts/empty-lxd.sh: Add emptying of storage buckets
  • test: Allow automatic removal of loop devices in deconfigure_loop_device
  • lxd/db/networks: Removes unused NetworkNodes function
  • lxd/db/storage/pools: Removes unused StoragePoolNodes function
  • lxd/instance/drivers/driver/lxc: Removes profiles argument from lxcLoad
  • lxd/instance/drivers/driver/common: Removes profiles argument from expandConfig
  • lxd/instance/drivers/driver/qemu: Removes profiles argument from qemuLoad
  • lxd/instance: Removes profiles argument from load
  • lxd: instance.Load usage
  • lxd/profiles/utils: instance.Load usage in doProfileUpdateInstance
  • lxd-agent/server: Log original error during write error in createCmd
  • lxd/daemon: Log original error during write error in createCmd
  • lxd/operations/websocket: Don't return close errors in Render
  • lxd/instance/drivers: Change common.Project from string to api.Project type
  • lxd/instance: Updates instance load functions to accept api.Project
  • lxd/device/disk: instance.Load usage
  • lxd/project/permissions: Update AllowSnapshotCreation to accept api.Project
  • lxd/instance: instance.Load and project.AllowSnapshotCreation usage
  • lxd/instance/snapshot: project.AllowSnapshotCreation usage
  • lxd/instances: instance.Load usage
  • lxd/storage/backend/lxd: instance.Load usage
  • lxd/storage/utils: Updates VolumeUsedByProfileDevices to pass api.Project to callback function
  • lxd/storage/volumes/utils: storagePools.VolumeUsedByProfileDevices and instance.Load usage
  • lxd/profiles/utils: Updates profile management functions to load projects
  • lxd/profiles/utils: Fix incorrect handling of error in doProfileUpdate
  • lxd/storage/volumes/snapshot: project.AllowSnapshotCreation usage
  • lxd/storage/volumes: instance.Load usage
  • lxd/project/project: Updates ProfileProject to return effective api.Project info
  • lxd/profiles: project.ProfileProject usage
  • lxd/project/project: Updates NetworkProject to return requested project's info
  • lxd/networks: NetworkProject usage
  • lxd/instance: Change Project() to return api.Project
  • lxd/instance: inst.Project() usage
  • lxd/device/disk: inst.Project() usage
  • lxd/device/proxy: inst.Proxy() usage
  • lxd/device: inst.Project() usage
  • lxd/backup: inst.Project() usage
  • lxd/seccomp: inst.Project() usage
  • lxd/maas: inst.Project() usage
  • lxd/lifecycle: inst.Project() usage
  • lxd/network: inst.Project() usage
  • lxd/storage/backend/lxd: inst.Project() usage
  • lxd/apparmor: inst.Project() usage
  • lxd: inst.Project() usage
  • lxc-to-lxd: Handle linux32 and linux64 arch personalities
  • doc/network/bgp: add some clarifications to the BGP docs
  • doc/metrics: add a list of provided metrics
  • gomod: Update dependencies
  • lxd/storage/drivers/driver/dir: Add bucket support
  • lxd/storage/drivers/driver/lvm: Add bucket support
  • lxd/storage/drivers/driver/btrfs: Add bucket support
  • lxd/storage/drivers/driver/zfs: Add bucket support
  • lxd/storage/drivers/driver/dir/volumes: Don't allow creating a volume that already exists on disk
  • lxd/storage/drivers/volume: Create bucket local storage volumes using same permissions as custom volumes
  • lxd/storage/drivers/driver/zfs: Don't fail Mount if policy cannot be applied to existing datasets
  • lxd/storage/drivers: move from io/ioutil to io and os packages
  • lxd/storage/drivers/driver/zfs: Fix incorrect mount dataset policy error check
  • lxd/storage/drivers/driver/zfs/volumes: Allow zfs.blocksize to control volblocksize
  • lxd/storage/drivers/volume: Use roundVolumeBlockFileSizeBytes in ConfigSizeFromSource
  • lxd/storage/drivers/volume: Update Test_Volume_ConfigSizeFromSource tests
  • lxd/storage/drivers/interface: Add roundVolumeBlockSizeBytes definition to Driver interface
  • lxd/storage/drivers/driver/common: Move roundVolumeBlockSizeBytes to common driver
  • lxd/storage/drivers: pool driver roundVolumeBlockSizeBytes usage
  • lxd/storage/drivers/utils: Removes unused roundVolumeBlockFileSizeBytes function
  • lxd/storage/drivers/driver/lvm: Overrides roundVolumeBlockSizeBytes function
  • lxd/storage/drivers: Make using volSrcArgs.{MultiSync|FinalSync} with MigrateVolume an error
  • lxd/storage/drivers/driver/zfs/volumes: Remove unused multi-sync logic from migrateVolumeOptimized
  • lxd/storage/drivers/driver/zfs/volumes: Use deferred option for deleting temporary snapshots
  • lxd/storage/drivers/utils: Use consistent error quoting in TryUnmount
  • lxd/storage/drivers/driver/zfs/volumes: Use existing dataset var in UnmountVolume
  • lxd/storage/drivers/driver/ceph/volumes: Don't expect multi-sync for live optimized transfer in CreateVolumeFromMigration
  • lxd/storage/drivers/driver/ceph/volumes: Don't allow multi-sync for optimized transfer in MigrateVolume
  • lxd/storage/drivers/interface: Make HasVolume return an error
  • lxd/storage/drivers/driver/btrfs/volumes: HasVolume usage
  • lxd/storage/drivers/driver/ceph: HasVolume usage
  • lxd/storage/drivers/driver/cephfs: HasVolume usage
  • lxd/storage/drivers/driver/common: HasVolume usage
  • lxd/storage/drivers/driver/dir: HasVolume usage
  • lxd/storage/drivers/driver/lvm: HasVolume usage
  • lxd/storage/drivers/driver/mock: HasVolume usage
  • lxd/storage/drivers/driver/zfs: Renames checkDataset to datasetExists
  • lxd/storage/drivers/generic/vfs: Updates genericVFSHasVolume to return an error
  • lxd/storage/drivers/driver/ceph: Adds placeholder volume exists check for Mount
  • lxd/storage/drivers/driver/ceph/volumes: Updates hasVolume to return an error
  • lxd/storage/drivers/driver/ceph: Adds 10s timeout to GetVolumeUsage and rbdMapVolume
  • lxd/storage/drivers/driver/zfs: Improve error when existing zpool isn't empty
  • lxd/storage/drivers/driver/btrfs/utils: Fix getQGroup to suport BTRFS >= 6.0.1
  • lxd/storage: Disable io_uring on ZFS
  • lxd/storage/ceph: Remove osd map timeout
  • lxd/storage/drivers: Renames BucketURL to GetBucketURL for consistency
  • lxd/storage/drivers/driver/types: Adds Buckets field to Info
  • ceph: Drop unnecessary volume.block.* config keys
  • lxd/storage/drivers: Fix radosgw typo
  • lxd/instance/drivers/driver/qemu: Adds support for multi-queue macvlan NICs in VMs
  • lxd/backup: Add Profiles field do Config struct
  • lxd/storage: Add profiles to backup data
  • lxd/db/generate/db/parse: Add ParseStmt
  • lxd/db/generate/db/stmt: Parse 'objects' directive result to create 'objects-by'
  • lxd/db/cluster/instance/profiles: Add 'objects' directive for instance_profiles and certificate_projects
  • lxd/db/generate/README: Add lxd-generate README
  • lxd/db/cluster/mapper: Update generated code
  • doc/migration: Document lxc-to-lxd tool
  • api: Adds projects_networks_restricted_access extension
  • doc/projects: Documents restricted.networks.access
  • lxd/api/project: Adds restricted.networks.access
  • lxd/project/project: Adds NetworkAllowed function
  • lxd/network: Uses project.NetworkAllowed to check access to networks
  • lxd/networks: Prevent creation of managed networks not accessible by project
  • doc/storage/dir: add link to the YouTube video
  • lxd/project/permissions: Updates checkRestrictions to check NICs against restricted.networks.access setting
  • test: Updates project restrictions tests to check for restricted.networks.access setting
  • lxd/apparmor: allow rw access to /sys/fs/bpf
  • lxd/db/generate/db/mapping: Add field-to-sql clause conversion helpers
  • lxd/db/generate/db/stmt: Rework statement generation
  • lxd/db/cluster/nodes: Generate ID statement for nodes
  • lxd/db/cluster/snapshots: Remove 'via' tag and replace with 'joinon' tag
  • lxd/db/cluster/mapper: Update generated code
  • lxd/db/generate/db/stmt: Expect full database package path in arguments
  • lxd/db/generate/db/stmt: Fallback to database package for parsing existing variables
  • lxd/db/generate/README: Update lxd-generate README
  • lxd/network/driver/bridge: Consider a dnsmasq start failure as a network start failure
  • lxd/warnings: Fix lxc warning show
  • doc: move live migration content
  • doc: cosmetic changes
  • lxc/config/default: Change DefaultConfig to a function
  • lxc/config: DefaultConfig usage
  • test: Add tests to check for lxc warning show functionality
  • doc/migration: clarify how to enable live migration for VMs
  • GetAllXattr: handle overlay filtering
  • lxd/db: Remove GetLocalStoragePoolVolumes and storagePoolVolumesGet functions
  • lxd/db/storage/pools: Removes GetStoragePoolVolume
  • lxd/storage/utils: Updates VolumeDBGet to return *db.StorageVolume and use tx.GetStoragePoolVolume
  • lxd/storage/backend/lxd: Replace b.state.DB.Cluster.GetLocalStoragePoolVolume with VolumeDBGet usage
  • lxd/api/internal: Replace d.db.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/cluster/connect: Replace s.DB.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/daemon/storage: Replace s.DB.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/db/storage/volume/snapshots: Replace c.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/db/storage/volumes: Replace c.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/device/disk: Replace d.state.DB.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/storage/pool/load: Replace state.DB.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/storage/volumes: Replace d.db.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/storage/volumes/backup: Replace d.db.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/storage/volumes/snapshot: Replace d.db.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/storage/volumes/state: Replace d.db.Cluster.GetLocalStoragePoolVolume with tx.GetStoragePoolVolume usage
  • lxd/db/storage/volumes: Removes inefficient storagePoolVolumeGetType and associated functions
  • lxd/db: Removes storageVolumeIDsGet and storagePoolVolumeReplicateIfCeph
  • lxd/db/generate/db/mapping: Use 'join' tag to deduce column name
  • lxd/db/generate/db/mapping: Override joined column name with 'joinon' tag
  • shared/subprocess/proc: Adds context support
  • shared/subprocess/manager: Removes redundant error return value from NewProcessWithFds
  • lxd/archive/archive: subprocess usage
  • lxd/device: subprocess usage
  • lxd/instance/drivers/driver/qemu: subprocess usage
  • lxd/network/driver/bridge: subprocess usage
  • lxd/apparmor/archive: Use non-deferenced outputPath to derive profile name in archiveProfile
  • shared/logger/log: Don't modify the global logrus standard logger
  • shared/util/linux: Update GetAllXattr implementation using github.com/pkg/xattr
  • gomod: Update dependencies
  • shared/idmap/idmapset/linux: Improve errors in doUidshiftIntoContainer
  • shared/idmap/idmapset/linux: Go vet fixes in doUidshiftIntoContainer
  • lxd: Fix calls to inst.Project().Name when used in fmt.Sprintf and related functions
  • Makefile: Fix shellcheck version detection
  • Makefile: Use same pinned version of golangci-lint as github workflows
  • lxd/db/generate/db/method: Use QueryRowContext for one-row queries
  • lxd/db/cluster/mapper: Update generated code
  • lxd/db/query/objects: Include context in db query helpers
  • lxd/db/generate/db/method: Pass context to query helpers
  • lxd/db/cluster/mapper: Update generated code
  • lxd/test: Update tests
  • lxd/db/db: Include context in node Transaction
  • lxd: Update node.Transaction usages
  • lxd: Pass node transaction ctx to query helpers
  • lxd/db/schema/schema: Add context to schema updates
  • lxd: Pass transaction ctx through to query helpers
  • lxd/firewall/drivers/drivers/nftables: Pass rules via stdin rather than as command arguments
  • lxd/networks: Don't log all networks initialized if they weren't yet
  • lxd/db/cluster: Fix build
  • lxd/networks: Start deferred networks depending on physical interfaces before logical ones
  • lxd/storage/backend/lxd: Log pool names in Mount and Unmount
  • lxd/db/query/retry: Don't log not found errors in Retry
  • lxd/network/openvswitch/ovn: Check that the chassis is a member of the correct chassis group in ChassisGroupChassisDelete
  • lxd/db/images: Adds project support to UpdateImageLastUseDate
  • lxd/db/images: Adds project and custom last used date support to SetImageCachedAndLastUseDate
  • lxd/db/images: Make CreateImage project argument and explicit string type
  • lxd/images: d.db.Cluster.SetImageCachedAndLastUseDate usage
  • lxd/daemon/images: d.db.Cluster.SetImageCachedAndLastUseDate usage
  • lxd/daemon/images: Ensure cached property is maintained when using existing image from another project
  • lxd/instance: s.DB.Cluster.UpdateImageLastUseDate usage
  • test/README: Use backticks for test env var options
  • test/README: Clarify options which enable tests
  • test/README: Removes unused LXD_SKIP_STATIC
  • test: Adds LXD_SKIP_TESTS env var option
  • lxd/db: Replace usage of QueryRow with QueryRowContext
  • lxd/db: Add context arg to more tx methods
  • lxd/db: Replace tx.Query with tx.QueryContext
  • lxd: Pass transaction ctx to QueryContext
  • lxd/patches: Use context.TODO for db patch calls to query helpers
  • lxd/test: Update tests
  • lxd/db/generate/db/method: Remove superfluous error check for GetID
  • lxd/db/cluster/mapper: Update generated code
  • lxd/device: Support sr-iov infiniband for VMs
  • doc/instances: Add VM to supported instance types for infiniband devices
  • build(deps): bump actions/checkout from 2 to 3
  • build(deps): bump actions/setup-go from 2 to 3
  • doc/performance: create new pages
  • doc/performance: move content from production setup
  • shared/osarch: Improve 32bit arm handling
  • shared/validate/validate: Add IsX509Certificate validator
  • shared/validate/validate: Remove List validators
  • lxd/network/driver/physical: Update usages
  • lxd/network/driver/physical: Fix ipv4.routes validation
  • doc: update footer to display correctly
  • test: Adds LXD_REQUIRED_TESTS support
  • lxd/device/device/common: Fix project name in device logger
  • doc/security: edit information about name leakage
  • doc/performance: clean up information about txqueuelen
  • doc/performance: clean up page about production setup server settings
  • doc/performance: move production setup page
  • doc/metrics: make part of the Metrics documentation reusable
  • doc/performance: update the performance tuning information
  • doc/spellcheck: add benchmarking to wordlist
  • Drop replace directive in go.mod
  • client: Handle nil args in CopyImage
  • doc/performance: add how-to guide for benchmarking
  • doc/lxc-to-lxd: update installation command
  • doc/storage: add information about special custom volumes
  • doc/storage: add link to YouTube video about storage volumes
  • doc/storage: add links between storage documentation
  • doc/instance API: add link to YouTube video
  • lxd/events: Add simpleListenerConnection
  • lxd/events: Remove closed listeners
  • lxd/events: Add internal listener
  • lxd/daemon: Add internal event listener to Daemon
  • doc: split the "doc" target into setup and building
  • doc: set up linkcheck and exceptions
  • doc: fix links that the link checker regards as broken
  • lxd-agent: Only unblock systemd once /dev/lxd/sock is started
  • doc: add linkchecker to the GitHub actions
  • doc: update IRC link
  • lxd/apparmor/instance: allow reading /proc/pid/cpuset
  • tests: Respect LXD_SHIFTFS_DISABLE
  • lxd/cgroup/abstraction: Update GetIOStats to be more flexible
  • lxd/events: Ensure internal listener is only running once
  • docs: Added snap version directory for global remotes
  • test: Fix manual shifting protection tests by disabling kernel shifting
  • lxd/apparmor: apparmor profile for qemu-img
  • lxd: Replace readyChan with waitReady canceller
  • lxd: Improve comments
  • lxd/api: Don't serve API requests that cause volume mounts until daemon is fully started
  • lxd/daemon: Don't wrap line
  • lxd/daemon: Move Ready function into init function
  • lxd: Only load all instances once during init()
  • lxd/instance/drivers/driver/qemu: Dont offer VM support if /dev/vsock is missing
  • lxd/device/proxy: Allows hot plugging proxy device (in nat mode) for VMs
  • doc/header: update to new menu style for linuxcontainers.org
  • shared/validate: Add IsCloudInitUserData and IsYAML
  • shared/instance: Validate cloud-init config keys
  • Allow forwarded traffic to the lxd bridge for proxy nat devices
  • lxd/db: Fix build
  • lxd/network/network/utils: Exports UsedByInstanceDevices
  • lxd/network/driver/ovn: UsedByInstanceDevices usage
  • lxd/device/nic/ovn: Add duplicate static address check
  • lxd/network/driver/ovn: Adds parseRouterIntPortIPv4Net and parseRouterIntPortIPv6Net functions
  • lxd/network/driver/ovn: Fix typo in Leases
  • lxd/network/driver/ovn: Use isInUseByDevice in Leases
  • Add client.Operation.WaitContext
  • Use WaitContext in client.operation.Wait
  • lxd/storage_volumes: Fix API documentation
  • lxd/instance_backup: Fix bad swagger data
  • lxd/instance_snapshot: Fix bad swagger data
  • doc/rest-api: Refresh swagger YAML
  • lxd/migration: update proto bindings
  • lxd: use go-criu/crit for dump statistics
  • lxd/migration: remove stats protobuf definitions
  • lxd/network/openvswitch/ovn: Update LogicalSwitchPortSetDNS to accept IPs for DNS records directly
  • lxd/network/driver/ovn: Updated client.LogicalSwitchPortSetDNS usage
  • lxd/network/driver/ovn: Renames InstanceDevicePortSetup and InstanceDevicePortDelete
  • lxd/device/nic/ovn: InstanceDevicePortStart and InstanceDevicePortStop usage
  • lxd/network/driver/ovn: Adds getDHCPv4Reservations function
  • lxd/network/driver/ovn: Build DHCPv4 reservation list during setup
  • lxd/network/openvswitch/ovn: Adds LogicalSwitchDHCPv4RevervationsSet and logicalSwitchParseExcludeIPs functions
  • lxd/network/openvswitch/ovn: Adds LogicalSwitchDHCPv4RevervationsGet function
  • lxd/network/openvswitch/ovn: Updates LogicalSwitchPortDeleteDNS and logicalSwitchPortDeleteDNSAppendArgs to optionally clear DNS names but leave entry
  • lxd/network/driver/ovn: Updates client.LogicalSwitchPortDeleteDNS usage
  • lxd/network/openvswitch/ovn: Check for non-empty DNS UUID in LogicalSwitchPortCleanup
  • lxd/network/driver/ovn: Adds InstanceDevicePortAdd and InstanceDevicePortRemove functions
  • lxd/device/nic/ovn: Wire up InstanceDevicePortAdd and InstanceDevicePortRemove
  • lxd/network/driver/ovn: Ensures DHCPv4 reservation exists if needed in InstanceDevicePortStart
  • doc/header: use color variables to support dark theme
  • client: move from io/ioutil to io and os packages
  • lxc: move from io/ioutil to io and os packages
  • lxc-to-lxd: move from io/ioutil to io and os packages
  • lxd/apparmor: move from io/ioutil to io and os packages
  • lxd/archive: move from io/ioutil to io and os packages
  • lxd/backup: move from io/ioutil to io and os packages
  • lxd/cgroup: move from io/ioutil to io and os packages
  • lxd/cluster: move from io/ioutil to io and os packages
  • lxd/db: move from io/ioutil to io and os packages
  • lxd/device: move from io/ioutil to io and os packages
  • lxd/dnsmasq: move from io/ioutil to io and os packages
  • lxd/endpoints: move from io/ioutil to io and os packages
  • lxd/instance/drivers: move from io/ioutil to io and os packages
  • lxd/migration: move from io/ioutil to io and os packages
  • lxd/network: move from io/ioutil to io and os packages
  • lxd/resources: move from io/ioutil to io and os packages
  • lxd/rsync: move from io/ioutil to io and os packages
  • lxd/seccomp: move from io/ioutil to io and os packages
  • lxd/storage: move from io/ioutil to io and os packages
  • lxd/sys: move from io/ioutil to io and os packages
  • lxd/template: move from io/ioutil to io and os packages
  • lxd/util: move from io/ioutil to io and os packages
  • lxd: move from io/ioutil to io and os packages
  • lxd-agent: move from io/ioutil to io and os packages
  • lxd-benchmark/benchmark: move from io/ioutil to io and os packages
  • lxd-migrate: move from io/ioutil to io and os packages
  • lxd-user: move from io/ioutil to io and os packages
  • shared: move from io/ioutil to io and os packages
  • test: move from io/ioutil to io and os packages
  • scripts/bash/lxd-client: Add missing network sub-commands
  • lxd/apparmor/qemuimg: Fix QemuImg when using symlinks
  • lxd/storage/utils: Fix error in ImageUnpack
  • lxd/apparmor/qemuimg: Fix qemuImgProfileTpl policy to support snap
  • doc/linting: fix failures about indentation for unordered lists
  • lxd/vsock: Add ContextID()
  • lxd-agent: Restart server on CID change
  • lxd-agent: Fix imports
  • lxd/instance/drivers/driver/qemu: comment typo
  • lxd-agent: Fix filesystem metrics
  • lxd/endpoints: Unexport clusterAddress to avoid confusion
  • lxd/state/state: Add LocalConfig to State
  • lxd/daemon: Add localConfig to Daemon struct
  • lxd/api/1.0: Update daemon localConfig variable on config update
  • lxd/api/cluster: Update daemon localConfig when it changes in DB
  • lxd/cluster: Use state.LocalConfig.ClusterAddress()
  • lxd/cluster: Update tests to populate state.LocalConfig
  • lxd: Use d.State().LocalConfig.ClusterAddress
  • lxd/node/config/test: Remove use of node.ClusterAddress
  • lxd/patches: Remove use of node.ClusterAddress
  • lxd/cluster/gateway: Adds state to Gateway
  • lxd/cluster/heartbeat: g.state().LocalConfig.ClusterAddress() usage
  • lxd/daemon: Pass State to gateway
  • lxd/api/cluster: d.State().LocalConfig.ClusterAddress() usage
  • lxd/node/config: Removes unused ClusterAddress function
  • lxd/cluster: Removed serverCert from NewGateway as can be accessed from state
  • lxd/daemon: NewGateway usage
  • lxd/instance/instance/utils: Update ValidDevices signature
  • lxd/instance/drivers/load: Updates validDevices to accept local and expanded config
  • lxd/profiles: instance.ValidDevices usage
  • lxd/instance/drivers: instance.ValidDevices usage
  • lxd/instance/drivers: Handle device.ErrUnsupportedDevType when loading device
  • lxd/cluster/heartbeat: Ensure state.LocalConfig is available in heartbeat
  • lxd/api/1.0: s.LocalConfig.HTTPSAddress usage
  • lxd/api/cluster: Consistent naming of local config variables in clusterPutBootstrap
  • lxd/instances/put: Use local cluster address for local cluster member identification in instancesPut
  • lxd/network/driver/bridge: Use local cluster address for local cluster member identification in HandleHeartbeat
  • lxd/cluster: Consistent naming of local config variables
  • lxd/daemon: Consistent naming of local config variables
  • lxd/api/cluster: s.LocalConfig.HTTPSAddress usage
  • lxd/certificates: d.State().LocalConfig.HTTPSAddress() usage
  • lxd/main/activateifneeded: Remove usage of node.HTTPSAddress
  • lxd/node/config/test: Remove usage of HTTPAddress
  • lxd/node/config: Remove HTTPSAddress function
  • lxd/init: Remove unnecessary duplicate network load request in initDataNodeApply
  • lxd/api/cluster: Fixes clusterCertificatePut to use tx.GetNodes to get all members
  • lxd: Allow API paths without version
  • lxd/cluster: Use consistent members terminology when using tx.GetNodes
  • lxd/api/cluster: Use consistent members terminology when using tx.GetNodes
  • lxd/db/db: Use consistent members terminology when using tx.GetNodes
  • lxd/instances/put: Use consistent members terminology when using tx.GetNodes
  • lxd/network/driver/ovn: Use consistent members terminology when using tx.GetNodes
  • lxd: Use consistent members terminology when using tx.GetNodes
  • lxd/api/internal: Only use backup file to instantiate instance if DB not available
  • lxd/instance/operationlock: Adds ActionDelete constant
  • lxd/instance/drivers: Create operation lock in Delete
  • client/lxd/images: Updates CreateImage to stream files from disk to server
  • lxd/instance/drivers/driver/common: Sort snapshots by ID if creation datetime matches
  • lxd/instance/exec: Use cancel.Canceller instead of context
  • lxd/instance/exec: Fix comment typo
  • lxd/instance/exec: Convert attachedChildIsDead channel to cancel.Canceller
  • shared/netutils/network/linux: Update WebsocketExecMirror to support the channel returned from context.Done()
  • lxd/events/connections: Use time.NewTicker in Reader
  • lxd/migrate: Don't shadow error in Connect
  • client/lxd: Set TCP timeout options in rawWebsocket
  • lxd/instance/exec: Adds TCP and application level keepalives and timeouts to each websocket
  • client/lxd/instances: Don't modify err in rawSFTPConn when getting underlying TCP connection
  • doc/storage: add video links
  • lxd/network/driver/bridge: Don't set BridgeVLANSetDefaultPVID on network start
  • lxd/device/nic/bridged: Only remove non-zero default PVID in setupNativeBridgePortVLANs
  • lxd/ip/link: Simplify self/master options in bridge vlan management functions
  • lxd/device/nic/bridged: link.BridgeVLANDelete and link.BridgeVLANAdd usage
  • shared/cert: Add function to get CertInfo from bytes
  • shared/version: Fix regression in useragent string
  • lxc/file: Fix symlink following in cmdFilePull
  • doc/server: add network and storage to the config namespace list
  • .sphinx: Add goroutines and uptime to wordlist
  • doc/clustering: create new structure
  • doc/clustering: move content into new pages
  • doc/clustering: move content out of old page
  • doc/clustering: reorder content in About clustering
  • doc/clustering: whitespace changes
  • lxd/main/interactive: Remove user facing "node" references
  • lxd-agent/exec: Improve support for detect fork exec errors
  • lxd/instance/drivers/driver/common: Adds ErrExecCommandNotFound and ErrExecCommandNotExecutable constants
  • lxd/instance/drivers/driver/lxc/cmd: Updates Wait to convert special exit statuses into errors
  • lxd/instance/drivers/driver/qemu/cmd: Updates Wait to convert special exit statuses into errors
  • lxd/instance/exec: Improve logging
  • lxd/exec: Set c.global.ret to exit status even on error in cmdExec.Run
  • lxd/main: Exit with custom exit status even on error
  • lxd/instance/exec: Ensure that non-interactive commands still return status code on error in instanceExecPost
  • lxd/list: Fixes filtering of raw input in showInstances
  • lxc/list: Rename container references to instance references
  • doc/api-extensions: /1.0 doesn't accept a trailing "/"
  • doc/clustering: clean up "About clustering"
  • doc/clustering: clean up "How to form a cluster"
  • doc/clustering: clean up "How to manage a cluster"
  • doc/clustering: clean up "How to recover a cluster"
  • doc/clustering: clean up "How to manage instances in a cluster"
  • doc/clustering: clean up "How to configure storage"
  • doc/clustering: clean up "Cluster member configuration"
  • doc/clustering: clean up "How to configure networks"
  • doc/clustering: clean up "How to set up cluster groups"
  • doc: Update metrics
  • doc/explanation: Fix reference to metrics page
  • lxd/device/nic: Adds nicCheckDNSNameConflict function
  • lxd/device/nic: Adds case insensitive instance name conflict check for bridged and ovn NICs
  • test: Fix bridged NIC tests to accomodate duplicate instance name detection
  • doc: add a link to the development process YouTube video
  • lxd/main/init/interactive: Export cluster token decode helper
  • Rename GetSnapshotExpiry to GetExpiry
  • shared/util: Allow seconds in GetExpiry
  • lxd/cluster/config: Add cluster.join_token_expiry
  • lxd: Add expiry date to cluster join token
  • lxd: Check expiry date of cluster join token
  • lxd/db/operationtype: Add RemoveExpiredClusterJoinTokens
  • lxd: Add cluster task to remove expired cluster join tokens
  • doc: Add cluster.join_token_expiry
  • shared/api: Add expiry date to ClusterMemberJoinToken
  • lxc: Show expiry date in lxc cluster list-tokens
  • api: Add cluster_join_token_expiry API extension
  • i18n: Update translations
  • test/suites: Test cluster token expiry
  • lxd/cluster/config: Add core.remote_token_expiry
  • doc: Add core.remote_token_expiry
  • lxd: Add expiry date to remote token meta data
  • lxd: Check expiry date of remote add tokens
  • shared/api: Add expiry date to CertificateAddToken
  • lxc: Show expiry date in lxc config trust list-tokens
  • test/suites: Test remote token expiry
  • api: Add remote_token_expiry API extension
  • i18n: Update translations from weblate
  • doc: Clarify that remote token expiry default to no expiry
  • doc: Add missing expires_at field to token structs
  • lxd/db/operationtype: Rename to RemoveExpiredTokens
  • lxd: Remove auto removal of cluster join tokens
  • lxd/instance/drivers/driver/qemu: Remove incorrect comment about handle caching in getAgentClient
  • lxd/instance/drivers/driver/qemu: Do not attempt to mount & unmount in generateAgentCert
  • lxd/instance/drivers/driver/qemu: Make sure instance is running before trying file operations in FileSFTPConn
  • lxd: Add tasks for expired token removal
  • shared/api/init: Add exported preseed structs
  • lxd/main/init/preseed: Update usages
  • shared/version/api: Update api extensions
  • lxd/device: Continue if device is nil
  • lxc: Extend image filtering
  • lxd/network/driver/ovn: Get dynamically allocated IPs from OVN switch port even if not using DHCP
  • shared/cert: Add GenerateTrustCertificate to shared package
  • lxd/cluster/connect: Update usages
  • lxd/cluster/connect: Use 409 error for existing trusted cert
  • test/suites: Unset join_token_expiry when done
  • test/suites: Increase join_token_expiry to 10 seconds
  • doc/authentication: clarify expiration of cluster join tokens
  • lxd/api/internal: Only cancel shutdown wait if forced
  • lxd/operations: Simplify waitForOperations
  • lxd/daemon: Remove unnecessary log message in Stop
  • lxc init: Fix usage line in the help output
  • lxd/device/nic/bridged: Relax duplicate instance name check
  • test: Update check for bridged NIC duplicate instance DNS name
  • shared/api/storage/pool/volume: Adds CreatedAt field to StorageVolume and StorageVolumeSnapshot structs
  • lxd/db/storage/volume/snapshots: Comment and error improvements to CreateStorageVolumeSnapshot
  • lxd/db/storage/volume/snapshots: Clarify projectName argument in CreateStorageVolumeSnapshot
  • lxd/db/storage/volumes: Clarify projectName argument in CreateStoragePoolVolume
  • lxd/db/storage/volumes: Comment and error improvements to CreateStoragePoolVolume
  • shared/netutils/network/linux/cgo: Don't call net.InterfaceByIndex in NetnsGetifaddrs
  • lxd/instance/instance/interface: Allow passing host interface info into Render* functions
  • lxd/instance/drivers/driver/lxc: Update Render functions to allow receiving list of host interface info
  • lxd/instance/drivers/driver/qemu: Render* function interface updates
  • lxd/instance: Update Render* function usage
  • lxd/main/forknet: netutils.NetnsGetifaddrs usage
  • lxc: Adds util to parse device overrides.
  • lxc: Use device override parser in lxc copy.
  • lxd/instance/instance/interface: Adds hostInterfaces argument to Metrics
  • lxd/instance/drivers: Updated Metrics implementation to accept hostInterfaces argument
  • lxd/api/metrics: inst.Metrics usage
  • Add resolv.conf location under WSL
  • doc: remove intro sentence for configuration
  • lxc: Fetch profiles and apply device overrides on init/launch.
  • po: Updates pot files.
  • doc/clustering: clarify that you should remove offline members
  • shared/validate: Add CPU set validator
  • shared: Use validator function for limits.cpu
  • suites/basic: Adds test for overriding device config on init.
  • lxd/instances/lxc: Fix build on MIPS
  • lxd/storage/pools: Initialize pool config if nil
  • devlxd: Do not return devlxd info if turned off
  • lxd/instance/drivers: Add function to get agent connection info
  • lxd/instance/drivers: Use getAgentConnectionInfo()
  • lxd/instance/drivers: Add function to store connection info
  • lxd/instance/drivers: Notify lxd-agent about devlxd early
  • lxd-agent: Add function to store connection info
  • client/util: Use ConnectionArgs.Proxy with unix socket client
  • lxd-agent: Return correct error when querying devlxd
  • lxd-agent: Start devlxd before calling systemd-notify
  • lxd: Remove shadowed variable name.
  • doc: add SFTP to the wordlist
  • lxd: Check LXD ready state before changing instance
  • lxd/network/driver/bridge: Adds MTU DHCP option when using fan mode
  • shared/api: Add devlxd structs
  • lxd/instance/drivers/qmp: Add function to query hotpluggable CPUs
  • lxd/instance/drivers: Add function to hot-(un)plug CPUs
  • lxd: Use shared devlxd structs
  • lxd-agent/api: Use shared devlxd structs
  • test/suites/sql: safe grep usage
  • lxd/device/tpm: Handle TPM devices in profiles
  • doc/projects: add YouTube video
  • doc/migration: add YouTube video
  • workflows: update package definitions only once
  • workflows: use apt-get instead of apt to avoid a warning
  • shared/api: fix typos s/cerated/created/
  • doc/rest-api: Refresh swagger YAML
  • doc: add a reminder to run "make update-api" in contributing doc
  • lxd/init: Use strict checking for preseed
  • test/lint: Check that doc/rest-api.yaml is kept up to date
  • workflows: sort package list and remove duplicated "libdqlite-dev"
  • doc: Fix configuration directory in remotes.md
  • build(deps): bump actions/dependency-review-action from 2 to 3
  • lxd/instances: Comment clarification
  • lxd/fsmonitor/drivers/driver/fanotify: Add context to getEvents
  • lxd/instances: Limit shutdown concurrency to number of instances or number of CPU cores (which ever is less)
  • lxd/daemon: Removes duplicated Stopping instances logging
  • test: Increase lxc_remote timeout to 120s
  • lxd/migrate: Remove uneccessary error log entry in migrationSourceWs.Connect
  • shared/tcp/tcp/timeout/user: Improve error message in SetUserTimeout
  • shared/tcp/tcp/timeouts: Adds userTimeout argument to SetTimeouts
  • client: tcp.SetTimeouts default larger user timeout usage
  • lxd: tcp.SetTimeouts default larger user timeout usage
  • lxd/cluster/gateway: tcp.SetTimeouts usage keeping original 30s timeout
  • lxd/storage/backend/lxd: Update DeleteImage to not use GetImageFromAnyProject
  • lxd/devlxd: Populate NIC device hwaddr field from volatile in devlxdDevicesGet
  • test: Fix delay in lxd shutdown during devlxd test
  • devlxd-client: Adds devices support
  • test: Adds devlxd NIC devices hwaddr check
  • doc/security: add YouTube link
  • lxd/api: Improve top level 404 log message
  • lxd/instance/operationlock: Adds instance initiated concept to InstanceOperation
  • lxd/instance/drivers: Fixes container initiated instance-shutdown lifecycle event
  • lxd/instance/drivers: Drop unnecessary line
  • lxd/instance/drivers: Set CPU QEMU template depending on pinning
  • lxc/instance/drivers: Dynamically add CPUs on start
  • lxd/instance/drivers: Allow CPU hotplugging for VMs
  • api: Add cpu_hotplug extension
  • lxd/storage/backend/lxd: b.driver.HasVolume usage
  • lxd: Move to current bakery version
  • lxd-migrate: Move to current bakery version
  • client: Move to current bakery version
  • lxc: Move to current bakery version
  • test/macaroon-identity: Move to current bakery version
  • lxd/daemon: gofmt
  • lxd/devlxd: Fix bad merge
  • doc/instances: restructure content
  • lxd/migrate/instance: Don't use multi-sync when using optimized transfer mode
  • test: Force stop containers in migration tests
  • lxd/api/internal: Return explicit nil instance on error in internalContainerHookLoadFromReference
  • lxd/storage/utils: Adds generic CompareSnapshots function and type
  • lxd/instance/instance/utils: Removes unused CompareSnapshots function
  • lxd/instance: Updates instanceCreateAsCopy to use storagePools.CompareSnapshots
  • lxd/migrate/instance: Update migrationSink.Do to use storagePools.CompareSnapshots
  • lxd/migrate/instance: Remove unused migrationCompareSnapshots
  • lxd/storage/backend/lxd: Updates RefreshCustomVolume to use CompareSnapshots
  • lxd/instance/instance/utils: Return nil error on success in LoadFromBackup
  • lxd/migrate/storage/volumes: Updates migrationSink.DoStorage to use storagePools.CompareSnapshots
  • lxd/migrate/storage/volumes: Removes unused migrationStorageCompareSnapshots
  • lxd: Don't use storage custom volume snapshot creation date when considering refreshes
  • test: Lower boot.host_shutdown_timeout during clustering evacuation tests
  • test: Restructure test_clustering_membership to be less flaky
  • lxd/api/cluster: Improve logging in evacuateClusterMember
  • doc/instances: quick clean-up of content
  • doc/instances: add instructions on managing instances
  • doc/instances: move QEMU config howto to configuration section
  • doc/instances: make titles more consistent
  • doc/instances: add instructions for configuring instances
  • doc/instances: update Live update column
  • doc/instances: update Profiles documentation
  • doc/instances: add instructions for accessing files
  • doc/instances: add instructions for running commands and logging on
  • doc: fix broken link
  • doc/instances: add example for filtering by location
  • doc: Mention limits.cpu live update for VMs
  • test: Reduce "shellcheck disable=SC2034" usage
  • lxd/device/disk: Fix attaching cephfs volumes to VMs
  • lxd/cluster/resolve: Don't convert not found error in ResolveTarget to internal server error
  • lxc/storage/volume: Fix copying storage volume to a remote from a cluster member
  • lxd/storage/utils: Improve error and comment in VolumeDBCreate
  • lxd/network/driver/bridge: Remove unnecessary query for server name in Leases
  • lxd: Fix use of inst.Project() in logs with inst.Project().Name
  • lxd/api/metrics: Fix race condition on map access in metricsGet
  • lxd/instance/drivers/driver/qemu: Fix blockNodeName to use base64 raw URL format
  • lxd/instance/post: Prevent moving instance to invalid (or empty) name
  • lxd/db: Fix default profile assigment on image creation in the default project
  • lxd/db/cluster: Fix the comment for InitProjectWithoutImages function
  • lxd/main: Fix that change project "features.images" to "false" didn't add the project default profile to images from "default" project
  • lxd/instance/drivers: Restrict CPU hotplugging
  • lxd/instance/drivers: Fix CPU hotplug check
  • lxd/instance/drivers: Handle unset limits.cpu
  • tests: Add test for correct default profile assigment to images in projects with "features.images=false"
  • lxd/device/tpm: Expose tpmrm to the container
  • doc: allow returning traffic in DOCKER-USER custom chain
  • lxd/apparmor/archive: Fix image unpack apparmor profile in archiveProfile
  • lxd/daemon/storage: Improve errors in daemonStorageValidate
  • lxd/api/1.0: Improve errors in doApi10Update
  • test: Add test for custom volume image unpack
  • lxd/device/nic: Add hwaddr key to liblxc NIC config
  • lxd/containers: Fix error handling on stop/shutdown
  • lxd/containers: release the liblxd instance if raw.lxc is invalid
  • lxd/fsmonitor/drivers/driver/fsnotify: Switch away from github.com/fsnotify/fsnotify package
  • lxd/device/device/utils/unix/events: Adds event action to error log in unixRunHandlers
  • lxd/device/unix/common: Detect missing source device in unixDeviceAttributes
  • lxd/fsmonitor/drivers/common: Clean file paths for handler registrations
  • lxd/fsmonitor/drivers/interface: Adds Name() to definition
  • lxd/fsmonitor/drivers/driver/inotify: Renames fsnotify driver to inotify
  • lxd/fsmonitor/drivers/driver/fanotify: Adds Name() function
  • lxd/fsmonitor/drivers/load: Rename fsnotify to inotify
  • lxd/fsmonitor/load: Use inotify instead of fsnotify
  • Replace "the the" with "the"
  • lxd/main/forkdns: Replace github.com/fsnotify/fsnotify with k8s.io/utils/inotify
  • lxd/main/forkdns: Wrap error and don't include newline in returned error
  • gomod: Adds k8s.io/utils
  • lxd/device/device/utils/unix/events: Only call filepath.Clean once in unixRegisterHandler
  • lxd/device/device/utils/unix/events: Don't use logger.Debugf in unixRegisterHandler
  • lxc/init: Improve cmdInit device override to work nicely with --storage and --network flags
  • lxd/utils: Improve error in parseDeviceOverrides
  • i18n: Update translation templates
  • lxd/network/network/utils: Adds filter support to UsedByInstanceDevices
  • lxd/network/driver/bridge: Updates Leases to use UsedByInstanceDevices
  • lxd/network/driver/ovn: Update Leases to use UsedByInstanceDevices
  • lxd: Remove nictype checks for ovn
  • qemu: Add more feature checks
  • qemu: Check CPU hotplug support using features not architectures
  • drivers: Issue log message when instance type is operational
  • lxd/network/driver/common: Adds netType var and moves Type() to common
  • lxd/network/driver: Removes per-driver Type() function
  • lxd/network/network/load: Ensure LoadByType initialises netType variable
  • lxd/network/network/utils: Adds network type to NIC connected to network logic
  • lxd/device/nic/bridged: Update checkAddressConflict to use UsedByInstanceDevices
  • lxd/device/nic/ovn: Pass network type to UsedByInstanceDevices
  • lxd/network/driver/bridge: Pass network type to UsedByInstanceDevices
  • lxd/network/driver/ovn: Pass network type to UsedByInstanceDevices
  • lxd/network/driver/common: Pass network type to UsedBy
  • lxd/networks: Pass network type to network.UsedBy
  • test: Add timeout to interactive edit commands
  • test: check LXC driver version instead of QEMU's
  • test: image short fingerprints are 12 chars long
  • test: use grep instead of cat | grep
  • doc/instances: clean up devices overview section
  • doc/devices: clean up docs for none device type
  • doc/devices: sort tables for nic device type alphabetically
  • test: use awk instead of awk | awk
  • test: use awk instead of grep | cut
  • Makefile: optimize find call
  • Makefile: check test/extras/*.sh using shellcheck
  • test/extras: shellcheck fixes
  • shared/subprocess/testscript/signal.sh: lookup signal name to trap
  • doc: simplify markdown error postprocessing
  • doc: move trap before preprocessing
  • doc: silence command -v's output
  • lxd/project/permissions: Use consistent quoting in errors
  • lxd/project/permissions: Improve error wrapping
  • lxd/storage/volumes: Pass request context to transaction
  • lxd/instance/put: Use request context for transaction
  • lxd/storage/volumes: Don't check project limits when doing a volume snapshot restore
  • lxd/network/driver/bridge: Only include downstream OVN virtual router addresses for network's project in Leases
  • lxd/network/driver/bridge: Add network's own gateway IPs to Leases list
  • lxd/network/driver/ovn: Add network's own gateway IPs to Leases list
  • lxd/device/proxy: Simplify check in validateConfig
  • doc: add link to Running in production YouTube video
  • lxd/db/cluster/projects: Reworks project features info and adds features.networks.zone feature
  • lxd/db/migration: Switch to using cluster.ProjectFeatures in importPreClusteringData
  • lxd/db/cluster/open: ProjectFeatures usage
  • lxd/api/project: cluster.ProjectFeatures usage in projectsPost
  • lxd/api/project: Use cluster.ProjectFeatures in projectChange
  • lxd/project/project: Clarifies comment on NetworkProject
  • lxd/network/zones: Use current method of generating API URLs
  • docs: Added snap version directory for local remotes
  • lxd/apparmor: fix AppArmor profile for qemu-img
  • lxd/db/generate/db/method: Add generic struct fetching functions
  • lxd/db/cluster/warnings.mapper: Update generated code
  • lxd/main/forkdns: Updates serversFileMonitor to only watch for inotify.InMovedTo event
  • test: Don't use temporary pid files for forkdns
  • test: Simulate what LXD does when building forkdns servers.conf
  • test: kill -9 forkdns processes to ensure they are killed
  • doc/howto/cluster/manage: Adds --cohort="+" to snap refresh command
  • lxd/instance/drivers/driver/qemu: Use errors.Is in renderState
  • lxd/instance/drivers/driver/qemu: Adds non-agent metrics fallback in Metrics
  • lxd/instance/drivers/driver/qemu: Use shared.IsTrueOrEmpty in agentMetricsEnabled
  • client/connection: Don't use logger.Debugf
  • lxd/api/metrics: Correctly size slice of project names in projectNames
  • lxd/api/metrics: Use request context for DB transaction
  • lxd/locking/lock: Adds context support to Lock
  • lxd: locking.Lock usage
  • lxd/query: Only repeat query as plain request for JSON decode errors in cmdQuery
  • lxd/db/instances: Adds context argument to InstanceList
  • lxd: InstanceList with context usage
  • lxd/endpoints/vsock: Update VsockAddress to return net.Addr interface
  • lxd/instance/drivers/driver/qemu: Fix nested VMs in getAgentConnectionInfo
  • lxd/instance/drivers/driver/qemu: Don't generate agent.conf if no host vsock info in generateConfigShare
  • lxd/device/nic: Use api.NetworkStatusUnavailable constant
  • lxd/resources/network: Ignore errors from ethtoolAddPortInfo
  • doc/devices: clean up docs for nic device type
  • doc/devices: sort tables alphabetically
  • doc/devices: clean up docs for disk device type
  • doc/devices: clean up docs for gpu device type
  • doc/devices: clean up docs for infiniband device type
  • doc/devices: clean up docs for pci device type
  • doc/devices: clean up docs for proxy device type
  • doc/devices: clean up docs for tpm device type
  • doc/devices: clean up docs for unix-block device type
  • doc/devices: clean up docs for unix-char device type
  • doc/devices: clean up docs for unix-hotplug device type
  • doc/devices: clean up docs for usb device type
  • doc/devices: document device option override at creation
  • doc/devices: fix doc on how to use a specific VF as a NIC
  • lxd/instance/drivers: Improve pool name change check error
  • lxd/api/1.0: Move wait for server to be ready out of doApi10UpdateTriggers
  • lxd/api/1.0: Explicitly use context.Background() in api10Put and doApi10Update
  • lxd/api/1.0: Use request context in doApi10Update when validating request
  • lxd/api/1.0: Use contextual logging
  • lxd/instance/drivers/qmp/commands: Updates SendFile to use Go's JSON encoder
  • lxd/instance/drivers/qmp/commands: Adds CloseFile function
  • lxd/instance/drivers/driver/qemu: Fix macvlan NICs losing connectivity on LXD restart
  • lxd/instance/drivers/qmp/commands: Adds QueryCPUs function
  • lxd/instance/drivers/driver/qemu: Fix multi-queue NIC support in addNetDevConfig
  • lxd/device/nic/sriov: Fix nicSRIOV to pass VF MAC address to VM if not specified
  • lxd/instance/drivers/driver/qemu: Improve MAC parse error in writeNICDevConfig
  • lxd/apparmor: fix AppArmor instance_qemu profile
  • lxd/migrate/instance: Consider RBD transfer non-optimised
  • doc/instances: clean up docs for instance properties
  • doc/instances: fix links to instance options
  • doc/instances: add how-to guide for creating snapshots
  • Revert "lxd/migrate/instance: Consider RBD transfer non-optimised"
  • doc/instances: clean up unit reference
  • lxd/storage/backend/lxd: Check storage pool is ready before checking usage
  • lxd/instance/drivers/qmp: Adds SetAction function
  • lxd/instance/drivers/driver/qemu: Set reboot action to shutdown
  • lxd/instance/drivers: Ignore in-use unmount errors on instance stop
  • doc/instances: small clarifications to the snapshot documentation
  • doc/devices: Sort macvlan NIC device options in table
  • doc/cloud-init: add info about merging user-data and vendor-data
  • doc/installing: quick cleanup of headings
  • doc/clustering: add links and instructions for MicroCloud
  • doc: add MicroCeph and MicroCloud to wordlist
  • lxd/instance/drivers/qmp: Don't mask unexpected monitor response errors with sentinel
  • doc/security: move to a separate section
  • lxd/db/images: Updates GetImagesFingerprints to use transactions
  • lxd/db/images: Updates GetImageAliases to use transactions
  • lxd/db/images: Updates GetImageAlias to use transaction
  • lxd/db/images: Updates DeleteImageAlias to use transactions
  • lxd/db/images: Updates CreateImageAlias to use transactions
  • lxd/db/images: Updates UpdateImageAlias to use transaction
  • lxd/db/images: Updates CreateImage to use transaction context
  • lxd/db/db/internal/test: Update image tests
  • lxd/util/http: Update EtagCheck to return api.StatusError with http.StatusPreconditionFailed
  • lxd/images: Updates imagesPost to use single transaction
  • lxd/images: Updates doImagesGet to use transactions
  • lxd/images: Updates imagesGet to use doImagesGet
  • lxd/images: Updates doImageGet to use transactions
  • lxd/images: Updates imageGet to use doImageGet
  • lxd/images: Updates imageAliasesPost to use single transaction
  • lxd/images: Updates imageAliasesGet to use single transaction
  • lxd/images: Updates imageAliasGet to use single transaction
  • lxd/images: Updates imageAliasDelete to use single transaction
  • lxd/images: Updates imageAliasPut to use single transaction
  • lxd/images: Updates imageAliasPatch to use a single transaction
  • lxd/images: Updates imageAliasPost to use a single transaction
  • lxd/storage/volumes: Updates storagePoolVolumesGet to use tx.GetImagesFingerprints
  • lxd/instance/instance/utils: Updates ResolveImage to use transaction
  • lxd/instance/drivers/driver/qemu: Show actual qemu path in checkFeatures
  • lxd/instance/drivers/driver/qemu: Remove -bios flag from qemu feature check invocation
  • lxd/instance/drivers/driver/qemu: Extract stderr output from qemu during checkFeatures
  • lxd/instance/drivers/driver/qemu: Add -no-user-config to qemu invocation in checkFeatures
  • lxd/instances/post: Remove profile loading from createFromImage
  • lxd/instances/post: Remove profile loading from createFromNone
  • lxd/instances/post: Remove profile loading from createFromMigration
  • lxd/instances/post: Use correct error quoting in createFromMigration
  • lxd/instances/post: Remove profile loading from createFromCopy and clusterCopyContainerInternal
  • lxd/instances/post: Centralise profile validation and loading in instancesPost
  • lxd/instance/instance/utils: Removes fetchInstanceDatabaseObject function
  • lxd/instance/instance/utils: Updates SuitableArchitectures to accept optional source instance
  • lxd/instances/post: instance.SuitableArchitectures usage
  • lxd/instances/post: Moves local clustered check earlier
  • lxd/instances/post: Pass request context into DB transaction
  • lxd/instances/post: Don't shadow err in instancesPost
  • lxd/instances/post: Keep related error checking together in instancesPost
  • lxd/instances/post: Remove duplicated instance name check in createFromImage
  • lxd/instances/post: Update createFromImage to use req.Type for image type
  • lxd/instances/post: Don't load target project again in createFromImage
  • lxd/instance: Fix error quoting in instanceCreateFromImage
  • lxd/instance/instance/utils: Updates ResolveImage to use a transaction
  • lxd/instance/instance/utils: Updates SuitableArchitectures to accept a source image reference
  • lxd/instance: Updates instanceCreateFromImage to accept a source image directly
  • lxd/db/db/internal/test: tx.GetCachedImageSourceFingerprint usage
  • lxd/db/images: Updates GetCachedImageSourceFingerprint to use transaction
  • lxd/daemon/images: tx.GetCachedImageSourceFingerprint usage
  • lxd/instances/post: Update createFromImage to accept image info and alias directly
  • lxd/instances/post: Updates instancesPost to resolve image profiles early
  • tests: Update godeps.list
  • doc/instances: reorder instance options docs
  • doc/instances: clean up instance options
  • doc/snapshots: add information about snapshot pattern format
  • doc/instances: move Override QEMU configuration
  • doc/instances: clean up QEMU override section
  • doc/instances: clarify misleading description for linux.sysctl.*
  • doc/initialization: add page for lxd init
  • doc/preseed: move the content from preseed.md to the init page
  • doc/init: clean up documentation of the preseed file initialization
  • doc/storage: add links to MicroCeph
  • doc/security: clean up section
  • doc/configuration: remove Configuration section
  • lxd/instance/drivers/driver/qemu: Update architectureSupportsUEFI to add arch argumnent
  • lxd/instance/drivers/driver/qemu: Update checkFeatures to add -bios flag for UEFI architectures
  • lxd/instance: Improve logging in autoCreateInstanceSnapshots
  • lxd-migrate: Fix usage string
  • doc: fix version conflicts for doc tools
  • doc/lxd-migrate: add information about updating the configuration
  • lxd/instance/drivers: Don't fail Start if renaming old log file doesn't exist
  • forksyscall: ensure that parent mount is dependent mount
  • forksyscall: avoid double MS_MOVE
  • lxd/db/query/dump: Correctly generate CREATE TABLE statement
  • lxd/db/query/dump: Correctly escape single quote and \n and \r
  • lxd/db/query/dump/test: Fix dump tests
  • lxd/db/warnings: Store warning times in UTC
  • lxc/init: Fix --no-profiles flag
  • test: Adds test for lxc init --no-profiles
  • lxd/instance/drivers/driver/qemu: Add qemuMachineType function
  • lxd/instance/drivers/driver/qemu/config/test: Fix architecture tests
  • lxd/instance/drivers/driver/qemu/config/test: Fix whitespace
  • lxd/instance/drivers/driver/qemu: Adds -machine type argument to checkFeatures
  • grafana: add top network usage graphs
  • fix dead lock bug
  • lxd/instance/drivers: Fixes delete of ephemeral VM on stop
  • lxd/api/metrics: Get internal metrics using existing DB transaction in metricsGet
  • lxd/api/metrics: Move duplicated code into invalidProjects function
  • lxd/api/metrics: Use multiple OR filters to avoid calling InstanceList multiple times
  • lxd/api/metrics: Use locking.Lock with timeout in metricsGet
  • lxd/api/metrics: Limit concurrency of instance metrics building in metricsGet
  • lxd/api/metrics: Pre-allocate newMetrics map to right size
  • lxd/api/metrics: Pass request context to InstanceList in metricsGet
  • lxd/api_metrics: Add missing import
  • lxd/instances/post: Move target group check into initial transaction
  • lxd/instances_post: Fix bad merge
  • lxd/instances/post: Move InstanceType and Source instance logic earlier in instancesPost
  • lxd/instances/post: Use instance.ValidName in instancesPost
  • lxd/instances/post: Move cluster member targetting checks higher up
  • lxd/instances/post: Use architecture from source image in request
  • lxd/instances/post: Remove logger.Debugf usage
  • lxd/instances/post: Rework cluster member targetting logic
  • lxd/instances/post: Only check project instance creation permissions on initial cluster member
  • lxd/instances/post: Send notification header when redirection create request to different cluster member
  • lxd/db/node: Adds GetCandidateMembers function
  • lxd/db/node: Reworks GetNodeWithLeastInstances to accept list of candidate members
  • lxd/db/node/test: Update tx.GetNodeWithLeastInstances tests
  • lxd/instances/post: Split generation of candidate cluster members from selection of member with fewest instances
  • lxd/api/cluster: tx.GetNodeWithLeastInstances usage
  • lxd/instance/instance/utils: Updates SuitableArchitectures to return api.StatusError for bad requests
  • lxd/instance/instance/utils: Accept db.ClusterTx in SuitableArchitectures
  • lxd/instances/post: Move instance.SuitableArchitectures and tx.GetCandidateMembers into existing transaction
  • lxd/db/node: Skip pending nodes in GetCandidateMembers
  • lxd/db/node: Modified GetCandidateMembers to accept list of all cluster members
  • lxd: tx.GetCandidateMembers usage
  • lxd/project/permissions: Removes unused tx argument from CheckClusterTargetRestriction
  • lxd: project.CheckClusterTargetRestriction usage
  • lxd/instances/post: Reject use of target parameter when not clustered in instancesPost
  • lxd/instances/post: Allow targeting all cluster groups if project restricted.cluster.groups is empty
  • lxd/instances/post: Check manually targeted cluster member belongs to one of restricted.cluster.groups
  • lxd/db/node: Updates GetNodeWithLeastInstances to return NodeInfo
  • lxd/db/node/test: tx.GetNodeWithLeastInstances usage
  • lxd/api/cluster: Updates evacuateClusterMember tx.GetNodeWithLeastInstances usage
  • lxd/instances/post: Updates instancesPost tx.GetNodeWithLeastInstances usage
  • test: Update cluster targeting tests
  • lxd/api/cluster: Improve logging in evacuateClusterMember
  • lxd/instances/post: tx.ClusterGroupExists usage in instancesPost
  • lxd/network/zone/zone: Update usedBy to handle networks having multiple zones
  • lxd/db/network/zones: Rename GetNetworkZones to GetNetworkZonesByProject
  • lxd/network/zones: GetNetworkZonesByProject usage
  • lxd/network/zone/reverse: Update reverse function to take net.IP
  • lxd/network/zone/zone: Update Content to handle networks supporting multiple forward zones
  • lxd/db/network/zones: Removes unused GetNetworksForZone function
  • gomod: Update dependencies
  • lxd/db: Changed snapshot sort from date to datetime
  • lxd/api: Add support for serving the UI
  • doc: Fix broken cloud-init doc links
  • lxd/db/instances: Sort snapshots by creation time and then ID in GetInstanceSnapshotsNames and GetNextInstanceSnapshotIndex
  • lxd/info: Use snapshot order from server in instanceInfo
  • lxd/db/storage/volumes: Order by volume snapshot creation date first in GetStoragePoolVolume
  • doc/networks: add instructions for attaching a network to an instance
  • doc/howto/cluster_manage: Remove link to non-existent section
  • lxd/network add function to get txqlen
  • lxd/ip add function to set txqlen
  • doc/server: struture the server options page
  • doc/server: split up configuration table
  • doc/server: update links to point to more specific sections
  • doc/server: clean up configuration options
  • lxd/instances/post: Reduce scope of target member and group variables
  • lxd/instances/post: Updates comments
  • lxd/db/node: Make NodeInfo.ToAPI more efficient when called multiple times
  • lxd/db/node: Improve GetNodeMaxVersion comment
  • lxd/api/cluster: Updates member functions to use modified ToAPI function
  • lxd/api/cluster: Consistent error quoting
  • lxd/db/node: Don't run unnecessary query for getting offline threshold in GetCandidateMembers
  • lxd: tx.GetCandidateMembers usage
  • lxd/db/node/test: Updated tx.GetCandidateMembers usage
  • lxd/api/cluster: Fixes clusterNodesPost API description
  • doc/rest-api: Refresh swagger YAML
  • Revert "lxd/db/storage/volumes: Order by volume snapshot creation date first in GetStoragePoolVolume"

Try it for yourself

Try the latest LXD release on our demo service.

Downloads

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

LXD 5.10 has been released

13th of January 2023

Introduction

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

As our first release of 2023, this is a bit of a lighter one as the team has been enjoying a two weeks break for the holidays. Next month's release is going to be where we see some of the larger new features of 2023 start landing.

That's not to say that LXD 5.10 is boring. Besides a continued push to get the most performance out of our database and preparatory work for upcoming features, this still manages to introduce some quality of life improvements and a good number of bugfixes.

Enjoy!

New features and highlights

Reworked instance documentation

The instance documentation has now been re-structured to match the new style of our documentation. This means separate pages for instructions on performing common actions as well as separate pages for the various device types.

This makes it all easier to navigate as well as significantly easier to link to.

Documentation: https://linuxcontainers.org/lxd/docs/latest/instances/

Reworked server documentation

The server documentation has also seen some initial re-organization happening to it.
There's still more to come in that area as we work towards cleaning up the Manage LXD section of the documentation, but in this release you can already see a better structured main page with clean sub-sections and navigation.

Documentation: https://linuxcontainers.org/lxd/docs/latest/server/

Network pie charts in the Grafana dashboard

Our Grafana dashboard is a great way to identify your top instances.
Up until now, we had charts covering the top 5 instances for CPU, memory and disk.

By user request, we have now extended that to also cover network usage with 4 new charts covering top transmit traffic, top receive traffic as well as top transmit packets and top receive packages.

image|690x304

As a reminder, our dashboard can be either downloaded directly from the LXD source repository at https://github.com/lxc/lxd/blob/master/grafana/LXD.json

Or it can be retrieved from Grafana directly (ID 15726): https://grafana.com/grafana/dashboards/15726-lxd/

Configurable network transmit queue length on NIC devices

A new queue.tx.length setting is now available for veth-based nic devices.
This means it's limited to containers using one of bridged, p2p or routed nic types.

This new configuration key allows for setting the txqueuelen setting on the network interface. This can be useful when encountering latency issues that are related to packet queuing and can be used to either decrease the queue length forcing a lower latency behavior or on the contrary, increasing the queue length to try to increase throughput.

Complete changelog

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

Full commit list
  • lxd/storage/ceph: Remove osd map timeout
  • doc/instances: small clarifications to the snapshot documentation
  • doc/devices: Sort macvlan NIC device options in table
  • doc/cloud-init: add info about merging user-data and vendor-data
  • doc/instances: clarify misleading description for linux.sysctl.*
  • doc/initialization: add page for lxd init
  • doc/installing: quick cleanup of headings
  • doc/preseed: move the content from preseed.md to the init page
  • doc/init: clean up documentation of the preseed file initialization
  • doc/storage: add links to MicroCeph
  • doc/clustering: add links and instructions for MicroCloud
  • doc: add MicroCeph and MicroCloud to wordlist
  • lxd/instance/drivers/qmp: Don't mask unexpected monitor response errors with sentinel
  • doc/security: move to a separate section
  • doc/security: clean up section
  • doc/configuration: remove Configuration section
  • lxd/db/images: Updates GetImagesFingerprints to use transactions
  • lxd/db/images: Updates GetImageAliases to use transactions
  • lxd/db/images: Updates GetImageAlias to use transaction
  • lxd/db/images: Updates DeleteImageAlias to use transactions
  • lxd/db/images: Updates CreateImageAlias to use transactions
  • lxd/db/images: Updates UpdateImageAlias to use transaction
  • lxd/db/images: Updates CreateImage to use transaction context
  • lxd/db/db/internal/test: Update image tests
  • lxd/util/http: Update EtagCheck to return api.StatusError with http.StatusPreconditionFailed
  • lxd/images: Updates imagesPost to use single transaction
  • lxd/images: Updates doImagesGet to use transactions
  • lxd/images: Updates imagesGet to use doImagesGet
  • lxd/images: Updates doImageGet to use transactions
  • lxd/images: Updates imageGet to use doImageGet
  • lxd/images: Updates imageAliasesPost to use single transaction
  • lxd/images: Updates imageAliasesGet to use single transaction
  • lxd/images: Updates imageAliasGet to use single transaction
  • lxd/images: Updates imageAliasDelete to use single transaction
  • lxd/images: Updates imageAliasPut to use single transaction
  • lxd/images: Updates imageAliasPatch to use a single transaction
  • lxd/images: Updates imageAliasPost to use a single transaction
  • lxd/storage/volumes: Updates storagePoolVolumesGet to use tx.GetImagesFingerprints
  • lxd/instance/instance/utils: Updates ResolveImage to use transaction
  • lxd/instance/drivers/driver/qemu: Show actual qemu path in checkFeatures
  • lxd/instance/drivers/driver/qemu: Remove -bios flag from qemu feature check invocation
  • lxd/instance/drivers/driver/qemu: Extract stderr output from qemu during checkFeatures
  • lxd/instance/drivers/driver/qemu: Add -no-user-config to qemu invocation in checkFeatures
  • lxd/instances/post: Remove profile loading from createFromImage
  • lxd/instances/post: Remove profile loading from createFromNone
  • lxd/instances/post: Remove profile loading from createFromMigration
  • lxd/instances/post: Use correct error quoting in createFromMigration
  • lxd/instances/post: Remove profile loading from createFromCopy and clusterCopyContainerInternal
  • lxd/instances/post: Centralise profile validation and loading in instancesPost
  • lxd/instance/instance/utils: Removes fetchInstanceDatabaseObject function
  • lxd/instance/instance/utils: Updates SuitableArchitectures to accept optional source instance
  • lxd/instances/post: instance.SuitableArchitectures usage
  • lxd/instances/post: Moves local clustered check earlier
  • lxd/instances/post: Move target group check into initial transaction
  • lxd/instances/post: Pass request context into DB transaction
  • lxd/instances/post: Don't shadow err in instancesPost
  • lxd/instances/post: Keep related error checking together in instancesPost
  • lxd/instances/post: Move InstanceType and Source instance logic earlier in instancesPost
  • lxd/instances/post: Use instance.ValidName in instancesPost
  • lxd/instances/post: Remove duplicated instance name check in createFromImage
  • lxd/instances/post: Update createFromImage to use req.Type for image type
  • lxd/instances/post: Don't load target project again in createFromImage
  • lxd/instance: Fix error quoting in instanceCreateFromImage
  • lxd/instance/instance/utils: Updates ResolveImage to use a transaction
  • lxd/instance/instance/utils: Updates SuitableArchitectures to accept a source image reference
  • lxd/instance: Updates instanceCreateFromImage to accept a source image directly
  • lxd/db/db/internal/test: tx.GetCachedImageSourceFingerprint usage
  • lxd/db/images: Updates GetCachedImageSourceFingerprint to use transaction
  • lxd/daemon/images: tx.GetCachedImageSourceFingerprint usage
  • lxd/instances/post: Update createFromImage to accept image info and alias directly
  • lxd/instances/post: Updates instancesPost to resolve image profiles early
  • lxd: Move to current bakery version
  • lxd-migrate: Move to current bakery version
  • client: Move to current bakery version
  • lxc: Move to current bakery version
  • test/macaroon-identity: Move to current bakery version
  • tests: Update godeps.list
  • gomod: Update dependencies
  • lxd/instance/drivers/driver/qemu: Update architectureSupportsUEFI to add arch argumnent
  • lxd/instance/drivers/driver/qemu: Update checkFeatures to add -bios flag for UEFI architectures
  • lxd/instance: Improve logging in autoCreateInstanceSnapshots
  • lxd-migrate: Fix usage string
  • doc: fix version conflicts for doc tools
  • lxd/storage/drivers/driver/zfs: Improve error when existing zpool isn't empty
  • lxd/storage/s3/miniod: Wait 10s for minio process to start
  • doc/lxd-migrate: add information about updating the configuration
  • lxd/instance/drivers: Don't fail Start if renaming old log file doesn't exist
  • lxd/storage/backend/lxd: Improve bucket errors
  • forksyscall: ensure that parent mount is dependent mount
  • lxd/storage/drivers/driver/btrfs/utils: Fix getQGroup to suport BTRFS >= 6.0.1
  • lxd/storage/s3/miniod: Wait for config to be available before considering ready
  • forksyscall: avoid double MS_MOVE
  • lxd/db/query/dump: Correctly generate CREATE TABLE statement
  • lxd/db/query/dump: Correctly escape single quote and \n and \r
  • lxd/db/query/dump/test: Fix dump tests
  • lxd/db/warnings: Store warning times in UTC
  • gomod: Update github.com/shirou/gopsutil/v3
  • lxc/init: Fix --no-profiles flag
  • test: Adds test for lxc init --no-profiles
  • lxd/instance/drivers/driver/qemu: Add qemuMachineType function
  • lxd/instance/drivers/driver/qemu/config/test: Fix architecture tests
  • lxd/instance/drivers/driver/qemu/config/test: Fix whitespace
  • lxd/instance/drivers/driver/qemu: Adds -machine type argument to checkFeatures
  • lxd/network add function to get txqlen
  • lxd/instances/post: Move cluster member targetting checks higher up
  • lxd/instances/post: Use architecture from source image in request
  • lxd/instances/post: Remove logger.Debugf usage
  • lxd/instances/post: Rework cluster member targetting logic
  • lxd/instances/post: Only check project instance creation permissions on initial cluster member
  • lxd/instances/post: Send notification header when redirection create request to different cluster member
  • lxd/db/node: Adds GetCandidateMembers function
  • lxd/db/node: Reworks GetNodeWithLeastInstances to accept list of candidate members
  • lxd/db/node/test: Update tx.GetNodeWithLeastInstances tests
  • lxd/instances/post: Split generation of candidate cluster members from selection of member with fewest instances
  • lxd/api/cluster: tx.GetNodeWithLeastInstances usage
  • lxd/ip add function to set txqlen
  • grafana: add top network usage graphs
  • fix dead lock bug
  • lxd/instance/drivers: Fixes delete of ephemeral VM on stop
  • gomod: Update dependencies
  • lxd/instance/instance/utils: Updates SuitableArchitectures to return api.StatusError for bad requests
  • lxd/instance/instance/utils: Accept db.ClusterTx in SuitableArchitectures
  • lxd/instances/post: Move instance.SuitableArchitectures and tx.GetCandidateMembers into existing transaction
  • lxd/db/node: Skip pending nodes in GetCandidateMembers
  • lxd/db/node: Modified GetCandidateMembers to accept list of all cluster members
  • lxd: tx.GetCandidateMembers usage
  • lxd/project/permissions: Removes unused tx argument from CheckClusterTargetRestriction
  • lxd: project.CheckClusterTargetRestriction usage
  • lxd/instances/post: Reject use of target parameter when not clustered in instancesPost
  • lxd/instances/post: Allow targeting all cluster groups if project restricted.cluster.groups is empty
  • lxd/instances/post: Check manually targeted cluster member belongs to one of restricted.cluster.groups
  • lxd/db/node: Updates GetNodeWithLeastInstances to return NodeInfo
  • lxd/db/node/test: tx.GetNodeWithLeastInstances usage
  • lxd/api/cluster: Updates evacuateClusterMember tx.GetNodeWithLeastInstances usage
  • lxd/instances/post: Updates instancesPost tx.GetNodeWithLeastInstances usage
  • test: Update cluster targeting tests
  • test: Restructure test_clustering_membership to be less flaky
  • test: Lower boot.host_shutdown_timeout during clustering evacuation tests
  • lxd/api/cluster: Improve logging in evacuateClusterMember
  • lxd/db: Changed snapshot sort from date to datetime
  • lxd/api: Add support for serving the UI
  • doc: Fix broken cloud-init doc links
  • lxd/db/instances: Sort snapshots by creation time and then ID in GetInstanceSnapshotsNames and GetNextInstanceSnapshotIndex
  • lxd/info: Use snapshot order from server in instanceInfo
  • lxd/db/storage/volumes: Order by volume snapshot creation date first in GetStoragePoolVolume
  • doc/networks: add instructions for attaching a network to an instance
  • doc/server: struture the server options page
  • doc/server: split up configuration table
  • doc/server: update links to point to more specific sections
  • doc/server: clean up configuration options
  • lxd/device Add support for setting txqueuelen on veth based NICs
  • test: Add test for setting txqueuelen of nic bridged device
  • api: Adds txqueuelen api description
  • lxd/instances/post: Reduce scope of target member and group variables
  • lxd/instances/post: Updates comments
  • lxd/db/node: Make NodeInfo.ToAPI more efficient when called multiple times
  • lxd/db/node: Improve GetNodeMaxVersion comment
  • lxd/api/cluster: Updates member functions to use modified ToAPI function
  • lxd/api/cluster: Consistent error quoting
  • lxd/db/node: Don't run unnecessary query for getting offline threshold in GetCandidateMembers
  • lxd: tx.GetCandidateMembers usage
  • lxd/db/node/test: Updated tx.GetCandidateMembers usage
  • lxd/api/cluster: Fixes clusterNodesPost API description
  • doc/rest-api: Refresh swagger YAML
  • gomod: Update dependencies
  • i18n: Update translations from weblate

Try it for yourself

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

Downloads

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

LXD 5.9 has been released

12th of December 2022

Introduction

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

This is going to be our last release of 2022.
We wish you all happy holidays and look forward to seeing you all in 2023!

As the last release of the year, this was also a shortened development cycle of just three weeks, most of which was spent on bugfixes and performance improvements, perfect to wrap up the year!

Enjoy!

New features and highlights

Network zones project feature

Prior to this release, network zones (DNS) were tied to features.networks, effectively requiring the use of OVN in order to get per-project DNS zones.

This has now been split up into a new features.networks.zones allowing for use of per-project zones in environment that don't use features.networks. When dealing with a shared network, that network may specify multiple zones (comma separated). Each zone will then only contain records for the project it belong to.

Complete changelog

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

Full commit list
  • lxd/network/driver/bridge: Remove unnecessary query for server name in Leases
  • lxd: Fix use of inst.Project() in logs with inst.Project().Name
  • lxd/api/metrics: Fix race condition on map access in metricsGet
  • lxd/instance/drivers/driver/qemu: Fix blockNodeName to use base64 raw URL format
  • lxd/instance/post: Prevent moving instance to invalid (or empty) name
  • lxd/db: Fix default profile assigment on image creation in the default project
  • lxd/db/cluster: Fix the comment for InitProjectWithoutImages function
  • lxd/main: Fix that change project "features.images" to "false" didn't add the project default profile to images from "default" project
  • lxd/instance/drivers: Restrict CPU hotplugging
  • lxd/instance/drivers: Fix CPU hotplug check
  • lxd/instance/drivers: Handle unset limits.cpu
  • tests: Add test for correct default profile assigment to images in projects with "features.images=false"
  • lxd/device/tpm: Expose tpmrm to the container
  • doc: allow returning traffic in DOCKER-USER custom chain
  • scripts/bash/lxd-client: fix autocompletion not working
  • lxd/util: Skip cephobject in AvailableStorageDrivers
  • lxd/apparmor/archive: Fix image unpack apparmor profile in archiveProfile
  • lxd/daemon/storage: Improve errors in daemonStorageValidate
  • lxd/api/1.0: Improve errors in doApi10Update
  • lxd/storage/drivers/volume: Use roundVolumeBlockFileSizeBytes in ConfigSizeFromSource
  • test: Add test for custom volume image unpack
  • lxd/storage/drivers/volume: Update Test_Volume_ConfigSizeFromSource tests
  • lxd/device/nic: Add hwaddr key to liblxc NIC config
  • lxd/containers: Fix error handling on stop/shutdown
  • lxd/containers: release the liblxd instance if raw.lxc is invalid
  • lxd/fsmonitor/drivers/driver/fsnotify: Switch away from github.com/fsnotify/fsnotify package
  • lxd/device/device/utils/unix/events: Adds event action to error log in unixRunHandlers
  • lxd/device/unix/common: Detect missing source device in unixDeviceAttributes
  • lxd/fsmonitor/drivers/common: Clean file paths for handler registrations
  • lxd/fsmonitor/drivers/interface: Adds Name() to definition
  • lxd/fsmonitor/drivers/driver/inotify: Renames fsnotify driver to inotify
  • lxd/fsmonitor/drivers/driver/fanotify: Adds Name() function
  • lxd/fsmonitor/drivers/load: Rename fsnotify to inotify
  • lxd/fsmonitor/load: Use inotify instead of fsnotify
  • Replace "the the" with "the"
  • lxd/main/forkdns: Replace github.com/fsnotify/fsnotify with k8s.io/utils/inotify
  • lxd/main/forkdns: Wrap error and don't include newline in returned error
  • gomod: Adds k8s.io/utils
  • lxd/device/device/utils/unix/events: Only call filepath.Clean once in unixRegisterHandler
  • lxd/device/device/utils/unix/events: Don't use logger.Debugf in unixRegisterHandler
  • config: Fix inconsistency with acme.agree_tos option
  • lxc/init: Improve cmdInit device override to work nicely with --storage and --network flags
  • lxd/utils: Improve error in parseDeviceOverrides
  • i18n: Update translation templates
  • lxd/storage/drivers/interface: Add roundVolumeBlockSizeBytes definition to Driver interface
  • lxd/storage/drivers/driver/common: Move roundVolumeBlockSizeBytes to common driver
  • lxd/storage/drivers: pool driver roundVolumeBlockSizeBytes usage
  • lxd/storage/drivers/utils: Removes unused roundVolumeBlockFileSizeBytes function
  • lxd/storage/drivers/driver/lvm: Overrides roundVolumeBlockSizeBytes function
  • lxd/network/network/utils: Adds filter support to UsedByInstanceDevices
  • lxd/network/driver/bridge: Updates Leases to use UsedByInstanceDevices
  • lxd/network/driver/ovn: Update Leases to use UsedByInstanceDevices
  • lxd: Remove nictype checks for ovn
  • qemu: Add more feature checks
  • qemu: Check CPU hotplug support using features not architectures
  • drivers: Issue log message when instance type is operational
  • lxd/network/driver/common: Adds netType var and moves Type() to common
  • lxd/network/driver: Removes per-driver Type() function
  • lxd/network/network/load: Ensure LoadByType initialises netType variable
  • lxd/network/network/utils: Adds network type to NIC connected to network logic
  • lxd/device/nic/bridged: Update checkAddressConflict to use UsedByInstanceDevices
  • lxd/device/nic/ovn: Pass network type to UsedByInstanceDevices
  • lxd/network/driver/bridge: Pass network type to UsedByInstanceDevices
  • lxd/network/driver/ovn: Pass network type to UsedByInstanceDevices
  • lxd/network/driver/common: Pass network type to UsedBy
  • lxd/networks: Pass network type to network.UsedBy
  • test: Add timeout to interactive edit commands
  • test: check LXC driver version instead of QEMU's
  • test: image short fingerprints are 12 chars long
  • test: use grep instead of cat | grep
  • doc/instances: clean up devices overview section
  • doc/devices: clean up docs for none device type
  • doc/devices: sort tables for nic device type alphabetically
  • test: use awk instead of awk | awk
  • test: use awk instead of grep | cut
  • ceph: Drop unnecessary volume.block.* config keys
  • Makefile: optimize find call
  • Makefile: check test/extras/*.sh using shellcheck
  • test/extras: shellcheck fixes
  • shared/subprocess/testscript/signal.sh: lookup signal name to trap
  • doc: simplify markdown error postprocessing
  • doc: move trap before preprocessing
  • doc: silence command -v's output
  • lxd/project/permissions: Use consistent quoting in errors
  • lxd/project/permissions: Improve error wrapping
  • lxd/storage/volumes: Pass request context to transaction
  • lxd/instance/put: Use request context for transaction
  • lxd/storage/volumes: Don't check project limits when doing a volume snapshot restore
  • lxd/network/driver/bridge: Only include downstream OVN virtual router addresses for network's project in Leases
  • lxd/network/driver/bridge: Add network's own gateway IPs to Leases list
  • lxd/network/driver/ovn: Add network's own gateway IPs to Leases list
  • lxd/device/proxy: Simplify check in validateConfig
  • doc: add link to Running in production YouTube video
  • api: Adds projects_networks_zones extension
  • doc: Adds features.networks.zones project feature and updates networks dns.zone.forward setting
  • doc: Update network zones howto with multiple forward zones info
  • lxd/db/cluster/update: Patch to add features.networks.zones=true to any project that has features.networks=true
  • lxd/db/cluster/projects: Reworks project features info and adds features.networks.zone feature
  • lxd/db/migration: Switch to using cluster.ProjectFeatures in importPreClusteringData
  • lxd/db/cluster/open: ProjectFeatures usage
  • lxd/api/project: cluster.ProjectFeatures usage in projectsPost
  • lxd/api/project: Use cluster.ProjectFeatures in projectChange
  • lxc/project: Adds features.networks.zones support to cmdProjectList
  • lxd/project/project: Clarifies comment on NetworkProject
  • lxd/project/project: Adds NetworkZoneProjectFromRecord and NetworkZoneProject functions
  • lxd-user/lxd: Enable features.networks.zones project feature by default for user projects
  • lxd/api/project: Add validation for features.networks.zones
  • lxd/network/zones: Make network zones belong to their effective network zone project
  • lxd/network/zones: Use current method of generating API URLs
  • lxd/network/zone/zone: Update usedBy to handle networks having multiple zones
  • lxd/network/driver: Update validatation of network forward zone key
  • lxd/db/network/zones: Rename GetNetworkZones to GetNetworkZonesByProject
  • lxd/network/zones: GetNetworkZonesByProject usage
  • lxd/network/zone/reverse: Update reverse function to take net.IP
  • lxd/network/zone/zone: Update Content to handle networks supporting multiple forward zones
  • lxd/db/network/zones: Removes unused GetNetworksForZone function
  • i18n: Update translation templates
  • test: Update tests to check for network zones project views
  • docs: Added snap version directory for local remotes
  • lxd/network/zones: Use project.NetworkZoneProject in networkZonesGet
  • lxd/apparmor: fix AppArmor profile for qemu-img
  • lxd/db/generate/db/method: Add generic struct fetching functions
  • lxd/db/cluster/warnings.mapper: Update generated code
  • lxd/main/forkdns: Updates serversFileMonitor to only watch for inotify.InMovedTo event
  • test: Don't use temporary pid files for forkdns
  • test: Simulate what LXD does when building forkdns servers.conf
  • test: kill -9 forkdns processes to ensure they are killed
  • test: Make network zones more strict
  • doc/howto/cluster/manage: Adds --cohort="+" to snap refresh command
  • lxd/instance/drivers/driver/qemu: Use errors.Is in renderState
  • lxd/instance/drivers/driver/qemu: Adds non-agent metrics fallback in Metrics
  • lxd/instance/drivers/driver/qemu: Use shared.IsTrueOrEmpty in agentMetricsEnabled
  • client/connection: Don't use logger.Debugf
  • lxd/api/metrics: Correctly size slice of project names in projectNames
  • lxd/api/metrics: Use request context for DB transaction
  • lxd/api/metrics: Get internal metrics using existing DB transaction in metricsGet
  • lxd/api/metrics: Move duplicated code into invalidProjects function
  • lxd/locking/lock: Adds context support to Lock
  • lxd: locking.Lock usage
  • lxd/api/metrics: Use multiple OR filters to avoid calling InstanceList multiple times
  • lxd/query: Only repeat query as plain request for JSON decode errors in cmdQuery
  • lxd/api/metrics: Use locking.Lock with timeout in metricsGet
  • lxd/api/metrics: Limit concurrency of instance metrics building in metricsGet
  • lxd/api/metrics: Pre-allocate newMetrics map to right size
  • lxd/db/instances: Adds context argument to InstanceList
  • lxd: InstanceList with context usage
  • lxd/api/metrics: Pass request context to InstanceList in metricsGet
  • lxd/endpoints/vsock: Update VsockAddress to return net.Addr interface
  • lxd/instance/drivers/driver/qemu: Fix nested VMs in getAgentConnectionInfo
  • lxd/instance/drivers/driver/qemu: Don't generate agent.conf if no host vsock info in generateConfigShare
  • lxd/device/nic: Use api.NetworkStatusUnavailable constant
  • lxd/resources/network: Ignore errors from ethtoolAddPortInfo
  • doc/devices: clean up docs for nic device type
  • doc/devices: sort tables alphabetically
  • doc/devices: clean up docs for disk device type
  • doc/devices: clean up docs for gpu device type
  • doc/devices: clean up docs for infiniband device type
  • doc/devices: clean up docs for pci device type
  • doc/devices: clean up docs for proxy device type
  • doc/devices: clean up docs for tpm device type
  • doc/devices: clean up docs for unix-block device type
  • doc/devices: clean up docs for unix-char device type
  • doc/devices: clean up docs for unix-hotplug device type
  • doc/devices: clean up docs for usb device type
  • doc/devices: document device option override at creation
  • doc/devices: fix doc on how to use a specific VF as a NIC
  • lxd/migrate/instance: Don't use multi-sync when using optimized transfer mode
  • lxd/storage/drivers: Make using volSrcArgs.{MultiSync|FinalSync} with MigrateVolume an error
  • lxd/storage/drivers/driver/zfs/volumes: Remove unused multi-sync logic from migrateVolumeOptimized
  • lxd/instance/drivers: Improve pool name change check error
  • lxd/storage/drivers/driver/zfs/volumes: Use deferred option for deleting temporary snapshots
  • test: Force stop containers in migration tests
  • lxd/storage/drivers/utils: Use consistent error quoting in TryUnmount
  • lxd/storage/drivers/driver/zfs/volumes: Use existing dataset var in UnmountVolume
  • lxd/api/1.0: Move wait for server to be ready out of doApi10UpdateTriggers
  • lxd/api/1.0: Explicitly use context.Background() in api10Put and doApi10Update
  • lxd/api/1.0: Use request context in doApi10Update when validating request
  • lxd/api/1.0: Use contextual logging
  • lxd/storage: Disable io_uring on ZFS
  • lxd/instance/drivers/qmp/commands: Updates SendFile to use Go's JSON encoder
  • lxd/instance/drivers/qmp/commands: Adds CloseFile function
  • lxd/instance/drivers/driver/qemu: Fix macvlan NICs losing connectivity on LXD restart
  • lxd/instance/drivers/qmp/commands: Adds QueryCPUs function
  • lxd/instance/drivers/driver/qemu: Fix multi-queue NIC support in addNetDevConfig
  • lxd/device/nic/sriov: Fix nicSRIOV to pass VF MAC address to VM if not specified
  • lxd/instance/drivers/driver/qemu: Improve MAC parse error in writeNICDevConfig
  • lxd/apparmor: fix AppArmor instance_qemu profile
  • lxd/migrate/instance: Consider RBD transfer non-optimised
  • doc/instances: clean up docs for instance properties
  • doc/instances: reorder instance options docs
  • doc/instances: fix links to instance options
  • doc/instances: add how-to guide for creating snapshots
  • lxd/storage/drivers/driver/ceph/volumes: Don't expect multi-sync for live optimized transfer in CreateVolumeFromMigration
  • lxd/storage/drivers/driver/ceph/volumes: Don't allow multi-sync for optimized transfer in MigrateVolume
  • Revert "lxd/migrate/instance: Consider RBD transfer non-optimised"
  • doc/instances: clean up instance options
  • doc/snapshots: add information about snapshot pattern format
  • doc/instances: clean up unit reference
  • doc/instances: move Override QEMU configuration
  • doc/instances: clean up QEMU override section
  • lxd/storage/drivers/interface: Make HasVolume return an error
  • lxd/storage/backend/lxd: b.driver.HasVolume usage
  • lxd/storage/backend/lxd: Check storage pool is ready before checking usage
  • lxd/storage/drivers/driver/btrfs/volumes: HasVolume usage
  • lxd/storage/drivers/driver/ceph: HasVolume usage
  • lxd/storage/drivers/driver/cephfs: HasVolume usage
  • lxd/storage/drivers/driver/common: HasVolume usage
  • lxd/storage/drivers/driver/dir: HasVolume usage
  • lxd/storage/drivers/driver/lvm: HasVolume usage
  • lxd/storage/drivers/driver/mock: HasVolume usage
  • lxd/storage/drivers/driver/zfs: Renames checkDataset to datasetExists
  • lxd/storage/drivers/generic/vfs: Updates genericVFSHasVolume to return an error
  • lxd/storage/drivers/driver/ceph: Adds placeholder volume exists check for Mount
  • lxd/storage/drivers/driver/ceph/volumes: Updates hasVolume to return an error
  • lxd/storage/drivers/driver/ceph: Adds 10s timeout to GetVolumeUsage and rbdMapVolume
  • lxd/instance/drivers/qmp: Adds SetAction function
  • lxd/instance/drivers/driver/qemu: Set reboot action to shutdown
  • lxd/instance/drivers: Ignore in-use unmount errors on instance stop
  • i18n: Update translations from weblate
  • gomod: Update dependencies

Try it for yourself

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

Downloads

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

Older news