News

LXD 5.8 has been released

18th of November 2022

Introduction

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

Another reasonably light release as the entire LXD team has been traveling to Prague for some meetings over the past few weeks.

Nevertheless, we got to land some pretty exciting features and performance improvements in time for this release!

Enjoy!

New features and highlights

CPU hotplug in VMs

The value of limits.cpu in virtual machines can now be live updated.
This allows for hot-plugging and hot-removing of CPUs to the virtual machine.

stgraber@castiana:~$ lxc launch images:ubuntu/22.04/cloud v1 --vm
Creating v1
Starting v1
stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes

stgraber@castiana:~$ lxc config set v1 limits.cpu=2
stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
  1    -      -    - -                 no

stgraber@castiana:~$ lxc exec v1 -- bash
root@v1:~# echo 1 > /sys/bus/cpu/devices/cpu1/online
exit

stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
  1    0      0    1 3:3:3:0          yes

stgraber@castiana:~$ lxc config set v1 limits.cpu=1
stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
stgraber@castiana:~$
stgraber@castiana:~$ lxc launch images:ubuntu/22.04/cloud v1 --vm
Creating v1
Starting v1
stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes

stgraber@castiana:~$ lxc config set v1 limits.cpu=2
stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
  1    -      -    - -                 no

stgraber@castiana:~$ lxc exec v1 -- bash
root@v1:~# echo 1 > /sys/bus/cpu/devices/cpu1/online
exit

stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
  1    0      0    1 3:3:3:0          yes

stgraber@castiana:~$ lxc config set v1 limits.cpu=1
stgraber@castiana:~$ lxc exec v1 -- lscpu -e -a
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
stgraber@castiana:~$

Device override on init and launch

It's now possible to override specific devices at lxc launch or lxc init time.
This is particularly useful to set a custom root disk size.

stgraber@castiana:~$ lxc launch images:ubuntu/22.04 u1 -d root,size=20GiB
Creating u1
Starting u1
stgraber@castiana:~$ lxc exec u1 -- df -h /
Filesystem               Size  Used Avail Use% Mounted on
rpool/lxd/containers/u1   21G  327M   20G   2% /
stgraber@castiana:~$

Record of volume creation date

Custom storage volumes now feature a creation date.

stgraber@castiana:~$ lxc storage volume create default foo
Storage volume foo created

stgraber@castiana:~$ lxc storage volume show default foo
config: {}
description: ""
name: foo
type: custom
used_by: []
location: none
content_type: filesystem
project: default
created_at: 2022-11-18T16:49:36.857660311Z

This puts custom storage volumes in line with what's done for instances and images as well as provide additional useful information when dealing with migration and refreshes.

Complete changelog

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

Full commit list
  • 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: 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
  • doc/instances: restructure content
  • doc/instances: quick clean-up of content
  • i18n: Update translation templates
  • lxd/device/nic/bridged: Relax duplicate instance name check
  • test: Update check for bridged NIC duplicate instance DNS name
  • api: Adds storage_volumes_created_at extension
  • shared/api/storage/pool/volume: Adds CreatedAt field to StorageVolume and StorageVolumeSnapshot structs
  • lxd/db/cluster: Adds creation_date column to storage_volumes and storage_volumes_snapshots table
  • lxd/db/storage/volume/snapshots: Comment and error improvements to CreateStorageVolumeSnapshot
  • lxd/db/storage/volume/snapshots: Adds creationDate argument 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
  • lxd/db/storage/volumes: Adds creationDate argument to CreateStoragePoolVolume
  • lxd/storage/utils: Adds creationDate argument to VolumeDBCreate
  • lxd: Update storage volume tests
  • lxd/storage/utils: Adds creationDate argument to VolumeDBCreate
  • lxd/db/storage/volumes: Updates GetStoragePoolVolumesWithType to populate creation date
  • lxd/db/storage/volumes: Updates GetStoragePoolVolumeWithID to populate creation date
  • lxd/db/storage/volumes: Updates GetStoragePoolVolumes to populate creation date
  • lxd/db/storage/volumes: Updates GetLocalStoragePoolVolumeSnapshotsWithType to populate creation date
  • lxd/db/storage/volumes: Updates GetCustomVolumesInProject to populate creation date
  • lxd/db/storage/volume/snapshots: Updates GetStorageVolumeSnapshotWithID to populate creation date
  • lxd/db/storage/volume/snapshots: Updates GetExpiredStorageVolumeSnapshots to populate creation date
  • lxd/storage/backend/lxd: Use instance's creation date for storage volume creation date in CreateInstance
  • lxd/storage/backend/lxd: Updates CreateInstanceFromBackup to populate creation date
  • lxd/storage/backend/lxd/patches: Updates patchMissingSnapshotRecords with VolumeDBCreate usage
  • lxd/storage/backend/lxd: Use new instance to populate creation date in CreateInstanceFromCopy
  • lxd/storage/backend/lxd: Use source snapshot for creation date in RefreshCustomVolume
  • lxd/storage/backend/lxd: Use source snapshot for creation date in RefreshInstance
  • lxd/storage/backend/lxd: Use new instance for creation date in CreateInstanceFromImage
  • lxd/storage/backend/lxd: Use new instance for creation date in CreateInstanceFromMigration
  • lxd/storage/backend/lxd: Use new instance for creation date in CreateInstanceSnapshot
  • lxd/storage/backend/lxd: Populate creation date in EnsureImage
  • lxd/storaga/backend/lxd: Populate creation date in CreateCustomVolume
  • lxd/storage/backend/lxd: Populate creation date in CreateCustomVolumeFromCopy
  • lxd/storage/backend/lxd: Populate creation date in CreateCustomVolumeFromMigration
  • lxd/storage/backend/lxd: Populate creation date in ImportCustomVolume
  • lxd/storage/backend/lxd: Populate creation date in CreateCustomVolumeSnapshot
  • lxd/storage/backend/lxd: Populate creation date in GenerateInstanceBackupConfig
  • lxd/storage/backend/lxd: Populate creation date in ImportInstance
  • lxd/storage/backend/lxd: Populate creation date in CreateCustomVolumeFromBackup
  • lxc/storage/volume: Adds Created output to cmdStorageVolumeInfo
  • lxd/storage/volumes/snapshot: Add creation date to the API output
  • test: Add storage volume creation date tests
  • 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: Sets Location field to hostname for GET /1.0 in devlxd API.
  • lxd/instances/lxc: Fix build on MIPS
  • 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
  • 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.
  • scripts/bash/lxd-client: Add missing file mount sub-command
  • doc: add SFTP to the wordlist
  • doc/instances: add instructions for accessing files
  • 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
  • doc/instances: add instructions for running commands and logging on
  • doc: fix broken link
  • test/suites/sql: safe grep usage
  • lxd/device/tpm: Handle TPM devices in profiles
  • doc/projects: add YouTube video
  • doc/migration: add YouTube video
  • doc: the location is set in responses from GET /1.0 in devlxd API
  • 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
  • doc/instances: add example for filtering by location
  • 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/acme: Switch to github.com/go-acme/lego/v4
  • Update gomod
  • 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
  • doc: Mention limits.cpu live update for VMs
  • 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/api/internal: Return explicit nil instance on error in internalContainerHookLoadFromReference
  • lxd/migrate/storage/volumes: Updates migrationSink.DoStorage to use storagePools.CompareSnapshots
  • lxd/migrate/storage/volumes: Removes unused migrationStorageCompareSnapshots
  • test: Updates migration tests now that migrating custom volumes uses creation date comparison
  • 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/drivers/driver/zfs/volumes: Allow zfs.blocksize to control volblocksize
  • lxd/storage/utils: Improve error and comment in VolumeDBCreate
  • gomod: Update dependencies
  • i18n: Update translations from weblate
  • gomod: Fix minio build

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.7 has been released

21st of October 2022

Introduction

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

This is a reasonably light release but comes with some nice smaller additions and a lot of bugfixes.

Enjoy!

New features and highlights

ACME / Let's Encrypt support

LXD can now automatically issue its own certificates through any ACME compatible provider which supports HTTP based validatoin.

The most well known such provider is Let's Encrypt.

On the configuration side, this is done through a few new server configuration keys:

  • acme.ca_url
  • acme.domain
  • acme.email
  • acme.agree_tos

Most users will just need to set acme.domain and acme.agree_tos to set this up.

On the network front, there are a few requirements to make this work.
The validation will be done through HTTP. This requires the server at acme.domain to publicly listen to BOTH port 80 and port 443. Port 80 needs to be configured to just redirect all traffic to the same URL over HTTPS and port 443 needs to make it to LXD.

Our documentation contains a basic HAProxy configuration to achieve this.
https://linuxcontainers.org/lxd/docs/master/authentication/#tls-server-certificate

Documentation: https://linuxcontainers.org/lxd/docs/master/server/
Specification: https://discuss.linuxcontainers.org/t/lxd-acme-support-for-server-certificate/15142

Cloud-init validation

Most cloud-init users will provide it YAML for configuration but until now, LXD would just pass that data straight through to cloud-init without any prior validation.

This is changing now with all three cloud-init configuration keys being validated:

  • cloud-init.network-config
  • cloud-init.user-data
  • cloud-init.vendor-data

For the user and vendor data ones, LXD will only check that it is valid YAML if they are of the #cloud-config type. Other data types will still be let through unchecked.

It's worth noting that LXD doesn't validate the actual Netplan or Cloud-init configuration, instead it currently just validates that the YAML can be properly unpacked. Once cloud-init and netplan have official JSON schemas or similar readily available, we'll be extending those checks to also look at the data itself.

Internal metrics

Up until now, LXD's metrics API was limited to just instance resource usage metrics.

With this release, we're introducting a number of internal metrics too:

  • lxd_go_alloc_bytes_total
  • lxd_go_alloc_bytes
  • lxd_go_buck_hash_sys_bytes
  • lxd_go_frees_total
  • lxd_go_gc_sys_bytes
  • lxd_go_goroutines
  • lxd_go_heap_alloc_bytes
  • lxd_go_heap_idle_bytes
  • lxd_go_heap_inuse_bytes
  • lxd_go_heap_objects
  • lxd_go_heap_released_bytes
  • lxd_go_heap_sys_bytes
  • lxd_go_lookups_total
  • lxd_go_mallocs_total
  • lxd_go_mcache_inuse_bytes
  • lxd_go_mcache_sys_bytes
  • lxd_go_mspan_inuse_bytes
  • lxd_go_mspan_sys_bytes
  • lxd_go_next_gc_bytes
  • lxd_go_other_sys_bytes
  • lxd_go_stack_inuse_bytes
  • lxd_go_stack_sys_bytes
  • lxd_go_sys_bytes
  • lxd_operations_total
  • lxd_uptime_seconds

Those cover a lot of Go's internal memory allocation and Go routine metrics as well as a couple of LXD specific metrics like the daemon uptime and the number of background operations being run.

Cluster join token expiry

Cluster join tokens are pretty powerful as they grant access to LXD's database.
As a result, it makes sense for them to expire after a short while.

Up until now, those would expire when LXD would get restarted, but as that's quite unpredictable, we now have support for an actual expiry date on them too.

Proxy device hotplugging to VM

Proxy devices for virtual machines are limited to just simple NAT.
With that limitation, there was no reason not to allow hotplugging those, making it easy to add additional port redirections for virtual machines.

Complete changelog

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

Full commit list
  • 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
  • doc/metrics: add lxd_cpu_effective_total to the list of metrics
  • lxd/cgroup/abstraction: Update GetIOStats to be more flexible
  • lxd/events: Ensure internal listener is only running once
  • lxd/cluster/config: Set default values for loki config keys
  • 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/storage/s3/miniod/miniod: Expose minio start up error to client
  • 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/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
  • doc/server: update Loki config
  • lxd/storage/drivers/driver/zfs: Don't fail Mount if policy cannot be applied to existing datasets
  • 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/drivers: 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/storage/drivers/driver/zfs: Fix incorrect mount dataset policy error check
  • 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/config: Add ACME config keys
  • 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
  • Update gomod
  • lxd/db/operationtype: Add RenewServerCertificate
  • 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
  • lxd/acme: Add acme package
  • shared/cert: Add function to get CertInfo from bytes
  • lxd: Add updateClusterCertificate function
  • lxd: Add ACME support
  • lxd/api: Add ACME endpoint
  • lxd: Run server certificate renewal on config change
  • api: Add acme extension
  • doc: Add acme config keys
  • test: Add test for certificate reversion in clusters
  • doc: Add ACME
  • doc/authentication: add http-{301,403} backends to HAProxy example
  • shared/version: Fix regression in useragent string
  • lxd/db/warningtype: Add UnableToUpdateClusterCertificate
  • lxc/file: Fix symlink following in cmdFilePull
  • lxd/metrics: Add internal metrics
  • lxd: Add internal metrics
  • lxd: Add warning if cluster certificate cannot be updated
  • test: Check warning of cluster certificate test
  • doc/server: alpha sort the config namespace list
  • doc/server: add network and storage to the config namespace list
  • api: Add internal_metrics API extension
  • .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/rest-api: Add missing Ready state
  • 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
  • gomod: Update dependencies
  • 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

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.6 has been released

23rd of September 2022

Introduction

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

This is another busy LXD release, coming with improvements all around, whether you're using LXD to run some containers, virtual machines or are using clustering and projects.

Enjoy!

New features and highlights

Grafana Loki support

LXD can now stream its log messages and lifecycle events over to a central Grafana Loki server. This initial implementation supports basic HTTP authentication and has some flexibility around what fields are sent as labels.

Specification: https://discuss.linuxcontainers.org/t/lxd-stream-lifecycle-and-log-events-to-loki/14992
Documentation: https://linuxcontainers.org/lxd/docs/latest/server/

Object storage on local storage pools

Following the initial implementation of storage buckets in LXD 5.5 with Ceph, this release now expands that feature to work with all of our other storage drivers.

This is based on the great work from the MinIO project which lets us offer an S3 compatible API directly from a local storage driver.

Specification: https://discuss.linuxcontainers.org/t/lxd-object-storage-s3-api/14579
Documentation: https://linuxcontainers.org/lxd/docs/latest/howto/storage_buckets/

Infiniband support for virtual machines

Still continuing our work to get our virtual machines be at parity with our containers, we have now added support for Infiniband to LXD VMs.

This works effectively the same way as containers by using the infiniband device type, both physical and sriov is supported. Unlike with containers, for SR-IOV to function in this case, you will need to make sure that IOMMU is enabled on the system and that you have a number of SR-IOV virtual functions left "unprobed` by the Mellanox driver.

Documentation: https://linuxcontainers.org/lxd/docs/latest/instances/#type-infiniband

Restricted network access in projects

Still growing the number of configuration options and restrictions available on LXD projects, we have now introduced a new restricted.networks.access which takes a comma delimited list of managed networks.

When set, such a restricted project will only allow the use and even listing of those networks. This is particularly useful in environments that aren't using ovn for networking but where one network per project is indeed used for isolation.

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

instance-ready lifecycle event

LXD 5.5 introduced the new READY instance state which can be triggered through the /dev/lxd guest API. Now LXD 5.6 introduces a new instance-ready lifecycle event which is emitted whenever an instance reaches that ready state.

Metric for total effective CPUs

Lastly, a new metric has been added to LXD's metrics API.

lxd_cpu_effective_total will report the total number of CPUs that are available to the insance. This can be useful to accurately calculate CPU percentage usage.

Complete changelog

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

Full commit list
  • 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 mac in doc/api-extensions.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: Correct typo in cephobject.radosgw.endpoint*
  • lxd: Correct typo in cephobject.radosgw.endpoint*
  • test: Correct typo in cephobject.radosgw.endpoint*
  • lxd/db/cluster/update: Adds patch to correct typo in cephobject.radosgsw.endpoint*
  • 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: small cleanup to the storage bucket documentation
  • doc/storage: group the pool/volume/bucket information
  • doc: remove FAQ about live migration
  • api: Adds storage_buckets_create_credentials extension
  • lxd-generate: Catch 'type' and change to 'entityType'.
  • lxd/db/cluster/schema: Apply schema patch version for bucket config typo fix
  • 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
  • lxc/storage/bucket: Display generated admin key in cmdStorageBucketCreate
  • lxd/storage/buckets: Generate admin key on bucket creation
  • test: Update storage buckets tests to check for initial credentials
  • i18n: Update translation templates
  • doc/rest-api: Refresh swagger YAML
  • doc/storage: make navigation titles more consistent
  • lxd/storage/buckets: Handle missing URL in storagePoolBucketsGet
  • 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/buckets: Detect missing bucket URL in storagePoolBucketGet
  • 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/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/utils: Adds BucketDBCreate and BucketDBDelete functions
  • lxd/storage/backend/lxd: Switch to using Volume for buckets
  • lxd/storage/backend/lxd: Removes unused GetBucket
  • lxd/storage/drivers/bucket: Removes unused Bucket type
  • doc/requirements: correct statement about AIO
  • lxd/cgroup: Add GetEffecticeCPUs
  • lxd/metrics: Add lxd_cpu_effective_total
  • api: metrics_cpu_effective_total
  • lxd/db/storage/buckets: Allow cross-pool bucket listing in GetStoragePoolBuckets
  • lxd/storage/buckets: tx.GetStoragePoolBuckets usage
  • lxd/storage/storage: tx.GetStoragePoolBuckets usage
  • 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
  • lxd/lifecycle: Add InstanceReady lifecycle event
  • lxd/devlxd: Send InstanceReady lifecycle event
  • doc/events: Add instance-ready lifecycle event
  • test: Test InstanceReady lifecycle event
  • 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/project/project: Align StorageBucketProject with StorageVolumeProject return values
  • lxd/storage/buckets: project.StorageBucketProject 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
  • 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
  • api: Adds storage_buckets_local extension
  • shared/util: Adds HTTPSStorageBucketsDefaultPort constant
  • lxd/endpoints: StorageBucketsServer listener
  • lxd/api/1.0: Updates doApi10UpdateTriggers to handle core.storage_buckets_address
  • scripts/bash/lxd-client: Adds core.storage_buckets_address
  • lxd/node/config: Adds core.storage_buckets_address support
  • lxd/storage/s3/types: Add S3 types
  • lxd/storage/s3/headers: Adds AuthorizationHeaderAccessKey function
  • lxd/storage/s3/policy: Adds policy generator
  • lxd/storage/s3/miniod: Adds miniod package
  • gomod: Adds github.com/minio/madmin-go
  • lxd/db/storage/buckets: Adds GetStoragePoolLocalBucket function
  • lxd/db/storage/buckets: Adds GetStoragePoolLocalBucketByAccessKey function
  • lxd/db/storage/buckets: Uses GetStoragePoolLocalBucketByAccessKey in CreateStoragePoolBucketKey and UpdateStoragePoolBucketKey
  • lxd/storage/pool/interface: Adds ActivateBucket
  • lxd/storage/pool/interface: Adds GetBucketURL definition
  • lxd/storage/backend/mock: Adds ActivateBucket
  • lxd/storage/backend/mock: Adds GetBucketURL
  • lxd/storage/backend/lxd: Implements local bucket support
  • lxd/storage/drivers: Renames BucketURL to GetBucketURL for consistency
  • 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/buckets: Use pool.GetBucketURL()
  • lxd/api: Adds storageBucketsServer
  • lxd/daemon: Initialise StorageBucketsServer listener in init
  • lxd/daemon: Shutdown minio processes during Stop
  • doc: Updates docs for local storage bucket support
  • test: Update storage buckets tests
  • 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
  • lxd/storage/s3/miniod: Use a sub-directory for minio on storage volume
  • 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
  • gomod: Updates dependencies
  • shared/logger/log: Don't modify the global logrus standard logger
  • shared/util/linux: Update GetAllXattr implementation using github.com/pkg/xattr
  • gomod: Adds github.com/pkg/xattr
  • 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: Pass transaction ctx through to query helpers
  • 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/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
  • gomod: go mod tidy
  • 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
  • lxd/storage/drivers/driver/dir/volumes: Don't allow creating a volume that already exists on disk
  • lxd/storage/backend/lxd: Delete local volume if bucket creation fails
  • lxd/storage/drivers/volume: Create bucket local storage volumes using same permissions as custom volumes
  • lxd/storage/s3/miniod/miniod: Run MinIO as LXD's unprivilged user
  • lxd/storage/backend/lxd: miniod.EnsureRunning usage
  • doc: update footer to display correctly
  • test: Adds LXD_REQUIRED_TESTS support
  • test: Updates test_storage_buckets to check for minio command
  • 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
  • Update gomod
  • 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/cluster/config: Add Loki config keys
  • lxd/events: Remove closed listeners
  • lxd/events: Add internal listener
  • lxd/daemon: Add internal event listener to Daemon
  • Update gomod
  • lxd/loki: Support Loki server
  • lxd: Support Loki server
  • doc/server: Add Loki config
  • api: Add loki API extension
  • 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

LXD 5.5 has been released

19th of August 2022

Introduction

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

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

Enjoy!

New features and highlights

Storage buckets (on Ceph)

LXD is getting support for object storage!

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

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

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

stgraber@dakara:~$ lxc storage create remote-object cephobject cephobject.radosgsw.endpoint=http://athos.hosts.mtl.stgraber.net:7480
Storage pool remote-object created

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

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

stgraber@dakara:~$ lxc storage bucket show remote-object foo
config: {}
description: ""
name: foo
s3_url: http://athos.hosts.mtl.stgraber.net:7480/foo
location: ""

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

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

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

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

Instance Ready state

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

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

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

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

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

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

Configurable BGP hold time

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

All projects queries for storage volumes

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

stgraber@dakara:~$ lxc query /1.0/storage-pools/default/volumes?all-projects=true
[
    "/1.0/storage-pools/default/volumes/container/bgp-test",
    "/1.0/storage-pools/default/volumes/container/centos3",
    "/1.0/storage-pools/default/volumes/container/centos4",
    "/1.0/storage-pools/default/volumes/container/charmcraft-lxd-1779348-0-0-amd64?project=charmcraft",
    "/1.0/storage-pools/default/volumes/container/lxd-build",
    "/1.0/storage-pools/default/volumes/container/snapcraft-lxd",
    "/1.0/storage-pools/default/volumes/container/snapcraft-microceph-1142335?project=snapcraft",
    "/1.0/storage-pools/default/volumes/container/speedtest",
    "/1.0/storage-pools/default/volumes/container/u1",
    "/1.0/storage-pools/default/volumes/custom/backups",
    "/1.0/storage-pools/default/volumes/custom/images",
    "/1.0/storage-pools/default/volumes/virtual-machine/v1",
    "/1.0/storage-pools/default/volumes/virtual-machine/v2",
    "/1.0/storage-pools/default/volumes/virtual-machine/win11"
]

OOM kill counter in metrics

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

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

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

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

Database optimization

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

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

Complete changelog

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

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

Try it for yourself

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

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.1 has been released

19th of August 2022

Introduction

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

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

Upgrade notes

Changes to vsock API (LXD VMs)

As part of the work on the bi-directional vsock interface (see below), we noticed the our TLS arrangement for host to guest communications inside of LXD VMs was quite broken.

Nothing that would be a concern from a security standpoint as the server and client authentication were all done correctly, but for some reason we were doing TLS over TLS which doubled the overhead for no good reason and actually prevented the REST/HTTP layer from accessing details about the client.

This release fixes this issue by updating both LXD and the VM agent to only do a single layer of TLS. Unfortunately, this isn't something we could handle in a backwards compatible way...

As a result, upon upgrading to LXD 5.0.1, agent communication will break with all running virtual machines. This will affect lxc exec and lxc file. Restarting the affected VMs with lxc restart will correct this by having the VM restart with an updated version of the agent.

WORKAROUND: It's possible to manually replace the lxd-agent binary with a refreshed version inside of the guest. Either doing this proactively (it will break communication until LXD is updated) or after the fact through SSH or text console access. The steps assuming a systemd system are:

  • systemctl stop lxd-agent
  • Replace /run/lxd_agent/lxd-agent with the new version of the binary
  • mount -o bind /bin/true /lib/systemd/lxd-agent-setup
  • systemctl start lxd-agent

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:

  • Addition of a total field on the storage volume state.
  • Add support for HEAD method on file API.
  • Expose PCI VPD data in the resources API.
  • New raw.qemu.conf configuration key for virtual machines.
  • Support for fscache in the cephfs storage driver.
  • Bi-directional communication channel for virtual machines.
  • Support for fetching storage volume data across projects.

The full list of commits is available below:

Detailed changelog
  • doc: move networking content to new files
  • doc: add new files to the networking docs
  • doc: move network-peers
  • doc: move network-acls
  • doc: move network-forwards
  • doc: move network-zones
  • doc: clean up headings for networking section
  • doc: update and add content for networking
  • doc: add links to network_ovn_peers
  • doc: add links to network_zones
  • doc: add links to network_forwards
  • doc: add links to network_acls
  • doc: general cleanup
  • doc: general cleanup network_acls
  • doc: general cleanup network_forwards
  • doc: general cleanup network_zones
  • lxd/storage/btrfs: Fix usage nested
  • lxd/instance/qemu: Fix bad topoext logic
  • lxc: Fix typo in notes
  • lxd/networks: Removes references to nodes in user facing errors
  • lxd/networks: Clone per-node config on networksPostCluster
  • lxd/storage/pools: Removes references to nodes in user facing errors
  • lxd/db/storage/pools: Renames StoragePoolNodeConfigKeys to NodeSpecificStorageConfig
  • lxd: db.NodeSpecificStorageConfig usage
  • lxd/cluster/config: Remove legacy server level storage settings defaults
  • lxd/cluster/config: Remove deprecatedStorage
  • lxd/storage/utils: Removes ValidName
  • lxd/storage/pool/interface: Adds Type interface
  • lxd/storage/pool/load: Adds LoadByType function
  • lxd/storage/backend/mock: Adds ValidateName function
  • lxd/storage/backend/lxd: Adds ValidateName function
  • lxd/storage/utils: Improve validation of rsync.bwlimit
  • lxd/storage/backend/lxd: Validate earlier in Create
  • lxd/storage/pools/utils: Updates storagePoolValidate to use poolType.ValidateName
  • lxd/storage/volumes/snapshot: Updates storagePoolVolumeSnapshotsTypePost to use pool.ValidateName
  • lxd/storage/utils: Unexport some variables now unused outside of storage package
  • lxd/storage/pool/interface: Adds Validate signature
  • lxd/storage/backend/lxd: Adds Validate function
  • lxd/storage/backend/mock: Adds Validate function
  • lxd/storage/backend/lxd: Call b.ValidateName in Create
  • lxd/storage: size is not a common pool option
  • lxd/storage/drivers/driver/common: Removes pool name from validatePool errors
  • lxd/storage/pools: Don't call storagePoolValidate from storagePoolsPostCluster
  • lxd/storage/pools: Call pool.Validate directly in doStoragePoolUpdate
  • lxd/storage/pools/utils: Call poolType.Validate in storagePoolValidate
  • lxd/storage/pools/config: Remove legacy storagePoolConfigKeys and storagePoolValidateConfig
  • lxd/storage/pools: Clone per-node config in storagePoolsPostCluster
  • lxd/storage/pools/utils: Whitespace in storagePoolDBCreate
  • lxd/storage/pools/utils: Expand arg types to storagePoolDBCreate
  • lxd/storage/pools/utils: Use revert in storagePoolCreateGlobal
  • lxd/storage/pools/config: Remove file
  • lxd/storage/pools/utils: Removes call to storagePoolFillDefault in storagePoolDBCreate
  • lxd/storage/pools/utils: Rely on pool.Create to fill default pool config in storagePoolCreateLocal
  • lxd/storage/drivers/utils: Adds loopFileSizeDefault function
  • lxd/storage/drivers: Generate per-node loop file size from loopFileSizeDefault in Create
  • lxd/storage/drivers/driver/lvm/utils: Adds lvmThinpoolDefaultName constant
  • lxd/storage/drivers/driver/lvm: Populate lvm.thinpool_name if not specified in Create
  • lxd/storage/utils: Removes unused functions and variables
  • lxd/storage/pool/load: Removes unused CreatePool function
  • lxd: Fix typo in notes
  • doc/rest-api: Refresh swagger YAML
  • shared: Adds method to remove elements from a slice.
  • lxc: Adds cluster role / commands.
  • i18n: Update translation templates.
  • test: Removes cluster edit where possible.
  • lxd/db/generate/db/method/v2: Add V2 method generation
  • lxd/db/certificate/projects.mapper: Update generated code
  • lxd/db/certificates: Remove Projects from db Certificate struct
  • lxd/db/certificates.mapper: Update generated code
  • lxd/db: Use ClusterTx with ToAPI for filling reference fields
  • lxd/db/certificates: Pass projects into create/update helpers
  • lxd/db/certificates: Transition to using ClusterTx
  • lxd/events: Use ClusterTx instead of opening new transactions
  • lxd/certificates: Open fewer txes, use API structs for all fields
  • lxd/api/cluster: Update cert projects manually
  • lxd/instance/drivers/qemu: Add serial key to device
  • shared: Add SplitNTrimSpace
  • lxc: Move to shared.SplitNTrimSpace
  • lxd: Move to shared.SplitNTrimSpace
  • lxd/util: Remove SplitNTrimSpace
  • lxd/cluster: Don't overwrite original volatile.evacuate.origin
  • lxd/daemon/images: Renames imageDownloadLock to imageOperationLock
  • lxd/images: Use SmartError when handling error from d.cluster.GetImage
  • lxd/images: Use imageID rather than imageId
  • lxd/images: Add locking on imageDelete
  • shared/api: Add Total field
  • lxd: Add total field to /1.0/storage-pools/{name}/volumes/{type}/{volume}/state API
  • api: storage_volume_state_total
  • lxd/db/generate: Replace ErrNoSuchObject with api.StatusErrorf(http.StatusNotFound)
  • lxd/db: Applies changes to db generator
  • doc/rest-api: Refresh swagger YAML
  • lxd/util/net: Assign default port if no port given
  • lxd/instance/qemu: Allow using external firmware or kernel
  • lxd/instance/drivers: Fix context logging
  • lxd/storage/utils: Use volName in context logging for consistency
  • lxd/storage/volumes/snapshots: Use volName in context logging for consistency
  • lxd/storage/drivers/driver/ceph/utils: Use volName in context logging for consistency
  • lxd/storage/drivers/driver/lvm/volumes: Remove non-thinpool volume activation/deactivation workarounds
  • lxd/storage/drivers/driver/lvm/utils: Updates activateVolume and deactivateVolume to accept Volume type
  • lxd/storage/drivers/driver/lvm: activateVolume and deactivateVolume usage
  • lxd/storage/drivers/generic/vfs: Check for close errors
  • shared/instancewriter/instance/tar/writer: Check for close errors
  • doc: move Sphinx extensions to a separate repo
  • lxd/storage/drivers/volume: Check for unmount errors in MountTask
  • lxd/device/device/utils/disk: Use storageDrivers.TryUnmount without MNT_DETACH in DiskMountClear
  • doc: whitespace changes and reordering content
  • doc: add headings
  • lxd/storage/drivers/utils: Adds debug logging to TryUnmount
  • lxd/instance/qemu: Tweak warning on -bios/-kernel
  • lxd/storage/drivers/driver/lvm/utils: Don't deactivate non-thinpool snapshot volume if parent mounted
  • test: Removes old storage pool driver exclusions
  • lxd/storage/drivers/generic/vfs: Detect close errors in genericVFSMigrateVolume
  • lxd/instance: Fix RuntimeLiblxcVersionAtLeast to handle ~
  • shared: allow EOPNOTSUPP from llistxattr()
  • doc: update BGP server documentation
  • lxd/instance/drivers/driver/qemu: Correctly detect dish source path filesystem
  • lxd/instance/drivers/driver/qemu: Improve disk error context and comments
  • lxd/instance/drivers/driver/qemu: Fixes incorrect FD garbage collection in addDriveConfig
  • lxd/instance/drivers/driver/qemu: Remove unnecessary duplicated stat of disk source
  • lxd/instance/drivers/driver/qemu: Add input checks to addDriveConfig
  • lxd/device/disk: Pass cloud-init:config drive to QEMU using file descriptor
  • lxd/device/disk: Return explicit nil on error in localSourceOpen
  • test/suites/migration: Check optimized refresh
  • lxd/storage/drivers/btrfs: Change how subvolumes are received
  • lxd/storage/drivers/btrfs: Move subvolumes after reception
  • lxd/storage/drivers/btrfs: Update CreateVolumeFromBackup
  • lxd/instance/operationlock: Add update
  • lxd/instance/lxc: Use locking in Update
  • lxd/instance/qemu: Use locking in Update
  • lxd/instance/qemu: Replace container with instance
  • lxd/instance: Reword operationlock errors
  • lxd/migration/wsproto: Check websocket argument
  • lxd/storage/backend: Fix VolumeDBDelete revert
  • lxd/cluster: fix typo in comment
  • test/includes: remove unnessary subshells
  • lxd/api/cluster: Remove duplicated not found error handling
  • lxd/api: Update not found error matching
  • lxd/db: Replaces use of ErrNoSuchObject with api.StatusErrorf(http.StatusNotFound)
  • lxd/db/errors: Removes ErrNoSuchObject constant
  • lxd/db: Don't use "node" in user facing errors
  • lxd/db/network/zones: Fix query case in GetNetworkZone
  • lxd/operations: Replace use of db.ErrNoSuchObject with api.StatusErrorf(http.StatusNotFound)
  • lxd/response/smart: Remove db.ErrNoSuchObject use
  • lxd/storage/drivers/driver/ceph: Replaces use of db.ErrNoSuchObject with api.StatusErrorf(http.StatusNotFound)
  • lxd/storage/drivers/lvm: Replaces use of errLVMNotFound with api.StatusErrorf(http.StatusNotFound)
  • lxd/backup/backup/config: Default to container instance type if not specified in backup config
  • test: Update backup test error response checks
  • lxd/storage/drivers/zfs: Close stderr after copy
  • doc: order tables alphabetically
  • doc: add IDs for easier linking
  • doc: move content to different files and include
  • doc/network/bridge: move IPv6 prefix section
  • doc/network/bridge: make config table for network_bridge consistent
  • doc/network/ovn: make config table for network_ovn consistent
  • doc/network/macvlan: make config table for network_macvlan consistent
  • doc/network/physical: make config table for network_physical consistent
  • doc/network/sriov: make config table for network_sriov consistent
  • doc: add a reusable note about IP address format
  • doc/network/bridge: add name space and format information for table
  • doc/network/physical: add name space and format information for table
  • doc/network/ovn: add name space and format information for table
  • doc/network/macvlan: add name space and format information for table
  • doc/network/sriov: add name space and format information for table
  • doc/network/physical: add supported features for network_physical
  • doc/network/ovn: add supported features for network_ovn and hide ToC
  • doc/network/bridge: add supported features for network_bridge and hide ToC
  • doc/network/bridge: content updates network_bridge
  • doc/network/ovn: content updates network_ovn
  • doc/network/physical: content updates network_physical
  • doc/network/sriov: content updates network_sriov
  • doc/network/macvlan: content updates network_macvlan
  • doc/network/external: content updates network_external
  • global: Update doc links to /latest
  • README: Use links to public doc pages
  • CONTRIBUTING: Use links to public doc pages
  • lxd/storage/drivers/generic/vfs: Updates genericVFSCopyVolume to not copy block volume files twice
  • lxd/storage/drivers/driver/dir/volumes: Use reverter in CreateVolumeSnapshot
  • lxd/storage/drivers/utils: copyDevice arg type expansion
  • lxd/storage/drivers/utils: Catch file close errors in copyDevice
  • lxd/fsmonitor: Hide permission errors
  • lxd/instance/lxc: Better handle missing apparmor
  • lxd/apparmor/dnsmasq: Support non-snap nesting
  • lxd/apparmor/dnsmasq: Properly handle logpath
  • lxd/instance/qemu: Avoid conflicting vsock IDs
  • lxd/storage/drivers/driver/dir/volumes: Updates CreateVolumeSnapshot to copy block volumes using io.Copy
  • lxd/storage/backend/lxd: Create instance snapshot symlink in CreateInstanceFromCopy
  • api: instance_file_head
  • lxd/daemon: Add support for HEAD
  • lxd/instance_file: Implement HEAD
  • doc/rest-api: Refresh swagger YAML
  • lxd/storage/drivers/utils: Update copyDevice to use low priority dd with 16M byte size and direct i/o
  • lxd: No need to import deprecated syscall
  • lxd/storage/utils: Run qemu-img dd with low priority and 16M buffer
  • lxd/instance/drivers/driver/qemu: Run qemu-img with low priority in Export
  • lxd: Error quoting fixes
  • lxd: Use SmartError rather than NotFound
  • lxd/networks: Don't return os.ErrNotExist from doNetworkGet
  • test: drop dependency on uuidgen
  • lxd-agent: Ignore both trans= and msize= when on virtiofs
  • lxd/instance/qemu: Set msize on 9p
  • lxd/main_forkfile: Update comment
  • shared/idmap: Expose IdmapSet on all platforms
  • shared/subprocess: Add SetUserns
  • lxd/device/disk: Port to SetUserns
  • lxd: Remove forkuserns
  • global: Remove legacy build tags
  • lxd/instance_exec: Improve error on openpty
  • lxd/util: Extend tests for CanonicalNetworkAddress
  • lxd/devlxd: Don't expand format strings
  • tests: Test for format string in devlxd
  • lxd/instance: Prevent deleting volatile keys
  • lxd/instance: Update tests
  • lxd/instance: Don't allow root pool changes
  • tests: Test root disk device pool override
  • tests: Fix typo in storage_profiles test
  • doc: make it explicit that automake is needed to build LXD
  • doc: LXD requires Golan 1.18 now
  • lxd/main_init_interactive: Mention port
  • lxd/db/generate/db/method/v2: Create methods for reference tables
  • lxd/db/projects: Use v2 generator, remove UsedBy/Config fields
  • lxd/db/projects.mapper: Update generated code
  • lxd/db/projects: Populate config in ToAPI
  • lxd/db/projects: Use GetProjectConfig
  • lxd/db/projects: Removed UsedBy handling from db package
  • lxd/storage/drivers/zfs: Check if raw flag can be used
  • lxd/storage/drivers/zfs: Use -w in zfs send if possible
  • shared/subprocess: Fix comment
  • shared/api: Update to new godoc comment
  • client: Update to new godoc syntax
  • lxd/api/project: Add projectUsedBy
  • shared/api/project: Add URL method
  • lxd/storage/volumes/utils: Use api.Project for InstanceList
  • lxd/api/project: Use api.Project over db.Project
  • lxd: manually fetch project Config or use api struct
  • lxd/project/permissions/test: Fix tests
  • lxd/api/project: Return immediately if project is used
  • shared/cert: Update test certs to EC
  • Revert "Skip clustering-related unit tests, see issue #6122"
  • lxd: Remove old clustering tests
  • lxd/cluster/connect: Modify ConnectIfInstanceIsRemote to return a client configured with project
  • lxd/instance/console: Use api.NewURL in instanceConsolePost
  • lxd/instance/exec: Use api.NewURL in instanceExecPost
  • lxd: No need to use UseProject() with client from ConnectIfInstanceIsRemote
  • lxd/migrate: Adds migrationControlResponse type
  • lxd/migrate: Update controlChannel to return migrationControlResponse
  • lxd: golint fixes
  • lxd/migrate/instance: migrationControlResponse usage
  • lxd/migrate/storage/volumes: migrationControlResponse usage
  • lxd/device/device/utils/disk: Look for QEMU helpers in /usr/libexec/
  • lxd: Switch to using api.StatusErrorCheck where appropriate
  • lxd/db/generate: Update to use api.StatusErrorCheck
  • lxd/db: Regenerates DB functions
  • lxd/storage/drivers/zfs: send -w is possible since 0.8.0
  • lxd/state: Make InstanceTypes store errors
  • lxd/instance/drivers: Replace SupportedInstanceTypes with DriverStatuses
  • lxd: DriverStatuses usage
  • lxd/instance: Report driver errors
  • lxd/instance/qemu: Improve errors in Info
  • lxd-agent: Fix trans= handling
  • lxd/instance/drivers/driver/qemu: Update Export to use qemu-img convert in direct I/O mode
  • lxd/storage/utils: Updates ImageUnpack to use qemu-img convert in direct I/O mode
  • lxd/storage/drivers/utils: Update copyDevice to open files in read only mode
  • lxd/storage/drivers/driver/dir/volumes: Reduce var scope in CreateVolumeSnapshot
  • lxd/storage/drivers/driver/dir/volumes: Use dd to restore block volumes in RestoreVolume
  • lxd/instance: Enforce a 64 chars device name limit
  • doc/instances: Mention 64 chars limit on device names
  • lxd/device/disk: Drop 27 chars limit
  • lxd/storage/utils: Disable format detection in qemu-img info in ImageUnpack
  • lxd/instance/qemu: Use a hash for long disk names
  • lxd/instance: Fix Update calls for ephemeral instances
  • tests: Add restart test for ephemeral instances
  • test: simplify handling of set -x
  • lxd/db/generate: Don't list bash completion
  • lxd/storage: Forward instance volume state request
  • client: Add GetMetrics
  • lxd/device/proxy: Fix comment typo
  • doc: Remove user-facing mentions of cluster node
  • lxd: Replace local node mentions with local member
  • lxd/api/cluster: Request that projects with restricted.networks be created first in clusterInitMember
  • lxd/init: Re-arrange initDataNodeApply order
  • lxd/init: Error quoting in initDataNodeApply
  • lxd/init: Create relevant networks before and after projects in initDataNodeApply
  • test: Check that default project networks are created before projects during cluster member join
  • doc/reference/network/bridge: Clarify ipv{n}.nat default value added when creating networks
  • lxd/instance/drivers/driver/qemu: Catch stateful resume errors in Snapshot
  • test: fix copy-n-paste error
  • lxd/instance/drivers/driver/qemu: Pass nvram file by FD and make writable by QEMU process
  • lxd/console: Move PTS logic to LXC driver
  • lxd/instance/qemu: Switch to socket for console
  • lxd/apparmor: Treat ramfs the same as tmpfs
  • lxd/network/driver/sriov: Mark network as available on successful start
  • lxd/storage/drivers/zfs: Fix optimized refresh in migration
  • lxd/storage/drivers/zfs: Delete volume before copying
  • test/suites/migration: Run optimized refresh test
  • lxd-agent: Enable gorilla UseEncodedPath
  • lxd-agent: Unescape URL path variables
  • lxd: Enable gorilla UseEncodedPath
  • lxd: Unescape path URL variables
  • lxd/instance/drivers/driver/qemu: Centralise logic for UEFI architecture detection
  • lxd/instance/drivers/driver/qemu: Only use NVRAM firmware template on UEFI architectures
  • lxd/instance/drivers/driver/qemu/templates: Removes duplicated arch check in qemuDriveFirmware
  • lxd/network/zone/zone: Improve validation of network zone name
  • test: Improve network zone tests
  • test/suites/migration: Add more refresh tests
  • shared/api: Add Profiles field to ImageExportPost
  • client: Support for profiles in image copying
  • doc/rest-api: Refresh swagger YAML
  • gateway: Separate, smaller timeout for client request
  • lxd/instance/drivers: Ensure that devices are added and removed in the correct order
  • lxd/storage/drivers/volume: Still attempt to unmount on task error in MountTask
  • lxd/storage/drivers: Be explicit with logic brackets
  • shared/util/linux: report "Detected poll(POLLNVAL) event" at debug level
  • shared/util/linux: fix typos in comments
  • shared/util/linux: drop trailing "." in logs
  • lxd/internal: Coding style
  • lxd/db/query: Coding style
  • lxd/main_interactive: Fix bad servername
  • lxc/copy: Add description of modes
  • lxc/move: Add description of modes
  • i18n: Update translation templates
  • lxd/init: Eliiminate serverName
  • lxc/utils: Fix bad error string
  • i18n: Update translation templates
  • lxd/instance/qemu: Don't timeout during migration
  • test: restore "set -x" at the end of respawn_lxd()
  • lxd/db/generate/db/parse: Add ParsePackage
  • lxd/db/generate: Use sql.Tx param for generated functions
  • lxd/db/generate/db/stmt: Parse any imported package
  • test: avoid unbound var if cleanup() is called early on
  • lxd/storage/drivers/driver/lvm/volumes: Fix restoration of block volume snapshots
  • lxd/storage/drivers/driver/lvm/utils: Use 100%ORIGIN as size for non-thin snapshots
  • lxd/instance/drivers/driver/qemu: Removes unused return var from unmount
  • lxd/storage/drivers/driver/lvm/utils: Code style in activateVolume
  • lxd/storage/drivers/driver/lvm/volumes: Restrict var scope in volDevPath
  • lxd/storage/drivers/generic/vfs: Catch unmount errors in genericVFSBackupUnpack
  • lxd/sys: Fix vsockID detection
  • test: Don't leave files behind
  • lxd/storage: Allow parallel writes in qemu-img
  • lxd/storage/drivers: Extend CephMonitors
  • lxd/storage/cephfs: Simplify use of CephMonitors
  • lxd/device/disk: Simplify cephfs handling
  • lxd/db: Specify cluster package in generator comments
  • lxd/db/projects.mapper: Remove Certificates/Projects from db package
  • lxd/db/cluster/projects: Add cluster package db entities
  • lxd/db/cluster/projects.mapper: Generate cluster package methods/stmts
  • lxd/db/db/unified: Add unified DB struct
  • lxd/state/state: Use unified DB struct
  • lxd/db/db: Store cluster statements in global map
  • lxd/db/transaction: Add Tx method
  • lxd/db/db: Add ctx to cluster.Transaction
  • lxd: Use new DB type and Transaction method
  • lxd/tests: fix tests
  • lxd/db/generate/db/lex: Fix adjective pluralization
  • Cluster: use gateway context for client.Leader requests
  • lxd/db/query/transaction: Removes TransactionCtx and updates Transaction to take a context
  • Cluster: granular locking in Gateway.Handlerfuncs
  • lxd: query.Transaction usage
  • lxd/db/query: Gets both schema and data from sqlite.
  • lxd/db/query: Updates tests for refactored dump functions.
  • lxd: Updates SQLGet handler for refactored SQL dump.
  • test/suites/sql: Removes test for schema table data when getting schema only.
  • test: rename unused var to "_"
  • lxd/db/query: Return the table schema sql verbatim from sqlite_master.
  • lxd/db/query: Dumps all entities in sqlite_master table.
  • lxd/db/query: Updates tests to remove quotes.
  • lxd/db/query: Adds index to test schema and dump output.
  • lxd/sql: Do not format output of .dump and .schema.
  • test/sql: Adds some checks to ensure other db schema entities are captured.
  • lxc: Replace 20.04/Focal Fossa by 22.04/Jammy Jellyfish
  • doc: Replace 20.04/Focal Fossa by 22.04/Jammy Jellyfish
  • shared/api: Replace 20.04/Focal Fossa by 22.04/Jammy Jellyfish
  • lxd/db: Replace 20.04/Focal Fossa by 22.04/Jammy Jellyfish
  • doc/rest-api: Refresh swagger YAML
  • i18n: Update translation templates
  • lxd: Moves swagger response definitions to response package.
  • test/suites/static_analysis: Modifies deadcode exception to new dir.
  • lxd/seccomp/seccomp: Fix comment on HandleSchedSetschedulerSyscall
  • lxd/cgroup/abstraction: Adds GetEffectiveMemoryLimit function
  • doc: move content and add headings
  • lxd/db/generate/file/write: Support adding build comments
  • lxd/db: Specify build comments in generator comments
  • lxd/db/generate/file/write: Add interface flag
  • lxd/db/warnings: Add interface flag to generator comments
  • shared/cert: Adds method for returning the public key as an x509 cert.
  • lxd/cgroup/file: Fix incorrect path matching for /init.scope in NewFileReadWriter
  • lxd/instance/drivers/driver/lxc: cg.GetEffectiveMemoryLimit usage in Metrics
  • test: Fix start_external_auth_daemon to work with git 2.34.1
  • lxd/db/generate/db: Returns a status error on create if entry already exists.
  • doc: whitespace changes
  • lxd/db/cluster: Regenerates schema.
  • doc: update documentation for integrating with systemd-resolved
  • lxd/db/generate: Returns status error if delete operation affects zero rows.
  • lxd/db/cluster: Regenerates database files.
  • lxd/device/disk: Handle long paths in virtiofsd
  • gomod: Update github.com/canonical/go-dqlite to v1.11.1
  • lxd/resources: Handle nested devices
  • lxd/instance/drivers/driver/lxc: Update deviceRemove to accept a device.Device
  • lxd/instance/drivers/driver/qemu: Update deviceRemove to accept a device.Device
  • client: Move image profile override to ImageCopyArgs
  • doc: check for inclusive language
  • github: Re-organize workflows
  • github: Add DCO check
  • github: Split static builds from tests
  • github: Add branch target test
  • github: Run commit tests on target
  • github: Fix commit checks
  • doc: add a JSON file that defines the doc versions
  • doc: add a version switcher to the docs
  • lxc/file: Fix edit in snap environment
  • lxd/storage/drivers/driver/lvm/utils: Don't try and deactive snapshot non-thin volume if parent volume in use
  • lxd/instance/drivers/driver/lxc: Removes unmounted return var from unmount
  • lxd/storage/pool/interface: Remove unmounted indicator from UnmountInstance and UnmountInstanceSnasphot
  • lxd/storage/pool/backend/mock: Remove unmounted indicator from UnmountInstance and UnmountInstanceSnasphot
  • lxd/storage/pool/backend/lxd: Remove unmounted indicator from UnmountInstance and UnmountInstanceSnasphot
  • lxd/instance/drivers/driver/lxc: pool.UnmountInstance and pool.UnmountInstanceSnapshot usage
  • lxd/instance/drivers/driver/qemu: pool.UnmountInstance usage
  • lxd/device/disk: Updates applyQuota with MountInstance usage
  • lxd/storage/utils: Updates InstanceUnmount to not return unmounted indicator
  • lxd/storage/drivers/generic/vfs: Comment typo
  • shared/api: nowadays various types of certs are accepted
  • doc/rest-api: Refresh swagger YAML
  • gomod: Update dependencies
  • shared/api: Add Mode to ClusterMemberStatePost
  • doc/rest-api: Refresh swagger YAML
  • lxc/storage: Show volume total size
  • i18n: Update translation template
  • lxd/storage/drivers/btrfs: Delete volume after receiving new one
  • lxd/storage/drivers/btrfs: Check length of snapshots slice
  • test: Extend refresh migration tests
  • shared/cancel: Renames Canceler to HTTPRequestCanceller.
  • doc: mention that ECDSA cert generation requires openssl 1.1.0+
  • lxd/storage/utils: Improve logging in ImageUnpack
  • lxd/storage/drivers/driver/common: Adds allowUnsafeResize argument to runFiller
  • lxd/storage/drivers/driver/btrfs/volumes: runFiller usage
  • lxd/storage/drivers/driver/ceph/volumes: d.runFiller usage
  • lxd/storage/drivers/driver/cephfs/volumes: d.runFiller usage
  • lxd/storage/drivers/driver/dir/volumes: d.runFiller usage
  • lxd/storage/drivers/driver/lvm/volumes: d.runFiller usage
  • lxd/storage/drivers/driver/zfs/volumes: d.runFiller usage
  • shared/cancel: Adds simple Canceller type wrapping a context.Context.
  • lxc/delete: Validate all instances exist
  • i18n: Update translation templates
  • lxd/storage/drivers/btrfs: Modify received UUID
  • lxd/storage/drivers/btrfs: Set Received UUID
  • test: Extend migration refresh test
  • client/util: Add timeouts to tlsHTTPClient
  • client/util: Add timeouts to unixHTTPClient
  • lxd/cluster/tls: Add timeouts to tlsTransport
  • lxd/main/shutdown: Increase default timeout in cmdShutdown
  • lxd/util/http: Adds timeouts in HTTPClient
  • lxd/vsock/vsock: Adds timeouts in HTTPClient
  • shared/cert: Adds timeouts in GetRemoteCertificate
  • lxd/certificates: Simplify non-admin check
  • lxd/certificates: Comment the logic a bit
  • lxd/certificates: Move duplicate cert detection
  • doc: Fix typos
  • server.crt referred to as lxd.crt in the prometheus config file
  • doc: headings and whitespace
  • doc: change to "Machine in the middle"
  • doc: add exceptions for inclusive language
  • doc: update doc for OVN peer routing relationships
  • doc: update firewall configuration documentation
  • doc: add a section about LXD and Docker
  • shared/network: Always return 0 on error
  • lxd/utils: Improve errors in instancesExist
  • lxd/device/disk: Improve error in validateConfig
  • lxd/utils: Check snapshots only once in instancesExist
  • i18n: Update translation templates
  • doc: Fix typo
  • lxd: Prevent use of instance/snapshot name in instance specific routes
  • doc: document how to handle SAN vs target name mismatch in Prometheus sample
  • lxc/list: Don't skip extra info when name filtering
  • doc: rework doc for setting up OVN
  • lxd/certificates: Fix token request validation
  • doc: add a Discourse link about simple streams
  • lxc/config_trust: revoke-token requires a name, not a token
  • i18n: Update translation templates
  • lxd/project: Fix bad error on invalid instance type
  • lxc/config_trust: update help when client should be singular
  • lxc/config_trust: clarify help for join token creation
  • i18n: Update translation templates
  • lxd/daemon: Fix LXD crash is failing to start due to already running LXD process
  • lxd/request: Export CtxKey type and use for all keys.
  • lxd/storage/drivers/driver/zfs/volumes: Simplifies UnmountVolume
  • lxd/storage/drivers/driver/lvm/volumes: Simplifies UnmountVolume
  • lxd/storage/drivers/driver/ceph/volumes: Simplifies UnmountVolume
  • lxd/storage/drivers/volumes: v.driver.MountVolumeSnapshot usage in MountTask
  • lxd/storage/drivers/interface: Removes ourMount indicator from MountVolumeSnapshot
  • lxd/storage/backend/lxd: b.driver.MountVolumeSnapshot usage
  • lxd/storage/drivers/driver/mock: Updates MountVolumeSnapshot
  • lxd/storage/driver/driver/btrfs/volumes: Adds ref counting to MountVolumeSnapshot
  • lxd/storage/drivers/driver/ceph/volumes: Adds ref counting to MountVolumeSnapshot
  • lxd/storage/drivers/driver/cephfs/volumes: Adds ref counting to MountVolumeSnapshot
  • lxd/storage/drivers/driver/dir/volumes: Adds ref counting to MountVolumeSnapshot
  • lxd/storage/drivers/driver/lvm/volumes: Adds ref counting to MountVolumeSnapshot
  • lxd/storage/drivers/driver/zfs/volumes: Adds ref counting to MountVolumeSnapshot
  • lxc/config: no name shown when editing the instance's config
  • i18n: Update translation templates
  • api: resources_pci_vpd
  • shared/api: Add VPD to PCI in resources
  • lxd/resources: Fix comment
  • lxd/resources: Add PCI VPD support
  • doc/rest-api: Refresh swagger YAML
  • lxd/response: Adds nolint directive for deadcode.
  • lxd: Removes unused test function (deadcode).
  • lxd/network/openvswitch/ovn: Pass --wait=sb when using ovn-nbctl
  • lxd/network/driver/ovn: Fix cleanup of bridge mappings of physical OVS parent
  • lxd/storage/backend/lxd: Restore instance snapshot volume config and description
  • test: Adds tests for restoration of instance volume snapshot config
  • test: Run snapshot naming tests for all storage pool types
  • shared/instance: Adds volatile.apply_nvram config key
  • lxd/instance/drivers/driver/qemu: Regenerate nvram on next start when security.secureboot profile config is changed
  • doc/instances: Documents VM volatile.apply_nvram setting
  • test/static_analysis: Adds golangci-lint and runs deadcode.
  • lxd/resources: Handle negative CPU indexes
  • lxc/config_device: Add extra example to device add
  • i18n: Update translation templates
  • lxc/profile: Add cross-project copy
  • lxd: Increase client header timeout from 30s to 1 hour
  • client: Increase header timeout from 30s to 1 hour
  • shared/cert: Increase header timeout from 30s to 1 hour
  • lxc/config_device: Fix small typo
  • i18n: Update translation templates
  • tests: Test project profile copy
  • lxd/storage/utils: Updates DB functions to take Pool interface argument
  • lxd/storage/utils: Updates VolumeDBSnapshotsGet to align with other DB function arguments
  • lxd/migrate/storage/volumes: storagePools.VolumeDBSnapshotsGet usage
  • lxd/storage/backend/lxd: Update DB function usage to pass Pool
  • lxd/storage/backend/lxd: Updates UpdateInstanceBackupFile to use VolumeDBGet
  • lxd/storage/backend/lxd: Preallocate snapshot slice in UpdateInstanceBackupFile
  • lxd/db/storage/volumes: Populate content type and config in GetLocalStoragePoolVolumeSnapshotsWithType
  • lxd/storage/backend: Populate instance storage volume snapshots in UpdateInstanceBackupFile
  • lxd/backup: Switch to storagePools.VolumeDBGet in volumeBackupCreate
  • lxd/backup: Updates volumeBackupWriteIndex to use storagePools.VolumeDBSnapshotsGet
  • lxd/db/storage/volumes/snapshots: Removes unused function GetStorageVolumeSnapshotsNames
  • lxd/storage/backend/lxd: Updates BackupCustomVolume to use VolumeDBSnapshotsGet
  • lxd/images: Remove references to cluster node in user facing error messages
  • lxd/db/query/transaction: Start errors with capital letter
  • lxd/backup: Whitespace
  • lxd/backup: Populate volume config in backupWriteIndex
  • test: Add tests for checking that storage volume records are exported and restored from backups
  • lxd/storage/utils: Adds removeUnknownKeys argument to VolumeDBCreate
  • lxd/storage/backend/lxd: VolumeDBCreate updated usage
  • lxd/storage/backend/lxd: Updates CreateInstanceFromMigration to strip unknown storage volume config keys
  • lxd/storage/backend/lxd: Don't strip unknown storage volume keys for same pool copies in CreateCustomVolumeFromCopy
  • lxd/storage/backend/lxd: Updates CreateCustomVolumeFromMigration to strip unknown storage volume config keys
  • lxd/storage/backend/lxd: VolumeDBCreate updated usage when stripping unknown storage volume config keys
  • lxd/storage/backend/lxd: Updates CreateInstanceFromBackup to use storage volume config from backup
  • lxd/storage/backend: Copy snapshot config for same-pool copies in CreateCustomVolumeFromCopy
  • lxd/storage/backend/lxd: Use snapshot volume config when restoring custom volume in CreateCustomVolumeFromBackup
  • test: Add tests to check snapshot volume config is restored from backup
  • lxc/config_trust: Fix single argument trust remove
  • i18n: Update translation templates
  • lxd/filter: Support case insensitive and regular expresions
  • client: Add support for server-side filtering for CLI list commands
  • lxc/list: Use server-side filtering for list command
  • lxc/image: Use server-side filtering for list command
  • lxc/storage_volume: Use server-side filtering for list command
  • lxc/utils: Add structHasField and getServerSupportedFilters
  • i18n: Update translation templates
  • Revert "lxc/config: no name shown when editing the instance's config"
  • shared/api: Mark ExpandedConfig and ExpandedDevices fields as omitempty
  • lxc/config: Exclude expanded config from edit screen
  • lxd/filter/value: Fix parsing of yaml tags in ValueOf
  • i18n: Update translation templates
  • test: Check instance name in edit screen
  • lxd/resources: Handle unreadable VPD
  • lxd/device: Add rbd format constants
  • lxd-agent/state: Handle cgroup v2 cpu usage
  • lxd-agent/state: Use /proc/meminfo
  • lxd/device: Add DiskGetRBDFormat
  • lxd/device: Add DiskParseRBDFormat
  • lxd/storage/drivers/ceph: Add cluster and user name constants
  • lxd/storage/drivers/ceph: Use constants
  • lxd/device/disk: Use ceph constants
  • lxd/instance/drivers/qmp: Add AddSecret
  • lxd/storage/drivers/ceph: Add CephGetRBDImageName
  • lxd/instance/drivers/qemu: Use QEMU rbd driver if possible
  • lxd/device/disk: Use rbd syntax for rbd volumes
  • lxd/storage/drivers/ceph: Fix typo
  • lxd/instance/drivers/qemu: Handle rbd root devices
  • lxd/instance: Fix auto-snapshot on restricted projects
  • lxd/instance/qemu: Fix ceph username key
  • lxd/instance/qemu: Fix ceph volname in projects
  • test: Add additional tests for checking volume snapshot config is copied
  • lxd/storage/volume: Use source snapshot volume config when copying to new volume in cmdStorageVolumeCopy
  • lxd/storage/volume: Fix move of snapshot in cmdStorageVolumeCopy
  • test: Adds check that source snapshot config is used when copying snapshot to new volume
  • lxd/cluster/heartbeat: Improve heartbeat logging
  • doc: add link to YouTube video for network ACLs
  • lxd-agent/devlxd: Don't expand format strings
  • lxd/instance/drivers/qemu: Set conf option in rbd driver
  • lxd/storage/pool/interface: Add GenerateInstanceBackupConfig definition
  • lxd/storage/backend/mock: Adds GenerateInstanceBackupConfig definition
  • lxd/storage/backend/lxd: Splits UpdateInstanceBackupFile into GenerateInstanceBackupConfig
  • lxd/backup: Updates backupWriteIndex to use pool.GenerateInstanceBackupConfig
  • lxd/storage/pool/interface: Adds GenerateCustomVolumeBackupConfig definition
  • lxd/storage/backend/mock: Adds GenerateCustomVolumeBackupConfig function
  • lxd/storage/backend/lxd: Adds GenerateCustomVolumeBackupConfig function
  • lxd/backup: Updates volumeBackupWriteIndex to use pool.GenerateCustomVolumeBackupConfig
  • lxd/backup: Move config struct into own package to use in non-cgo applications
  • lxd/api/internal: backup.ConfigToInstanceDBArgs usage
  • lxd/api/internal/recover: backupConfig usage
  • lxd/api/internal/recover: backup.ConfigToInstanceDBArgs usage
  • lxd/backup/backup/info: config.Config usage
  • lxd/instance/instance/utils: backup.ConfigToInstanceDBArgs usage
  • lxd/migrate/storage/volumes: Switch to using pool.GenerateCustomVolumeBackupConfig
  • lxd/storage/backend/lxd: backupConfig.Config usage
  • lxd/storage/backend/mock: backupConfig.Config usage
  • lxd/storage/pool/interface: backupConfig.Config usage
  • lxd/storage/backend/lxd: Fix incorrect revert in ImportCustomVolume
  • lxd/instance/drivers/qemu: Fix ceph conf filename
  • lxd/storage/drivers: Handle seek errors
  • lxd/storage/backend/lxd: Handle error from vol.MountTask in detectUnknownCustomVolume
  • lxd/storage/backend/lxd: Handle srcVol.MountTask errors
  • lxd-generate: Explictly ignore rows.Close error in defer.
  • lxd/db: Regenerate database methods.
  • tests: Test stateless migration
  • client: Checks or explicitly ignores errors.
  • fuidshift: Checks or explicitly ignores errors.
  • lxd/db/generate/db/stmt: Use join tag value instead of hardcoded 'name'
  • lxc: Checks or explicitly ignores errors.
  • lxc-to-lxd: Checks or explicitly ignores errors.
  • lxd-agent: Checks or explicitly ignores errors.
  • lxd-benchmark: Checks or explicitly ignores errors.
  • lxd-migrate: Checks or explicitly ignores errors.
  • lxd-user: Checks or explicitly ignores errors.
  • shared: Checks or explicitly ignores errors.
  • test/macaroon-identity: Explicitly ignores errors.
  • lxd/apparmor: Checks or explicitly ignores errors.
  • lxd/archive: Checks or explicitly ignores errors.
  • lxd/backup: Checks or explicitly ignores errors.
  • lxd/bgp: Checks or explicitly ignores errors.
  • lxd/cluster: Checks or explicitly ignores errors.
  • lxd/config: Checks or explicitly ignores errors.
  • lxd/db: Checks or explicitly ignores errors.
  • lxd/device: Checks or explicitly ignores errors.
  • lxd/dns: Checks or explicitly ignores errors.
  • lxd/endpoints: Checks or explicitly ignores errors.
  • lxd/events: Checks or explicitly ignores errors.
  • lxd/firewall: Checks or explicitly ignores errors.
  • lxd/fsmonitor: Checks or explicitly ignores errors.
  • lxd/instance: Checks or explicitly ignores errors.
  • lxd/maas: Checks or explicitly ignores errors.
  • lxd/metrics: Checks or explicitly ignores errors.
  • lxd/migration: Checks or explicitly ignores errors.
  • lxd/network: Checks or explicitly ignores errors.
  • lxd/operations: Checks or explicitly ignores errors.
  • lxd/rbac: Checks or explicitly ignores errors.
  • lxd/resources: Checks or explicitly ignores errors.
  • lxd/response: Checks or explicitly ignores errors.
  • lxd/rsync: Checks or explicitly ignores errors.
  • lxd/storage: Checks or explicitly ignores errors.
  • lxd/sys: Checks or explicitly ignores errors.
  • lxd/task: Checks or explicitly ignores errors.
  • lxd/util: Checks or explicitly ignores errors.
  • lxd/seccomp: Checks or explicitly ignores errors.
  • lxd/ip: Checks or explicitly ignores errors.
  • lxd: Checks or explicitly ignores errors.
  • test: Adds errcheck linter and list of excludes.
  • i18n: Updates translations.
  • lxd/storage/backend/lxd: Fix argument logging name in MigrateCustomVolume and CreateCustomVolumeFromMigration
  • lxd/storage/backend/lxd: Fix refresh of non existent volume in CreateCustomVolumeFromMigration
  • test: Add checks for custom storage volume refresh
  • doc/storage: Add CEPHFS to table
  • docs: Typo in ovn docs
  • lxd: Add allowInconsistent to migration fields.
  • lxd: Default allowInconsistent to false for snapshots.
  • lxd: Pass allowInconsistent to migration source on instance post.
  • lxd/storage/drivers: Optionally ignore rsync error 24 for local copy.
  • lxd/storage/drivers: Updates calls to genericVFSCopy.
  • lxd/storage/drivers: Add allowInconsistent to CreateVolumeFromCopy on driver interface.
  • lxd/storage: Pass allowInconsistent into driver.CreateVolumeFromCopy.
  • lxd: Use allowInconsistent for pool and project migrations.
  • lxd/instances/post: Handle unknown errors in createFromMigration
  • lxd/migration: Updates proto buf version
  • lxd/migration/utils: Adds IndexHeaderVersion to migration header
  • lxd/migration/utils: Updates comments on constant to indicate index header may be sent first
  • lxd/migration/utils: Adds IndexHeaderVersion constant
  • test: Adds cross pool checking of storage volume snapshot config population
  • lxd/migration/migration/volumes: Adds IndexHeaderVersion to VolumeSourceArgs and VolumeTargetArgs
  • lxd/migration/migration/volumes: Adds InfoResponse struct
  • lxd/storage/backend/lxd: Updates CreateCustomVolumeFromCopy to use srcPool.GenerateCustomVolumeBackupConfig
  • lxd/storage/backend/lxd: Add support for migration index header and response in MigrateCustomVolume and CreateCustomVolumeFromCopy
  • lxd/migrate/storage/volumes: Add support for migration index frame for custom volume migration
  • lxd/storage/backend/lxd: Update RefreshCustomVolume to use srcPool.GenerateCustomVolumeBackupConfig
  • lxd/storage/utils: Removes unused syncSnapshotsVolumeGet function
  • test: Expand test_storage_local_volume_handling tests to check for custom volume refresh
  • test: Add checks for custom storage volume config copy in migration
  • lxd/storage/drivers: Adds allowInconsistent argument to RefreshVolume.
  • lxd/storage: Pass allowInconsistent flag into volume refresh call.
  • lxd/instance/qemu: Implement qemuBaseSections
  • lxd/instance/qemu: Replace qemuBase template with qemuBaseSections
  • lxd/bgp: Enable multihop
  • doc: move content to different files
  • doc: add a link to the YouTube video on BGP
  • lxd/apparmor: Add mknod cap to archive
  • lxd/instance/qemu: Fix some variable names to match code style
  • doc: remove duplicate entries
  • doc: spell out configuration option
  • doc: fix capitalization of Ceph, CephFS, Btrfs, LVM and ZFS
  • lxd/sys: Add ReleaseInfo
  • lxd/api: Switch to OS struct for release info
  • lxd/api: Reduce number of DB queries
  • lxd/sys: Move KernelVersion from state
  • lxd/sys: Add Uname
  • lxd/cluster/config: Split to separate package
  • lxd/state: Add global configuration
  • lxd/cluster/config: Update for golint
  • lxd: Update for config function names
  • lxd/daemon: Setup globalConfig
  • lxd/api_cluster: Reduce calls to State
  • lxd/daemon_config: Use GlobalConfig
  • lxd/api_1.0: Update daemon config
  • lxd/state: Add ServerName
  • lxd/daemon: Fill ServerName
  • lxd/api_1.0: Use state variables
  • lxd/api: Don't access DB on every request
  • lxd/storage_volumes_snapshot: Port to State config
  • lxd/instance_post: Port to State config
  • lxd/cluster: Port to State config
  • lxd/instances_post: Port to State config
  • lxd/images: Port to State config
  • lxd/cluster/config: Add MetricsAuthentication
  • lxd/api_metrics: Avoid needless DB calls
  • lxd/network: Disable IPv6 on bridges with no IPv6 address
  • lxd/db/snapshots: Add by-ID
  • lxd/db/snapshots: Add GetLocalExpiredInstanceSnapshots
  • tests: Don't route IPv6 on network without IPv6
  • lxd/instance/lxc: Reduce DB calls in Metrics
  • lxd/cluster/config: Update test for new package
  • lxd/api_cluster: Update serverName on bootstrap/join
  • lxd/state: Initialize GlobalConfig in testing struct
  • lxd/cluster: Update for State config
  • lxd/daemon: Use Mutex around globalConfig and serverName
  • lxd/api_cluster: Use Mutex around serverName
  • lxd/instance: Use GetLocalExpiredInstanceSnapshots
  • lxd/storage_volumes_snapshots: Don't trigger expiry task on load
  • lxd/db/storage_volumes_snapshots: Skip snapshots with NULL expiry
  • lxd/events/connections: Add EventListenerConnection interface
  • lxd/events: Implement websocketListenerConnection
  • lxd/events: Implement streamListenerConnection
  • lxd/events/common: Remove unused WriteMessage function
  • lxd/events: Use EventListenerConnection in listenerCommon
  • lxd/devlxd: Support http streaming
  • lxd-agent/events: Support http streaming
  • lxd: Use EventListenerConnecion
  • lxd/events: s/heartbeat/start/
  • test/deps/devlxd-client: Add stream monitor
  • test: Add devlxd http stream
  • gomod: Update dependencies
  • i18n: Update translations from weblate
  • 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/db: Port GetStoragePoolVolumesWithType to ClusterTx
  • lxd/storage_volumes_snapshots: Update to ClusterTx
  • lxd/main_activateifneeded: Update to ClusterTx
  • lxd/instance: Optimize instance snapshots
  • lxd/resources: Handle ethtool not supported
  • 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
  • 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.
  • 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
  • github: Disable dependabot labels
  • doc: fix instructions for substitutions
  • doc: storage: fix format for snapshots.schedule
  • 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
  • doc: storage: clarify moving of storage volumes
  • doc: fix version switcher to work for latest
  • lxd/network/openvswitch: Use %s so that delimiting quotes are not escaped.
  • shared/subprocess/manager: Improve errors in ImportProcess
  • doc: storage: clarify that most docs are about custom volumes
  • doc: fix typo
  • gomod: Switch to github for go-lxc
  • gomod: Update dependencies
  • lxd: Update to github path for go-lxc
  • lxc-to-lxd: Update to github path for go-lxc
  • lxd: Use liblxc's RuntimeLiblxcVersionAtLeast
  • shared/api: Fix typo in event name
  • shared/api: Add missing events
  • shared/api: Sort events
  • doc/events: Add missing events
  • doc/events: Sort entries
  • lxd/lifecycle: Use event names from api package
  • client: End all function comments with a full-stop.
  • client: Fixes imports.
  • lxc/config: End comments with a full-stop.
  • lxc/utils: End comments with a full-stop.
  • lxc/utils: Fix import order.
  • lxc: End comments with a full-stop.
  • lxc: Fixes import order.
  • lxc: Removes unnecessary whitespace.
  • lxc-to-lxd: Ends all comments with a full-stop.
  • lxd/apparmor: Ends all comments with a full-stop.
  • lxd/cgroup: Ends all comments with a full-stop.
  • lxd/bgp: Fixes import order.
  • lxd/cluster/config: Ends all comments with a full-stop.
  • lxd/cluster/config: Removes unnecessary whitespace.
  • lxd/cluster/config: Fixes imports.
  • lxd/cluster: Ends all comments with a full-stop.
  • lxd/cluster: Removes unnecessary whitespace.
  • lxd/cluster: Fixes imports.
  • lxd/config: Fixes imports.
  • lxd/config: Ends all comments with a full-stop.
  • lxd-generate: Ensure generated comments end with a full-stop.
  • lxd/db/cluster: Ends all comments with a full-stop.
  • lxd/db/cluster: Fixes imports.
  • lxd/db/generate/db: Removes unnecessary whitespace.
  • lxd/db/generate/db: Fixes imports.
  • lxd/db/generate/db: Ends all comments with a full-stop.
  • lxd/db/generate/lex: Ends all comments with a full-stop.
  • lxd/db/generate/lex: Fixes imports.
  • lxd/db/generate: Removes unnecessary whitespace.
  • lxd/db/generate: Fixes imports.
  • lxd/db/operationtype: Ends all comments with a full-stop.
  • lxd/db/query: Fixes imports.
  • lxd/db/schema: Ends all comments with a full-stop.
  • lxd/db: Removes unnecessary whitespace.
  • lxd/db: Fixes imports.
  • lxd/db: Ends all comments with a full-stop.
  • lxd/device/nictype: Removes unnecessary whitespace.
  • lxd/device: Ends all comments with a full-stop.
  • lxd/device: Removes unnecessary whitespace.
  • lxd/device: Fixes imports.
  • lxd/dnsmasq: Removes unnecessary whitespace.
  • lxd/endpoints: Fixes imports.
  • lxd/endpoints: Ends all comments with a full-stop.
  • lxd/filter: Fixes imports.
  • lxd/filter: Removes unnecessary whitespace.
  • lxd/firewall/drivers: Ends all comments with a full-stop.
  • lxd/firewall/drivers: Removes unnecessary whitespace.
  • lxd/fsmonitor/drivers: Ends all comments with a full-stop.
  • lxd/instance/drivers/qmp: Ends all comments with a full-stop.
  • lxd/instance/drivers/qmp: Removes unnecessary whitespace.
  • lxd/instance/drivers: Removes unnecessary whitespace.
  • lxd/instance/drivers: Fixes imports.
  • lxd/instance/drivers: Ends all comments with a full-stop.
  • lxd/instance: Ends all comments with a full-stop.
  • lxd/ip: Ends all comments with a full-stop.
  • lxd/lifecycle: Ends all comments with a full-stop.
  • lxd/maas: Ends all comments with a full-stop.
  • lxd/metrics: Ends all comments with a full-stop.
  • lxd/migration: Ends all comments with a full-stop.
  • lxd/network/acl: Removes unnecessary whitespace.
  • lxd/network/openvswitch: Removes unnecessary whitespace.
  • lxd/network/zone: Fixes imports.
  • lxd/network: Removes unnecessary whitespace.
  • lxd/network: Ends all comments with a full-stop.
  • lxd/node: Ends all comments with a full-stop.
  • lxd/node: Fixes imports.
  • lxd/operations: Ends all comments with a full-stop.
  • lxd/operations: Removes unnecessary whitespace.
  • lxd/project: Removes unnecessary whitespace.
  • lxd/project: Ends all comments with a full-stop.
  • lxd/rbac: Ends all comments with a full-stop.
  • lxd/request: Ends all comments with a full-stop.
  • lxd/resources: Ends all comments with a full-stop.
  • lxd/response: Ends all comments with a full-stop.
  • lxd/seccomp: Removes unnecessary whitespace.
  • lxd/seccomp: Fixes imports.
  • lxd/storage/drivers: Ends all comments with a full-stop.
  • lxd/storage/drivers: Removes unnecessary whitespace.
  • lxd/storage/memorypipe: Ends all comments with a full-stop.
  • lxd/storage: Removes unnecessary whitespace.
  • lxd/storage: Ends all comments with a full-stop.
  • lxd/sys: Ends all comments with a full-stop.
  • lxd/sys: Fixes imports.
  • lxd/task: Removes unnecessary whitespace.
  • lxd/task: Fixes imports.
  • lxd/template: Ends all comments with a full-stop.
  • lxd/util: Fixes imports.
  • lxd/util: Ends all comments with a full-stop.
  • lxd/util: Removes unnecessary whitespace.
  • lxd: Fixes imports.
  • lxd: Removes unnecessary whitespace.
  • lxd: Ends all comments with a full-stop.
  • lxd: Fixes misspelling.
  • lxd-agent: Fixes imports.
  • lxd-agent: Removes unnecessary whitespace.
  • lxd-agent: Ends all comments with a full-stop.
  • lxd-benchmark/benchmark: Removes unnecessary whitespace.
  • lxd-migrate: Ends all comments with a full-stop.
  • shared/api: Ends all comments with a full-stop.
  • shared/cancel: Ends all comments with a full-stop.
  • shared/cmd: Ends all comments with a full-stop.
  • shared/dnsutil: Ends all comments with a full-stop.
  • shared/eagain: Ends all comments with a full-stop.
  • shared/i18n: Ends all comments with a full-stop.
  • shared/idmap: Ends all comments with a full-stop.
  • shared/idmap: Fixes imports.
  • shared/ioprogress: Ends all comments with a full-stop.
  • shared/logger: Ends all comments with a full-stop.
  • shared/osarch: Ends all comments with a full-stop.
  • shared/simplestreams: Ends all comments with a full-stop.
  • shared/subprocess: Ends all comments with a full-stop.
  • shared/subprocess: Fixes imports.
  • shared/units: Ends all comments with a full-stop.
  • shared/version: Ends all comments with a full-stop.
  • shared: Ends all comments with a full-stop.
  • shared: Fixes imports.
  • shared: Removes unnecessary whitespace.
  • test/macaroon-identity: Fixes imports.
  • test/macaroon-identity: Ends all comments with a full-stop.
  • golangci: Adds golangci-lint configuration file.
  • doc: add link to YouTube video about image handling
  • lxd/instance/lxc: Don't fail on missing apparmor
  • client: Inserts newlines after blocks.
  • fuidshift: Inserts newlines after blocks.
  • lxc: Inserts newlines after blocks.
  • lxc-to-lxd: Inserts newlines after blocks.
  • lxd-agent: Inserts newlines after blocks.
  • lxd-benchmark: Inserts newlines after blocks.
  • lxd-migrate: Inserts newlines after blocks.
  • lxd-user: Inserts newlines after blocks.
  • shared: Inserts newlines after blocks.
  • test: Inserts newlines after blocks.
  • lxd/archive: Inserts newlines after blocks.
  • lxd/backup: Inserts newlines after blocks.
  • lxd/bgp: Inserts newlines after blocks.
  • lxd/cgroup: Inserts newlines after blocks.
  • lxd/cluster: Inserts newlines after blocks.
  • lxd/config: Inserts newlines after blocks.
  • lxd/db: Inserts newlines after blocks.
  • lxd/device: Inserts newlines after blocks.
  • lxd/dns: Inserts newlines after blocks.
  • lxd/dnsmasq: Inserts newlines after blocks.
  • lxd/endpoints: Inserts newlines after blocks.
  • lxd/events: Inserts newlines after blocks.
  • lxd/filter: Inserts newlines after blocks.
  • lxd/firewall/drivers: Inserts newlines after blocks.
  • lxd/fsmonitor/drivers: Inserts newlines after blocks.
  • lxd/instance: Inserts newlines after blocks.
  • lxd/ip: Inserts newlines after blocks.
  • lxd/maas: Inserts newlines after blocks.
  • lxd/metrics: Inserts newlines after blocks.
  • lxd/migration: Inserts newlines after blocks.
  • lxd/network: Inserts newlines after blocks.
  • lxd/operations: Inserts newlines after blocks.
  • lxd/project: Inserts newlines after blocks.
  • lxd/rbac: Inserts newlines after blocks.
  • lxd/request: Inserts newlines after blocks.
  • lxd/resources: Inserts newlines after blocks.
  • lxd/response: Inserts newlines after blocks.
  • lxd/rsync: Inserts newlines after blocks.
  • lxd/seccomp: Inserts newlines after blocks.
  • lxd/storage: Inserts newlines after blocks.
  • lxd/sys: Inserts newlines after blocks.
  • lxd/task: Inserts newlines after blocks.
  • lxd/util: Inserts newlines after blocks.
  • lxd/vsock: Inserts newlines after blocks.
  • lxd: Inserts newlines after blocks.
  • lxc: Removes all one-line assign and check statements.
  • lxc-to-lxd: Removes all one-line assign and check statements.
  • lxd/backup: Removes all one-line assign and check statements.
  • lxd/cluster: Removes all one-line assign and check statements.
  • lxd-generate: One-line assign and check statements.
  • lxd/db/generate: Removes all one-line assign and check statements.
  • lxd/db/generate: Use multiline import syntax.
  • lxd/db: Removes all one-line assign and check statements.
  • lxd/db: Use multiline import syntax.
  • lxd/config: Use multiline import syntax.
  • lxd/device: Removes all one-line assign and check statements.
  • lxd/device: Use multiline import syntax.
  • lxd/dnsmasq: Removes all one-line assign and check statements.
  • lxd/firewall/drivers: Removes all one-line assign and check statements.
  • lxd/firewall/drivers: Use multiline import syntax.
  • lxd/fsmonitor/drivers: Use multiline import syntax.
  • lxd/instance/drivers: Removes all one-line assign and check statements.
  • lxd/network/acl: Removes all one-line assign and check statements.
  • lxd/network/openvswitch: Removes all one-line assign and check statements.
  • lxd/network: Removes all one-line assign and check statements.
  • lxd/refcount: Removes all one-line assign and check statements.
  • lxd/resources: Removes all one-line assign and check statements.
  • lxd/response: Removes all one-line assign and check statements.
  • lxd/rsync: Removes all one-line assign and check statements.
  • lxd/seccomp: Removes all one-line assign and check statements.
  • lxd/storage/drivers: Removes all one-line assign and check statements.
  • lxd/storage: Removes all one-line assign and check statements.
  • lxd/util: Removes all one-line assign and check statements.
  • lxd/util: Use multiline import syntax.
  • lxd: Removes all one-line assign and check statements.
  • lxd-agent: Removes all one-line assign and check statements.
  • lxd-migrate: Removes all one-line assign and check statements.
  • shared/api: Use multiline import syntax.
  • shared/cancel: Use multiline import syntax.
  • shared/idmap: Removes all one-line assign and check statements.
  • shared/instancewriter: Removes all one-line assign and check statements.
  • shared/termios: Removes all one-line assign and check statements.
  • shared/usbid: Removes all one-line assign and check statements.
  • shared: Removes all one-line assign and check statements.
  • test: Removes all one-line assign and check statements.
  • test/lint: Adds shell based linters.
  • Makefile: Updates static-analysis target.
  • test/suites: Removes static analysis suite.
  • workflows: Adds static analysis job.
  • lxd/network/driver/common: Fix comment typos
  • lxd/db/network/forwards: Fix error handling in GetNetworkForward
  • lxd/network/driver/common: Adds forwardTarget type
  • lxd/network/driver/bridge: Update forwardConvertToFirewallForwards to support new forward target type
  • lxd/network/driver/common: Adds usageType field to externalSubnetUsage
  • lxd/network/driver/common: Update forwardValidate to use forwardTarget type
  • lxd/network/driver/bridge: Update subnet usage to use usageType
  • lxd/network/driver/ovn: Updates to support subnet use usageType field
  • lxd/network/openvswitch/ovn: Updates LoadBalancerApply to support multiple targets via OVNLoadBalancerTarget
  • lxd/network/driver/ovn: Update forwardFlattenVIPs to support updated openvswitch.OVNLoadBalancerVIP
  • lxd/network/driver/ovn: Fix network ForwardUpdate revert
  • test/lint/client-imports: grep for fixed string before sorting
  • test/lint/i18n-up-to-date: move lxd.pot instead of copying it
  • test/lint/mixed-whitespace: only process files with .sh extention
  • test/lint/mixed-whitespace: only process files with .sh extention
  • test/lint/negated-is-bool: use git grep and only check .go files
  • test/lint/newline-after-block: use git ls-files instead of find
  • test/lint/no-short-form-imports: use git grep and avoid early exit
  • test/lint/trailing-space: use git grep and only check .sh files
  • Makefile: use run-parts to run test/lint
  • test/lint: tell git grep to consider tracked and untracked files
  • test/lint: tell git ls-files to consider tracked and untracked files
  • lxd/network/driver/ovn: Inserts newlines after blocks.
  • i18n: Update translation templates
  • test/lint/i18n-up-to-date: don't leave dirty .po files behind
  • workflows: Removes unit tests and reinstates ubuntu client tests.
  • lxd/db/generate/lex: Use cases.Title instead of deprecated strings.Title.
  • lxd/db/generate/db/method/v2: Fix config error handling
  • lxd/db/cluster/mapper: Update generated code
  • doc/ovn: fix steps for OVN cluster setup
  • doc: fix nested ordered lists
  • test: Update test_container_devices_disk_socket to test both start time and hotplug
  • test: Adds test_container_devices_disk_char to check passing char devices as disks
  • workflows/static-analysis: Download but do not update dependencies.
  • gomod: Update dependencies
  • client: Move to bakery.v3
  • lxc: Move to bakery.v3
  • lxd-migrate: Move to bakery.v3
  • lxd: Move to bakery.v3
  • test: Move to bakery.v3
  • gomod: Update dependenies
  • lxd/resources: Handle invalid VPD lengths
  • lxd/response: Fix swagger structs
  • doc/rest-api: Refresh swagger YAML
  • lxd/db/cluster/projects: Improve error in ToAPI
  • lxd/db/instances: Optimise query pattern for InstanceList
  • lxd/db/instance: Remove profiles arg from instanceFunc in InstanceList
  • lxd: InstanceList updated usage
  • lxd-benchmark: Add --project flag
  • lxd/db/instances/test: Specify expected and actual order correctly in TestInstanceList
  • lxd/db/instances: InstanceList
  • lxd/db/instances: Adds InstanceListOpts type to allow retrieving config and devices optional for InstanceList
  • lxd: Update InstanceList usage
  • shared/api: Adds network load balancer types
  • shared/api/event/lifecycle: Adds network load balancer lifecycle constants
  • client/lxd/server: Adds CheckExtension function
  • client: Adds network load balancer functions
  • doc/rest-api: Refresh swagger YAML
  • i18n: Update translation templates
  • doc: Add missing network forward delete section
  • lxd/storage/drivers/volume: Don't use short arguments in NewVolume
  • lxd/storage/backend/lxd: Improve logging in CreateInstanceFromBackup
  • doc/storage: structure configuration options section
  • doc/storage: structure driver notes
  • lxd/instance/qemu: Fix qemuCPU template broken numa section
  • lxd/storage/backend/lxd: Add missing size.state check to UpdateInstance
  • lxd/storage/backend/lxd: Replaces instanceEffectiveRootVolume with applyInstanceRootDiskOverrides
  • lxd/storage/backend/lxd: b.applyInstanceRootDiskOverrides usage
  • lxd/storage/backend: Update b.applyInstanceRootDiskOverrides usage in CreateInstanceFromCopy
  • test: Updates tests to check for instance root disk size not leaking into storage volume DB record
  • lxd-agent: Remove legacy code
  • lxd/vsock: Undo double TLS
  • lxd-agent: Undo double TLS
  • lxd/instance/operationlock: Allow InstanceOperation.Action() to be called on nil InstanceOperation
  • lxd/instance/drivers/driver/lxc: Don't wait for update operation to complete when removing disk from running container
  • Revert "lxd/db/instances: Adds InstanceListOpts type to allow retrieving config and devices optional for InstanceList"
  • Revert "lxd: Update InstanceList usage"
  • test: Fixes lint errors for shellcheck 0.8.0.
  • workflows: Installs shellcheck version 0.8.0.
  • Makefile: Warns if shellcheck version is not 0.8.0.
  • doc/storage: add introductions for storage drivers
  • doc/storage: clean up terminology
  • doc/storage: clean up driver notes
  • doc/storage: clean up tables
  • doc/storage/ceph: add information about remote storage
  • doc/storage/cephfs: clarify that the file system must exist
  • doc/instances: add link to NVIDIA video
  • lxd: Replace use of cluster "node" with "member" in user facing text
  • doc: add a more complete prometheus.yaml example
  • lxd/db/generate/db/method/v2: Properly attach package name for external calls
  • lxd/db/generate/db/stmt: Allow overriding table name with config key
  • lxd/db/generate/db/method/v2: Limit generated method references to same package
  • lxd/resources: Better handle invalid VPD
  • doc/storage: add tip about volume.* configuration
  • doc/storage: remove limitation about XFS as file system for Ceph
  • doc/storage: remove mentions of ceph.osd.force_reuse
  • doc: Fix use of setup/set up
  • lxd-agent: Always close file
  • lxd-agent: Introduce CONNECTED state
  • shared/api: Add API10Put
  • lxd-agent: Add PUT /1.0 endpoint
  • lxd/endpoints: Add vsock endpoint
  • lxd/vsock: Add port argument to HTTPClient
  • lxd/instance: Add VM interface
  • lxd/instance/drivers: Add advertiseVsockAddress
  • lxd/instance/drivers: Add AgentCertificate
  • lxd/db/instances: Add GetLocalInstanceWithVsockID
  • shared/api: Add VsockServerGet
  • lxd/response: Add devLxdResponse
  • lxd/devlxd: Use response.DevLxdResponse
  • lxd/devlxd: Allow setting hoist function for devlxd server
  • lxd: Add vsock server
  • lxd-agent: Use vsock interface for devlxd
  • lxd/instance/drivers/qemu: Handle LXD-AGENT-READY event
  • lxd/instance/drivers/qmp: Call event handler if lxd-agent becomes ready
  • lxd/instance/drivers/qemu: Remove instance-data file
  • api: Add vsock_api
  • lxd/instance/drivers: Handle security.devlxd config change
  • lxd/endpoints: Update endpoints test
  • lxd/storage: Add poolAndVolumeCommonRules function
  • lxd/storage/drivers: Support common pool and volume configuration options
  • lxd/storage/drivers: Support for propagation of the volume.* configuration options to the new storage volume
  • doc: Update storage config keys propagation
  • tests: Test propagation volume.* config keys for new storage volumes
  • lxd/storage/drivers/driver/ceph: Mark ceph.osd.force_reuse as deprecated
  • scripts/bash/lxd-client: Remove ceph.osd.force_reuse
  • lxc/monitor: Clarify that --log-level can only be used with pretty formatting mode
  • i18n: Update translation templates
  • doc/storage: add a howto for launching instances in a specific pool
  • doc/storage: add howto for resizing storage
  • doc/storage: "size" option missing for Btrfs & LVM storage pools
  • lxd/storage/drivers/driver/lvm/utils: Fix parse errors when instance not running
  • doc/storage: move content from FAQ to storage section
  • lxd/resources: Better handle ethtool errors
  • lxd/instance/drivers: Handle QEMU I/O errors
  • client: Use 30s HTTP header timeout in GetImageFile and GetPrivateImageFile
  • lxd/daemon/images: Use 30s HTTP header timeout in ImageDownload
  • lxd/instance/drivers/driver/qemu: Fix instance reference leak in getMonitorEventHandler
  • doc: Update cloud-init.md with user-data examples
  • lxd/instance/drivers: Rename LXD-AGENT-READY to LXD-AGENT-STARTED
  • lxd/instance/drivers/qmp: Rename agentReady to agentStarted
  • lxd/instance/drivers: Rename AgenReady to AgentStarted
  • lxd/db/generate/db/method: Fix v1 generator code style
  • lxd/devices: Improve comments in devicesRegister
  • lxd/db/instances: Add support for instancetype.Any to InstanceList
  • lxd/instance/instance/utils: Updates LoadNodeAll to use InstanceList
  • lxd/instance: Updates instanceLoadNodeProjectAll to use InstanceList
  • lxd/cluster/config/config: Adds InstancesNICHostname function
  • lxd/cluster/config/config: Adds BackupsCompressionAlgorithm function
  • lxd/backup: Use s.GlobalConfig.BackupsCompressionAlgorithm
  • lxd/certificates: Updates certificatesPost to use config.TrustPassword
  • lxd/cluster/config/config: Adds NetworkOVNIntegrationBridge function
  • lxd/device/nic/ovn: Use d.state.GlobalConfig.NetworkOVNIntegrationBridge
  • lxd/cluster/config/config: Adds ImagesCompressionAlgorithm function
  • lxd/images: Updates imgPostInstanceInfo to use d.State().GlobalConfig.ImagesCompressionAlgorithm
  • lxd/cluster/config/config: Adds NetworkOVNNorthboundConnection function
  • lxd/network/openvswitch/ovn: Updates NewOVN to use s.GlobalConfig.NetworkOVNNorthboundConnection
  • lxd/instance/drivers/driver/common: Updates MAAS functions to use d.state.GlobalConfig.MAASController
  • lxd/cluster/config/config: Removes unused GetString function
  • lxd/cluster/config/config: Adds ImagesAutoUpdateCached function
  • lxd/instances/post: Updates createFromImage to use GlobalConfig.ImagesAutoUpdateCached
  • lxd/cluster/config/config: Removes unused GetBool function
  • lxd/cluster/config/config: Adds ImagesAutoUpdateIntervalHours function
  • lxd/daemon/images: Updates ImageDownload to use GlobalConfig.ImagesAutoUpdateIntervalHours
  • lxd/images: Updates autoUpdateImage to use GlobalConfig.ImagesAutoUpdateIntervalHours
  • lxd/cluster/config/config: Adds ImagesRemoteCacheExpiryDays function
  • lxd/images: Updates pruneExpiredImagesInProject to use GlobalConfig.ImagesRemoteCacheExpiryDays
  • lxd/cluster/config/config: Removes unused GetInt64 function
  • lxd/cluster/config/config: Removes unused configGet function
  • lxd/storage/utils: Remove unnecessary tx.GetLocalNodeName from VolumeUsedByExclusiveRemoteInstancesWithProfiles
  • lxd/network/network/utils/sriov: Remove unnecessary tx.GetLocalNodeName from SRIOVGetHostDevicesInUse
  • lxd/network/driver/bridge: Remove unnecessary tx.GetLocalNodeName from ForwardCreate
  • lxd/api/cluster: Remove unnecessary tx.GetLocalNodeName from clusterGet
  • lxd/db/node: Adds comment about usage to GetLocalNodeName
  • lxd/events: Remove unnecessary tx.GetLocalNodeName from eventsSocket
  • lxd/instance/instance/utils: Remove unnecessary tx.GetLocalNodeName from CreateInternal
  • lxd/instances/post: Remove unnecessary tx.GetLocalNodeName from createFromCopy
  • lxd/profiles/utils: Remove unnecessary tx.GetLocalNodeName from doProfileUpdate
  • lxd/profiles/utils: Remove unnecessary tx.GetLocalNodeName from doProfileUpdateCluster
  • lxd/storage/backend/lxd: Remove unnecessary tx.GetLocalNodeName from ImportInstance
  • lxd/storage/pools: Remove unnecessary tx.GetLocalNodeName from storagePoolsPostCluster
  • shared/api: Remove non-API structs
  • lxd-agent: Add API package
  • lxd-agent: Update for new API structs
  • lxd: Update for new API structs
  • gomod: Update dependencies
  • Doc: Fix LXD volume group to LVM
  • Remove redundant LXD before ZFS pool
  • Doc: change a LVM to an LVM
  • doc/authentication: add information about a server behind NAT
  • lxc/remote: Allow specifying alternate server address for tokens
  • i18n: Update translation templates
  • lxd/db/warningtype: Move warning type definitions to warningtype package
  • lxd: Update usages of warning types
  • lxd/db/cluster/warnings: Add cluster.Warnings
  • lxd/db/warnings.mapper: Remove db.Warnings and its code generation
  • lxd/db/cluster/warnings.mapper: Update generated code
  • lxd/db/cluster/mapper: Get Images/Certificates by ID
  • shared/api/certificate: Add api.Certificate URL helper
  • lxd/warnings: Add getWarningEntityURL
  • lxd/warnings/warnings: Use cluster package helpers for Warnings
  • lxd/db/warnings.mapper: Remove db package warnings generated files
  • lxd/db/generate: Remove v1 generator
  • lxd/db/cluster: Remove version flag from generator comments
  • lxd/db/warnings: Remove unused types
  • doc/storage: add link to video about benchmarking storage drivers
  • lxd/db/cluster/projects: Move ProjectFeatures and ProjectFeaturesDefaults into cluster package
  • lxd/db/cluster/open: Update EnsureSchema to use ProjectFeaturesDefaults for default project features
  • lxd/api/project: Use cluster.ProjectFeatures and cluster.ProjectFeaturesDefaults
  • lxd/db/network/forwards: Adds context arg to GetNetworkForwards and GetNetworkForward
  • lxd/network: GetNetworkForward and GetNetworkForwards usage
  • lxd/db/network/forwards: Adds optional listenAddresses filter to GetNetworkForwards
  • lxd/db/cluster/stmt: Export Stmt helper
  • lxd/db/cluster: Use exported Stmt helper
  • lxd/db/generate/db/method: Use exported Stmt helper
  • lxd/db/cluster/mapper: Update generated code
  • lxd/db/transaction: Remove Cluster/ClusterTx prepared stmts field
  • lxd/db: Use cluster.Stmt as the only statement store
  • lxd/storage/drivers/driver/lvm/volumes: Fix "lvm.stripes cannot be used with thin pool volumes" error
  • shared/api/event/lifecycle: Fix typo in constant
  • lxd: Update response.SyncResponseLocation URL generation to use api.NewURL() helper
  • lxd/storage/volumes: Adds missing volume name to URL response in storagePoolVolumeTypePostRename
  • lxd/lifecycle: Reworks URL generation to use api.NewURL()
  • lxd/lifecycle/cluster/member: Update ClusterMemberAction.Event to use api.NewURL
  • lxd/lifecycle/instance/backup: Updates InstanceBackupAction.Event to clarify what backup name is expected
  • lxd/instance/backup: Pass full backup name to lifecycle.InstanceBackupRetrieved.Event
  • lxd/lifecycle/storage/volume: Make StorageVolumeAction.Event require volume with name and type
  • lxd/lifecycle/storage/volume/backup: Updates StorageVolumeBackupAction.Event to clarify the type of backup name required
  • lxd/storage/volumes/backup: Pass full backup name into lifecycle events
  • lxd/lifecycle/storage/volume/snapshot: Updates StorageVolumeSnapshotAction.Event to expect snapshot volume
  • lxd: Use lifecycle URL in SyncResponseLocation
  • lxd/lifecycle/storage/pool: Remove projectName arg from StoragePoolAction.Event
  • lxd/networks: Adds project to networksPost SyncResponseLocation response
  • lxd/storage/pools: Updates storagePoolsPost to use a common lifecycle var
  • lxd/storage/pools: Fix comment typo in storagePoolsPost
  • lxd/storage/pools: Updates storagePoolPut and storagePoolDelete to use updated lifecycle function
  • lxd/storage/volumes: Adds project to SyncResponseLocation in storagePoolVolumeTypePostRename
  • lxd/db/instances: Don't use query parameters with IN statement when loading instance config in InstanceList
  • lxd/db/instances: Use query.Params in GetProjectAndInstanceNamesByNodeAddress
  • lxd/db/instances: Use query.Params in GetProjectInstanceToNodeMap
  • lxd/db/instances: Use consistent IN format
  • lxd/db/instances: Remove unused generateInClauseParams function
  • lxd/db/network/forwards: Use query.Params in GetNetworkForwards
  • lxd/db/cluster: Don't use prepared statements in RemoveNodeFromClusterGroup and AddNodeToClusterGroup
  • lxd/db/images: Updates getImagesByFingerprintPrefix to use QueryScan rather than prepare
  • lxd/db/transaction: Removes unused prepare function
  • lxd/resources: Fix VPD parser crash
  • doc: add spellcheck
  • doc: add spellchecking to the tests
  • doc: add an extension to allow spelling exceptions
  • doc: update word list for spellchecker
  • doc: fix spelling README.md
  • doc: Update URLs for 5.0 branch
  • doc: fix spelling api-extensions.md
  • doc: fix spelling architectures.md
  • doc: fix spelling backup.md
  • doc: fix spelling events.md
  • doc: fix spelling faq.md
  • doc: fix spelling instances.md
  • doc: fix spelling security.md
  • doc: fix spelling server.md
  • doc: fix spelling network_bridge_resolved.md
  • doc: fix spelling metrics.md
  • doc: fix spelling projects.md
  • doc: fix spelling rest-api.md
  • doc: fix spelling network_bridge.md
  • doc: fix spelling network_macvlan.md
  • doc: fix spelling network_ovn.md
  • doc: fix spelling storage_btrfs.md
  • doc: fix spelling clustering.md
  • doc: fix spelling container-environment.md
  • doc: fix spelling database.md
  • doc: fix spelling dev-lxd.md
  • doc: fix spelling network_acls.md
  • doc: fix spelling userns-idmap.md
  • doc: fix spelling syscall-interception.md
  • doc: fix spelling requirements.md
  • doc: fix spelling remotes.md
  • doc: fix spelling storage_zfs.md
  • doc: fix spelling storage_lvm.md
  • doc: fix spelling storage_drivers.md
  • doc: fix spelling storage_dir.md
  • doc: fix spelling storage_cephfs.md
  • doc: fix spelling storage_ceph.md
  • doc: fix spelling network_sriov.md
  • doc: fix spelling network_physical.md
  • doc: fix spelling network_forwards.md
  • doc: fix spelling network_ovn_peers.md
  • doc: fix spelling network_zones.md
  • doc: fix spelling storage_add_volume.md
  • doc: fix spelling image_handling.md
  • doc: fix spelling migration.md
  • doc: fix spelling production-setup.md
  • doc: exclude some tags from spell checking
  • doc: allow Markdown syntax when we need markup in a link
  • doc: fix spelling authentication.md
  • doc: fix spelling cloud-init.md
  • doc: fix spelling containers.md
  • doc: fix spelling contributing.md
  • doc: fix spelling daemon-behavior
  • doc: fix spelling debugging.md
  • doc: fix spelling doc-cheat-sheet.md
  • doc: fix spelling networks.md
  • doc: fix spelling storage.md
  • doc: fix spelling network_bridge_firewalld.md
  • doc: fix spelling network_ovn_setup.md
  • doc: fix spelling storage_backup.md
  • doc: fix spelling installing.md
  • doc: fix spelling instance-exec.md
  • doc: fix spelling profiles.md
  • doc: fix spelling CONTRIBUTING.md
  • lxd/db/cluster/snapshots: Updates ToInstance to be more flexible
  • lxd: snapshot.ToInstance usage
  • lxd/db/instances: Refactors InstanceList into several smaller functions
  • lxd/db/instances: Adds snapshot support to InstancesToInstanceArgs and associated functions
  • lxd: Use consistent log context name for err
  • lxd/instances/get: Log instance render errors in doInstancesGet
  • lxd: Don't pass duplicate profiles into instance.Load
  • lxd/instance/drivers/driver/common: Updates Snapshots to avoid using tx.GetInstanceSnapshotsWithName
  • lxd/instance/instance/utils: Removes inefficient unused LoadFromAllProjects function
  • lxd/network/driver/ovn: Update Leases to use InstanceList
  • lxd/network/driver/bridge: Updates Leases to use InstanceList
  • lxd/instance/instance/utils: Removes unused LoadByProject function
  • lxd/instance: Reworks autoCreateInstanceSnapshots and autoCreateInstanceSnapshotsTask to use InstancesToInstanceArgs
  • lxd/daemon: Updates usage of autoCreateInstanceSnapshotsTask
  • lxd/instance: Update pruneExpiredInstanceSnapshotsTask to use tx.InstancesToInstanceArgs
  • lxd/instance: Reworks pruneExpiredInstanceSnapshotsTask to use tx.InstancesToInstanceArgs
  • lxd/instance/instance/utils: Removes unused LoadAllInternal function
  • shared/api: Add Ready state
  • shared/api: Add function to get status code from status name
  • lxd/profiles/utils: Updates getProfileInstancesInfo to use tx.InstancesToInstanceArgs
  • docs: Update storage create pool howto
  • lxd/config: Fix expanded show of instance snapshot
  • doc: update version of lxd-sphinx-extensions
  • doc: mark up default values correctly for clustering.md
  • doc: mark up default values correctly for network_zones.md
  • doc: mark up default values correctly for instances.md
  • doc: mark up default values correctly for production-setup.md
  • doc: mark up default values correctly for projects.md
  • doc: mark up default values correctly for network_bridge.md
  • doc: mark up default values correctly for network_macvlan.md
  • doc: mark up default values correctly for network_ovn.md
  • doc: mark up default values correctly for network_physical.md
  • doc: mark up default values correctly for storage_btrfs.md
  • doc: mark up default values correctly for storage_ceph.md
  • doc: mark up default values correctly for storage_cephfs.md
  • doc: mark up default values correctly for storage_dir.md
  • doc: mark up default values correctly for storage_lvm.md
  • doc: mark up default values correctly for storage_zfs.md
  • doc: mark up default values correctly for security.md
  • doc: mark up default values correctly for server.md
  • lxd/network/forwards: Add support for config patching in networkForwardPut
  • lxd/fsmonitor/drivers/errors: Removes unused variable ErrNotImplemented
  • lxd/storage/drivers/driver/common: Adds default "Not supported" functions
  • lxd/storage/drivers/driver/cephfs/volumes: Fall back to using common ("not supported") RefreshVolume function
  • lxd/storage/drivers/errors: Removes little used ErrNotImplemented
  • lxd/storage/backend/mock: Removes use of drivers.ErrNotImplemented
  • lxd/storage/backend/lxd: Switch to ErrNotSupported in CreateInstanceFromCopy
  • lxd/networks: Restrict network config view to admin users
  • lxd/storage/pools: Restrict storage pool config view to admin users
  • lxd/storage/drivers/driver/btrfs: Scan pool device source for BTRFS filesystems before mounting
  • lxd/db/instances: Adds snapshot support to instanceProfilesFill
  • lxd/db/instances: Adds fillProfiles argument to InstancesToInstanceArgs
  • lxd/instance/instance/utils: Switch to InstancesToInstanceArgs in LoadByProjectAndName
  • lxd/instance/instance/utils: Switch to InstancesToInstanceArgs in CreateInternal
  • lxd/instance/drivers/driver/common: Don't reload snapshot profiles in Snapshots
  • lxd/profiles/util: InstancesToInstanceArgs usage in getProfileInstancesInfo
  • lxd/db/instances: InstancesToInstanceArgs usage in InstanceList
  • lxd/instance: InstancesToInstanceArgs usage in autoCreateInstanceSnapshotsTask
  • lxd/instance: InstancesToInstanceArgs in pruneExpiredInstanceSnapshotsTask
  • lxd/db/instances: Remove inefficient InstanceToArgs function
  • test: Move devlxd-client into its own directory
  • test: Remove source/baz file at end of filemanip test
  • lxd/daemon: Add explicit instancesLoaded bool to indicate if shared mounts can be cleaned up
  • lxd/storage/drivers/utils: Adds loopDeviceSetup and loopDeviceAutoDetach functions
  • lxd/storage/drivers/driver/btrfs: Switch to loopDeviceSetup for loop device management
  • lxd/storage/drivers/driver/lvm: Switch to loopDeviceSetup for loop device management
  • lxd/storage/drivers/utils/cgo: Removes unused file
  • lxd/storage/cgo: Removes unused file
  • doc: update project description
  • doc: update Project and community section
  • shared/util/linux: Fix typo in comment of ExitStatus
  • shared/util/linux: Adds detection of RunError to ExitStatus
  • shared/validate/validate: Adds IsRequestURL function
  • test: Run proxy listener command before adding proxy device
  • test: Sleep longer when starting up proxy listener process after restart
  • client/util: Set transport.DialTLSContext in tlsHTTPClient
  • test: Add retries to udhcpc6 calls
  • test: Add retries to udhcpc calls
  • doc/reference: improve description of storage option
  • test: Keep retrying to signal to container to reboot in basic_usage
  • lxd/profiles/utils: Removes incorrect comment from doProfileUpdateInstance
  • lxd: Fixes API version for instances in project usedby.
  • lxd/db: Fix escaped slashes in storage volume URIs.
  • lxd/cluster/membership: Improve error in membershipCheckClusterStateForAccept
  • lxd/db/cluster: Improve URL generation.
  • client/lxd/cluster: No reason to use queryStruct in DeleteClusterMember
  • gomod: Update dependencies
  • workflows: Adds edge ppa's and removes make deps step.
  • lxd/storage/drivers/zfs: set atime=off and relatime=on
  • doc/reference: fix description of dir source param
  • lxd/cgroup/abstractions: Improve errors from GetIOStats
  • lxd/instance/instance/utils: Updates DeleteSnapshots to use more efficient Snapshots() function
  • lxd/instance/drivers: instance.DeleteSnapshots usage
  • shared/util: Adds context argument to RunCommandSplit, RunCommandInheritFds and RunCommandWithFds
  • shared/util: Adds RunCommandContext and deprecates RunCommand
  • lxd: RunCommand* context usage
  • shared/util: Unexports RunError fields and adds NewRunError function
  • shared/util: NewRunError usage
  • shared/util/linux: Use errors.As in ExitStatus
  • lxd/archive/archive: shared.NewRunError usage
  • lxd: RunError functions usage
  • cgo: ensure that lxd wrappers don't conflict with libc provided wrapper
  • doc/storage/zfs: include link to related YouTube video
  • doc/authentication: clarify what to specify for admin password
  • lxc/remote: the admin password prompt also accepts a token
  • i18n: Update translation templates
  • lxd/instance/drivers: Adds instance type to instance-created lifecycle event context.
  • doc/storage/zfs: {remove_snapshots,use_refquota,reserve_space} are bools
  • lxd/storage/drivers: use SI units
  • lxd/main_init_interactive: use SI units
  • lxd/storage/drivers/utils: Support CentOS 7 in loopDeviceSetup
  • test: Increase storage pool delete timeout to 20s
  • lxd/storage/storage: Adds UsedBy function
  • lxd: Use storagePools.UsedBy function
  • doc/migration: clean up "live migration" documentation
  • lxd/db/instances: Use stable sorting in GetInstanceSnapshotsWithName
  • lxd/instance/drivers: Use stable sorting
  • lxd/instances/get: Use stable sorting in doInstancesGet
  • lxd/resources/cpu: Use stable sorting in GetCPU
  • shared/api/instance: Adds GetParentAndSnapshotName function
  • shared/api/storage/pool/volume: Adds URL function to StorageVolume
  • lxd/storage/volumes: Fix volume get project resolution in storagePoolVolumeGet
  • lxd/project/project: Update StorageVolumeProjectFromRecord and StorageVolumeProject
  • lxd/db/storage/volumes: Rework GetStoragePoolVolumes to be more efficient
  • lxd/db/storage/volumes: Removes duplicate zero length check in GetStorageVolumeNodes
  • lxd/storage/volumes: Updates storagePoolVolumesGet to use tx.GetStoragePoolVolumes
  • doc: use HTTPS for links to CRIU site and inotify man
  • lxd/storage/volumes: Update storage-pools/{name}/volumes/{type} handler to use storagePoolVolumesGet
  • lxd/storage/volumes: Remove unused storagePoolVolumesTypeGet
  • lxd/storage/volumes: Fix golint error in storagePoolVolumesTypePost
  • lxd/db/storage/volumes: Adds memberSpecific support to GetStoragePoolVolumes
  • lxd/storage/volumes: Adds target member support to storagePoolVolumesGet
  • lxd/db/images: Clarifies argument name in GetImagesFingerprints
  • lxd/db/images: Adds GetProjectsUsingImage function
  • lxd/storage/storage: Reworks UsedBy to use tx.GetStoragePoolVolumes
  • lxd/storage/backend/lxd: UsedBy usage in IsUsed
  • lxd/storage/pools: storagePools.UsedBy usage in storagePoolsGet
  • lxd/storage/pools: storagePools.UsedBy usage in storagePoolGet
  • lxd/db/storage/pools: Removes unused GetStoragePoolUsedBy function
  • shared/api/storage/pool/volume: Adds target awareness to URL
  • lxd/storage/volumes/utils: Removes unused supportedVolumeTypesInstances var
  • lxd-user: Fix use with clusters
  • shared/instance: Removes InstanceGetParentAndSnapshotName
  • lxd: api.GetParentAndSnapshotName usage
  • lxc: api.GetParentAndSnapshotName
  • lxd/db/storage/volumes: Adds support for StorageVolumeFilter to GetStoragePoolVolumes
  • lxd/storage/volumes: Updates storagePoolVolumesGet to use tx.GetStoragePoolVolumes filtering
  • lxd/db/storage/volumes: Updates GetStoragePoolVolumes to return []StorageVolume
  • lxd/storage/storage: Updates UsedBy to use updated GetStoragePoolVolumes
  • lxd/storage/volumes: Updates storagePoolVolumesGet to use updated GetStoragePoolVolumes
  • lxd/storage/volumes: Updates storagePoolVolumesGet to avoid unnecessary conversions
  • lxd/storage/volumes/utils: Updates storagePoolVolumeUsedByGet to add target param
  • lxd/db/storage/volumes: Adds GetStoragePoolVolume function
  • lxd/storage/volumes/utils: Updates storagePoolVolumeUsedByGet to accept a db.StorageVolume
  • lxd/storage/volumes: Updates storagePoolVolumeUsedByGet usage
  • lxd/storage/volumes: Fix image in use detection in storagePoolVolumeDelete
  • lxd/projects: Ensure default project has features.networks
  • api: Adds storage_volumes_all_projects extension
  • client: Adds all-projects functions for storage volumes
  • shared/api: Add Project field to StorageVolume
  • doc/rest-api: Refresh swagger YAML
  • lxc/storage/volume: Adds --all-projects flag to lxc storage volume list
  • lxd/instances/get: Replace mentions of cluster node with member
  • lxd/db/storage/volumes: Removes Project field from StorageVolume
  • shared/api/storage/pool/volume: Remove projectName from URL function
  • lxd: Unify all-projects handling
  • lxd/events: Improve error handling in eventsSocket
  • lxd/storage/storage: Update UsedBy with updated URL function usage
  • lxd/storage/volumes: Adds all-projects support to storagePoolVolumesGet
  • i18n: Update translation templates
  • lxd/db/storage/volumes: Updates GetStoragePoolVolumes to accept variadic filters
  • lxd/storage/storage: tx.GetStoragePoolVolumes usage
  • lxd/storage/volumes: tx.GetStoragePoolVolumes usage
  • grafana: Only use instant queries on piechart graphs
  • lxd/device/nic_bridged: Fix static analysis
  • lxd/instance/instance/utils: Updates MoveTemporaryName to generate missing volatile.uuid
  • lxd/instance/post: instance.MoveTemporaryName usage
  • lxd/network/driver/bridge: Include error from n.populateAutoConfig
  • lxd/network/openvswitch/ovn: Lower case DNS names
  • lxd/storage/pools: Don't use project param when deleting images before pool deletion
  • lxd/db/storage/volumes: Removes unused GetStoragePoolVolumesNames function

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

Older news