LXD 5.3 has been released

Introduction

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

With our focus still squarely on reworking a lot of our internal migration and storage logic, extending tests and doing initial research for upcoming LXD features, LXD 5.3 is primarily a bugfix release with only a couple of small features.

Enjoy!

New features and highlights

Extended raw.qemu support

A new raw.qemu.conf configuration key was added. This allows individually overriding part of the generated QEMU configuration as well as adding devices or device configurations keys to the generated configuration

You can find more details about this here: Instance configuration - LXD documentation

fscache support for cephfs storage pools

The ceph filesystem supports the use of the kernel fscache.
This interacts with a userspace caching daemon such as cachefilesd in a similar fashion to what NFS and other network filesystems can do.

To enable the use of fscache for LXD managed cephfs pools, you may now set cephfs.fscache to true on the storage pool.

lxd-migrate binaries

Starting with LXD 5.3 prebuilt lxd-migrate binaries can be downloaded from the LXD Github releases page. This allows the use of lxd-migrate on a source machine without having to build it manually.

Complete changelog

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

Full commit list
  • lxd/db/cluster/profiles.mapper: Add cluster.Profile and generated methods
  • lxd/db/cluster/profiles: Add ToAPI and GetProfileIfEnabled
  • shared/api/profile: Add profile URL method
  • lxd/resources: Handle ethtool not supported
  • client: Move image profile override to ImageCopyArgs
  • lxc/image: Update for Profiles in ImageCopyArgs
  • lxc/profile: Fix bad target project handling
  • tests: Fix bad profile copy test
  • lxd/main_forkfile: Change counting model
  • lxd/instance/qemu: Implement qemuMemorySections
  • lxd/instance/qemu: Replace qemuMemory template with qemuMemorySections
  • lxd/instance/qemu: Implement qemuSerialSections
  • lxd/instance/qemu: Replace qemuSerial template with qemuSerialSections
  • lxd/instance/qemu: Implement qemuPCIeSections
  • lxd/instance/qemu: Replace qemuPCIe template with qemuPCIeSections
  • lxd/instance/qemu: Implement qemuSCSISections
  • lxd/instance/qemu: Replace qemuSCSI template with qemuSCSISections
  • lxd/instance/qemu: Implement qemuBalloonSections
  • lxd/instance/qemu: Replace qemuBalloon template with qemuBalloonSections
  • lxd/instance/qemu: Implement qemuRNGSections
  • lxd/instance/qemu: Replace qemuRNG template with qemuRNGSections
  • lxd/instance/qemu: Implement qemuVsockSections
  • lxd/instance/qemu: Replace qemuVsock template with qemuVsockSections
  • lxd/instance/qemu: Implement qemuGPUSections
  • lxd/instance/qemu: Replace qemuGPU template with qemuGPUSections
  • lxd/instance/qemu: Implement qemuKeyboardSections
  • lxd/instance/qemu: Replace qemuKeyboard template with qemuKeyboardSections
  • lxd/instance/qemu: Implement qemuTabletSections
  • lxd/instance/qemu: Replace qemuTablet template with qemuTabletSections
  • lxd/instance/qemu: Refactor qemuBaseSections to struct opts arg
  • lxd/events/common: Ignore connection close errors in Close
  • doc: move content around
  • lxd/instance/qemu: Implement qemuCPUSections
  • lxd/instance/qemu: Replace qemuCPU template with qemuCPUSections
  • lxd/instance/qemu: Implement qemuControlSocketSections
  • lxd/instance/qemu: Replace qemuControlSocket template with qemuControlSocketSections
  • lxd/instance/qemu: Implement qemuConsoleSections
  • lxd/instance/qemu: Replace qemuConsole template with qemuConsoleSections
  • lxd/instance/qemu: Implement qemuDriveFirmwareSections
  • lxd/instance/qemu: Replace qemuDriveFirmware template with qemuDriveFirmwareSections
  • lxd/events: Use cancel.Canceller for done indicator
  • doc: add and update content
  • doc: allow center-aligning table cells
  • doc: fix version numbers in the version switcher
  • lxd/db/profiles: Keep minimal db.Profile
  • lxd: Use new cluster.Profile methods
  • lxd/main/test: Update tests
  • lxd/db/cluster/instances.mapper: Generate cluster package methods for instances
  • shared/api/instance: Add Instance URL method
  • lxd/profiles: Add profileUsedBy
  • lxd/db/db: Fill cluster PreparedStmts in ForLocalInspection
  • lxd/instance/lxc: Stop forkfile on restore
  • lxd/operations/operations: Renames Run to Start
  • lxd: op.Start usage
  • lxd/operations/operations: Renames WaitFinal to Wait, and adds context support
  • lxd/operations: op.Wait usage
  • lxd/operations/operations: Fix possible races on accessing status property
  • lxd/operations/operations: Store operation error as error type rather than string
  • lxd/operations/operations: Use contextual logging
  • client/operations: Get error text verbatim in setupListener
  • lxd/images: Fix bug with operation run function returning empty error in imageExportPost
  • lxd/state: Adds ServerName field placeholder for non-cgo builds
  • lxd/operations/linux: Removes getServerName function
  • lxd/operations/operations: Used cached state.ServerName rather than looking up server name for every operation
  • lxd/db/node: Fix crash in nodes by avoiding reusing the rows var in defer
  • lxd/instance/qemu: Implement qemuDriveConfigSections
  • lxd/instance/qemu: Replace qemuDriveConfig template with qemuDriveConfigSections
  • lxd/instance/qemu: Implement qemuDriveDirSections
  • lxd/instance/qemu: Replace qemuDriveDir template with qemuDriveDirSections
  • lxd/instance/qemu: Implement qemuPCIPhysicalSections
  • lxd/instance/qemu: Replace qemuPCIPhysical template with qemuPCIPhysicalSections
  • lxd/instance/qemu: Implement qemuGPUDevPhysicalSections
  • lxd/instance/qemu: Replace qemuGPUDevPhysical template with qemuGPUDevPhysicalSections
  • lxd/storage/backend/lxd: Don’t close migration socket on error
  • lxd/instance/qemu: Implement qemuUSBSections
  • lxd/instance/qemu: Replace qemuUSB template with qemuUSBSections
  • lxd/instance/qemu: Implement qemuTPMSections
  • lxd/instance/qemu: Replace qemuTPM template with qemuTPMSections
  • doc: update info on how to grow a ZFS pool
  • doc: use the same order for drivers
  • doc: storage: add a how-to for creating a storage pool
  • doc: storage: move examples for creating a storage pool
  • doc: storage: clean up and align examples
  • lxd/instance/drivers/driver/qemu: Don’t reference absolute times in op.Reset comments
  • lxd/instance/operationlock/operationlock: Adds ResetTimeout for custom reset timeouts
  • lxd/instance/drivers/driver/lxc: Use ticker in Shutdown operation lock keepalive
  • lxd/instance/drivers/driver/qemu: Use ticker in Shutdown operation lock keepalive
  • lxd/instance/drivers/driver/lxc: Use operationlock.TimeoutShutdown in onStop
  • lxd/instance/drivers/driver/qemu: Use operationlock.TimeoutShutdown in onStop
  • lxd/storage/drivers/driver/zfs/volumes: Use operationlock.TimeoutShutdown in UnmountVolume
  • lxd/instance/drivers/driver/lxc: Reworks revert clean up in FileSFTPConn
  • lxd/instance/drivers/driver/lxc: Removes double call to defer in stopForkfile
  • lxd-agent: Consistent use of revert name
  • lxd: Consistent use of revert name
  • lxd-migrate: Consistent use of revert name
  • shared: Consistent use of revert name
  • lxd/instance/operationlock/operationlock: Adds ActionCreate constant
  • lxd/instance/instance/utils: Use ActionCreate operation lock constant in CreateInternal
  • lxd/instance/instance/interface: Adds LockExclusive definition
  • lxd/instance/drivers/driver/lxc: Log path in IdmappedStorage
  • lxd/instance/drivers/driver/lxc: Improve comment in FileSFTPConn
  • lxd/instance/drivers/driver/lxc: Implement LockExclusive
  • lxd/instance/drivers/driver/qemu: Whitespace in Restore
  • lxd/instance/drivers/driver/qemu: Implement LockExclusive
  • lxd/instance: Use inst.LockExclusive in instanceCreateAsCopy
  • lxd/instances/post: Use inst.LockExclusive in createFromMigration
  • lxd/instances/post: Removes duplicated in createFromCopy
  • lxd/storage/drivers/driver/zfs/volumes: Fix comment
  • lxd/daemon/images: Use contextual logging in imageOperationLock
  • lxd/instance/qemu: Move common test run code into a separate function
  • doc: storage: add examples for CephFS
  • doc: storage: add “source” option for all storage drivers
  • doc: storage: Clarify driver names
  • lxd/instance/qemu: Remove usage of a temporary strings.Builder instance
  • lxd/instance/qemu: Remove “Sections” suffix from config builders
  • lxd/storage/drivers/zfs: Fix VM migration
  • lxd-agent/events: Ensure connection is closed on function return in eventsSocket
  • lxd: Ensure events connection is closed on function return
  • lxd: Wait for operations to be finished in scheduled tasks
  • lxd/images: Adds imageTaskMu to prevent image related tasks from running concurrently with each other
  • lxd: Contextual logging
  • lxd/operations/operations: Improves comment on Wait
  • test: Rename FIX ME to FIXME for consistency with ther FIXMEs
  • lxd/storage/backend/lxd: Moves migration index header send/receive into own functions
  • lxd/migration/migration/volumes: Clarify that Config field only used for custom volumes
  • lxd/storage/backend/lxd: Improve error in CreateInstanceFromMigration
  • lxd/storage/backend/lxd: Fix bug in CreateCustomVolumeFromMigration that prevented refreshing volume with custom mount settings
  • doc: storage: add information about clustering
  • doc: storage: add instructions for adding storage volumes
  • shared: Export the Msg field in RunError
  • lxd/archive: Restore squashfs unpack behavior
  • doc/howto/ovn: Fix incorrect config syntax
  • lxd/events: Update API description
  • doc/rest-api: Refresh swagger YAML
  • doc: storage: clarification about sharing of storage volumes
  • lxd/instance/qemu: Support running inside a LXD container
  • lxd/operations: Fix crash on nil state
  • chore: Set permissions for GitHub actions
  • chore: Included githubactions in the dependabot config
  • lxd/instance/drivers: Moves away from accepting a revert argument
  • lxd/instance: Updates Create and create to return a revert.Hook rather than accept a revert.Reverter argument
  • lxd/instance: Updates CreateInternal to return a revert.Hook rather than accept a revert.Reverter argument
  • lxd: Use revert.Hook rather than func() where a revert hook is returned
  • lxd: instance.CreateInternal usage
  • lxd/network: Return revert.Hook rather than revert.Reverter for cleanup
  • lxd/device/nic/bridged: Improve comment on setupHostFilters
  • lxd/storage/drivers/driver/btrfs/volumes: Return revert.Hook rather than revert.Reverter for cleanup
  • lxd/device/device/utils/disk: Return revert.Hook after file handle in DiskVMVirtfsProxyStart
  • lxd: Use cleanup rather than revertExternal naming
  • lxd/api/internal/recover: Moves away from accepting a revert argument in internalRecoverImportInstance
  • lxd/device/nic/ovn: Moves away from accepting a reverter as an argument in setupHostNIC
  • lxd/storage/drivers: Don’t defer calls to revert.Success
  • lxd/storage/drivers/driver/zfs/volumes: Return revert.Hook rather than revert.Reverter for cleanup
  • lxd: Change RunConfig.Revert to revert.Hook type
  • lxd: instance.CreateInternal usage in tests
  • lxd/instance/test: Update TestContainer_LoadFromDB to use RenderFull for equality check
  • lxd/storage/pool/load: Fix error handling bug in Patch
  • lxd/storage/utils: Better error in VolumeDBGet
  • lxd/storage/backend/lxd: Add logging to ApplyPatch
  • lxd/patches: Better logging in apply
  • lxd: Adds storage_missing_snapshot_records patch
  • test: Adds tests for instance volume snapshot DB record recovery
  • build(deps): bump actions/setup-go from 2 to 3
  • build(deps): bump actions/labeler from 3 to 4
  • build(deps): bump actions/checkout from 2 to 3
  • build(deps): bump actions/upload-artifact from 2 to 3
  • chore(deps): Included dependency review
  • github: Move depsreview to tests
  • github: Move woke test to ubuntu-latest
  • lxd/migrate/storage/volumes: Only choose source’s index header version if target supports it
  • lxd/storage/backend/lxd: Fix index migration header format
  • lxd/storage/backend/lxd: Improve logging of index migration header send/receive
  • lxd/storage/drivers: Improve log and error messages related to driver specific migration frames
  • lxd/storage: Expand arg names in logging
  • lxd: Don’t return migration error until after its been sent to remote
  • lxd/storage/backend/lxd: Improve pre migration checks in MigrateCustomVolume
  • lxd/migrate_storage_volumes: Make sender aware of refresh
  • doc: Update for new myst_parser
  • lxd-user: Move away from atomic
  • lxd-user: Use getent instead of os/user
  • lxd/certificates: Require an address for token issuance
  • lxd/instance/qemu: Drop bootIndex from PCI
  • lxc/network_forward: Fix example
  • i18n: Update translation templates
  • lxd/cgroup: Better handle broken CGroupV2 setups
  • lxd/migration: Add Refresh to InfoResponse
  • lxd/storage: Return InfoResponse from migrationIndexHeaderSend
  • lxd/storage: Use Refresh from InfoResponse
  • lxd/storage/backend: Add refresh arg to migrationIndexHeaderReceive
  • test/suites: Enable migration test for zfs
  • lxd/storage/drivers/btrfs: Fix volumeSnapshotsSorted
  • lxd/storage/drivers/btrfs: Don’t rely on passed snapshots
  • lxd/storage/drivers/zfs: Handle MultiSync with optimized refresh
  • lxd/migration: Add VolumeOnly to source and target args
  • lxd: Use VolumeOnly field when migrating
  • lxd/storage/drivers/btrfs: Check VolumeOnly when migrating
  • lxd/storage: Use VolumeOnly field when migrating
  • lxd/storage/drivers/zfs: Use VolumeOnly migration field
  • lxd/instance/drivers: Improve error messages
  • lxd/instance/drivers/driver/qemu: Fix typo in qemuCreate
  • lxd/migrate/instance: Updates snapshotToProtobuf to accept api.InstanceSnapshot
  • lxd/migrate/instance: Updates migrationSink.Do to use updated snapshotToProtobuf
  • lxd/migrate/instance: snapshotToProtobuf usage
  • lxd/migrate/instance: Improve error handling and logging in migrationSourceWs.Do
  • lxd/migrate/instance: Improve error handling and logging in migrationSink.Do
  • lxd/backup: Don’t allow writing backup index file for snapshot instances in backupWriteIndex
  • lxd/storage/backend/lxd: Relax validation in GenerateInstanceBackupConfig to allow generating config for instance snapshots
  • lxd/migrate/instance: Switch to using pool.GenerateInstanceBackupConfig in migrationSourceWs.Do
  • lxd/migrate/instance: Setup migration.VolumeSourceArgs in one go
  • lxd/storage/backend/lxd: Expand arg names in logging in migrationIndexHeaderSend
  • lxd/storage/backend/lxd: Additional logging in migrationIndexHeaderReceive
  • lxd/storage/backend/lxd: Fix error message in migrationIndexHeaderSend
  • lxd/storage/backend/lxd: Removes unnecessary/duplicated checks in CreateCustomVolumeFromMigration
  • lxd/storage/backend/lxd: Reduce indentation in CreateCustomVolumeFromMigration
  • lxd/storage/backend/lxd: CreateCustomVolumeFromMigration comment improvements
  • lxd/migrate/storage/volumes: Simplify snapshot config generation in migrationSourceWs.DoStorage
  • test: Add check that instance volume config is copied for both same pool and cross-pool copies
  • lxd/storage/backend/lxd: Adds index migration header support to CreateInstanceFromCopy
  • lxd/storage/backend/lxd: Adds index migration header support to RefreshInstance
  • lxd/storage/backend/lxd: Adds index migration header support to MigrateInstance and CreateInstanceFromMigration
  • lxd/migrate/instance: Update migrationSourceWs.Do to support migration index header
  • lxd/migrate/instance: Update migrationSink.Do to support migration index header
  • lxd/instance/post: Fix comment in instancePostClusteringMigrateWithCeph
  • lxd/instance/post: Include required migration source config in instancePostClusteringMigrateWithCeph
  • test: Updates incremental_copy to check for volume and snapshot volume config copying
  • github: Only run dependencies check on PR
  • tests: Skip EDITOR=cat when not a terminal
  • doc: fix indentation for commands
  • lxd/instance/qemu: Implement granular control of qemu.conf output
  • scripts/bash: Add raw.qemu.conf
  • api: qemu_raw_conf
  • doc/instances: Add raw.qemu.conf
  • doc/instances: Add section about raw.qemu.conf
  • fixup! doc/instances: Add section about raw.qemu.conf
  • fixup! doc/instances: Add section about raw.qemu.conf
  • doc: add link to video about network forwards
  • lxd/db/generate/db/method/v2: Expect collections for generated reference methods
  • lxd/db/generate/db/method/v2: Add newLine flag to ifErrNotNil
  • lxd/db/cluster/mapper: update generated code
  • lxd/profiles: Update usage of CreateProfileDevices
  • lxd/db/cluster/profiles: Make GetProfileIfEnabled GetProfilesIfEnabled
  • lxd/db/cluster/instances: cluster.Instance generator comments/helpers
  • lxd/db/cluster/instances.mapper: Update generated code
  • lxd/db/instances: Remove db.Instance and generator comments
  • lxd/db/instances.mapper: Remove unused generator files
  • lxd/db/cluster/snapshots: Minimal cluster.Snapshot
  • lxd/db/instances: Instance and Snapshot Conversions
  • lxd/db/instances: Use InstanceToArgs in InstanceList
  • lxd/db/instances: Reference cluster package for ClusterTx helpers
  • lxd/db/images: ClusterTx method for fetching images by fingerprint prefix
  • lxd/db/cluster/profiles: Add expanded config/devices helpers to cluster package
  • lxd/api/project: UsedBy and URIs for projects
  • lxd/backup/backup/config/utils: Fetch api.Profiles in ConfigToInstanceDBArgs
  • lxd/storage/volumes/utils: Update usages of InstanceList
  • lxd/storage/migration: Fetch api.Profiles for migration InstanceArgs
  • lxd/instance/instance/interface: Store api.Profile instead of profile names
  • lxd/instances/post: Update helper usages for new cluster package syntax/args
  • lxd/profiles/utils: Update remainining helper usages
  • lxd/project/permissions: Use api.Instance for instance info
  • lxd/instance/instance/utils: Explicit args to instance_profiles
  • lxd/db/db: Remove urlsToResourceNames
  • lxd/db/profiles: Remove unused functions
  • lxd/project/permissions/test: Fix tests
  • lxd/db/cluster/snapshots: Add missing build constraints
  • lxd/db/cluster/snapshots: Add full snapshot generator comments and ToInstance helper
  • lxd/db/cluster/snapshots.mapper: Update generated code
  • lxd/db/snapshots: Remove db.Snapshot and generator comments
  • lxd/db/snapshots.mapper: Remove generated code
  • lxd/db/cluster/images: Add cluster.Images
  • lxd/db/cluster/images.mapper: Update generated code
  • lxd/db/images: Remove db.Images and generator comments
  • lxd/db/images.mapper: Remove generated code
  • shared/api/image: Add URL method
  • lxd/api/project: Use api.URL for project usedBy images
  • lxd/sys: Add BootTime
  • lxd/seccomp: Align uptime with LXCFS
  • shared/util_linux: Refactor GetMeminfo
  • lxd/cgroup: Handle no swap limit
  • lxd: Update helper usages for cluster.Image syntax/args
  • lxd/db/images/test: Fix tests
  • lxd: Update usages for cluster.InstanceSnapshot
  • lxd/db/snapshots/test: Fix tests
  • lxd/db/node: Remove db.Config and db.Device types
  • lxd/db/generate/db/parse: Allow all types as columns
  • lxd/db/operationtype/operation/type: Create operationtype package
  • lxd/db/cluster/operations: Add cluster.Operations
  • lxd/db/cluster/operations.mapper: Update generated code
  • lxd/db/operations/types: Remove db.Operations and OperationType
  • lxd: Update OperationType usages
  • lxd: Update cluster.Operation usages
  • lxd/db/operations/test: Fix tests
  • lxd/instance/drivers/driver/common: Moves StoragePool into public section
  • lxd/instance/drivers: Moves deviceLoad into common
  • lxd/instance/drivers: Moves deviceAdd into common
  • lxd/instance/drivers: Moves deviceRemove into common
  • lxd/instance/drivers/driver/qemu: Bring deviceStop inline with lxc signature
  • lxd/instance/drivers: Removes updateDevice and moves updateDevices into common
  • lxd/instance/drivers: Rename updateDevices to devicesUpdate for consistency with other function names
  • lxd/instance/drivers: Deduplicates device add logic into common devicesAdd function
  • lxd/instance/drivers: Deduplicates RegisterDevices by adding devicesRegister to common
  • lxd/instance/drivers: Use consistent error messages for device load failures
  • lxd/instance/drivers: Deduplicates device remove logic by adding devicesRemove to common
  • lxd/instance/drivers/driver/common: If device is unsupported for instance don’t return usable device in deviceLoad
  • lxd/instance/drivers: Simplify error checks in cleanupDevices
  • lxd/instance/drivers/driver/common: Simplify error checks in devicesRemove
  • lxd/instance/drivers/driver/common: Simplify error checks in devicesAdd
  • lxd/instance/drivers/driver/common: Simplify error checks in devicesRegister
  • lxd/instance/drivers/driver/common: Simplify error checks in devicesUpdate
  • lxc/storage_volume: Fix usage strings
  • i18n: Update translation templates
  • doc: storage: expand configuration documentation
  • doc: storage: clarify requirements for attaching volumes
  • doc: storage: add information on listing pools and volumes
  • doc: storage: add information about copying or moving volumes
  • lxd/profiles/utils: Add missing profiles slice check
  • lxd/network/zone: Add SOA
  • lxd/dns: Add support for SOA
  • lxd/daemon: Update for SOA support
  • client: Fixes gosimple lint errors.
  • lxc: Fixes gosimple lint errors.
  • lxd-agent: Fixes gosimple lint errors.
  • shared: Fixes gosimple lint errors.
  • test/syscall/sysinfo: Fixes gosimple lint errors.
  • lxd/cluster: Fixes gosimple lint errors.
  • lxd/db: Fixes gosimple lint errors.
  • lxd/device: Fixes gosimple lint errors.
  • lxd/dns: Fixes gosimple lint errors.
  • lxd/dnsmasq/dhcpalloc: Fixes gosimple lint errors.
  • lxd/events: Fixes gosimple lint errors.
  • lxd/firewall/drivers: Fixes gosimple lint errors.
  • lxd/fsmonitor/drivers: Fixes gosimple lint errors.
  • lxd/instance: Fixes gosimple lint errors.
  • lxd/ip: Fixes gosimple lint errors.
  • lxd/lifecycle: Fixes gosimple lint errors.
  • lxd/maas: Fixes gosimple lint errors.
  • lxd/migration: Fixes gosimple lint errors.
  • lxd/network: Fixes gosimple lint errors.
  • lxd/project: Fixes gosimple lint errors.
  • lxd/resources: Fixes gosimple lint errors.
  • lxd/revert: Fixes gosimple lint errors.
  • lxd/rsync: Fixes gosimple lint errors.
  • lxd/seccomp: Fixes gosimple lint errors.
  • lxd/storage: Fixes gosimple lint errors.
  • lxd/util: Fixes gosimple lint errors.
  • lxd: Fixes gosimple lint errors.
  • static-analysis: Enables gosimple linter.
  • lxd/instance/drivers: Fix potential LXD crash when starting device fails to load
  • lxd/device/nic/bridged: Moves address conflict detection into own checkAddressConflict function
  • lxd/device/nic/bridged: Update checkAddressConflict to return a conflict api.StatusError on conflicting address
  • lxd/instance/drivers/driver/common: Allow instances to be created and updated with conflicting devices
  • tests: Add tests for conflicting instance device validation behaviour
  • lxd/migrate/instance: Use the negotiated index migration header version on target
  • lxd/device/nic/bridged: Avoid loading already loaded parent network config in rebuildDnsmasqEntry
  • lxd/network/acl/driver/common: Fix ACL UsedBy Instance type assertion
  • lxd/instance/drivers/driver/common: Use per-loop contextual loggers in devicesUpdate
  • lxd/instance/drivers/driver/common: Remove device if non-user requested update validation fails
  • test: Update bridged NIC checks to expect device removal after non-user requested update validation fails
  • lxd/dnsmasq/dnsmasq: Add DHCPStaticAllocationPath function
  • lxd/device/nic/bridged: Make sure volatile hwaddr is used when writing static DHCP allocation file in Add
  • lxd/device/nic/bridged: Detect missing static DHCP lease file at start and create if needed
  • test: Add tests for creating missing bridged DHCP static lease file at NIC start time
  • lxd/device/disk: Fix ceph creds on custom volumes
  • build(deps): bump actions/dependency-review-action from 1 to 2
  • doc: fix instructions for substitutions
  • doc: storage: fix format for snapshots.schedule
  • github: Disable dependabot labels
  • api: storage_cephfs_fscache
  • doc: Add cephfs.fscache
  • scripts: Add cephfs.fscache
  • lxd/network/ovs: Add timeout to nbctl/sbctl
  • shared: Use DialContext.
  • client: Use DialContext.
  • lxd/endpoints: Use DialContext.
  • lxd/instance/drivers: Use DialContext.
  • lxd/util: Use DialContext.
  • lxd: Use DialContext.
  • test/deps: Use DialContext.
  • client: Remove dereferenced memory address.
  • client: Replace nil context with context.TODO.
  • lxc: Ignore deprecation warning for PEM encryption.
  • lxc: Use blank identifier for unused variable.
  • lxc-to-lxd: Replace deprecated GetContainerNames.
  • lxd/cluster: Ignore empty critical section lint error.
  • lxd-generate: Replace deprecated strings.Title.
  • lxd-generate: Uncomment error return for unexported fields.
  • lxd/device: Fix vgpu file permissions.
  • lxd/dnsmasq/dhcpalloc: Prefer net.IP.Equal over bytes.Equal.
  • lxd/endpoints: Use blank identifier for unused variable.
  • lxd/instance/drivers: Remove unnecessary fmt.Sprintf.
  • lxd/network/openvswitch: Remove unnecessary fmt.Sprintf.
  • doc: add link to the YouTube video about network zones
  • shared/logger: Filter event levels for syslog
  • lxd/storage/cephfs: Add cephfs.fscache
  • lxc: List volumes under used-by
  • lxc/storage: Show project and target on info
  • doc: Rename refquota config key name for proper one
  • doc: storage: add --refresh flag for copying volumes
  • doc: storage: how to back up storage volumes
  • doc: instances: clarify units for limits
  • doc: storage: move I/O limits section
  • doc: storage: fix wrong link
  • doc: storage: clarify doc about I/O limits
  • doc: instances: add links for I/O limits and clarifications
  • lxd/network: Fail peer validation if unable to get existing peers from DB.
  • lxd/resources: Use blank identifier for unused variable.
  • lxd/storage/drivers: Use -1 in strings.Replace.
  • lxd/sys: Use NewPid2 (NewPid is deprecated).
  • lxd/util/config: Move unconditional break statement.
  • lxd: Omit unused assignment.
  • lxd: Omit or use blank identifier for unused variables.
  • lxd: Ignore empty branch lint error.
  • lxd: Replace deprecated strings.Title.
  • lxd: Length of a slice cannot be < 0.
  • lxd-agent: Replace deprecated Temporary error.
  • shared/cancel: Use context instead of deprecated http.Request.Cancel.
  • shared/cmd: Replace deprecated terminal package.
  • shared/ioprogress: Remove int % 1 (any int mod 1 is zero).
  • shared/validate: Remove port < 0 (uint cannot be less than zero).
  • shared/version: Replace deprecated strings.Title.
  • shared: Remove unnecessary for loop.
  • shared: Exit test to avoid nil pointer dereference.
  • test/macaroon-identity: Remove assignment to tokenString.
  • test/static-analysis: Includes govet, ineffassign, and staticcheck linters.
  • doc: storage: clean up driver overview page
  • doc: storage: clean up general storage drivers reference
  • lxd/migration: Handle optimized refresh for older versions
  • lxc: Removes unused flags.
  • lxd/events: Removes unused pongsPending field.
  • lxd/response: Ignores lint errors for unused swagger types.
  • lxd/storage/drivers: Removes unused getSubVolumeUUID.
  • lxd: Removes unused struct field.
  • lxd: Removes unused kernelVersion from Daemon.
  • lxd: Removes unused field from cmdDaemon.
  • test/static-analysis: Removes golangci-lint flags.
  • lxd/vsock: Use DialContext in vsock HTTP client.
  • lxd-generate: Revert to deprecated strings.Title.
  • gomod: Update dependencies
  • i18n: Update translations from weblate
  • shared/api: Add event types
  • lxd: Use event type consts
  • shared/api: Add constants for lifecycle events
  • shared/osarch: Fix indirect lock copy

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
3 Likes

LXD 5.3 is currently in latest/candidate for our snap users with release to stable schedule for Monday/Tuesday.
We will have our usual release live stream on Monday at 2pm EDT.

https://www.youtube.com/watch?v=V8cmT1DZTOQ