LXD 5.14 has been released


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

This release took a bit longer than usual due to the team traveling to Prague for a couple of weeks. It comes with quite a few nice improvements and a LOT of bugfixes.


New features and highlights

Cluster auto-healing

A commonly requested feature by those using LXD with Ceph and OVN, it’s now possible to have LXD automatically recover from a cluster member failure by effectively evacuating all instances to other systems.

This can only work with Ceph backed instances which don’t rely on any server-specific device or configuration.

This is controlled by a new cluster.healing_threshold which defines a number of seconds after which a cluster member is considered to be offline and its instances relocated.

Documentation: https://linuxcontainers.org/lxd/docs/latest/server/#server-options-cluster
Specification: [LXD] Automated cluster healing

OIDC web authentication

Following the addition of OpenID Connect authentication in LXD 5.13, this release now supports using it directly through the REST API.

For that, three new API endpoints were added:

  • /oidc/login
  • /oidc/logout
  • /oidc/callback

Configure LXD for OIDC login and then configure your OIDC provider to allow redirection to LXD’s address at /oidc/callback. With that in place, hit /oidc/login in a web browser to complete the login flow.

lxc publish --reuse

Similar to lxc snapshot --reuse, it’s now possible to use lxc publish --reuse --alias NAME to have LXD publish an instance as an image, re-using an existing alias.

Support for specifying the size of an LVM thinpool

When using an existing LVM VG, the size property of the pool is now used to set the size of the LVM thinpool.

Total disk and memory reporting

Additional API fields were added to to the instance state API to get the total disk and total amount of memory on top of the existing usage data.

stgraber@dakara:~$ lxc query /1.0/instances/u1/state | jq .disk
  "root": {
    "total": 10737418240,
    "usage": 1327104

stgraber@dakara:~$ lxc query /1.0/instances/u1/state | jq .memory
  "swap_usage": 0,
  "swap_usage_peak": 0,
  "total": 65109124000,
  "usage": 32620544,
  "usage_peak": 0

Complete changelog

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

Full commit list
  • doc/metrics: restructure existing content
  • shared/version: add regexp.Compile() error handling, avoid unneeded capture group and trailing pattern
  • lxd/sys: version.Parse ignores trailing stuff, no need to split on “-”
  • lxd-agent/metrics: avoid unneeded capture group and use raw string
  • lxd/apparmor: fix AppArmor forkdnsProfile
  • lxd/instance/drivers/driver/qemu: Comment whitespace
  • lxd/instance/drivers/driver/qemu: Rename snapshot file handle for clarity in migrateSendLive
  • lxd/network/openvswitch/ovn: Add support for storing instance port location in external-ids
  • lxd/network/openvswitch/ovn: Adds LogicalSwitchPortOptionsSet function
  • lxd/network/driver/ovn: Set instance switch port Location in InstanceDevicePortStart
  • lxd/network/driver/ovn: Skip clearing up logical switch port if last active host wasn’t local in InstanceDevicePortStop
  • lxd/device/nic/ovn: Start setting requested-chassis ID for logical switch port in post start hook
  • doc/metrics: update metrics documentation
  • lxd-agent/metrics: use strconv.ParseUint() instead of regexp matching for PID
  • lxd/db/db: add regexp.Compile() error handling, require segment numbers and use raw string
  • shared/validate: use simpler regexp.MatchString(), avoid unneeded capturing groups and use raw strings
  • lxd/devlxd: use regexp.Compile() with error handling instead of MustCompile() and anchor regex
  • lxd/seccomp: use regexp.Compile() with error handling instead of MustCompile()
  • lxd/ip: use regexp.Compile() with error handling instead of MustCompile()
  • lxd/storage/ceph: use regexp.Compile() with error handling instead of MustCompile()
  • shared/util: use regexp.Compile() with error handling instead of MustCompile()
  • lxd/device/config/devices/sort: Start non-nested OVN NICs before nested OVN NICs
  • lxd/network/acl/driver/common: Fix comment on Project
  • lxc: Fix missing “be” word in comment
  • doc: Fix OVN peers doc incorrectly listing a ports option
  • lxd/device/config/devices/sort: Fix device sorting for nested NICs
  • lxd/device/config/devices/test: Rework device sorting tests to check for more scenarios
  • lxd/instance/drivers/driver/lxc: Forcefully stop SFTP forkfile processs when forcefully stopping container
  • lxd/device/nic/ovn: Fix unnecessary warning when stopping instance that has nested OVN NICs
  • lxc/query: Handle empty plain-text files
  • lxd: Pass state to migrateInstance
  • lxd/storage/backend/lxd: Only add profiles the instance is using to backup config
  • lxd/rsync: Don’t use a shell wrapper
  • lxd/rsync: Introduce RunWrapper
  • lxd/apparmor: apparmor profile for rsync
  • lxd/daemon: Setup rsync to use AppArmor
  • lxd/db/storage/buckets: Fixed comment in StorageBucketKeyFilter
  • shared/api/storage/pool/bucket: Adds StorageBucketKey URL function
  • lxd/storage/buckets: Reduce transactions in storagePoolBucketKeysGet
  • lxd/storage/buckets: Use URL function storagePoolBucketKeysGet
  • lxd/storage/buckets: Only return api.StorageBucketKey to client
  • instance: no timeout on the operationlock for creating an instance
  • lxd/api_cluster: Split up evacuateClusterMember
  • config: Add cluster.healing_threshold config key
  • lxd: Add internal cluster healing endpoint
  • db: Add ClusterHeal operation type
  • lxd: Add cluster healing task
  • api: Add cluster_healing API extension
  • doc: Add cluster.healing_threshold config key
  • instance_post: Drop srcMember from instancePostClusteringMigrateWithCeph
  • instance: rename common.snapshot to common.isSnapshot
  • instance: stop API races while creating/deleting snapshots
  • api: instances_state_total
  • shared/api: Add total for disk and swap in instance state
  • doc/rest-api: Refresh swagger YAML
  • lxd/instance/lxc: Add memory total to state
  • lxd-agent: Add memory total to state
  • lxd/storage: Introduce a VolumeUsage struct.
  • lxd/storage: Update GetInstanceUsage to return VolumeState and corresponding callers.
  • lxd/instance/lxc: Add Total field to InstanceStateDisk
  • lxd/instance/qemu: Add Total field to InstanceStateDisk
  • lxd/storage_volumes_state: Update for VolumeUsage
  • lxd/apparmor/rsync: Allow locking and linking
  • lxd/apparmor/rsync: Add setfcap for fscaps setting
  • lxd/network: Skip ovn/dhcp range overlap check when DHCP is off.
  • lxd/instance/drivers/driver/common: Adds deleteSnapshots that accepts custom snapshot delete function
  • lxd/instance/drivers/driver/lxc: Adds missing call to d.updateBackupFileLock in Stop
  • lxd/instance/drivers/driver/lxc: Use non-locking d.deleteSnapshots function when deleting snapshots as part of instance delete
  • lxd/instance/drivers/driver/qemu: Use non-locking d.deleteSnapshots function when deleting snapshots as part of instance delete
  • lxd/instance/drivers/driver/lxc: Only update instance backup file when handling a request to delete a snapshot
  • lxd/instance/drivers/driver/qemu: Only update instance backup file when handling a request to delete a snapshot
  • lxd/instance/instance/utils: Removes unused DeleteSnapshots
  • lxd/instance/drivers/driver/lxc: Removes redundant revert in LockExclusive
  • lxd/instance/drivers/driver/qemu: Adds version function
  • lxd/instance/drivers/driver/qemu: Updates addCPUMemoryConfig to use d.version function
  • lxd/instance/drivers/driver/qemu: Disable vhost-net network accelerator for veth devices on QEMU 7.2 and later in addNetDevConfig
  • lxd/instance/drivers/driver/qemu: Don’t call d.checkFeatures again in setupSEV
  • lxd/instance/drivers/driver/qemu: Use DriverStatuses Info directly
  • lxd/apparmor/rsync: Fix snap use inside of containers
  • doc/network: clarify the difference between default and initial value
  • lxd/db/snapshots: Delete expired snapshots when expiry time is reached rather than exceeded
  • github: Fix static-analysis workflows
  • lxd/instance: Fix expired snapshot pruning when no new snapshots being created in autoCreateAndPruneExpiredInstanceSnapshotsTask
  • instance/logs: Add qemu.conf to log list
  • doc/devices/proxy: add video link
  • doc/migration: add link to spec for live migration
  • doc/storage: clarify that you cannot shrink your storage pool
  • doc/authentication: add info about OpenID Connect
  • doc: fix broken link
  • lxc/storage_volume: Set target before getting storage volume
  • client: Update return type of GetStoragePoolVolumeNamesAllProjects.
  • client: Updates urlsToResourceNames to use strings.Cut.
  • shared/ws: Introduce new websocket package
  • shared/ws/rwc: Merge duplicate implementations from shared
  • lxd/instance/exec: Switch to ws.Mirror* and don’t immediately stop mirror when child process ends
  • lxd-agent/exec: Switch to ws.Mirror* and don’t immediately stop mirror when child process ends
  • lxd-migrate/utils: Switch to ws.NewWrapper
  • lxd: Switch to ws.NewWrapper
  • shared/netutils/network/linux: Removes unused WebsocketExecMirror
  • shared/util/linux: Removes unused ExecReaderToChannel and GetPollRevents
  • shared/network: Removes unused WebsocketIO
  • lxc/export: Rename backup file based on file type
  • doc/storage_backup_volume: Update file naming for backups
  • lxc/export: Revert change to import statement
  • doc/storage/buckets: add info on configuring the S3 address
  • lxd: Use protobuf helpers to avoid panics
  • scripts: add missing oidc.* keys to bash completion
  • lxc/utils: Add IsAliasesSubset and GetCommonAliases
  • lxd/storage/drivers/driver/zfs/volumes: Clean up volume on failure in CreateVolumeFromCopy
  • lxd/storage/drivers/driver/zfs/volumes: Don’t block on receive error in CreateVolumeFromCopy
  • lxd/storage/drivers/driver/zfs/volumes: Pass true to allowUnsafeResize when setting volume size in CreateVolumeFromCopy
  • doc/storage: clarify that “attach” is an alias for “device add”
  • lxd/db/query: Adds marshaling interfaces.
  • lxd-generate: Update scanner function to use the unmarshaler when specified.
  • lxd-generate: Add method to get different field params if marshal is true.
  • lxd-generate: Updates GetMany to marshal a filter before using it.
  • lxd-generate: Updates ID to marshal field when necessary.
  • lxd-generate: Updates Create to marshal fields when necessary.
  • lxd-generate: Updates Rename to marshal fields when necessary.
  • lxd-generate: Updates Update method to marshal fields when necessary.
  • lxd-generate: Updates Delete method to marshal fields when necessary.
  • lxd-generate: Updates comment to match generated method signature.
  • lxd/db/cluster: Regenerates mapper files.
  • lxd-generate: Updates README with marshal tag.
  • doc/devices/nic: add link to video and missing info about macvlan
  • Revert “instance: no timeout on the operationlock for creating an instance”
  • lxd/instance/operationlock: Remove concept of automatic lock timeout
  • lxd/instance/drivers: Update operation lock usage without automatic timeouts
  • lxd/instance/drivers: Move more common restart functionality into restartCommon
  • lxd/instance/state: Set a 10 minute default shutdown timeout if no timeout specified in doInstanceStatePut
  • lxd/storage/drivers/driver/zfs/volumes: Removes operation lock timeout constant dependency
  • lxd/auth/oidc: Add support for code flow login in browser
  • lxd/daemon: Update for change to oidc Auth function
  • lxd/api: Add OIDC login/callback/logout routes
  • test: Extend storage pools tests on cluster
  • lxd/db: remove the old snapshot records in the storage_volumes table
  • lxd/db: remove useless RemoveStorageVolumeImages function
  • lxd/auth/oidc: Return email address if available
  • client/oidc: Add Email scope
  • tests: Clean storage pools in scriplet tests
  • SECURITY: Add GPG keys
  • lxc/action: Add freeze as alias to pause
  • oidc: Always set OIDC headers if needed in case of an error
  • lxd/cgroup: Better matching of devID and io stats
  • lxc/publish: Add support for ‘reuse’ flag
  • tests: Add and fix tests for ‘publish --reuse’
  • i18n: Update translation templates
  • lxd-generate: Fix declaration order of unmarshalable variables.
  • lxd-generate: Change call order of update method to match other methods.
  • lxd/storage/backend/lxd/patches: Fix storage_delete_old_snapshot_records so it runs on older sqlite versions
  • lxd/srorage/backend/lxd/patches: patchDeleteOldSnapshotRecords
  • response: Add Unauthorized response
  • oidc: Have Auth() return an AuthError
  • daemon: Handle OIDC AuthError
  • client: Only perform OIDC authentication if Unauthorized
  • lxd/cgroup: err of strconv.ParseInt should return -1 for consistency
  • lxd/seccomp: use GetProcessesUsage to get process count
  • lxd/instance/lxc: use cg.GetProcessesUsage (through processesState) instead of cg.GetTotalProcesses
  • lxd/cgroup: remove useless cg.GetTotalProcesses function
  • lxd/endpoints: Rename vsock socket to vmvsock to avoid naming conflicts
  • lxd/endpoints/vsock: Always listen on vsock host context ID in createVsockListener
  • lxd/instance/drivers/driver/qemu: Push vsock host context ID to lxd-agent in getAgentConnectionInfo
  • lxd-agent: Use vsock.Listen function directly
  • lxd/vsock/vsock: Removes unused Listen function
  • lxc/config: Don’t crash on nil map
  • cluster: Disable cluster group creation by anyone authenticated
  • lxd-agent/devlxd: Improve client errors
  • lxd/endpoints/vsock: Update createVsockListener to use listeners.NewFancyTLSListener
  • lxd/endpoints/network: Update NetworkUpdateCert to also update vmvsock, metrics and buckets listeners certificate
  • lxd/nic/p2p: Disable accept_ra on host
  • lxd/api: Redirect /ui to /ui/
  • events: Pass state to eventsSocket
  • operations: Pass state instead of daemon
  • api_cluster: Pass state instead of daemon
  • api_internal: Pass state instead of daemon
  • project: Pass state to projectChange
  • api_vsock: Pass state to authenticateAgentCert
  • images: Pass state instead of daemon
  • instance: Pass state instead of daemon
  • networks: Pass state instead of daemon
  • certificates: Pass state to instead of daemon
  • operations: Pass state to autoRemoveOrphanedOperations
  • profiles: Pass state to profile update functions
  • response: Pass state to instead of daemon
  • storage: Pass state instead of daemon
  • tokens: Pass state to autoRemoveExpiredTokens
  • warnings: Pass state to pruneResolvedWarnings
  • lxc/config_device: Don’t panic on nil device map.
  • client: Always set Authorization if using OIDC
  • client: Simplify response check in OIDC
  • acme: Use state if possible
  • api: Use state if possible
  • api_cluster: Reduce calls to d.State() and use state if possible
  • api_internal: Reduce calls to d.State() and use state if possible
  • api_metrics: Use state if possible
  • api_project: Use state if possible
  • certificates: Reduce calls to d.State() and use state if possible
  • devlxd: Reduce calls to d.State() and use state if possible
  • images: Reduce calls to d.State() and use state if possible
  • instance_sftp: Drop unused Daemon field from sftpServeResponse
  • instance: Reduce calls to d.State() and use state if possible
  • network: Reduce calls to d.State() and use state if possible
  • operations: Reduce calls to d.State() and use state if possible
  • profiles: Reduce calls to d.State() and use state if possible
  • storage: Reduce calls to d.State() and use state if possible
  • warnings: Reduce calls to d.State() and use state if possible
  • lxd/storage/drivers/driver/zfs/volumes: Fix block volume shrink regression
  • doc/images: add new --reuse flag for publishing images
  • lxd/certificates: Allow non-admin users to delete only their certificates
  • test: Add test for removing trusted certificate
  • doc/getting started: add information about how to access the web UI
  • lxd/endpoints/listeners/fancytls: Update doc block description
  • lxd/endpoints/network: Clean up NetworkUpdateTrustedProxy
  • lxd/endpoints/endpoints: Move tertiary listeners into own Up functions
  • lxd/daemon: Start storage buckets and metrics listeners after managed networks
  • doc/instance options: clarify CPU limits
  • doc: clarify TSIG key name generation for network zones
  • doc: Update doc/howto/network_zones.md
  • doc/bridge/resolved: clarify use of “~”
  • lxd/network_zones: Use zone for consistency
  • doc: Update REST API
  • doc/storage: add lxc storage info command
  • shared/subprocess/proc: Respect LXD_SECURITY_APPARMOR env var
  • lxd/sys/apparmor: Use shared.IsFalse when detecting LXD_SECURITY_APPARMOR env var
  • lxd/network/openvswitch/ovn: Adds switch name to logical switch ports in LogicalSwitchPortAdd
  • shared/instance: Adds .last_state.ip_addresses to ConfigKeyChecker
  • lxd/network/openvswitch/ovn: Fixes issue with LogicalSwitchDHCPv4RevervationsGet when no reservations exist
  • lxd/network/openvswitch/ovn: Adds LogicalSwitchPortIPs function
  • lxd/network/openvswitch/ovn: Updates LogicalSwitchPortSetDNS to accept list of IPs
  • lxd/network/driver/ovn: client.LogicalSwitchPortSetDNS usage
  • lxd/network/network/utils: Adds IPInSlice function
  • lxd/network/driver/ovn: Adds LastStateIPs field to OVNInstanceNICSetupOpts
  • lxd/network/driver/ovn: Refactor DHCPv4 reservation logic
  • lxd/network/driver/ovn: Updates InstanceDevicePortStart to return list of IPs associated to port for DNS
  • lxd/network/driver/ovn: Comment spacing
  • lxd/device/nic/ovn: Update InstanceDevicePortStart definition and usage
  • lxd/network/driver/ovn: Update InstanceDevicePortStart to use last state allocated IPs as sticky DHCPv4 hint
  • lxd/device/nic/ovn: Populate and use volatile last_state.ip_addresses config to use sticky DHCPv4 allocations
  • doc/reference/instance/options: Document volatile..last_state.ip_addresses
  • lxd: Drop storageGetVolumeNameFromURL function
  • client: Switch to shared/ws websocket package
  • lxd/operations/websocket: Switch to shared/ws websocket package
  • shared/ws/mirror: Comment improvements
  • shared/network: Removes unused websocket functions
  • test/godeps.list: Adds github.com/lxc/lxd/shared/ws
  • lxd: Use consistent route variable names
  • doc: Update REST API
  • lxc/storage: Rework cmdStorageInfo.Run() to be more resilient to used by resource URLs
  • doc/faq: clean up existing FAQ
  • doc/faq: add an entry for common firewall issues
  • lxd: Improve errors for image record creation
  • lxc/export: Fix export rename when run inside snap
  • lxc/project: Corrects project edit help text to match reality
  • i18n: Update translation templates
  • lxd/instance/console: Switch to ws.Mirror in connectVGA
  • lxd/instance/console: Switch doConsole to ws.Mirror
  • lxd/instance/console: Use logger.Debug instead of logger.Debugf
  • shared/network: Removes unused WebsocketConsoleMirror
  • lxd-agent: Switch to ws.Upgrader
  • lxd: Switch to ws.Upgrader
  • shared/network: Removes unused WebsocketUpgrader
  • lxc-to-lxd/transfer: Switch to ws.Mirror
  • lxd-migrate/transfer: Switch to ws.Mirror
  • shared/network: Removes unused WebsocketMirror and associated functions
  • lxd/storage/volumes: Prevent moving volumes to projects that dont have features.storage.volumes enabled
  • lxc/storage: Exclude entity snapshots from lxc storage info output
  • lxd/instance/post: Fix comment in instancePost
  • doc/howto/network_ovn_setup: Fix link to netplan docs again
  • doc/howto/network/bridge/firewalld: Updates docker firewall fixes to include easier forwarding option
  • lxd/instance/drivers/qmp/monitor: Define the events we use as constants
  • lxd/instance/drivers/driver/qemu: qmp event constant usage
  • lxd/instance/drivers/qmp/monitor: Log when monitor connects and disconnects
  • lxd/instance/drivers/qmp/monitor: Trigger shutdown event if monitor unexpectedly disconnects
  • lxd/instance/drivers/driver/qemu: Log warning when instance stops due to monitor disconnect
  • shared/logger/toplevel: The toplevel AddContext should use the top level logger
  • lxd-agent/exec: logger.AddContext usage
  • lxd/storage/backend/lxd: b.logger.AddContext usage
  • lxd: logger.AddContext usage
  • lxd/api/cluster: Refactor cluster healing logic so it doesn’t create an operation (and logs) every minute
  • lxd/storage/drivers/utils: Clarify comment on loopFileSizeDefault
  • lxd/db/storage/volume/snapshots: Populate NodeID field returned from GetExpiredStorageVolumeSnapshots
  • lxd/db/storage/volume/snapshots: Adds memberSpecific filtering to GetExpiredStorageVolumeSnapshots
  • lxd/storage/volumes/snapshot: Fix pruneExpireCustomVolumeSnapshotsTask to understand cluster members and remote pools
  • lxd/storage/volumes/snapshot: Don’t start taking snapshots if daemon is shutting down
  • lxd/db/storage/volumes: Adds memberSpecific argument to GetStoragePoolVolumesWithType
  • lxd/main/activateifneeded: tx.GetStoragePoolVolumesWithType usage
  • lxd/storage/volumes/snapshot: Merges auto create and auto prune custom volume snapshots into single task
  • lxd/storage/volumes/snapshot: Update autoCreateCustomVolumeSnapshots to return an error
  • lxd/storage/volumes/snapshot: Updates errors from pruneExpiredCustomVolumeSnapshots to align with autoCreateCustomVolumeSnapshots
  • lxd/instance: Don’t start any more instance snapshot tasks if context is cancelled in autoCreateInstanceSnapshots and pruneExpiredInstanceSnapshots
  • lxd/instance: Rework instance snapshots task to prune first and then create scheduled ones
  • lxd/api/cluster: Fix cluster healing for non-default project instances in internalClusterHeal
  • lxd/api/cluster: Fix cluster healing so instances are started in internalClusterHeal
  • lxd/api/cluster: Fix cluster healing so that state variable isn’t held forever in autoHealClusterTask
  • lxd/api/cluster: Fix cluster healing to use task’s context in autoHealClusterTask
  • lxd/api/cluster: Improve logging in autoHealClusterTask
  • lxd/api/cluster: Improve logging and errors in autoHealCluster
  • lxd/api/cluster: Fix member rename in clusterNodePost
  • lxd/instance/drivers/qmp/monitor: Add ability to enable/disable on disconnect shutdown event
  • lxd/instance/drivers/driver/qemu: Don’t log warning if no child processes found in killQemuProcess
  • lxd/instance/drivers/driver/qemu: Disable monitor disconnect event during VM start
  • lxd/instance/drivers/driver/qemu: Enable vhost-net for TAP devices in addNetDevConfig
  • lxd/network/driver/bridge: Simplify ipv{n}.routing logic
  • lxd/api/internal: Remove force argument from internalImportFromBackup
  • lxd/instances/post: Fail import if conflicting DB records are present in createFromBackup
  • lxd/device/unix_common: simplify check logic
  • lxd/instance/drivers/driver_lxc: simplify check logic
  • lxd/network/driver_bridge: simplify check logic
  • lxd/network/network_utils: simplify check logic
  • lxd/storage/drivers/volume: Don’t copy zfs.block_mode setting in NewVMBlockFilesystemVolume
  • lxd/storage/drivers/driver/zfs/volumes: Use vol.NewVMBlockFilesystemVolume for image volume creation in CreateVolume
  • doc/network/bridge: clarify options for using LXD with Docker
  • doc/cluster: clarify lxc cluster group assign command
  • Document how to enable manual testing of zone DNS.
  • lxd/instance/drivers/driver/qemu: Move lifecycle stop & shutdown event generarion into onStop function
  • lxd/instance/drivers/driver/qemu: Remove unused operation argument from pidWait
  • lxd/instance/drivers/driver/qemu: Reworks VM Stop and forceStop functions to better handle non-response QEMU processes
  • lxd/storage/drivers/driver/lvm: Fail if conflicting PV or VG exist when creating loop-backed pool
  • lxd/storage/drivers/driver/lvm: Make providing a size when using existing PV or VG for non-thin pools an error
  • lxd/storage/drivers/driver/lvm/utils: Updates createDefaultThinPool to consistently use settings from d.config
  • lxd/storage/drivers/driver/lvm: d.createDefaultThinPool usage
  • lxd/storage/drivers/driver/lvm: Make providing size an error when the thinpool already exists
  • lxd/storage/drivers/driver/lvm: Updates createDefaultThinPool to accept thin pool size argument
  • 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.


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.14 can be found in the latest/candidate snap channel and will be rolled out to stable next week. The usual live stream will be at 2pm eastern time on Monday: