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