Compare commits

...

3467 Commits

Author SHA1 Message Date
Stéphane Graber
4cb65e846d
Merge pull request #3760 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Various fixes
2026-08-01 03:08:45 -04:00
Piotr Resztak
63df2ac7f1
Merge pull request #3758 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
2026-08-01 06:50:22 +02:00
Tycho Andersen
cb4ef49b8b
Merge pull request #3757 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Various bugfixes
2026-07-31 17:01:47 -04:00
Stéphane Graber
59a71850fb
incusd/bgp: Resolve neighbor address for unnumbered peers
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-31 14:46:10 -04:00
Stéphane Graber
11a82f81ce
incusd/daemon: Drop else branches in project expansion
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-31 14:46:09 -04:00
Benjamin Somers
43a5ff66d2
Merge pull request #3756 from stgraber/cli
incus/low-level: Fix naming inconsistency
2026-07-31 20:33:26 +02:00
Stéphane Graber
ca47531cb7
Merge pull request #3755 from ldesgoui/patch-1
docs: Clarify the sentence about Incus owning the ZFS pool/dataset
2026-07-31 12:33:31 -04:00
Lucas Desgouilles
28c287796f docs: Clarify the sentence about Incus owning the ZFS pool/dataset
Signed-off-by: Lucas Desgouilles <ldesgoui@gmail.com>
2026-07-31 17:34:19 +02:00
Stéphane Graber
066ef03eb9
incusd/network/ovn: Skip empty transactions in SetChassisGroupPriority
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-31 07:53:29 -04:00
Stéphane Graber
54d230183c
incusd/db: Have NetworkNodeConfigs only consider the requested network
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-31 07:53:28 -04:00
Stéphane Graber
66e092f0ff
incusd/instance/qmp: Bump query-migrate timeout
Treat query-migrate as a heavyCommandTimeout.
That's because just like stop, it can get stuck on QEMU handling I/O
internally (final stage of a migration).

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-31 07:53:27 -04:00
Stéphane Graber
1926918563
shared/api: Hide additional sensitive config keys
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-31 05:04:13 -04:00
Stéphane Graber
a2aa861dae
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 19:13:04 -04:00
Stéphane Graber
b406a0397c
incus/low-level: Fix naming inconsistency
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 19:12:41 -04:00
Stéphane Graber
90429bf42f
Release Incus 7.3
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 13:24:26 -04:00
Stéphane Graber
5005836584
Merge pull request #3753 from stgraber/main
Update gomod
2026-07-30 21:37:28 -04:00
Stéphane Graber
ad051e0efe
Merge pull request #3752 from bensmrs/nvram
Add more formats for `incus low-level nvram get/set`
2026-07-30 21:22:21 -04:00
Stéphane Graber
cb3e751fb9
Merge pull request #3751 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-07-30 19:43:53 -04:00
Américo Monteiro
94b10a8039
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1891 of 1891 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-07-31 01:42:45 +02:00
Stéphane Graber
c6f01c862f
Merge pull request #3750 from stgraber/security
Security fixes for Incus 7.3
2026-07-30 19:42:36 -04:00
Stéphane Graber
7510ef02fb
Merge pull request #3749 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-07-30 17:57:49 -04:00
meipeter
e446758a4a
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 37.5% (699 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-07-30 22:56:27 +02:00
daoge
b6cf52c85a
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 37.5% (699 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-07-30 22:56:27 +02:00
Kwok Guy
4bea7fafdb
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 37.5% (699 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-07-30 22:56:27 +02:00
yooadmin
58bd59a800
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 37.5% (699 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-07-30 22:56:27 +02:00
Sakiko
bf4089f62a
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 37.5% (699 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-07-30 22:56:26 +02:00
Loge X
0b42bc84f6
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 37.5% (699 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-07-30 22:56:26 +02:00
Anonymous
b54dfccb29
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 37.5% (699 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:56:22 +02:00
IO01
c50a03b9dd
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 37.5% (699 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-07-30 22:56:12 +02:00
Kazantsev Mikhail
197070cae4
Translated using Weblate (Indonesian)
Currently translated at 9.0% (169 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-30 22:56:09 +02:00
Andika Triwidada
2427818344
Translated using Weblate (Indonesian)
Currently translated at 9.0% (169 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-07-30 22:56:09 +02:00
Anonymous
cb21655772
Translated using Weblate (Indonesian)
Currently translated at 9.0% (169 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:56:08 +02:00
Daniel Dybing
3bab2f134d
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-07-30 22:55:51 +02:00
Anonymous
982a1836ef
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:55:50 +02:00
Anonymous
d358feae31
Translated using Weblate (Portuguese)
Currently translated at 99.8% (1861 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:55:32 +02:00
Kazantsev Mikhail
afe946a573
Translated using Weblate (Portuguese)
Currently translated at 99.8% (1861 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-30 22:55:31 +02:00
Américo Monteiro
3e81b55832
Translated using Weblate (Portuguese)
Currently translated at 99.8% (1861 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-07-30 22:55:31 +02:00
Alberto Donato
75a2330eda
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-07-30 22:55:14 +02:00
Anonymous
5abec8da17
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:55:14 +02:00
Dklfajsjfi49wefklsf32
05ee322872
Translated using Weblate (Dutch)
Currently translated at 10.4% (194 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-07-30 22:54:56 +02:00
Anonymous
598a132c91
Translated using Weblate (Dutch)
Currently translated at 10.4% (194 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:54:54 +02:00
Varlorg
3deeca59da
Translated using Weblate (French)
Currently translated at 73.3% (1367 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-07-30 22:54:39 +02:00
Steeve Droz
d66d26b1a0
Translated using Weblate (French)
Currently translated at 73.3% (1367 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-07-30 22:54:39 +02:00
Laterria.Severino
dbadf2009e
Translated using Weblate (French)
Currently translated at 73.3% (1367 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-07-30 22:54:39 +02:00
smCloudInTheSky
aea8975e0c
Translated using Weblate (French)
Currently translated at 73.3% (1367 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-07-30 22:54:39 +02:00
Kazantsev Mikhail
78f09bc2d1
Translated using Weblate (French)
Currently translated at 73.3% (1367 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-30 22:54:38 +02:00
Corabel Bertolini
535bf2d198
Translated using Weblate (French)
Currently translated at 73.3% (1367 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-07-30 22:54:38 +02:00
Anonymous
51345ba93a
Translated using Weblate (French)
Currently translated at 73.3% (1367 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:54:37 +02:00
Benjamin Somers
c8074730c5
Translated using Weblate (French)
Currently translated at 73.3% (1367 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-30 22:54:32 +02:00
montag451
84f1a28bd8
Translated using Weblate (French)
Currently translated at 73.3% (1367 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-07-30 22:54:23 +02:00
Anonymous
414d886223
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:54:19 +02:00
Dklfajsjfi49wefklsf32
d648e6f548
Translated using Weblate (German)
Currently translated at 9.9% (185 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-07-30 22:54:01 +02:00
Stéphane Graber
b212c6efd6
Translated using Weblate (German)
Currently translated at 9.9% (185 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 22:54:01 +02:00
Tobias Gerold
fb2b6a8c76
Translated using Weblate (German)
Currently translated at 9.9% (185 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-07-30 22:54:00 +02:00
Jan Mittelstädter
d5917dde05
Translated using Weblate (German)
Currently translated at 9.9% (185 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-07-30 22:53:59 +02:00
Anonymous
71b67287ea
Translated using Weblate (German)
Currently translated at 9.9% (185 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:53:59 +02:00
Anonymous
15499da988
Translated using Weblate (Swedish)
Currently translated at 98.9% (1844 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:53:42 +02:00
Kazantsev Mikhail
f998729387
Translated using Weblate (Swedish)
Currently translated at 98.9% (1844 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-30 22:53:42 +02:00
Daniel Nylander
81717abb1b
Translated using Weblate (Swedish)
Currently translated at 98.9% (1844 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-07-30 22:53:37 +02:00
Hiroaki Nakamura
b4d9642777
Translated using Weblate (Japanese)
Currently translated at 71.0% (1323 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-07-30 22:53:20 +02:00
KATOH Yasufumi
8ca58a465d
Translated using Weblate (Japanese)
Currently translated at 71.0% (1323 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-07-30 22:53:20 +02:00
Kazantsev Mikhail
afe3fdb2ac
Translated using Weblate (Japanese)
Currently translated at 71.0% (1323 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-30 22:53:17 +02:00
Anonymous
82700a4951
Translated using Weblate (Japanese)
Currently translated at 71.0% (1323 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:53:16 +02:00
Anonymous
179f98cc7d
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:53:01 +02:00
Anonymous
bf2e62a279
Translated using Weblate (Russian)
Currently translated at 98.9% (1844 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:52:42 +02:00
Kazantsev Mikhail
96a369cb69
Translated using Weblate (Russian)
Currently translated at 98.9% (1844 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-30 22:52:41 +02:00
Kazantsev Mikhail
99575e846e
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.7% (89 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-30 22:52:11 +02:00
Paulo Coghi
24e8a591d1
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.7% (89 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-07-30 22:52:11 +02:00
Anonymous
82e7596967
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.7% (89 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:52:11 +02:00
Kazantsev Mikhail
e423203f46
Translated using Weblate (Spanish)
Currently translated at 3.4% (65 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-30 22:51:51 +02:00
Jorge Teixeira
6e45fb6de3
Translated using Weblate (Spanish)
Currently translated at 3.4% (65 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-07-30 22:51:51 +02:00
Anonymous
1aa41cf8f8
Translated using Weblate (Spanish)
Currently translated at 3.4% (65 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:51:51 +02:00
pesder
3bba6ceb52
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.3% (26 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-07-30 22:51:32 +02:00
Anonymous
0091cef328
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.3% (26 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:51:32 +02:00
Anonymous
d7287edd80
Translated using Weblate (Georgian)
Currently translated at 30.9% (577 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-30 22:51:10 +02:00
Temuri Doghonadze
f6b02aa7de
Translated using Weblate (Georgian)
Currently translated at 30.9% (577 of 1863 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-07-30 22:50:56 +02:00
Stéphane Graber
6a61823949
Merge pull request #3748 from bensmrs/nvram
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Add NVRAM rebuild
2026-07-30 15:38:07 -04:00
Stéphane Graber
d8ee52c964
Merge pull request #3747 from stgraber/main
Fix resource leak, deadlock and bulk query performance
2026-07-30 15:37:46 -04:00
Stéphane Graber
74b6950506
Update gomod
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 11:52:45 -04:00
Stéphane Graber
411bf2b478
Makefile: Bump to 1.25.12
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 11:42:20 -04:00
Benjamin Somers
152577aac6
i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-30 11:36:53 -04:00
Benjamin Somers
0653a5b1df
incus/low-level: Support more formats in NVRAM getter and setter
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-30 11:36:34 -04:00
Benjamin Somers
a25e45aeea
incusd/instances: Add headers to raw NVRAM variable response
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-30 11:36:33 -04:00
Benjamin Somers
f104c24a34
shared/uefi: Export dumpAttributes
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-30 11:36:32 -04:00
Benjamin Somers
27fdefda17
incusd/response: Allow custom headers in devIncusResponse
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-30 11:36:31 -04:00
Benjamin Somers
fd63243512
client: Make GetRawInstanceNVRAMGUIDVar return attributes
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-30 11:36:30 -04:00
Stéphane Graber
154089f398
incusd/instance/qemu: Use os.Root for template output
Matches the LXC driver, the existing checks already prevent escaping.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:47 -04:00
Stéphane Graber
8e2eab60d8
incusd: Fail closed on unknown authorization project expansion
The project expansion used for authorization silently returned the
requested project for any object type without an explicit branch, so a
new project-scoped API missing from the switch would bypass project
confinement. Handle every object type explicitly and error out otherwise.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:46 -04:00
Stéphane Graber
b76f970a63
incusd/instance: Confine exec-output access to its directory
Serve, list and delete exec output files through an os.OpenRoot handle so
a symlink in the exec-output directory can't be followed outside of it.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:45 -04:00
Stéphane Graber
23066254f5
incusd/instance: Fix NVIDIA require.cuda and require.driver handling
The condition was inverted, so a configured value was silently dropped
while an empty value wrote an empty environment variable. Only write the
variable when a value is set.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:44 -04:00
Stéphane Graber
620c836181
incusd: Expand network address set project for authorization
The project expansion used for authorization had no branch for network
address sets, so their access checks ran against the requested project
rather than the effective one, letting a restricted project act on the
default project's address sets.

This addresses GHSA-6v6x-387m-rj4w (CVE pending)

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:43 -04:00
Stéphane Graber
8066e7707c
incusd/project: Enforce isolated restriction when idmap key omitted
restricted.containers.privilege=isolated only rejected an explicit
security.idmap.isolated=false, but the key defaults to non-isolated when
omitted. Require containers to explicitly enable isolation.

This addresses CVE-2026-62313

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:42 -04:00
Stéphane Graber
f1c75c6c48
incusd/instance: Enforce project restrictions on migration overrides
The migration handler applied user-supplied config, device and profile
overrides without any project restriction check, letting a restricted
project set keys like security.privileged or raw.lxc.

This addresses CVE-2026-62940

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:41 -04:00
Stéphane Graber
7cec16a23c
incusd/instances: Re-check restrictions after copy config merge
The source instance's config is merged into the request only after the
initial project restriction check, letting a cross-project copy carry
restricted keys into the target project. Re-check the merged config.

This addresses CVE-2026-62941

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:40 -04:00
Stéphane Graber
c203fcf255
incusd/instances: Validate instance name on backup import
This addresses GHSA-26gp-p5fw-3r2h (CVE pending)

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:39 -04:00
Stéphane Graber
e2547b834f
incusd/storage: Validate volume name on ISO and backup import
This addresses GHSA-67qw-68v3-36h6 (CVE pending)

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:38 -04:00
Stéphane Graber
42be307a14
incusd/images: Validate image fingerprint for all protocols
The fingerprint validation added for CVE-2026-48769 was only applied to
the direct protocol. Validate it for all protocols and re-check after it
is taken from the remote server's response.

This addresses GHSA-p2v3-6wvc-cv3p (CVE pending)

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:37 -04:00
Stéphane Graber
436041b493
incusd/instance/qemu: Confine template access to instance root
The template traversal guard from CVE-2026-48752 was only applied to the
LXC driver. Apply the same checks to the QEMU driver.

This addresses GHSA-4qxq-p5hm-3q3p (CVE pending)

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:36 -04:00
Stéphane Graber
443e845023
incusd/instance: Confine metadata.yaml access to instance root
This addresses CVE-2026-63343

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:35 -04:00
Stéphane Graber
1ff313f554
incusd/storage: Confine backup.yaml write to instance root
This addresses CVE-2026-63125

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:34 -04:00
Stéphane Graber
e46720cb6d
incusd/instance: Confine OCI network writes to instance root
Also rejects line breaks in the oci.dns.domain and oci.dns.search values
which are written to the generated resolv.conf.

This addresses GHSA-7fj9-65v4-rp7h (CVE pending)

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:33 -04:00
Stéphane Graber
4d64535046
internal/instance: Prevent line breaks in NVIDIA config values
This addresses GHSA-m3j6-p3v3-qmjv (CVE pending)

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:32 -04:00
Stéphane Graber
041269ff26
incusd/project: Restrict volume creation options in restricted projects
A user in a restricted project could set block.create_options to inject
arguments into the filesystem creation command run as root. Restrict such
projects to the pool's configured default for that option.

This addresses CVE-2026-62867

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 09:45:31 -04:00
Stéphane Graber
9f3557760c
Merge pull request #3745 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/firewall/nftables: Fix template race in applyNftConfig
2026-07-30 07:43:28 -04:00
Benjamin Somers
8bb9e6ef38
incusd/instances: Fix capitalization
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-30 06:31:32 -04:00
Benjamin Somers
9e3463d204
i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 06:31:31 -04:00
Benjamin Somers
7cac94fc05
incus/low-level: Add rebuild-nvram to the list of repair actions
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 06:31:30 -04:00
Benjamin Somers
6d8cbaf086
api: instance_nvram (updated)
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 06:31:29 -04:00
Benjamin Somers
6f98fd1a33
incusd/instance: Add ResetNVRAM
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-30 06:31:28 -04:00
Benjamin Somers
31a37dca07
incusd/instances: Add NVRAM rebuild as a repair action
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 06:31:27 -04:00
Stéphane Graber
8598d964c6
incusd/db: Port instance config and device fill to generated queries
This also fixes devices without any config keys being missed when
loading instances.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:53:35 -04:00
Stéphane Graber
6514bb1339
incusd/scriptlet: Scope instance device query
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:53:32 -04:00
Stéphane Graber
9611986c8c
incusd/project: Scope config queries to project resources
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:53:28 -04:00
Stéphane Graber
3a7ce78347
incusd/backup: Only load referenced profile data
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:53:25 -04:00
Stéphane Graber
001e0d9bca
incusd: Only load referenced profile data
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:53:21 -04:00
Stéphane Graber
5fbe0b52bf
incusd/db/cluster: Scope profile queries in Instance.ToAPI
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:53:17 -04:00
Stéphane Graber
9b9440e8ba
incusd/db: Only load referenced profiles when filling instances
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:53:14 -04:00
Stéphane Graber
25706fb75c
incusd/db/cluster: Add referenced profile query helpers
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:53:10 -04:00
Stéphane Graber
8d761ba9f9
incusd/db/cluster: Update generated code
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:53:07 -04:00
Stéphane Graber
e18e63c38e
incusd/db: Add ReferenceID filtering to Config and Device
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:53:03 -04:00
Stéphane Graber
ab062097ff
generate-database: Add ReferenceID filtering for reference tables
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:52:52 -04:00
Stéphane Graber
42d9d15249
incusd: Fix goroutine leak when cluster instance list times out
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:52:49 -04:00
Stéphane Graber
f42e292f60
incusd/operations: Remove operation from map on DB registration failure
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:52:45 -04:00
Stéphane Graber
f956046e91
incusd/instance/qemu: Release operation lock on snapshot size failure
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-07-30 05:52:40 -04:00
Stéphane Graber
17aa57626b
Merge pull request #3746 from stgraber/cli
Add bitmap operations and instance repair actions to the CLI
2026-07-30 03:45:36 -04:00
Stéphane Graber
8665c9f696
Merge pull request #3744 from bensmrs/work
Add NVRAM setters
2026-07-30 00:57:38 -04:00
Stéphane Graber
ba83978f4c
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 00:43:33 -04:00
Stéphane Graber
dfb97c68cb
incus/storage_volume: Add bitmap subcommand
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 00:43:33 -04:00
Stéphane Graber
5465a49133
client: Add GetStorageVolumeBitmap
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 00:43:32 -04:00
Stéphane Graber
99d66fa419
incus/low-level: Add repair subcommand
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 00:43:31 -04:00
Stéphane Graber
ad9d42436a
incus/low-level: Add bitmaps subcommand
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 00:43:30 -04:00
Stéphane Graber
99792b5556
client: Add RepairInstance
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 00:43:29 -04:00
Stéphane Graber
593775c736
incusd: Fix repair endpoint swagger method
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 00:43:28 -04:00
Stéphane Graber
fc6bce092e
incusd/firewall/nftables: Fix template race in applyNftConfig
Clone the common table template per call rather than mutating the
shared parse tree, which could corrupt rendered rules when two
firewall operations ran concurrently.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-30 00:38:39 -04:00
Stéphane Graber
f6c9c51126
Merge pull request #3733 from tapiab/feat-list-all-remotes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incus/list: Add --all-remotes
2026-07-29 23:46:58 -04:00
Stéphane Graber
51fe1d408b
Merge pull request #3743 from jochumdev/pigz
incusd: Improve pgzip/pigz support
2026-07-29 23:13:13 -04:00
Benjamin Somers
143c4c7ab5
i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:52:29 -04:00
Benjamin Somers
ff3641dc9f
api: instance_nvram (updated)
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:51:10 -04:00
Benjamin Somers
0f614c25f8
incus/low-level: Add nvram edit subcommand
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:51:09 -04:00
Benjamin Somers
52f88ddc16
incus/low-level: Add nvram set subcommand
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:51:08 -04:00
Benjamin Somers
b010421942
incus/usage: Add AsSingleton
This allows using function like kvToMap on a non-list atom.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:51:07 -04:00
Benjamin Somers
fa0809fde0
incus/usage: Add MakeKV
This allows building KV-like atoms.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:51:06 -04:00
Benjamin Somers
1d967dc872
incus: Modify argument order in flag helpers
This allows making default values optional where needed.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:51:05 -04:00
Benjamin Somers
ddc228f427
doc/rest-api: Refresh swagger YAML
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:51:04 -04:00
Benjamin Somers
3e774be90e
incusd/instances: Add NVRAM variable update
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:51:03 -04:00
Benjamin Somers
65dfe674f3
shared/uefi: Add some OVMF formatting primitives
This also fixes a few oddities in the code.
This leaves boot entries, device paths, and keyboard shortcuts
unformatted, as those require too much time to consider including in
Incus 7.3.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:51:02 -04:00
Benjamin Somers
5eaad262c2
shared/api: Add InstanceNVRAMVariablePut struct
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:51:01 -04:00
Benjamin Somers
982b10a111
incusd/instances: Diverse fixes
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:51:01 -04:00
Benjamin Somers
49e9bffc02
client: Add NVRAM variable update
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:51:00 -04:00
Benjamin Somers
3b74d3cc41
incusd/instances: Add ETag on NVRAM variable getter
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:50:59 -04:00
Benjamin Somers
7b79813ebd
client: Add ETag on NVRAM variable getter
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-29 22:50:58 -04:00
Stéphane Graber
8f79d33a5c
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-29 22:17:03 -04:00
Benoit TAPIA
905ad66a18
tests: Add --all-remotes test
Signed-off-by: Benoit TAPIA <benoit.tapia@sidhes.com>
2026-07-29 22:17:02 -04:00
Benoit TAPIA
24b477b8ca
incus/list: Add --all-remotes
Signed-off-by: Benoit TAPIA <benoit.tapia@sidhes.com>
2026-07-29 22:17:01 -04:00
Stéphane Graber
7192494d2e
Merge pull request #3715 from fivetime/upstream-ceph-rbd-unmap-timeout
storage: Bound Ceph RBD unmap operations
2026-07-29 21:43:24 -04:00
René Jochum
7883e266bc
incusd/qemu: Use pgzip for state compression
Signed-off-by: René Jochum <rene@jochum.dev>
2026-07-29 21:24:49 -04:00
Stéphane Graber
2d7da2a33a
tests: Update godeps
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-29 21:24:48 -04:00
René Jochum
dc6a6c3da5
client/oci: Use pgzip for image compression
Signed-off-by: René Jochum <rene@jochum.dev>
2026-07-29 21:24:47 -04:00
René Jochum
963b96c17c
Update gomod
Signed-off-by: René Jochum <rene@jochum.dev>
2026-07-29 21:24:46 -04:00
Stéphane Graber
c3c39c1428
incusd/images: Prefer pigz for compression when available
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-29 21:24:45 -04:00
René Jochum
0941ab0cdb
shared/archive: Prefer pigz for decompression when available
Signed-off-by: René Jochum <rene@jochum.dev>
2026-07-29 21:24:44 -04:00
René Jochum
571befc069
incusd/images: Support reproducible pigz output
Signed-off-by: René Jochum <rene@jochum.dev>
2026-07-29 21:24:43 -04:00
Stéphane Graber
cfc23dc647
shared/archive: Add CompressionThreads
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-29 21:24:42 -04:00
Stéphane Graber
e096b818db
Merge pull request #3734 from gagath/launch-instance-type-link
incus/launch: Link to the supported instance types
2026-07-29 20:44:04 -04:00
Stéphane Graber
9d5e666ffd
Merge pull request #3736 from aleivag/fix-userns-detection-proc-inode
internal/linux: detect initial user namespace by inode
2026-07-29 20:43:39 -04:00
Stéphane Graber
dee0b401c7
Merge pull request #3742 from jochumdev/fixes
Fix SFTP connections
2026-07-29 20:43:19 -04:00
Simon Zhou
712307a787
incusd/storage/ceph: Bound RBD unmap with a 30s timeout
Signed-off-by: Simon Zhou <jp.zdm2008@gmail.com>
2026-07-29 19:43:54 -04:00
Stéphane Graber
9a1c8132e0
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-29 18:55:16 -04:00
Stéphane Graber
1b148e402e
doc/howto/instances_create: Update instance types link
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-29 18:55:13 -04:00
Agathe Porte
d82f6e4ae2
incus/launch: Link to the supported instance types
Having to consult the documentation to find the list of supported
instances is a bit painful. Add a link to the supported instances
in the help message as well to avoid having to dig through the
documentation first.

Signed-off-by: Agathe Porte <989521+gagath@users.noreply.github.com>
2026-07-29 18:55:10 -04:00
Alvaro Leiva Geisse
5ae0eb29b6
internal/linux: detect initial user namespace by inode
The current uid_map heuristic treats a private user namespace with an
identity uid_map as the initial user namespace. systemd 260 can create
that shape with PrivateUsers=full, causing callers to believe they can
perform initial-namespace-only operations.

Use /proc/self/ns/user's inode instead and compare it with the kernel's
PROC_USER_INIT_INO value. This detects the initial user namespace
directly instead of inferring it from the uid_map layout.

Related: https://github.com/containers/crun/issues/2150
Signed-off-by: Alvaro Leiva Geisse <aleivag@gmail.com>
2026-07-29 18:34:25 -04:00
René Jochum
82914f8647
incus-agent: Set SFTP max packet size to 128KiB
Signed-off-by: René Jochum <rene@jochum.dev>
2026-07-29 18:33:01 -04:00
René Jochum
fa6d37aa19
incusd/main_forkfile: Set SFTP max packet size to 128KiB
Signed-off-by: René Jochum <rene@jochum.dev>
2026-07-29 18:32:42 -04:00
Piotr Resztak
7ec79d0778
Merge pull request #3740 from stgraber/storage
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Storage fixes
2026-07-29 12:48:56 +02:00
Stéphane Graber
7dbbb0fc9b
incusd/instance/qemu: Use copy-before-write overlays for NBD exports
Closes #3741

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 22:53:34 -04:00
Stéphane Graber
d4752a6ce0
incusd/instance/qmp: Add copy-before-write export helpers
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 22:53:30 -04:00
Stéphane Graber
c125b0b915
Merge pull request #3739 from stgraber/api
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Update swagger response codes
2026-07-28 19:30:07 -04:00
Stéphane Graber
c513d8e3e1
incusd/storage: Allow unattached volumes in qcow2 migration
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 18:59:41 -04:00
Stéphane Graber
d37ae5fa24
incusd: Strip sub-path from dependent volume sources
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 18:59:40 -04:00
Stéphane Graber
60e937362b
incusd/instance: Strip sub-path from dependent volume sources
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 18:59:39 -04:00
Stéphane Graber
1f1755d40c
incusd/migration: Strip sub-path from dependent volume source overrides
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 18:59:38 -04:00
Stéphane Graber
99e9ee4de9
incusd/storage: Strip sub-path from dependent volume sources
Closes #3738

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 18:59:37 -04:00
Stéphane Graber
4883b0a107
Merge pull request #3737 from stgraber/main
Handle updated instance type data
2026-07-28 18:47:36 -04:00
Stéphane Graber
24cc0c09e9
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 18:32:52 -04:00
Stéphane Graber
5a4709d663
incusd: Document baseline error codes for endpoints using SmartError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 18:32:51 -04:00
Stéphane Graber
9501c2a5dd
incusd/response: Add Conflict swagger response definition
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 18:32:50 -04:00
Stéphane Graber
954b014a23
incusd: Document HTTP 412 on instance and snapshot PUT/PATCH
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 18:17:12 -04:00
Stéphane Graber
acf129d4de
incusd/network_integrations: Return 201 with Location on rename
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 18:17:11 -04:00
Stéphane Graber
50197c41b8
incusd: Fix incorrect return codes in Swagger specs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 18:17:10 -04:00
Stéphane Graber
876747133a
incusd: Document HTTP 201 return code in Swagger specs
Closes #3732

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 18:17:09 -04:00
Stéphane Graber
cf84e3ce69
incusd/instance-types: Add support for root disk size
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 17:46:46 -04:00
Stéphane Graber
b25bda1df7
incusd/instance-types: Use clouds.yaml for the list of clouds
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-28 17:46:45 -04:00
Stéphane Graber
32ef0d98ab
Merge pull request #3729 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Fix crash on root disk reconfig
2026-07-28 10:16:40 -04:00
Benjamin Somers
4fd71a4020
Merge pull request #3728 from stgraber/main
Add support for ACME EAB
2026-07-28 15:58:38 +02:00
Stéphane Graber
abb2a6b901
Merge pull request #3731 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-07-28 09:58:02 -04:00
Kazantsev Mikhail
f42042af8c
Translated using Weblate (Swedish)
Currently translated at 100.0% (1846 of 1846 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-28 13:01:56 +00:00
Kazantsev Mikhail
e0d5bbf6cf
Translated using Weblate (Russian)
Currently translated at 100.0% (1846 of 1846 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-28 13:01:54 +00:00
Stéphane Graber
e49a0502dd
incusd/instance/qemu: Prevent root disk hot-unplug
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 22:03:54 -04:00
Stéphane Graber
68e5e9a51e
incusd/instance: Prevent root disk re-creation on running instances
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 22:03:47 -04:00
Stéphane Graber
9fc3339bf6
doc: Add EAB and HMAC to wordlist
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 17:31:36 -04:00
Stéphane Graber
9e97400b11
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 17:31:34 -04:00
Stéphane Graber
c91e3d8b6e
doc/authentication: Mention External Account Binding
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 17:31:21 -04:00
Stéphane Graber
585ab14e17
incusd/acme: Pass EAB configuration to lego
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 17:31:20 -04:00
Stéphane Graber
5d6dd9da0c
incusd/cluster/config: Add acme.eab.kid and acme.eab.hmac
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 17:31:19 -04:00
Stéphane Graber
3caced2ae5
shared/tls: Add EAB support to RunACMEChallenge
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 17:31:16 -04:00
Stéphane Graber
e6a84950a3
api: acme_eab
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 17:29:46 -04:00
Stéphane Graber
6ef74a5920
Merge pull request #3727 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Split memory and swap cgroup2 checks and tweak validation
2026-07-27 16:25:15 -04:00
Stéphane Graber
af78a61cd5
Merge pull request #3726 from lxc/dependabot/github_actions/actions/labeler-7
build(deps): bump actions/labeler from 6 to 7
2026-07-27 16:09:44 -04:00
Stéphane Graber
dd58fd7a0a
Merge pull request #3725 from lxc/dependabot/github_actions/KineticCafe/actions-dco-3.2.0
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
build(deps): bump KineticCafe/actions-dco from 3.1.0 to 3.2.0
2026-07-27 15:35:18 -04:00
Stéphane Graber
dcec3dea63
incusd/instance/lxc: Handle missing swap accounting
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 15:18:15 -04:00
Stéphane Graber
e0c8d56068
incusd/seccomp: Skip swap in sysinfo when swap accounting is unavailable
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 15:18:14 -04:00
Stéphane Graber
89c6a76a3c
incusd/cgroup: Add swap accounting detection
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 15:18:13 -04:00
dependabot[bot]
3bd41c4cfa
build(deps): bump actions/labeler from 6 to 7
Bumps [actions/labeler](https://github.com/actions/labeler) from 6 to 7.
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](https://github.com/actions/labeler/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/labeler
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-27 19:12:51 +00:00
dependabot[bot]
0c4de25d48
build(deps): bump KineticCafe/actions-dco from 3.1.0 to 3.2.0
Bumps [KineticCafe/actions-dco](https://github.com/kineticcafe/actions-dco) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/kineticcafe/actions-dco/releases)
- [Changelog](https://github.com/KineticCafe/actions-dco/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kineticcafe/actions-dco/compare/v3.1.0...v3.2.0)

---
updated-dependencies:
- dependency-name: KineticCafe/actions-dco
  dependency-version: 3.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-27 19:12:47 +00:00
Stéphane Graber
9416a0367d
Merge pull request #3724 from stgraber/main
Simplify cross-network NAT skip
2026-07-27 12:58:00 -04:00
Stéphane Graber
f453c9eb9c
Merge pull request #3723 from stgraber/fixes
incusd: Keep cluster listener when core.https_address changes
2026-07-27 11:55:09 -04:00
Stéphane Graber
0d8d495c42
incusd/firewall: Remove unused SNATOpts.ExcludeInterfaces
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 10:43:43 -04:00
Stéphane Graber
0f95891fbc
incusd/network/bridge: Drop the cross-bridge NAT rules refresh
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 10:43:42 -04:00
Stéphane Graber
caf303482b
incusd/firewall/nftables: Use a bridges set for cross-bridge NAT exclusions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 10:43:41 -04:00
Stéphane Graber
e43c8410bf
incusd: Keep cluster listener when core.https_address changes
Closes #3722

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-27 09:15:34 -04:00
Stéphane Graber
1f0ce8eabe
Merge pull request #3717 from SudhanshuMatrix/bugfix/cluster-cert-update-offline-nodes
Allow certificate updates with offline nodes on same-key renewals
2026-07-27 09:13:39 -04:00
Sudhanshu Singh
563dad04fc
incusd/daemon: Sync cluster certificate from leader on startup
Signed-off-by: Sudhanshu Singh <sudhanshuwriterblc@gmail.com>
2026-07-27 00:45:44 -04:00
Sudhanshu Singh
2c4d85cb61
incusd/cluster: Allow certificate updates with offline members on same-key renewals
Signed-off-by: Sudhanshu Singh <sudhanshuwriterblc@gmail.com>
2026-07-27 00:45:43 -04:00
Stéphane Graber
7ccfa81cdc
Merge pull request #3719 from weblate/weblate-incus-cli
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Translations update from Hosted Weblate
2026-07-26 15:46:05 -04:00
Américo Monteiro
24832812ac
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1846 of 1846 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-07-26 19:31:36 +02:00
Serge Hallyn
70906d0bfb
Merge pull request #3718 from stgraber/cli
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Add a "network" column to "incus network list-allocations"
2026-07-26 11:48:21 -05:00
Serge Hallyn
143a09219d
Merge pull request #3714 from stgraber/main
Fix server-side filtering
2026-07-26 11:46:04 -05:00
Stéphane Graber
4aa65d5c22
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-26 09:13:33 -04:00
Stéphane Graber
272b791ad4
incus/network/allocations: Add a network column
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-26 09:12:58 -04:00
Stéphane Graber
f07c63ef98
internal/filter: Workaround spellcheck
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-26 01:00:43 -04:00
Stéphane Graber
3cdd7b9320
internal/filter: Only allow abbreviating the namespace in DotPrefixMatch
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-25 14:14:14 -04:00
Stéphane Graber
88d7bceb06
internal/filter: Prefer exact key match in ValueOf
Fixes #3713

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-25 14:14:10 -04:00
Piotr Resztak
29b2ba7407
Merge pull request #3711 from stgraber/fixes
Some checks failed
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Has been cancelled
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / Client (oldstable, macos-latest) (push) Has been cancelled
Tests / Client (oldstable, ubuntu-latest) (push) Has been cancelled
Tests / Client (oldstable, windows-latest) (push) Has been cancelled
Tests / Client (stable, macos-latest) (push) Has been cancelled
Tests / Client (stable, ubuntu-latest) (push) Has been cancelled
Tests / Client (stable, windows-latest) (push) Has been cancelled
Tests / Documentation (push) Has been cancelled
incusd/storage: Allow expected symlinks in instance metadata
2026-07-25 08:31:10 +02:00
Piotr Resztak
5268d14f5a
Merge pull request #3712 from stgraber/main 2026-07-25 07:45:21 +02:00
Stéphane Graber
58207a3c5c
incusd/instance/qmp: Bump blockdev-add/del timeouts
The NBD variants of those commands embed a network handshake with the
remote server, so can take a lot longer than local block commands.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-24 23:22:56 -04:00
Stéphane Graber
4cd8307ac9
incusd/storage: Allow expected symlinks in instance metadata
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-24 21:59:09 -04:00
Stéphane Graber
fea2163d1e
Merge pull request #3709 from weblate/weblate-incus-cli
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Translations update from Hosted Weblate
2026-07-24 21:19:25 -04:00
Américo Monteiro
178deb8eba
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1846 of 1846 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-07-25 01:01:26 +02:00
Piotr Resztak
f28bc8a188
Merge pull request #3705 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
2026-07-24 19:28:37 +02:00
Stéphane Graber
48b508bca0
doc: Ignore bugzilla.opensuse.org in linkcheck
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-24 11:05:43 -04:00
Stéphane Graber
93ed8b9429
incusd/auth: Fill missing local bucket location
Closes #3707

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-24 11:05:42 -04:00
Stéphane Graber
8494ac4597
incusd/instance/qemu: Fix publish of qcow2-backed volumes
On lvmcluster, the volume device holds a qcow2 container rather than
raw data, so exporting it with a raw source format produced images
containing the qcow2 container itself.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-24 11:05:41 -04:00
Stéphane Graber
6c8ebb4efa
incusd/storage/s3: Reject symlinks in bucket backups
Symlinks aren't a thing in S3, so reject them immediately.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-24 11:05:40 -04:00
Stéphane Graber
fb4041f421
incusd/storage: Strip unsafe symlinks in externally-supplied instance data
There is no reason for there to be any symlink within the instance metadata.

Given the number of issues we've run into due to symlinks in recent
months, let's add some extra checks/cleanup that will just strip any
symlink in sight outside of the rootfs.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-24 11:05:39 -04:00
Stéphane Graber
23f837b5ab
incusd: Drop metadata image on instance copy and import
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-24 11:05:38 -04:00
Stéphane Graber
5645b80efb
incusd/instance/qemu: Resize metadata image on disk size change
The newly introduced QCOW2 metadata file wasn't getting resized during a
VM offline resize event. This got caught by our daily VM tests.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-24 11:05:37 -04:00
Stéphane Graber
bf08b404f9
Merge pull request #3706 from presztak/fix_acquire_exclusive
Fix volume activation of filesystem snapshots
2026-07-24 10:37:56 -04:00
Stéphane Graber
909dde1675
Merge pull request #3704 from stgraber/fixes
incusd/instance/lxc: Fix OCI entrypoint escaping
2026-07-24 10:35:55 -04:00
Piotr Resztak
e935de598c incusd/storage/drivers: Fix volume activation of filesystem snapshots
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-24 12:19:36 +02:00
Stéphane Graber
2652e970a1
Merge pull request #3694 from fivetime/upstream-fuse-helper-errors
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/seccomp: Report FUSE mount helper failures
2026-07-24 00:32:57 -04:00
Simon Zhou
0401f92dcf
incusd/seccomp: Report FUSE mount helper failures
Signed-off-by: Simon Zhou <jp.zdm2008@gmail.com>
2026-07-24 00:14:49 -04:00
Stéphane Graber
bf44d5b6a2
Merge pull request #3693 from fivetime/upstream-criu-restore-cleanup
incusd/instance/lxc: Clean devices after failed CRIU restore
2026-07-23 22:53:47 -04:00
Stéphane Graber
a91bda1049
Merge pull request #3692 from fivetime/upstream-criu-project-name
incusd/instance/lxc: Use project-qualified CRIU restore name
2026-07-23 22:52:27 -04:00
Stéphane Graber
dcba4687e2
incusd/instance/lxc: Fix OCI entrypoint escaping
Encode lxc.init.cmd/lxc.execute.cmd using LXC's own quoting rules
rather than shell quoting as LXC's parser doesn't handle backslash
escape sequences.

Closes #3364

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-23 21:42:50 -04:00
Stéphane Graber
c0ca96d491
Merge pull request #3701 from presztak/fix_dependent_refresh
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Add support for '--refresh' for instances with dependent disks
2026-07-23 19:23:24 -04:00
Stéphane Graber
ee2d85ef3d
Merge pull request #3702 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Various bugfixes
2026-07-23 13:21:11 -04:00
Stéphane Graber
33f0eb52b4
shared/ask: Fix static analysis
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-23 11:26:34 -04:00
Stéphane Graber
2b19bc6969
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-23 11:15:06 -04:00
Stéphane Graber
9d34092411
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-23 11:14:56 -04:00
Stéphane Graber
9d06abfebb
incus/info: Show the CPU cluster of each core
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-23 11:14:52 -04:00
Stéphane Graber
6edeab17f3
incusd/instance/qemu: Make CPU topology validation cluster-aware
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-23 11:14:49 -04:00
Stéphane Graber
501ae7f6a3
shared/resources: Fix CPU core grouping to handle core clusters
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-23 11:14:46 -04:00
Stéphane Graber
70dafdac43
shared/api: Add Cluster to ResourcesCPUCore
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-23 11:14:43 -04:00
Stéphane Graber
0d472f58cb
api: resources_cpu_cluster
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-23 11:14:41 -04:00
Stéphane Graber
98aff5e6fd
incusd/instance/qemu: Confine QEMU startup to a single CPU type
Handles bigLITTLE systems by pinning QEMU on startup, then relaxing.

Closes #2225

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-23 11:14:11 -04:00
Stéphane Graber
a9f934b6e9
incusd: Add cpus= argument to forkqemu
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-23 11:14:08 -04:00
Stéphane Graber
f691ce8b6d
incusd/storage/drivers: Don't set received UUID on main btrfs volume
Closes #3532

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-23 11:14:04 -04:00
Piotr Resztak
9ed4d2eea3 shared/ask: Fix newlines after functional blocks
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-23 16:42:18 +02:00
Piotr Resztak
5e13eea4c8 incusd/storage: Add support for '--refresh' for instances with dependent disks
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-23 16:24:35 +02:00
Piotr Resztak
ad3be6187b
Merge pull request #3689 from stgraber/fixes
Various bugfixes
2026-07-23 15:38:46 +02:00
Piotr Resztak
d419a94832
Merge pull request #3690 from stgraber/main
Allow both IOps and byte limits
2026-07-23 15:36:32 +02:00
Stéphane Graber
f93f761861
Merge pull request #3700 from SudhanshuMatrix/fix-windows-password-loop
shared/ask, cmd/incus: fix password prompt loop on Windows
2026-07-23 09:00:45 -04:00
Stéphane Graber
22c4ba334d
Merge pull request #3698 from presztak/fix_container_copy
Fix instance copy for non-block volumes
2026-07-23 08:55:18 -04:00
Stéphane Graber
4e851bb553
Merge pull request #3697 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-07-23 08:54:02 -04:00
Sudhanshu Singh
cb5e8b355e
shared/ask: fix password prompt loop on Windows
Signed-off-by: Sudhanshu Singh <sudhanshuwriterblc@gmail.com>
2026-07-23 15:27:29 +05:30
Piotr Resztak
8dc586604b incusd/storage: Fix instance copy for non-block volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-23 10:40:26 +02:00
Américo Monteiro
efdd00e392
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1845 of 1845 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-07-23 10:32:37 +02:00
Simon Zhou
f0e5ef57bf incusd/instance/lxc: Clean devices after failed CRIU restore
Signed-off-by: Simon Zhou <jp.zdm2008@gmail.com>
2026-07-23 13:14:52 +09:00
Simon Zhou
551cb17c9d incusd/instance/lxc: Use project-qualified CRIU restore name
Signed-off-by: Simon Zhou <jp.zdm2008@gmail.com>
2026-07-23 13:14:45 +09:00
Stéphane Graber
6292bc4d04
Merge pull request #3680 from johnmaguire/storage-note
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Add storage note about loop devices on COW fs
2026-07-22 22:45:38 -04:00
John Maguire
0536e21c44
Add storage note about loop devices on COW fs
Signed-off-by: John Maguire <contact@johnmaguire.me>
2026-07-22 22:34:36 -04:00
Stéphane Graber
02dfe81cbf
Merge pull request #3684 from fivetime/upstream-devincus-cgroup-monitor
incusd/dev_incus: Detect LXC monitors from cgroup v2
2026-07-22 22:20:03 -04:00
Stéphane Graber
d9fc78c800
doc: Update config
Closes #3679

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-22 21:44:09 -04:00
Stéphane Graber
24221dd759
doc/storage_volumes: Mention combined I/O limits
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-22 21:44:08 -04:00
Stéphane Graber
87dc90bdbf
incusd/device: Allow combining byte/s and IOPS limits
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-22 21:44:07 -04:00
Stéphane Graber
da1fad2337
api: Add disk_io_limits_combined extension
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-22 21:44:05 -04:00
Stéphane Graber
5773d1a350
Merge pull request #3686 from fivetime/upstream-fuse-namespace-creds
incusd/seccomp: Use namespace credentials for FUSE mounts
2026-07-22 21:42:02 -04:00
Stéphane Graber
704d863e52
Merge pull request #3662 from bensmrs/nvram
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Add NVRAM inspection
2026-07-22 21:34:09 -04:00
Benjamin Somers
2ec7f0039b
i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:28:08 -04:00
Benjamin Somers
f57a482bad
incus/low-level: Add nvram unset subcommand
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:57 -04:00
Benjamin Somers
99ba72a3d2
doc/rest-api: Refresh swagger YAML
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:56 -04:00
Benjamin Somers
5f003aa794
incusd/instances: Add NVRAM variable deletion
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:55 -04:00
Benjamin Somers
a8c1d1b626
client: Add NVRAM variable deletion
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:54 -04:00
Benjamin Somers
6b3b03c1bf
incusd/instance: Add SetNVRAM
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:53 -04:00
Benjamin Somers
f06aecbaa8
shared/uefi: Add some OVMF dumping primitives
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:52 -04:00
Benjamin Somers
2e1ea9715d
i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:51 -04:00
Benjamin Somers
1a500bb99f
golangci: Ignore GUID names and comments
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:34 -04:00
Benjamin Somers
cb833149b8
incusd/instance/qemu: Initialize NVRAM on first query
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:33 -04:00
Benjamin Somers
2e231b1104
incus/low-level: Add nvram subcommand
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:32 -04:00
Benjamin Somers
7fcb9531d7
doc/rest-api: Refresh swagger YAML
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:31 -04:00
Benjamin Somers
e857eb8f6a
incusd/instances: Add NVRAM API
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:30 -04:00
Benjamin Somers
f96c777126
client: Add NVRAM getters
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:29 -04:00
Benjamin Somers
00ae22b40d
incusd/instance: Add GetNVRAM
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:28 -04:00
Benjamin Somers
f4a5c0658a
shared/uefi: Add various variable dissectors
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:27 -04:00
Benjamin Somers
578fbaa5f1
shared/uefi: Add OVMF parsing primitives
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:26 -04:00
Benjamin Somers
5d70034573
shared/api: Add InstanceNVRAMVariable struct
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:25 -04:00
Benjamin Somers
2d01caf2c2
api: instance_nvram
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:24 -04:00
Benjamin Somers
25014542b0
incus: Rename debug subcommand to low-level and advertise it
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-22 20:27:23 -04:00
Simon Zhou
5daa427d33
incusd/dev_incus: Detect LXC monitors from cgroup v2
Signed-off-by: Simon Zhou <jp.zdm2008@gmail.com>
2026-07-22 20:24:58 -04:00
Stéphane Graber
0103567ab3
Merge pull request #3683 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-07-22 20:06:13 -04:00
Simon Zhou
8e6be87173
incusd/seccomp: Use namespace credentials for FUSE mounts
Signed-off-by: Simon Zhou <jp.zdm2008@gmail.com>
2026-07-22 20:02:31 -04:00
Stéphane Graber
4dc199911e
incusd/storage: Honor writable flag on offline NBD exports
Closes #3687

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-22 17:22:22 -04:00
Stéphane Graber
03304f19be
incusd/device: Require CIDR address when NIC gateway is set
Closes #3661

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-22 17:22:21 -04:00
Temuri Doghonadze
d4baa29b6f
Translated using Weblate (Georgian)
Currently translated at 31.6% (577 of 1825 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-07-22 05:01:22 +00:00
Stéphane Graber
132e1f462b
Merge pull request #3639 from presztak/multi_authorizers
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Add support for multiple authorizers
2026-07-21 14:00:12 -04:00
Piotr Resztak
9f3b8375c6 api: authorization_client_routing
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-21 16:34:30 +02:00
Piotr Resztak
c47028b066 doc: Update config
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-21 16:34:30 +02:00
Piotr Resztak
30bc687c89 doc/authorization: Update for authorization client routing
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-21 16:34:29 +02:00
Piotr Resztak
042906b13f
Merge pull request #3676 from stgraber/ovn
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Better handle stale OVN connections
2026-07-21 13:22:51 +02:00
Piotr Resztak
3d0cc6be79
Merge pull request #3677 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Fix LVM cluster size calculation on migration
2026-07-21 10:44:26 +02:00
Piotr Resztak
e4594cfd17 tests: Set authorization.client.* keys
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-21 10:04:44 +02:00
Piotr Resztak
f3764616fb tests: Add authorization router tests
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-21 10:04:44 +02:00
Piotr Resztak
6b455a1519 incusd: Set defaults for authorization.client.* keys
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-21 10:04:44 +02:00
Piotr Resztak
834ed170b0 incusd: Add support for multiple authorizers
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-21 10:04:44 +02:00
Piotr Resztak
6dc44a4397 incusd/request: Add CtxUnixIsRoot
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-21 10:04:44 +02:00
Piotr Resztak
988c17b8dd incusd/auth: Add allow/deny authorizers
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-21 10:04:44 +02:00
Stéphane Graber
0b0ad48e70
Merge pull request #3648 from fivetime/unix-block-limits-upstream
incusd/device: Add I/O limits for unix-block devices
2026-07-21 01:28:57 -04:00
Simon Zhou
fcf5556bd6
doc: Update config
Signed-off-by: Simon Zhou <jp.zdm2008@gmail.com>
2026-07-20 23:19:45 -04:00
Simon Zhou
611a94a802
incusd/device: Add I/O limits for unix-block devices
Signed-off-by: Simon Zhou <jp.zdm2008@gmail.com>
2026-07-20 23:19:44 -04:00
Simon Zhou
018b5ec279
api: Add unix_block_limits extension
Signed-off-by: Simon Zhou <jp.zdm2008@gmail.com>
2026-07-20 23:19:43 -04:00
Stéphane Graber
42a5b2c463
incusd/device: Make disk I/O limit parsing reusable
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-20 23:19:34 -04:00
Stéphane Graber
0e447c771c
Merge pull request #3675 from lxc/dependabot/github_actions/actions/setup-go-7
build(deps): bump actions/setup-go from 6 to 7
2026-07-20 21:48:56 -04:00
Stéphane Graber
1aa57342d2
incusd/storage: Skip root disk size check on remote cluster move
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-20 20:34:00 -04:00
Stéphane Graber
3cfdb63fc7
incusd/storage: Use qcow2 virtual size as instance block size
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-20 20:33:59 -04:00
Stéphane Graber
ff460a7ad8
incusd/network/ovn: Remove NB client singleton
Closes #3674

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-20 15:17:37 -04:00
Stéphane Graber
d463e0c7e2
incusd/network/ovn: Detect stale database connections
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-20 15:17:33 -04:00
dependabot[bot]
ab552aa127
build(deps): bump actions/setup-go from 6 to 7
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 6 to 7.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-20 19:12:59 +00:00
Stéphane Graber
0ef9103c8a
Merge pull request #3673 from weblate/weblate-incus-cli
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Translations update from Hosted Weblate
2026-07-20 07:50:40 -04:00
Américo Monteiro
5c6b627344
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1825 of 1825 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-07-20 09:30:03 +02:00
Piotr Resztak
45bd827fa1
Merge pull request #3670 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
More NBD fixes
2026-07-20 09:29:57 +02:00
Stéphane Graber
0dbf1bf154
incusd/storage: Hold NBD operation lock for the whole session
Closes #3669

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-19 19:56:41 -04:00
Stéphane Graber
f1ac29c64a
incusd/locking: Make unlock functions release only their own lock
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-19 19:56:40 -04:00
Stéphane Graber
4dddc846b8
Merge pull request #3668 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/storage: Fix races in connectOfflineNBD
2026-07-19 16:06:25 -04:00
Stéphane Graber
d83b837801
incusd/storage: Fix races in connectOfflineNBD
Closes #3667

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-19 15:07:27 -04:00
Tycho Andersen
272abc70db
Merge pull request #3666 from stgraber/fixes 2026-07-19 12:32:23 -04:00
Stéphane Graber
b6401990dc
incusd/network/zone: Return a single SOA record on plain SOA queries
Closes #3665

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-19 11:48:50 -04:00
Stéphane Graber
779bc2ce73
Merge pull request #3663 from bensmrs/profile
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Change `assign` subcommands separator
2026-07-18 23:52:06 -04:00
Stéphane Graber
d2b8be092c
Merge pull request #3664 from bensmrs/progress
Fix progress reporting when dealing with stdin
2026-07-18 23:51:03 -04:00
Benjamin Somers
d8785a33e3 incus/storage_volume_file: Fix progress reporting on stdin push
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-19 02:33:40 +00:00
Benjamin Somers
73e21cb367 incus/storage_volume: Fix progress reporting on stdin import
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-19 02:32:09 +00:00
Benjamin Somers
999c8de084 incus/storage_bucket: Fix progress reporting on stdin import
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-19 02:31:44 +00:00
Benjamin Somers
c68f48dc7f incus/import: Fix progress reporting on stdin import
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-19 02:30:51 +00:00
Benjamin Somers
074fe22ddb incus/file: Fix progress reporting on stdin push
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-19 02:29:50 +00:00
Benjamin Somers
cab4f1811c i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-19 01:35:29 +00:00
Benjamin Somers
634f1e98f9 test: Fix assign separator
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-19 01:35:14 +00:00
Benjamin Somers
3117ea97d7 incus/profile: Change profile separator in assign subcommand
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-19 01:35:14 +00:00
Benjamin Somers
141934edeb incus/cluster_group: Change group separator in assign subcommand
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-19 01:35:14 +00:00
Stéphane Graber
c55c69921c
Merge pull request #3659 from stgraber/fixes
Prevent using the Incus daemon directory as a storage pool
2026-07-18 19:59:55 -04:00
Stéphane Graber
45076c7dc1
incusd: Don't warn on double close of downloaded image files
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-18 12:19:03 -04:00
Stéphane Graber
be58aa58b2
incusd/storage/btrfs: Restrict subvolume sources under the daemon dir
Closes #3658

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-18 12:18:52 -04:00
Tycho Andersen
2bf7b0435b
Merge pull request #3656 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
2026-07-18 07:37:18 -04:00
Stéphane Graber
6b2c703e55
client: Always set TLS ServerName on dial
The server name is normally derived from the pinned certificate's first
DNS name, leaving it unset when no certificate is pinned or when the
certificate has no DNS SANs. Those connections used to rely on the
unconditional retry which bd77bb04a removed, breaking any such dial.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-17 17:04:02 -04:00
Stéphane Graber
2026888cd1
incusd/instance/qmp: Remove unused event channel logic
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-17 17:04:01 -04:00
Stéphane Graber
25fd79d0c4
incusd/instance/qemu: Harden ephemeral snapshot teardown
A failed merge no longer removes the overlay out from under the guest,
teardown errors are logged instead of discarded and a leftover overlay
from an earlier failed teardown is now merged back on the next NBD
session rather than requiring an instance restart.

Closes #3654

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-17 17:04:01 -04:00
Stéphane Graber
bcffa337ac
incusd/instance/qmp: Rework block job monitoring
Block commit jobs now run with auto-dismiss=false and are polled to their
final state, so a job that fails before the first query-block-jobs poll
no longer vanishes with its error lost.

This also replaces the event channel wait in BlockJobComplete which was
only registered after the job had already started.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-17 17:04:00 -04:00
Stéphane Graber
9cca05ee73
incusd/storage/s3: Support conditional writes
Closes #3651

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-17 17:03:59 -04:00
Stéphane Graber
f3007efb9e
incus: Don't persist INCUS_REMOTE as the default remote
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-17 17:03:58 -04:00
Stéphane Graber
f51548a26a
Merge pull request #3650 from SudhanshuMatrix/fix/spice-socket-spaces
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incus/console: Escape spaces in SPICE console socket URI
2026-07-17 15:24:40 -04:00
Sudhanshu Singh
235209442b
incus/console: Escape spaces in SPICE console socket URI
Signed-off-by: Sudhanshu Singh <sudhanshuwriterblc@gmail.com>
2026-07-17 12:00:14 -04:00
Piotr Resztak
5f70b59f32
Merge pull request #3647 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
2026-07-17 03:44:44 +02:00
Stéphane Graber
d3d7270ee5
Merge pull request #3635 from 0xk1f0/ovn-deletion-leaks
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
network/ovn: Tolerate stop failures during network deletion
2026-07-16 17:27:28 -04:00
Stéphane Graber
9e03109e5f
incusd/cluster: Resolve instance volumes by name in ConnectIfVolumeIsRemote
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-16 16:46:14 -04:00
Stéphane Graber
9a15499763
incusd: Honor target parameter in bitmap endpoints
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-16 16:46:14 -04:00
0xk1f0
4b3738bf60
incusd/networks: Run driver deletion for locally pending networks
OVN networks keep cluster-wide state that is only removed by the member
handling the client-facing request. Skipping the driver deletion when
that member is still pending leaked all northbound entities of a
partially created network while its database record was removed.

Local-only drivers keep skipping the deletion on pending members, as it
could remove host interfaces that were never created by the daemon.

Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-07-16 15:36:02 -04:00
0xk1f0
38ef9b430b
incusd/device/nic_ovn: Guard cleanup against unavailable network
The stored network is nil when the device config fails
validation, crashing the daemon on instance stop or removal.

Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-07-16 15:36:00 -04:00
0xk1f0
87113f1ac4
incusd/network/ovn: Tolerate stop failures during network deletion
A stop failure previously aborted the deletion before the northbound
database teardown, leaking the logical entities when the database
record was removed through the create revert path.

Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-07-16 15:34:58 -04:00
Stéphane Graber
a121209356
Merge pull request #3645 from stgraber/fixes
Various bugfixes
2026-07-16 13:56:15 -04:00
Stéphane Graber
bd77bb04ab
client: Only retry TLS dial on certificate verification errors
Closes #3642

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-16 13:13:37 -04:00
Stéphane Graber
d55af0889c
incusd/network: Handle CIDR values in NIC ipv4.address/ipv6.address
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-16 12:11:21 -04:00
Stéphane Graber
0987a2811f
incusd/device: Handle CIDR values in NIC ipv4.address/ipv6.address
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-16 12:11:20 -04:00
Stéphane Graber
58acd6af38
Merge pull request #3644 from stgraber/main
shared/tls: Use first successful connection in RFC3493Dialer
2026-07-16 12:11:05 -04:00
Stéphane Graber
20634a7ac3
incusd/instances/common: Fix typo
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-16 00:46:47 -04:00
Stéphane Graber
637a1b2bea
shared/tls: Use first successful connection in RFC3493Dialer
Closes #3643

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-16 00:24:40 -04:00
Stéphane Graber
ccdf811297
Merge pull request #3641 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Various bugfixes
2026-07-15 10:35:20 -04:00
Stéphane Graber
34724d9887
incusd/instance/lxc: Stop the DHCP client from the stop hook
Kill forknet dhcp client from the instance's stop hook.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-14 15:05:15 -04:00
Stéphane Graber
c7faf0ba52
incusd/seccomp: Handle syscalls from non-leader threads
pidfd_open() fails with EINVAL on non-leader thread IDs unless
PIDFD_THREAD is passed, causing intercepted syscalls issued from
secondary threads to fail with EPERM.

Closes #3638

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-14 15:05:06 -04:00
Stéphane Graber
eb9065d45f
Merge pull request #3640 from weblate/weblate-incus-cli
Some checks failed
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Has been cancelled
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / Client (oldstable, macos-latest) (push) Has been cancelled
Tests / Client (oldstable, ubuntu-latest) (push) Has been cancelled
Tests / Client (oldstable, windows-latest) (push) Has been cancelled
Tests / Client (stable, macos-latest) (push) Has been cancelled
Tests / Client (stable, ubuntu-latest) (push) Has been cancelled
Tests / Client (stable, windows-latest) (push) Has been cancelled
Tests / Documentation (push) Has been cancelled
Translations update from Hosted Weblate
2026-07-14 11:47:36 -04:00
KATOH Yasufumi
3ca74294ac
Translated using Weblate (Japanese)
Currently translated at 72.8% (1326 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-07-14 14:01:21 +00:00
Stéphane Graber
d8ba6e7223
Merge pull request #3636 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/metrics: Rename incus_storage_pool_total_bytes to incus_storag…
2026-07-13 12:08:12 -04:00
Stéphane Graber
426e850764
incusd/metrics: Rename incus_storage_pool_total_bytes to incus_storage_pool_size_bytes
Makes it more consistent with filesystem metrics and general Prometheus preference.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-13 11:27:11 -04:00
Stéphane Graber
91fdb8fc06
Merge pull request #3634 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-07-13 09:38:08 -04:00
KATOH Yasufumi
0a47b39ca7
Translated using Weblate (Japanese)
Currently translated at 72.8% (1325 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-07-13 15:37:34 +02:00
Anonymous
b8298297f0
Translated using Weblate (Swedish)
Currently translated at 99.6% (1812 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:33 +02:00
Kazantsev Mikhail
a5691c7eca
Translated using Weblate (Swedish)
Currently translated at 99.6% (1812 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-13 15:37:33 +02:00
Daniel Nylander
ee3a9da680
Translated using Weblate (Swedish)
Currently translated at 99.6% (1812 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-07-13 15:37:32 +02:00
Hiroaki Nakamura
d7b70d5f3f
Translated using Weblate (Japanese)
Currently translated at 72.1% (1313 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-07-13 15:37:32 +02:00
KATOH Yasufumi
cdadfe4fbe
Translated using Weblate (Japanese)
Currently translated at 72.1% (1313 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-07-13 15:37:31 +02:00
Kazantsev Mikhail
b031599e8b
Translated using Weblate (Japanese)
Currently translated at 72.1% (1313 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-13 15:37:31 +02:00
Anonymous
21ef976085
Translated using Weblate (Japanese)
Currently translated at 72.1% (1313 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:30 +02:00
Kazantsev Mikhail
ceb0b2de44
Translated using Weblate (Indonesian)
Currently translated at 9.2% (169 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-13 15:37:30 +02:00
Andika Triwidada
bac8fcc7fb
Translated using Weblate (Indonesian)
Currently translated at 9.2% (169 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-07-13 15:37:29 +02:00
Anonymous
48082cae2e
Translated using Weblate (Indonesian)
Currently translated at 9.2% (169 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:29 +02:00
meipeter
4adf7c5081
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.5% (701 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-07-13 15:37:28 +02:00
daoge
b5ee2936a4
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.5% (701 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-07-13 15:37:28 +02:00
Kwok Guy
279e72f5ad
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.5% (701 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-07-13 15:37:27 +02:00
yooadmin
ffe83d5cba
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.5% (701 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-07-13 15:37:27 +02:00
Sakiko
b5229bc336
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.5% (701 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-07-13 15:37:26 +02:00
Loge X
af59ec4118
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.5% (701 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-07-13 15:37:26 +02:00
Anonymous
1cd77f74c5
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.5% (701 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:26 +02:00
IO01
5538c52e81
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.5% (701 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-07-13 15:37:25 +02:00
Anonymous
c897e29b06
Translated using Weblate (Georgian)
Currently translated at 31.4% (572 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:25 +02:00
Temuri Doghonadze
e723212454
Translated using Weblate (Georgian)
Currently translated at 31.4% (572 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-07-13 15:37:24 +02:00
Varlorg
ac4d33e6a5
Translated using Weblate (French)
Currently translated at 75.3% (1370 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-07-13 15:37:24 +02:00
Steeve Droz
0fcbc267a2
Translated using Weblate (French)
Currently translated at 75.3% (1370 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-07-13 15:37:23 +02:00
Laterria.Severino
00404f5cf8
Translated using Weblate (French)
Currently translated at 75.3% (1370 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-07-13 15:37:23 +02:00
smCloudInTheSky
230b533438
Translated using Weblate (French)
Currently translated at 75.3% (1370 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-07-13 15:37:22 +02:00
Kazantsev Mikhail
cab9c44b23
Translated using Weblate (French)
Currently translated at 75.3% (1370 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-13 15:37:22 +02:00
Corabel Bertolini
136e04e408
Translated using Weblate (French)
Currently translated at 75.3% (1370 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-07-13 15:37:21 +02:00
Anonymous
82b1479e67
Translated using Weblate (French)
Currently translated at 75.3% (1370 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:21 +02:00
Benjamin Somers
6c7b205aab
Translated using Weblate (French)
Currently translated at 75.3% (1370 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-07-13 15:37:20 +02:00
montag451
93537f1720
Translated using Weblate (French)
Currently translated at 75.3% (1370 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-07-13 15:37:20 +02:00
pesder
8874db8807
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-07-13 15:37:19 +02:00
Anonymous
23408f9938
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:19 +02:00
Kazantsev Mikhail
dc51f9daff
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.8% (89 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-13 15:37:18 +02:00
Paulo Coghi
d55dcc4a01
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.8% (89 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-07-13 15:37:18 +02:00
Anonymous
7d7309b641
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.8% (89 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:17 +02:00
Dklfajsjfi49wefklsf32
3ca54607c9
Translated using Weblate (German)
Currently translated at 10.2% (186 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-07-13 15:37:17 +02:00
Stéphane Graber
d7e4259fa3
Translated using Weblate (German)
Currently translated at 10.2% (186 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-13 15:37:16 +02:00
Tobias Gerold
696d91830a
Translated using Weblate (German)
Currently translated at 10.2% (186 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-07-13 15:37:16 +02:00
Jan Mittelstädter
5564871fcf
Translated using Weblate (German)
Currently translated at 10.2% (186 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-07-13 15:37:15 +02:00
Anonymous
01ecbb1fa3
Translated using Weblate (German)
Currently translated at 10.2% (186 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:15 +02:00
Anonymous
83c2dce65f
Translated using Weblate (Russian)
Currently translated at 99.6% (1812 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:14 +02:00
Kazantsev Mikhail
682ce94f6e
Translated using Weblate (Russian)
Currently translated at 99.6% (1812 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-13 15:37:14 +02:00
Alberto Donato
6d4d6b469b
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-07-13 15:37:13 +02:00
Anonymous
c0b59e365e
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:13 +02:00
Anonymous
340520197e
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:12 +02:00
Daniel Dybing
c38c4ccf7b
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-07-13 15:37:12 +02:00
Anonymous
c3e26be3a3
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:11 +02:00
Dklfajsjfi49wefklsf32
d63e4aa38e
Translated using Weblate (Dutch)
Currently translated at 10.6% (194 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-07-13 15:37:11 +02:00
Anonymous
dadd815931
Translated using Weblate (Dutch)
Currently translated at 10.6% (194 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:10 +02:00
Anonymous
43fd2a43e9
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:10 +02:00
Anonymous
52fc0ca59c
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1819 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:09 +02:00
Kazantsev Mikhail
443e64301b
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1819 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-13 15:37:09 +02:00
Américo Monteiro
09a6c1ec17
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1819 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-07-13 15:37:08 +02:00
Kazantsev Mikhail
61def2d034
Translated using Weblate (Spanish)
Currently translated at 3.5% (65 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-13 15:37:08 +02:00
Jorge Teixeira
510497f10b
Translated using Weblate (Spanish)
Currently translated at 3.5% (65 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-07-13 15:37:07 +02:00
Anonymous
2b20fb78c3
Translated using Weblate (Spanish)
Currently translated at 3.5% (65 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-07-13 15:37:07 +02:00
Stéphane Graber
c475ef0ec1
Merge pull request #3633 from stgraber/main
Add support for port forwarding (CLI connects to inside instance)
2026-07-13 09:36:53 -04:00
Serge Hallyn
990c95515e
Merge pull request #3631 from stgraber/fixes
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/storage/zfs: Restore volume quota on refresh error
2026-07-12 11:36:10 -05:00
Stéphane Graber
9464332398
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 12:06:57 -04:00
Stéphane Graber
febf7cd222
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 12:06:56 -04:00
Stéphane Graber
008c4c7e32
tests: Add port forward tests
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 12:06:55 -04:00
Stéphane Graber
3a1d400f75
incus: Add port-forward command
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 12:06:54 -04:00
Stéphane Graber
28f0d5b6ac
incusd/instances: Add port-forward API
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 12:06:53 -04:00
Stéphane Graber
ea84868b79
incusd/auth: Add can_connect_tcp
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 12:06:52 -04:00
Stéphane Graber
cc73c2218c
incusd/instance: Add PortForwardConn
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 12:06:51 -04:00
Stéphane Graber
c67414119b
incusd/forknet: Add connect command
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 12:06:50 -04:00
Stéphane Graber
bb94cd3355
incus-agent: Add port-forward API
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 12:06:49 -04:00
Stéphane Graber
8672e8adf2
client: Add GetInstancePortForwardConn
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 12:06:48 -04:00
Stéphane Graber
8b165bff4e
shared/api: Add InstancePortForwardPost
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 12:06:47 -04:00
Stéphane Graber
52c4fd9bb9
api: Add instance_port_forward extension
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 12:06:46 -04:00
Stéphane Graber
1e0048499b
incusd/storage/zfs: Restore volume quota on refresh error
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-12 11:14:45 -04:00
Stéphane Graber
2d4e1edacd
Merge pull request #3628 from MarcosDaNight/issue/3626/storage-pool-metrics
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Add storage pool usage metrics
2026-07-12 00:11:39 -04:00
Stéphane Graber
830e9472d6
Merge pull request #3629 from stgraber/main
Various bugfixes
2026-07-12 00:11:18 -04:00
Marcos Guillermo
7868b1960e
doc: Document storage pool metrics
Signed-off-by: Marcos Guillermo <marcos.cosson@ccc.ufcg.edu.br>
2026-07-11 22:26:24 -04:00
Marcos Guillermo
55e22beb1d
incusd/metrics: Collect storage pool usage
Signed-off-by: Marcos Guillermo <marcos.cosson@ccc.ufcg.edu.br>
2026-07-11 22:26:23 -04:00
Marcos Guillermo
0c2e8b32ea
incusd/metrics: Add storage pool usage metric types
Signed-off-by: Marcos Guillermo <marcos.cosson@ccc.ufcg.edu.br>
2026-07-11 22:26:18 -04:00
Stéphane Graber
1bec4f6e17
incusd/storage/zfs: Clear volume quota during optimized refresh
Closes #3625

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-11 21:10:46 -04:00
Stéphane Graber
0a44fb46ad
incusd/network/bridge: Don't NAT traffic between managed bridge networks
This now builds a list of bridges on the system and sets up exclusion
rules for the other local bridges.

Also adds some logic to handle new networks being added.

Closes #3513

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-11 21:09:44 -04:00
Stéphane Graber
ae114d369e
Merge pull request #3564 from cmspam/feature/gpu-native-context
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Add a native-context GPU type for VMs (virtio-gpu DRM native context)
2026-07-11 15:54:34 -04:00
Stéphane Graber
eea3477e10
incusd/device: Grant render node access to native-context GPUs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-11 15:05:10 -04:00
Stéphane Graber
c2eb23fdc1
incusd/linux: Add GrantPosixACLUser
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-11 15:05:08 -04:00
cmspam
fdee95e993
doc: Update config
Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-07-11 12:54:30 -04:00
cmspam
76791f34d1
doc: Document the native-context GPU type
Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-07-11 12:54:29 -04:00
cmspam
2a85d35d35
incusd/apparmor: Allow DRM render nodes for native-context GPU
Grant the QEMU AppArmor profile access to the host /dev/dri render
nodes only when a native-context gpu device is present on the
instance.

Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-07-11 12:54:28 -04:00
Stéphane Graber
638b84e018
incusd/apparmor: Fix alignment
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-11 12:54:25 -04:00
Stéphane Graber
f2b5fa9613
Merge pull request #3623 from stgraber/main
Various bugfixes
2026-07-11 12:43:13 -04:00
Stéphane Graber
ee9af983eb
Merge pull request #3624 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-07-11 05:14:16 -04:00
Américo Monteiro
7de5133136
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1819 of 1819 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-07-11 04:01:20 +00:00
Stéphane Graber
1fc57eb284
incusd/events: Don't warn on double connection close
The event listener connection is closed from multiple spots.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-10 20:32:04 -04:00
Stéphane Graber
3e060957ae
incusd: Fix race between forkfile cleanup and respawn
The socket cleanup that runs after forkfile exits could delete the
socket of a newly spawned forkfile, as the new listener is created
before the old cleanup completes. Only remove the socket if it's
still the one we created.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-10 20:31:49 -04:00
cmspam
8b12a20d07
incusd/instance/drivers: Support native-context GPU in QEMU
When a native-context gpu device is attached to a VM, the default
emulated GPU is switched to a GL-capable virtio-gpu (virtio-vga-gl or
virtio-gpu-gl-pci) configured with blob, drm_native_context and the
requested hostmem window.

QEMU is launched with "-display egl-headless,gl=on[,rendernode=...]"
so the guest driver can drive the host GPU directly. This requires
QEMU 11.0.0 or newer.

Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-07-10 09:14:57 -04:00
cmspam
7799790055
incusd/device: Add native-context GPU device type
Add a VM-only "native-context" gputype that, rather than passing a
PCI device through to the guest, configures a GL-capable virtio-gpu
backed by QEMU's DRM native context. The host GPU is not rebound to
vfio-pci and stays usable by the host.

It reuses the existing gpu selector keys (id, pci, vendorid and
productid) to pick a host GPU and resolves the selected card to its
DRM render node. The blob.size option (default 2GiB) sets the size of
the host-visible blob memory window.

Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-07-10 09:14:56 -04:00
cmspam
3ce721cd71
api: Add gpu_native_context extension
Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-07-10 09:14:55 -04:00
Stéphane Graber
acd811a5fd
Merge pull request #3622 from 0xk1f0/ceph-cleanup-race
Some checks failed
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Has been cancelled
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / Client (oldstable, macos-latest) (push) Has been cancelled
Tests / Client (oldstable, ubuntu-latest) (push) Has been cancelled
Tests / Client (oldstable, windows-latest) (push) Has been cancelled
Tests / Client (stable, macos-latest) (push) Has been cancelled
Tests / Client (stable, ubuntu-latest) (push) Has been cancelled
Tests / Client (stable, windows-latest) (push) Has been cancelled
Tests / Documentation (push) Has been cancelled
incusd/storage/ceph: Concurrent Deletion Adjustments
2026-07-10 09:14:26 -04:00
0xk1f0
c188a58ed8
incusd/storage/ceph: Tolerate concurrent-deletion handling for non-image parents and renames
Tolerate concurrently deleted RBD entities in the
image deletion path itself and report a clean not-found
error rather than a raw rbd failure when a rename target
has been concurrently removed.

Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-07-10 11:00:10 +02:00
0xk1f0
dd7520ad9a
incusd/storage/ceph: Serialize volume deletion on the parent image
Deleting a volume cloned from an image cascades into cleanup of the
shared image snapshot. When several clones of the same image are
deleted in parallel, the check-then-act logic races and rbd commands
fail with ENOENT.

Lock on the parent image volume around the deletion so concurrent
deletions of sibling clones are serialized, and take the same lock
when deleting the image volume itself.

Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-07-10 11:00:10 +02:00
0xk1f0
6ab06e95ad
incusd/storage/ceph: Tolerate concurrently deleted RBD entities in zombie cleanup
On a cluster, multiple members share the same OSD pool and can trigger
the zombie cleanup cascade for the same image at the same time, causing
rbd rename/delete commands to fail with ENOENT for entities that were
already handled by another member.

Treat ENOENT from rbd as already handled during the cleanup cascade.

Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-07-10 11:00:10 +02:00
Stéphane Graber
abc1211ace
Merge pull request #3620 from MarcosDaNight/issue/3606/network-summary
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Implement network allocations summary
2026-07-09 23:33:50 -04:00
Marcos Guillermo
7130da1945
i18n: Update translation templates
Signed-off-by: Marcos Guillermo <marcos.cosson@ccc.ufcg.edu.br>
2026-07-09 23:09:50 -04:00
Marcos Guillermo
f83acac164
incus/network: add --summary flag to list-allocations
Signed-off-by: Marcos Guillermo <marcos.cosson@ccc.ufcg.edu.br>
2026-07-09 23:09:49 -04:00
Marcos Guillermo
6c59bae993
doc/rest-api: Refresh swagger YAML
Signed-off-by: Marcos Guillermo <marcos.cosson@ccc.ufcg.edu.br>
2026-07-09 21:59:24 -04:00
Marcos Guillermo
c39f49f83c
incusd/network-allocations: populate network field
Signed-off-by: Marcos Guillermo <marcos.cosson@ccc.ufcg.edu.br>
2026-07-09 21:59:22 -04:00
Marcos Guillermo
4f88c2a16e
shared/api: add Network field to NetworkAllocations
Signed-off-by: Marcos Guillermo <marcos.cosson@ccc.ufcg.edu.br>
2026-07-09 21:59:21 -04:00
Marcos Guillermo
150521ace7
api: network_allocations_network extension
Signed-off-by: Marcos Guillermo <marcos.cosson@ccc.ufcg.edu.br>
2026-07-09 21:57:25 -04:00
Serge Hallyn
73273acb7e
Merge pull request #3615 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Various bugfixes
2026-07-09 18:29:19 -05:00
Stéphane Graber
42b3fbc0bd
Merge pull request #3621 from stgraber/fixes
incusd/dev_incus: Fix race in ConnPidMapper access
2026-07-09 16:28:48 -04:00
Stéphane Graber
45439e0b23
incusd/forksyscall: Check for path truncation in mknod emulation
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-09 16:28:01 -04:00
Serge Hallyn
e117103f1a
Merge pull request #3616 from stgraber/doc
Add mention fo cgroup2 limitations
2026-07-09 14:14:48 -05:00
Stéphane Graber
da70ae3b0d
incusd/dev_incus: Fix race in ConnPidMapper access
The connection to ucred map was read without holding the lock,
racing with writes from the ConnState handler.

Closes #3618

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-09 13:11:30 -04:00
Stéphane Graber
d67b2873f4
Merge pull request #3619 from presztak/central_authorization_keys
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Move all the authorization related keys within one central authorization.XYZ namespace
2026-07-09 11:39:34 -04:00
Piotr Resztak
af2bfdb5bd tests: Update OpenFGA tests for authorization config keys
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-09 15:10:53 +02:00
Piotr Resztak
8ba6e4b84f api: authorization_config
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-09 15:10:53 +02:00
Piotr Resztak
358a7e7ef6 doc: Update config
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-09 15:10:53 +02:00
Piotr Resztak
239a00608e doc/authorization: Update for authorization config namespace
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-09 15:10:53 +02:00
Piotr Resztak
f09e118eb4 incusd/auth: Move OpenFGA config to authorization.* namespace
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-09 15:10:52 +02:00
Stéphane Graber
114ffb2dc0
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-08 22:55:45 -04:00
Stéphane Graber
82800c3e65
internal/instance: Mention cgroup2 limitations
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-08 22:55:44 -04:00
Stéphane Graber
86395a281f
incusd/forksyscall: Fix mknod emulation for relative paths
The parent directory of the target is already opened and checked, so
mknodat() must be passed the base name, not the full path.

Closes #3613

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-08 21:45:20 -04:00
Stéphane Graber
a08f2fadd5
incus: Fix remote path handling on Windows
Remote instance and volume paths are always POSIX, so use "path"
rather than "path/filepath" when manipulating them.

Closes #3614

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-08 21:45:11 -04:00
Serge Hallyn
bc9cc1586d
Merge pull request #3612 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Implement security.nesting for virtual machines
2026-07-08 19:14:55 -05:00
Stéphane Graber
b2dbddf536
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-08 15:39:47 -04:00
Stéphane Graber
b7c3b66ca7
incusd/project: Add restricted.virtual-machines.nesting
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-08 15:39:46 -04:00
Stéphane Graber
900b06b85c
api: projects_restricted_virtual_machines_nesting
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-08 15:39:45 -04:00
Stéphane Graber
d55b0ece8e
incusd/instance/qemu: Turn off svm and vmx when security.nesting is disabled
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-08 15:39:44 -04:00
Stéphane Graber
799204b8df
incusd/instance: Allow security.nesting on VMs
Closes #3610

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-08 15:39:40 -04:00
Stéphane Graber
5676a8eaa4
Merge pull request #3611 from weblate/weblate-incus-cli
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Translations update from Hosted Weblate
2026-07-08 11:38:15 -04:00
Kazantsev Mikhail
98b9cbc32f
Translated using Weblate (Swedish)
Currently translated at 100.0% (1812 of 1812 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-08 16:01:23 +02:00
Kazantsev Mikhail
c5bbb19b30
Translated using Weblate (Russian)
Currently translated at 100.0% (1812 of 1812 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-07-08 16:01:22 +02:00
KATOH Yasufumi
61e34f67fd
Translated using Weblate (Japanese)
Currently translated at 72.4% (1313 of 1812 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-07-08 16:01:20 +02:00
Stéphane Graber
9f76cc50ac
Merge pull request #3596 from 0xk1f0/forward-default-target-nat
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/network/ovn: Fix NAT for network forward default targets
2026-07-07 23:10:44 -04:00
Stéphane Graber
48341befc1
Merge pull request #3609 from presztak/persistent_bitmaps
Support persistent bitmaps for raw-format block devices
2026-07-07 23:00:22 -04:00
Stéphane Graber
052f19765c
Merge pull request #3608 from stgraber/vm
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Fix handling of CPU pinning during live migration
2026-07-07 08:29:48 -04:00
Piotr Resztak
67588af3fb incusd/instance/drivers: Add support for raw-format block devices
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-07 13:49:15 +02:00
Piotr Resztak
495bfad8be incsd/device/config: Add DataFilePath field to MountEntryItem
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-07-07 09:31:44 +02:00
Piotr Resztak
d268b73c4e
Merge pull request #3607 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
client: Only pass device overrides to sources supporting them
2026-07-07 09:20:45 +02:00
0xk1f0
42053c457d
incusd/network/ovn: Fix NAT for network forward default targets
A network forward with only a target_address (no port maps) produced a
portless Load_Balancer VIP, duplicated across both the tcp and udp load
balancers OVN creates per forward. When the same address was also used
by ipv4/ipv6.address.external's snat rule, OVN's UNSNAT stage would
skip reversing that SNAT for TCP/UDP traffic on the address, since it
was now both a NAT external_ip and a Load_Balancer VIP, breaking the
instance's own outbound TCP/UDP traffic while leaving ICMP unaffected.
Even without any NIC pairing, this always produced two redundant
Load_Balancer objects for a forward with just a default target.

Represent a forward's default target_address as a plain router dnat
NAT rule instead of a Load_Balancer VIP. It never touches the
Load_Balancer table, so it can't collide with a snat rule on the same
address, and it still composes correctly with one when paired with
ipv4/ipv6.address.external.

Revert ipv4/ipv6.address.external to always creating a plain snat
rule, dropping the lookup into the paired forward's config.

Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-07-07 09:10:31 +02:00
Stéphane Graber
f328668494
incusd/instance/qemu: Re-compute CPU pins on stateful start
Closes #3602

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-07 00:45:11 -04:00
Stéphane Graber
3b370a4ff2
incusd/instance/qemu: Serialize CPU pinning data in the CPU topology
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-07 00:45:09 -04:00
Stéphane Graber
779a753434
Merge pull request #3605 from glowf1sh/patch-1
incusd/instance/qemu: Handle missing kvm64
2026-07-07 00:37:49 -04:00
Stéphane Graber
b7f8d10487
client: Only pass device overrides to sources supporting them
Passing Devices during migration requests has been introduced with the
dependent volume support. When interacting with a server that predates
that feature, we should avoid passing the Devices as that can cause the
server to assume a local cross-pool migration is being requested.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-07 00:09:11 -04:00
glowf1sh
7c42ac4c47
incusd/instance/qemu: Handle missing kvm64
Closes #3603

Signed-off-by: glowf1sh <44566242+glowf1sh@users.noreply.github.com>
2026-07-06 22:33:15 -04:00
Tycho Andersen
563f28dcb8
Merge pull request #3595 from stgraber/oci 2026-07-06 20:55:20 -04:00
Stéphane Graber
45dee44021
Merge pull request #3600 from stgraber/network
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Add support for BGP unnumbered peers
2026-07-06 17:38:49 -04:00
Stéphane Graber
59b54d0134
Merge pull request #3579 from DarkressX/fix-concurrent-image-unpacking
Fix concurrent image unpacking on ceph
2026-07-06 12:57:20 -04:00
Stéphane Graber
ad0653768e
doc/network/bgp: Document BGP unnumbered
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-06 12:55:35 -04:00
Stéphane Graber
281220a512
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-06 12:40:19 -04:00
Stéphane Graber
528393bacf
incusd/network: Add bgp.peers.NAME.interface
Closes #3598

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-06 12:40:05 -04:00
Stéphane Graber
03404119fa
incusd/bgp: Add support for unnumbered peers
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-06 12:39:42 -04:00
Stéphane Graber
c55b3d9545
api: network_bgp_peer_interface
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-06 12:39:41 -04:00
Stéphane Graber
7d65db474c
Merge pull request #3587 from stgraber/ovn
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Use persistent Logical Switch Ports with OVN
2026-07-06 11:41:09 -04:00
Stéphane Graber
629a885372
incusd/forknet: Wait up to 5s for initial DHCP configuration
This keeps forknet around for up to 5s, allowing for an initial round of
address configuration to go through in the background process.

Closes #3594

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-06 09:29:58 -04:00
Stéphane Graber
34763eba16
incusd/network/ovn: Create instance ports on device add
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: Magalu Cloud (https://magalu.cloud)
2026-07-06 09:19:02 -04:00
Stéphane Graber
3f330feb61
incusd/network/ovn: Keep instance ports until device removal
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: Magalu Cloud (https://magalu.cloud)
2026-07-06 09:19:01 -04:00
Stéphane Graber
0c166fb875
incusd/network/ovn: Tweak instance port startup logic
This handles upgrading from the current setup where the port will be
missing on a clean start as well as make Incus tolerant to
missing/deleted switch ports in the future.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: Magalu Cloud (https://magalu.cloud)
2026-07-06 09:19:00 -04:00
Stéphane Graber
006d0cbc6e
incusd/network/ovn: Only consider enabled switch ports as active
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: Magalu Cloud (https://magalu.cloud)
2026-07-06 09:18:59 -04:00
Stéphane Graber
7208e535a4
incusd/network/ovn: Extract instanceDevicePortOpts
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: Magalu Cloud (https://magalu.cloud)
2026-07-06 09:18:58 -04:00
Stéphane Graber
a3df3dafed
incusd/network/ovn: Make SetLogicalSwitchQoSRules replace existing rules
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: Magalu Cloud (https://magalu.cloud)
2026-07-06 09:18:57 -04:00
Stéphane Graber
6433878d0d
incusd/network/ovn: Add GetLogicalSwitchActivePorts
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: Magalu Cloud (https://magalu.cloud)
2026-07-06 09:17:03 -04:00
Stéphane Graber
9be745c341
incusd/network/ovn: Add UpdateLogicalSwitchPortEnabled
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: Magalu Cloud (https://magalu.cloud)
2026-07-06 09:17:02 -04:00
Stéphane Graber
aa8c92944c
incusd/network/ovn: Add Enabled option to OVNSwitchPortOpts
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: Magalu Cloud (https://magalu.cloud)
2026-07-06 09:17:01 -04:00
Stéphane Graber
32e47dd66c
Merge pull request #3586 from stgraber/network
Add support for ipvX.gateway=none for OCI containers
2026-07-06 08:19:50 -04:00
Stéphane Graber
5d85a849f1
Merge pull request #3589 from stgraber/main
incusd/instance/qemu: Use a shared memory backend on all architectures
2026-07-06 08:18:03 -04:00
Stéphane Graber
bee6edb758
Merge pull request #3593 from stgraber/s3
incusd/storage/s3: Add GetBucketVersioning
2026-07-06 08:17:19 -04:00
Leon Schoch
1e68ac069a
incus/server/storage/driver/truenas: Implement stub for IsImageCloneSourceReady function
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-07-06 13:20:35 +02:00
Leon Schoch
d09c0ccfc2
incus/server/storage/driver/lvm: Implement stub for IsImageCloneSourceReady function
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-07-06 13:20:35 +02:00
Leon Schoch
0601938313
incus/server/storage/driver/linstor: Implement stub for IsImageCloneSourceReady function
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-07-06 13:20:35 +02:00
Leon Schoch
f0b2b2cc91
incus/server/storage/driver/common: Implement stub for IsImageCloneSourceReady function
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-07-06 13:20:35 +02:00
Leon Schoch
6dfc157fd0
incus/server/storage/driver/cephfs: Implement stub for IsImageCloneSourceReady function
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-07-06 13:20:35 +02:00
Leon Schoch
bd0cde3c0d
incus/server/storage/driver/backend: Wait, if image is already in the unpacking stage on another cluster member.
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-07-06 12:51:13 +02:00
Stéphane Graber
b32e98aec2
incusd/storage/s3: Add GetBucketVersioning
This adds an empty handler for ?versioning, similar to what we're
currently doing for ACLs.

Closes #3592

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-05 23:55:11 -04:00
Stéphane Graber
ac37be6bc2
Merge pull request #3591 from cmspam/btrfs-compression-optimized-image
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/storage: Honor btrfs.compression on instances from optimized images
2026-07-05 11:22:26 -04:00
Stéphane Graber
e925241869
Merge pull request #3588 from stgraber/hardening
Various bugfixes
2026-07-05 09:24:28 -04:00
cmspam
a07f9326d6 test: Cover btrfs.compression on instances from optimized images
Add coverage to the Btrfs storage driver test: an instance created from
an optimized image with btrfs.compression=none has the compression
property applied instead of inheriting the image volume's.

Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-07-05 17:17:01 +09:00
cmspam
58e7b5cb50 incusd/storage: Honor btrfs.compression on instances from optimized images
An instance created from an optimized image gets its root volume as a
snapshot of the cached image volume, so it inherits that volume's
compression and nodatacow state. The image volume is built from the pool
defaults, not the per-instance btrfs.compression, so setting it only on
the instance was stored but never applied. On a compressed pool a VM
created with btrfs.compression=none therefore did not get nodatacow,
unlike a directly created volume.

Treat btrfs.compression as significant in volumeConfigsMatch, next to the
existing zfs.blocksize case, so an instance whose value differs from the
pool default skips the optimized image and is created directly, where the
compression and nodatacow state is applied.

Closes #3590

Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-07-05 16:28:06 +09:00
Stéphane Graber
d416f3c621
incusd/instance/qemu: Use a shared memory backend on all architectures
This fixes virtiofs on non-x86 as shared memory is required.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-05 01:29:25 -04:00
Stéphane Graber
65025e292d
incusd/db/query: Use hex blob literal in database dumps
This is specifically to handle sqlite BLOB columns where the current
formatting would break backup/restore on binary values.

Note that we do not currently have any BLOB column.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-04 23:12:24 -04:00
Stéphane Graber
4030981f25
incusd/storage/s3: Pin certificate for local S3 bucket transfers
When talking to ourselves over S3, pin the certificate to the expected value.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-04 23:11:56 -04:00
Stéphane Graber
de3d67d43a
incusd/device: Use IsAPIName for device name validation
Incus 7.1 added an extra check for device names through IsAPIName.
The other device name validation was less strict and can therefore be
removed and IsAPIName used everywhere.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-04 23:10:40 -04:00
Stéphane Graber
ee81502afe
incusd: Limit websocket control message size
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-04 23:10:23 -04:00
Stéphane Graber
9c6002e864
incusd: Use constant-time comparison for secrets
Compare cluster join tokens, certificate add tokens, image secrets and
operation secrets in constant time to avoid timing side-channels.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-04 23:10:05 -04:00
Stéphane Graber
0c33952a14
Merge pull request #3582 from masnax/agent
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Fallback to sending agent state data through vserial ringbuffer
2026-07-04 21:07:52 -04:00
Stéphane Graber
ecfec11bca
incusd/instance/qmp: Bump some more timeouts
This moves the main timeout to 500ms and bumps query-migrate all the way
to 5s as depending on the migration stage, it can take a little while to
respond. Also adds query-block-jobs to the block timeout as that can get
jammed on I/O too.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-04 19:02:21 -04:00
Max Asnaashari
ee662bccb9
internal/server/instance/drivers: Treat degraded agent as offline, except when fetching state
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-07-04 18:28:45 -04:00
Max Asnaashari
3a3e791534
internal/server/instance/drivers/qmp: Record instance state retrieved from ringbuffer
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-07-04 18:28:44 -04:00
Max Asnaashari
868e72d301
internal/server/instance/drivers/qmp: Bump ringbuffer size to 16K
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-07-04 18:28:43 -04:00
Max Asnaashari
d5beec5285
cmd/incus-agent: Write state data to ringbuffer if no http server present
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-07-04 18:28:42 -04:00
Max Asnaashari
3fff3dbacd
cmd/incus-agent: Only start agent http server if osLoadModules succeeds
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-07-04 18:28:41 -04:00
Max Asnaashari
e2c50bc368
cmd/incus-agent: Implement Windows osLoadModules to check viosock service
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-07-04 18:28:40 -04:00
Stéphane Graber
5030da4a50
doc: Update configuration option metadata
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-04 16:08:11 -04:00
Stéphane Graber
c0fa4b2e64
incusd: Support "none" gateways in OCI containers
Closes #3585

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-04 16:07:58 -04:00
Stéphane Graber
c9348b64e6
incusd/device: Mention "none" as valid NIC gateway value
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-04 16:07:46 -04:00
Stéphane Graber
047f5295b4
incusd: Switch OCI network configuration to interfaces.json
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-04 16:07:45 -04:00
Stéphane Graber
60d85b3e23
Merge pull request #3583 from 47star/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/device/disk: Use resolved project for Ceph ISO RBD names
2026-07-04 00:13:49 -04:00
DongHoon Yoo
0dada138cb
incusd/device/disk: Use resolved project for Ceph ISO RBD names
Signed-off-by: DongHoon Yoo <yoo@donghoon.net>
2026-07-04 08:32:06 +09:00
Stéphane Graber
9d76df38af
Merge pull request #3581 from abiosoft/doc/incus-conf-docs
doc/incus-cli: reword docs for configuration file path
2026-07-03 19:16:56 -04:00
Abiola Ibrahim
3340de6bcf doc/incus-cli: reword docs for configuration file path
Signed-off-by: Abiola Ibrahim <git@abiosoft.com>
2026-07-03 21:36:59 +01:00
Stéphane Graber
31ae84a888
Merge pull request #3580 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incus: Avoid double-close warning on export and file pull
2026-07-03 12:18:01 -04:00
Stéphane Graber
40c8d60da3
incus: Avoid double-close warning on export and file pull
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-03 11:27:13 -04:00
Leon Schoch
8fc92d229c
incus/server/storage/driver/ceph: Wait, if image is already in the unpacking stage on another cluster member.
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-07-03 14:56:18 +02:00
Stéphane Graber
a955bfbc27
Merge pull request #3577 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/instance/qemu/qmp: Bump timeout for slow synchronous commands
2026-07-02 15:26:11 -04:00
Stéphane Graber
4315a6470c
incusd/instance/qemu/qmp: Bump timeout for slow synchronous commands
This now covers additional I/O commands and also adds an extra long
timeout for commands that either touch I/O flush or handle VFIO
operations.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-01 23:28:51 -04:00
Stéphane Graber
cdd921604a
Merge pull request #3576 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/instance/qemu/qmp: Bump timeout for block commands
2026-07-01 11:24:28 -04:00
Stéphane Graber
9e03c10694
Merge pull request #3575 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-07-01 10:24:49 -04:00
Stéphane Graber
6daacfba22
incusd/instance/qemu/qmp: Bump timeout for block commands
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-07-01 10:23:39 -04:00
KATOH Yasufumi
629e0c97a8
Translated using Weblate (Japanese)
Currently translated at 72.2% (1309 of 1812 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-07-01 16:01:20 +02:00
Hiroaki Nakamura
ba552c54cb
Translated using Weblate (Japanese)
Currently translated at 72.2% (1309 of 1812 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-07-01 16:01:19 +02:00
KATOH Yasufumi
acb7b35809
Translated using Weblate (Japanese)
Currently translated at 72.2% (1309 of 1812 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-07-01 16:01:18 +02:00
Stéphane Graber
0f99bd717b
Merge pull request #3573 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/operations: Fix nil deref race in Cancel
2026-06-30 19:33:52 -04:00
Stéphane Graber
faff1e1604
Merge pull request #3574 from masnax/uuid
cmd/generate-database/db: Manually specify uuid package
2026-06-30 18:35:16 -04:00
Max Asnaashari
2954ccafa9
cmd/generate-database/db: Manually specify uuid package
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-06-30 15:13:02 -07:00
Stéphane Graber
661d3c36df
incusd/operations: Fix nil deref race in Cancel
This fixes a race condition where an operation could complete at the
same time as it's being canceled, causing Incus to call a nil cancel
handler.

A last minute check is now done to confirm the operation still has a
cancel handler and a reference on the handler is taken to avoid calling
a nil function.

This doesn't fully eliminate the race. It's still technically possible
for an instance to both complete and get canceled at the same time, but
this narrows the race significantly and eliminates the actual nil
pointer deref.

Closes #3572

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-30 16:09:43 -04:00
Stéphane Graber
708f897921
Merge pull request #3568 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/devices: Allow /32 and /128 for OCI addresses
2026-06-30 11:59:53 -04:00
Stéphane Graber
d0e60b2735
Merge pull request #3570 from stgraber/fixes
Various bugfixes
2026-06-30 11:01:14 -04:00
Stéphane Graber
6eb95b4dae
incusd/devices: Allow /32 and /128 for OCI addresses
It's a valid configuration to set ipv4.address to a /32 or ipv6.address
to a /128 as LXC will make the gateway as an on-link gateway.

This is particularly useful when dealing with public addresses.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-30 10:13:01 -04:00
Stéphane Graber
bfece20827
incusd/device: Reset VM disk I/O limits on unset
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-06-30 09:36:33 -04:00
Stéphane Graber
7a6df891b5
incus: Avoid double-close warning on volume/bucket/instance import
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-30 09:34:46 -04:00
Stéphane Graber
31de4be43c
shared/logger: Add WarnOnErrorExcept helper
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-30 09:34:46 -04:00
Stéphane Graber
975d986931
Merge pull request #3566 from lxc/dependabot/github_actions/actions/download-artifact-8
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
build(deps): bump actions/download-artifact from 4 to 8
2026-06-29 16:23:24 -04:00
Stéphane Graber
9dbad6afc8
Merge pull request #3567 from lxc/dependabot/github_actions/actions/upload-artifact-7
build(deps): bump actions/upload-artifact from 4 to 7
2026-06-29 16:23:11 -04:00
dependabot[bot]
8cec07e90b
build(deps): bump actions/upload-artifact from 4 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-29 19:12:45 +00:00
dependabot[bot]
7892301daf
build(deps): bump actions/download-artifact from 4 to 8
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v4...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-29 19:12:38 +00:00
Stéphane Graber
7bb4eec790
Merge pull request #3562 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
github: Add a build workflow
2026-06-28 15:41:14 -04:00
Stéphane Graber
7040701d84
github: Add a build workflow
This builds "incusd" and "incus" on a self-hosted Debian 13 builder.

The reason for producing this artifact is so we can then pull it on
IncusOS test systems. The goal is to slowly refresh our physical testing
lab from Ubuntu deployed by MAAS to regular IncusOS boxes that can be
factory reset and the new version side-loaded onto them for testing.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-28 14:58:47 -04:00
Stéphane Graber
b3696ec204
Merge pull request #3559 from stgraber/fixes
Add timeout for QMP commands
2026-06-28 14:15:33 -04:00
Stéphane Graber
cce895d44c
incusd/instance/qemu/qmp: Add per-command timeout
Closes #3558

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-28 12:39:06 -04:00
Stéphane Graber
9ad1a55d69
incusd/instance/qemu/qmp: Run guest memory dump detached
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-28 12:39:05 -04:00
Stéphane Graber
2ee187f542
Merge pull request #3551 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
github: Build Windows and MacOS native installers.
2026-06-27 16:43:11 -04:00
Stéphane Graber
ea32180865
Merge pull request #3550 from stgraber/cli
incus/move: Apply --storage pool to dependent disks
2026-06-27 16:43:02 -04:00
Stéphane Graber
655a03b0ec
Merge pull request #3555 from stgraber/fixes
Various bugfixes
2026-06-27 15:55:23 -04:00
Stéphane Graber
713a400c97
incusd/device: Allow static CIDR address on unmanaged bridge
The OCI static in-instance address is configured inside the container
rather than through DHCP, so it doesn't require a managed parent.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-27 12:34:53 -04:00
Stéphane Graber
c97d867faa
incusd/firewall: Fix double Wait in nftParseRuleset
Closes #3553

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-27 12:34:52 -04:00
Stéphane Graber
b0e80e429f
Merge pull request #3552 from gagath/doc-config-set-deprecated-syntax
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
doc: fix `config set` deprectation warning
2026-06-27 11:10:54 -04:00
Stéphane Graber
1ebcefe5c0
Merge pull request #3554 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-06-27 11:04:14 -04:00
KATOH Yasufumi
df357dcaa9
Translated using Weblate (Japanese)
Currently translated at 71.9% (1303 of 1812 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-06-27 16:01:21 +02:00
Agathe Porte
f7f0a7aa18 doc: fix config set deprectation warning
These changes fixes the following warning that started to appear with
Incus 7.x:

	Warning: the “<key> <value>” syntax is deprecated;
	please switch to the “<key>=<value>” syntax

The new syntax was tested on the 6.x release available in Debian trixie
and was found to work, so I think this is a reasonable change to make.

Signed-off-by: Agathe Porte <989521+gagath@users.noreply.github.com>
2026-06-27 12:06:03 +02:00
Stéphane Graber
459e53b5c9
github: Build Windows and MacOS native installers.
Build native .msi and .pkg packages during the release workflow.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-27 01:39:19 -04:00
Stéphane Graber
30c603507e
incus/move: Apply --storage pool to dependent disks
Closes #3549

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-26 22:29:59 -04:00
Stéphane Graber
3834eb2391
Merge pull request #3548 from Hye-Dev/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Fix typo in documented behavior in setting `restricted.containers.privilege` to `isolated`
2026-06-26 18:52:08 -04:00
Joseph Maldjian
388c9e6cdb api: regenerate /1.0/metadata/configuration options
Signed-off-by: Joseph Maldjian <joseph.maldjian@hyecompany.com>
2026-06-26 16:19:58 -05:00
Joseph Maldjian
10a2343604 doc: regenerate configurable options index
Signed-off-by: Joseph Maldjian <joseph.maldjian@hyecompany.com>
2026-06-26 16:19:41 -05:00
Joseph Maldjian
c9a2d2ee52 cmd/incusd: isolated on restricted.containers.privilege prevents setting security.privileged to true
Signed-off-by: Joseph Maldjian <joseph.maldjian@hyecompany.com>
2026-06-26 16:18:23 -05:00
Stéphane Graber
c67888b630
Release Incus 7.2
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 21:53:12 -04:00
Stéphane Graber
e4b80ed902
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 21:27:08 -04:00
Stéphane Graber
58d7f1d644
incus: Fix gofumpt
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 21:26:44 -04:00
Stéphane Graber
c7ea56cd79
incusd/storage: Fix storage patches
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 21:26:26 -04:00
Stéphane Graber
ba0b00a9d6
Merge pull request #3545 from Hye-Dev/main
Fix typo in documented behavior in setting `restricted.containers.privilege` to `isolated`
2026-06-25 21:06:40 -04:00
Stéphane Graber
164d54f489
Merge pull request #3544 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-06-25 21:05:23 -04:00
Américo Monteiro
523cccef67
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1812 of 1812 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-06-26 03:04:43 +02:00
Stéphane Graber
9ba08e57f0
Merge pull request #3546 from stgraber/main
incusd/storage: Recreate missing snapshot config subvolume
2026-06-25 21:04:34 -04:00
Serge Hallyn
09b784b312
Merge pull request #3542 from stgraber/security
Security fixes
2026-06-25 19:25:13 -05:00
Stéphane Graber
baa26a62e0
incusd/storage: Recreate missing snapshot config subvolume
We've seen cases where some subvolumes may be missing, causing a variety
of failures including preventing deletion. Add logic to create any
missing subvolume in that situation.

Closes #3543

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 20:01:47 -04:00
Stéphane Graber
47272e9853
Merge pull request #3216 from mschiff/main
Improve and extend SELinux support
2026-06-25 19:33:52 -04:00
Stéphane Graber
a4b0045520
Merge pull request #3499 from augustodsgv/incus/add-cli-default-command
incus: Add default command
2026-06-25 19:29:57 -04:00
Joseph Maldjian
722b77f8d2 api: regenerate /1.0/metadata/configuration options
Signed-off-by: Joseph Maldjian <joseph.maldjian@hyecompany.com>
2026-06-25 18:10:18 -05:00
Joseph Maldjian
c15f0b172c doc: regenerate configurable options index
Signed-off-by: Joseph Maldjian <joseph.maldjian@hyecompany.com>
2026-06-25 18:07:54 -05:00
Joseph Maldjian
a9dbaefeaa cmd/incusd: isolated on restricted.containers.privilege prevents setting security.idmap.isolated to false
Signed-off-by: Joseph Maldjian <joseph.maldjian@hyecompany.com>
2026-06-25 18:03:02 -05:00
augustodsgv
884e3b580e
i18n: Update translation templates
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-25 18:31:44 -04:00
augustodsgv
77b61bf9a9
incus/default: Add incus default commands
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-25 18:31:42 -04:00
Stéphane Graber
1e3ffc53a1
incusd/instances: Check source instance access on copy
This addresses CVE-2026-55622

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 18:19:51 -04:00
Stéphane Graber
2e01078366
incusd/storage: Check source volume access on copy
This addresses CVE-2026-55621

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 18:19:50 -04:00
Stéphane Graber
46d6ef2321
incusd/images: Validate fingerprint on direct download
This addresses CVE-2026-48769

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 18:19:49 -04:00
Stéphane Graber
873a032a46
shared/validate: Reject compression algorithm arguments
This addresses CVE-2026-48755

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 18:19:48 -04:00
Stéphane Graber
cbefa31ae0
incusd/instance: Confine template access to instance root
This addresses CVE-2026-48752

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 18:19:47 -04:00
Stéphane Graber
19e44c5a4d
Update gomod
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 18:17:25 -04:00
Marc Schiffbauer
bdfa9832bd
doc: Update config
Signed-off-by: Marc Schiffbauer <mschiff@gentoo.org>
2026-06-25 18:17:24 -04:00
Marc Schiffbauer
f9020dd4b9
internal/server/instance/drivers: Add SELinux support
Signed-off-by: Marc Schiffbauer <mschiff@gentoo.org>
2026-06-25 18:17:23 -04:00
Marc Schiffbauer
fcfa41b976
incusd: Add SELinux exec context to forkqemu
Signed-off-by: Marc Schiffbauer <mschiff@gentoo.org>
2026-06-25 18:17:22 -04:00
Marc Schiffbauer
f4a47f992e
incusd: Rename forkstart to forklxc and forklimits to forkqemu
Signed-off-by: Marc Schiffbauer <mschiff@gentoo.org>
2026-06-25 18:17:22 -04:00
Marc Schiffbauer
dafc07e592
internal/server/project: Add SELinux config permissions
Signed-off-by: Marc Schiffbauer <mschiff@gentoo.org>
2026-06-25 18:17:21 -04:00
Marc Schiffbauer
c1b116ebd0
internal/instance: Add SELinux configuration keys
Signed-off-by: Marc Schiffbauer <mschiff@gentoo.org>
2026-06-25 18:17:20 -04:00
Marc Schiffbauer
4873408d00
shared/validate: Add SELinux validation functions
Signed-off-by: Marc Schiffbauer <mschiff@gentoo.org>
2026-06-25 18:17:19 -04:00
Marc Schiffbauer
09d6516e98
internal/server/selinux: Add SELinux package
Signed-off-by: Marc Schiffbauer <mschiff@gentoo.org>
2026-06-25 18:17:18 -04:00
Marc Schiffbauer
87aaa4cb21
internal/server/sys: Extend SELinux context detection
Signed-off-by: Marc Schiffbauer <mschiff@gentoo.org>
2026-06-25 18:17:17 -04:00
Stéphane Graber
6b5cff50d3
api: instance_selinux
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 18:17:16 -04:00
Stéphane Graber
3fe3bc9989
incusd/instance: Enforce project restrictions on snapshot restore
This addresses CVE-2026-48751

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 18:06:14 -04:00
Stéphane Graber
e109655d64
incusd/exec: Reject exec-output symlink
This addresses CVE-2026-48750

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 18:06:13 -04:00
Stéphane Graber
7e58425ca7
incusd: Reject rootfs symlink for instances
This addresses CVE-2026-48749

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 18:06:12 -04:00
Stéphane Graber
39fc84139d
Merge pull request #3528 from stgraber/network
Use instance IP detection mechanism for proxy devices
2026-06-25 18:03:06 -04:00
Stéphane Graber
298faaa80c
incusd: Rename neighbour to neighbor for US english
We had a weird mix of UK and US spelling which was making it hard to
grep through the code. Incus' standard spelling for documentation and
user facing messages is US English, so let's standardize on neighbor.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 17:29:38 -04:00
Stéphane Graber
c3530e58aa
tests: Add proxy NAT wildcard and dynamic address tests
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 17:21:42 -04:00
Stéphane Graber
1876c8738d
doc: Document proxy NAT dynamic addresses
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 17:21:41 -04:00
Stéphane Graber
add631b836
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 17:21:40 -04:00
Stéphane Graber
7ad85516e2
incusd/device: Support dynamic addresses in proxy NAT mode
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 17:21:39 -04:00
Stéphane Graber
dcf2c22ddb
incusd/firewall: Allow wildcard listen address in proxy NAT
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 17:21:38 -04:00
Stéphane Graber
aeaeab9cab
incusd/device: Add shared instance neighbour scan helper
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 17:21:37 -04:00
Stéphane Graber
6e3aeb4f8e
incusd/network: Add GetNeighbourAddresses helper
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 17:21:37 -04:00
Serge Hallyn
914f01a952
Merge pull request #3533 from stgraber/infiniband
Configurable port_guid/node_guid for SR-IOV infiniband
2026-06-25 15:48:17 -05:00
Stéphane Graber
adf81e5a6e
Merge pull request #3540 from cmspam/btrfs-compression-fixes
incusd/storage/drivers: Fix btrfs.compression=none and pool-wide default
2026-06-25 16:32:04 -04:00
Serge Hallyn
6b91909ac4
Merge pull request #3530 from stgraber/storage
incusd/storage/zfs: Batch snapshot GUID lookups
2026-06-25 15:28:07 -05:00
Serge Hallyn
412634768d
Merge pull request #3538 from stgraber/sev
incusd: Skip NVRAM setup for unified AMD SEV firmware
2026-06-25 15:21:11 -05:00
cmspam
56c1a89a84
test: Cover btrfs.compression nodatacow and pool-wide default
Add coverage to the Btrfs storage driver test: a block volume created
with btrfs.compression=none ends up with nodatacow set, a real algorithm
compresses instead, and btrfs.compression is accepted as a pool-wide
volume default.

Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-06-25 14:59:58 -04:00
cmspam
c0f6a5d295
incusd/storage/drivers: Allow btrfs.compression as a pool-wide default
The Btrfs pool validator passed nil for its volume rules, so no
driver-specific volume option was accepted with the volume.* prefix.
volume.btrfs.compression was therefore rejected as an invalid pool
option, even though it is a valid per-volume key.

Factor the rule into commonVolumeRules() (as the lvm driver does) and
pass it to validatePool, so volume.btrfs.compression works as a
pool-wide default for all values.

Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-06-25 14:59:57 -04:00
cmspam
cfaedab426
incusd/storage/drivers: Apply nodatacow directly for btrfs.compression=none
For block volumes, setting btrfs.compression=none ran "btrfs property
set ... compression none", which sets the nocompress inode flag. The
kernel rejects "chattr +C" on an inode that carries a compression flag
(compress or nocompress), so the nodatacow step then failed and aborted
volume creation.

Apply nodatacow directly for none instead: skip the property on block
volumes and clear any inherited compression flag before the chattr +C,
so none disables compression and enables nodatacow as intended,
including on a pool that is otherwise compressed.

Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-06-25 14:59:56 -04:00
Stéphane Graber
35ad321a39
Merge pull request #3529 from masnax/osinfo
Add version specific QEMU args according to `image.os` and `image.release`
2026-06-25 14:48:25 -04:00
Stéphane Graber
125e2c055d
Merge pull request #3539 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Various bugfixes
2026-06-25 14:31:57 -04:00
Max Asnaashari
a02f89b3af
internal/server/instance/drivers: Add OS version specific QEMU options
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-06-25 10:23:29 -07:00
Max Asnaashari
9924affc74
internal/server/instance/drivers: Update GuestOS usages
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-06-25 10:21:48 -07:00
Max Asnaashari
aa6c27c959
internal/server/instance/drivers: Use DetermineOS and osinfo.OSType for instance GuestOS value
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-06-25 10:21:48 -07:00
Max Asnaashari
08ff94784e
shared/osinfo: Add osinfo package
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-06-25 10:21:48 -07:00
Stéphane Graber
f936c4c2ef
Merge pull request #3534 from stgraber/cli
Use OS-specific CLI paths
2026-06-25 13:01:19 -04:00
Stéphane Graber
3e616f852d
Merge pull request #3537 from stgraber/lvm
Fix missing QCOW2 overhead on LVM cluster LVs
2026-06-25 12:23:49 -04:00
Stéphane Graber
779e5d094a
incusd/metadata: Update generated metadata
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 11:54:12 -04:00
Stéphane Graber
cb620db72a
incusd/network/bridge: Clarify nat.order has no effect on nftables
Closes #3512

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 11:54:11 -04:00
Stéphane Graber
54446ab582
incusd/device/disk: Reject pool property with special sources
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 11:54:10 -04:00
Stéphane Graber
9a1fb4ff56
incus: Use platform-specific cache directory
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 11:28:06 -04:00
Stéphane Graber
f843eaf2ae
shared/cliconfig: Use platform-specific config directory
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 11:28:05 -04:00
Stéphane Graber
632c4ff5b1
incusd: Skip NVRAM setup for unified AMD SEV firmware
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 11:25:34 -04:00
Stéphane Graber
369f6c284a
Merge pull request #3531 from stgraber/main
incusd/endpoints: Fix infinite loop in network error log writer
2026-06-25 11:23:48 -04:00
Stéphane Graber
e1d9553ea6
incusd/storage: Add patch to fix existing lvmcluster qcow2 volumes
Retroactively grow the backing logical volume of existing lvmcluster qcow2
block volumes to include the qcow2 metadata overhead, so a fully-allocated
image no longer overflows the volume.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 11:02:26 -04:00
Stéphane Graber
365f38048b
incusd/storage/lvm: Account for qcow2 overhead in volume sizing
On lvmcluster, block volumes are stored as a qcow2 image written directly
onto the backing logical volume. The LV was sized to the qcow2 virtual size,
leaving no room for qcow2 metadata. A fully-allocated image (e.g. after a full
backup restore) then overflows the LV, causing QEMU to report ENOSPC.

Size the backing LV to the qcow2 fully-allocated size while keeping the qcow2
virtual size at the requested size.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 11:02:26 -04:00
Stéphane Graber
c203a79b53
doc: Add GUID to wordlist
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 03:06:55 -04:00
Stéphane Graber
6cedfdb8f6
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 02:55:28 -04:00
Anthony Rojas
c612ba2784
incusd/device/infiniband: Add configurable port_guid/node_guid for SR-IOV
Adds node_guid and port_guid configuration keys to infiniband sriov
devices. When set, the GUIDs of the virtual function are applied through
netlink when the instance starts.

Mainline only exposes the administratively assigned GUIDs through
netlink, with no way to read back the original values, so on stop the
configured GUIDs are simply cleared (reset to kernel assigned) rather
than restored to a previous value.

Closes #962

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 02:55:27 -04:00
Stéphane Graber
4a445fe000
incusd/ip: Add SetVfNodeGUID/SetVfPortGUID for SR-IOV
Adds helpers to set the Infiniband node and port GUID of an SR-IOV
virtual function through netlink.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 02:55:26 -04:00
Stéphane Graber
1d5a20eb49
api: infiniband_sriov_guid
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 02:55:25 -04:00
Stéphane Graber
05113883e2
incusd/endpoints: Fix infinite loop in network error log writer
A log line starting with 'h' but not 'http:', for example 'http2:' would
cause an infinite loop.

Closes #3494

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-25 01:49:32 -04:00
Stéphane Graber
7c17078127
incusd/storage/zfs: Batch snapshot GUID lookups
This should cut down on individual ZFS calls during refresh migration,
reducing the changes of overrunning the 2min timeout.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-06-25 01:43:54 -04:00
Tycho Andersen
fb1c4dc269
Merge pull request #3527 from stgraber/main
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
2026-06-24 21:07:39 -04:00
Stéphane Graber
3131f78c76
Merge pull request #3522 from stgraber/oci
Allow static network configuration for OCI containers
2026-06-24 20:01:09 -04:00
Stéphane Graber
1fd7ce2e44
incusd: Skip br_netfilter proxy/forward handling on IncusOS
IncusOS doesn't load br_netfilter as it breaks routed proxy and network
forward traffic. Skip the related hairpin handling and warning there.

Closes #3526

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-24 19:28:11 -04:00
Stéphane Graber
7591534280
github: Block LLM/AI attribution in commit messages
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-24 19:28:10 -04:00
Stéphane Graber
43fbcd6f44
incus/console: Ignore not-exist error when removing temporary socket
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-24 19:28:09 -04:00
Stéphane Graber
402269ee44
incus/vm: Skip vmcoreinfo device for SEV guests
The qemu_vmcoreinfo device is incompatible with AMD SEV memory
encryption and prevents the guest from starting.

Closes #3519

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-24 19:28:08 -04:00
Stéphane Graber
402a6ab58e
incus/vm: Select OVMF.amdsev.fd firmware for SEV guests
AMD SEV requires a SEV-capable firmware build; the regular OVMF builds
don't enable SEV support. Select OVMF.amdsev.fd when security.sev is
enabled and the firmware is available.

Closes #3520

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-24 19:28:07 -04:00
Stéphane Graber
7ad40f3fb3
incus/events: Forward info-level log events across the cluster
Logging events injected from other cluster members were dropped at
info level unless the receiving daemon ran with --verbose, so entries
such as placement scriptlet logs only showed up on the member that
processed the request. Only filter forwarded debug events now.

Closes #3517

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-24 19:28:06 -04:00
Stéphane Graber
bf03901d99
incusd/images: Tolerate concurrent image record creation in a cluster
When multiple cluster members create instances from the same uncached
image, the slower members would fail with a UNIQUE constraint error when
inserting the shared image record. Detect that case and reuse the record
created by the other member, registering the local member with it.

Closes #3515

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-24 19:28:05 -04:00
Stéphane Graber
304b372cad
incus/server/device: Persist NIC host_name before creating interface
Closes #3521

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-24 19:28:04 -04:00
Stéphane Graber
4bd44d2a0c
Merge pull request #3523 from bensmrs/btrfs
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/storage/btrfs: Fix daemon dir prefix check
2026-06-24 09:55:10 -04:00
Stéphane Graber
62943f70a3
Merge pull request #3524 from bensmrs/yaml
doc/cloud-init: Change YAML spec domain
2026-06-24 09:54:15 -04:00
Benjamin Somers
c0b739f349 doc/cloud-init: Change YAML spec domain
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-06-24 13:43:08 +00:00
Benjamin Somers
3261a9ddda incusd/storage/btrfs: Fix daemon dir prefix check
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-06-24 13:24:48 +00:00
Stéphane Graber
3a7b7cfbde
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-23 21:54:49 -04:00
Stéphane Graber
bc40c7b2b3
incusd/main_forknet: Handle static interfaces and DNS in forknet dhcp
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-23 21:54:48 -04:00
Stéphane Graber
231a71d8d1
incusd/instance/lxc: Generate OCI container network files
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-23 21:54:47 -04:00
Stéphane Graber
d9d69e3e98
incusd/device: Apply OCI static network configuration on NICs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-23 21:54:46 -04:00
Stéphane Graber
940ef7da08
internal/instance: Add OCI DNS configuration keys
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-23 21:54:45 -04:00
Stéphane Graber
eed3d63d41
internal/instance: Simplify OCI key descriptions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-23 21:54:45 -04:00
Stéphane Graber
c1aa3a4335
api: Add oci_network_config extension
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-23 21:54:44 -04:00
Stéphane Graber
d34136fbb9
incusd/instance/lxc: Restrict OCI configuration keys to OCI containers
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-23 21:54:43 -04:00
Stéphane Graber
3e03a02664
Merge pull request #3518 from lxc/dependabot/github_actions/actions/checkout-7
Some checks failed
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Has been cancelled
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / Client (oldstable, macos-latest) (push) Has been cancelled
Tests / Client (oldstable, ubuntu-latest) (push) Has been cancelled
Tests / Client (oldstable, windows-latest) (push) Has been cancelled
Tests / Client (stable, macos-latest) (push) Has been cancelled
Tests / Client (stable, ubuntu-latest) (push) Has been cancelled
Tests / Client (stable, windows-latest) (push) Has been cancelled
Tests / Documentation (push) Has been cancelled
build(deps): bump actions/checkout from 6 to 7
2026-06-22 15:42:29 -04:00
dependabot[bot]
f763ca2d23
build(deps): bump actions/checkout from 6 to 7
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-22 19:12:53 +00:00
Stéphane Graber
8b84022b5a
Merge pull request #3516 from DarkressX/fix-race-that-attempt-to-grow-ceph-image
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incus/server/storage/driver/ceph: Don't return error if image size is larger than cached image size
2026-06-22 12:17:56 -04:00
Stéphane Graber
126ca8f6ff
Merge pull request #3468 from germag/virtiofsd-acl-neg-modes
incusd/device/disk: Use virtiofsd --posix-acl=auto if supported
2026-06-22 12:17:18 -04:00
Leon Schoch
36a63d2013
incus/server/storage/driver/ceph: Don't return error if image size is larger than cached image size
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-06-22 14:59:05 +02:00
Stéphane Graber
4a4a20835c
Merge pull request #3511 from cmspam/btrfs-nocow-option
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
incusd/storage/drivers: Add "btrfs.compression" volume option
2026-06-22 01:01:45 -04:00
Stéphane Graber
7c2ab32994
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-22 00:30:27 -04:00
Stéphane Graber
c2f8ec57a8
Merge pull request #3501 from fwerkor/fix-zfs-encrypted-copy-snapshots
incusd/storage/zfs: Avoid raw send for snapshot copies
2026-06-22 00:06:07 -04:00
cmspam
8bd97a03f5 doc: Update config
Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-06-19 12:34:07 +09:00
cmspam
af5b21e343 doc: Document the "btrfs.compression" volume option
Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-06-19 12:34:07 +09:00
cmspam
dd230f28dd incusd/storage/drivers: Add "btrfs.compression" volume option
This maps to the Btrfs compression property on the volume and takes the
same values (zstd, lzo, zlib, none). An empty value keeps the current
behavior.

Setting it to none turns off compression for the volume, which also lets
nodatacow be applied on a pool that is otherwise compressed, since the
two are mutually exclusive on Btrfs.

It is a volume option, so volume.btrfs.compression=none can be used to
apply it across a whole pool.

Closes #3510

Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-06-19 12:34:07 +09:00
cmspam
51f38442ba api: Add storage_btrfs_compression extension
Signed-off-by: cmspam <2881049+cmspam@users.noreply.github.com>
2026-06-19 12:34:07 +09:00
Benjamin Somers
92b0cbbc57
Merge pull request #3505 from stgraber/main
Some checks failed
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Has been cancelled
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Has been cancelled
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Has been cancelled
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Has been cancelled
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Has been cancelled
Tests / Client (oldstable, macos-latest) (push) Has been cancelled
Tests / Client (oldstable, ubuntu-latest) (push) Has been cancelled
Tests / Client (oldstable, windows-latest) (push) Has been cancelled
Tests / Client (stable, macos-latest) (push) Has been cancelled
Tests / Client (stable, ubuntu-latest) (push) Has been cancelled
Tests / Client (stable, windows-latest) (push) Has been cancelled
Tests / Documentation (push) Has been cancelled
Authentication / connection bugfixes
2026-06-18 12:30:00 +02:00
Stéphane Graber
613bcc9c73
Merge pull request #3506 from stgraber/llm
Some checks are pending
Tests / System (dir, stable, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, stable, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, cluster) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_container) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_core) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_network) (push) Waiting to run
Tests / System (dir, tip, ubuntu-24.04-arm, standalone_storage) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (linstor, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (lvm, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (random, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, cluster) (push) Waiting to run
Tests / System (zfs, stable, ubuntu-24.04, standalone_storage) (push) Waiting to run
Tests / Client (oldstable, macos-latest) (push) Waiting to run
Tests / Client (oldstable, ubuntu-latest) (push) Waiting to run
Tests / Client (oldstable, windows-latest) (push) Waiting to run
Tests / Client (stable, macos-latest) (push) Waiting to run
Tests / Client (stable, ubuntu-latest) (push) Waiting to run
Tests / Client (stable, windows-latest) (push) Waiting to run
Tests / Documentation (push) Waiting to run
Update AI/LLM policy
2026-06-17 16:37:11 -04:00
Stéphane Graber
efa1778d56
incusd/util: Fix JWT validation
The current validation logic assumed that re-serializing the data would
yield an identical raw value, but that would then fail if the client
used a different field ordering in the token.

Instead, just manually re-assemble the token prior to validation.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-17 16:32:59 -04:00
Stéphane Graber
1bba2cda95
client: Default to port 443 for raw connections
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-17 16:31:46 -04:00
Stéphane Graber
d74f65dd1b
Merge pull request #3504 from DarkressX/fix-allow-cached-shared-image-to-grow
Fix allow cached shared image to grow
2026-06-16 21:53:19 -04:00
Stéphane Graber
605b916286
Merge pull request #3509 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-06-16 21:05:44 -04:00
Kazantsev Mikhail
6a332f3011
Translated using Weblate (Russian)
Currently translated at 100.0% (1803 of 1803 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-17 03:01:19 +02:00
Américo Monteiro
22644da0b7
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1803 of 1803 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-06-17 03:01:17 +02:00
Kazantsev Mikhail
a1ed04d328
Translated using Weblate (Swedish)
Currently translated at 100.0% (1803 of 1803 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-17 03:01:16 +02:00
Stéphane Graber
5d9e9468c8
doc: Add GPG to wordlist
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-16 16:19:29 -04:00
Stéphane Graber
54bae0e4d4
doc: Update AI/LLM policy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-16 16:19:28 -04:00
Leon Schoch
9f283c1a05
tests: Add more tests for ConfigSizeFromSource
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-06-16 10:03:22 +02:00
Leon Schoch
fdbcacf98e
incus/server/storage/driver/volume: Ensure cached image can grow to needed size and not be restricted by pool size config.
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-06-16 10:02:30 +02:00
Yuhang Cao
109d89ff43 tests: cover encrypted ZFS snapshot copies
Signed-off-by: Yuhang Cao <caoyuhang@fwerkor.com>
2026-06-16 00:52:50 +00:00
Yuhang Cao
baf97937b5 storage/zfs: avoid raw sends for encrypted snapshot copies
Signed-off-by: Yuhang Cao <caoyuhang@fwerkor.com>
2026-06-16 00:52:50 +00:00
Stéphane Graber
dd946fa73b
Merge pull request #3503 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-06-15 20:00:21 -04:00
Kazantsev Mikhail
417f1c468a
Translated using Weblate (Indonesian)
Currently translated at 9.3% (169 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-16 01:53:08 +02:00
Andika Triwidada
3333e9f43a
Translated using Weblate (Indonesian)
Currently translated at 9.3% (169 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-06-16 01:53:07 +02:00
Anonymous
6085ad74e9
Translated using Weblate (Indonesian)
Currently translated at 9.3% (169 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:53:03 +02:00
pesder
3ac877d679
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-06-16 01:52:29 +02:00
Anonymous
40bbe95721
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:52:28 +02:00
Hiroaki Nakamura
784741d196
Translated using Weblate (Japanese)
Currently translated at 71.8% (1292 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-06-16 01:51:53 +02:00
KATOH Yasufumi
769f5d41c9
Translated using Weblate (Japanese)
Currently translated at 71.8% (1292 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-06-16 01:51:51 +02:00
Kazantsev Mikhail
a81117a26a
Translated using Weblate (Japanese)
Currently translated at 71.8% (1292 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-16 01:51:42 +02:00
Anonymous
07ecb3e238
Translated using Weblate (Japanese)
Currently translated at 71.8% (1292 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:51:40 +02:00
Anonymous
eecf5cc927
Translated using Weblate (Russian)
Currently translated at 99.8% (1796 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:51:10 +02:00
Kazantsev Mikhail
6572fc201a
Translated using Weblate (Russian)
Currently translated at 99.8% (1796 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-16 01:51:09 +02:00
Alberto Donato
3ba2f42193
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-06-16 01:50:32 +02:00
Anonymous
d405062d43
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:50:32 +02:00
Anonymous
9abe23c067
Translated using Weblate (Swedish)
Currently translated at 99.8% (1796 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:49:55 +02:00
Kazantsev Mikhail
3787e8ef4b
Translated using Weblate (Swedish)
Currently translated at 99.8% (1796 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-16 01:49:54 +02:00
Daniel Nylander
16f78f4713
Translated using Weblate (Swedish)
Currently translated at 99.8% (1796 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-06-16 01:49:49 +02:00
Dklfajsjfi49wefklsf32
843f68beb7
Translated using Weblate (Dutch)
Currently translated at 10.7% (194 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-06-16 01:49:19 +02:00
Anonymous
aedb08158b
Translated using Weblate (Dutch)
Currently translated at 10.7% (194 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:49:15 +02:00
Daniel Dybing
b091821e8e
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-06-16 01:48:42 +02:00
Anonymous
be68cd81be
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:48:41 +02:00
Kazantsev Mikhail
3832962995
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-16 01:48:06 +02:00
Paulo Coghi
5049042b1a
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-06-16 01:48:05 +02:00
Anonymous
8b2a668738
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:48:04 +02:00
meipeter
5f4832444f
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.9% (701 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-06-16 01:47:29 +02:00
daoge
fce2de03aa
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.9% (701 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-06-16 01:47:29 +02:00
Kwok Guy
f42d9f7416
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.9% (701 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-06-16 01:47:28 +02:00
yooadmin
e1a379bbc3
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.9% (701 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-06-16 01:47:27 +02:00
Sakiko
506ee6dd17
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.9% (701 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-06-16 01:47:26 +02:00
Loge X
c26cb8660b
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.9% (701 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-06-16 01:47:25 +02:00
Anonymous
beb4f6950c
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.9% (701 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:47:15 +02:00
IO01
670b2b7c2b
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 38.9% (701 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-06-16 01:46:55 +02:00
Anonymous
f2ff42fda8
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:46:50 +02:00
Varlorg
c72a8832bf
Translated using Weblate (French)
Currently translated at 76.0% (1369 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-06-16 01:46:15 +02:00
Steeve Droz
8207a2bf79
Translated using Weblate (French)
Currently translated at 76.0% (1369 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-06-16 01:46:15 +02:00
Laterria.Severino
c7866097df
Translated using Weblate (French)
Currently translated at 76.0% (1369 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-06-16 01:46:14 +02:00
smCloudInTheSky
9d1c2305f9
Translated using Weblate (French)
Currently translated at 76.0% (1369 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-06-16 01:46:13 +02:00
Kazantsev Mikhail
eeb9082193
Translated using Weblate (French)
Currently translated at 76.0% (1369 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-16 01:46:11 +02:00
Corabel Bertolini
5309c509d6
Translated using Weblate (French)
Currently translated at 76.0% (1369 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-06-16 01:46:10 +02:00
Anonymous
02dd1c68a4
Translated using Weblate (French)
Currently translated at 76.0% (1369 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:46:09 +02:00
Benjamin Somers
2cd7a91ae6
Translated using Weblate (French)
Currently translated at 76.0% (1369 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-06-16 01:45:59 +02:00
montag451
7d22df5952
Translated using Weblate (French)
Currently translated at 76.0% (1369 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-06-16 01:45:43 +02:00
Kazantsev Mikhail
48b1b58a26
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-16 01:45:36 +02:00
Jorge Teixeira
1ad3869fef
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-06-16 01:45:35 +02:00
Anonymous
03bc0d4e67
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:45:35 +02:00
Anonymous
57c66142eb
Translated using Weblate (Georgian)
Currently translated at 31.7% (572 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:44:57 +02:00
Temuri Doghonadze
e074c36de1
Translated using Weblate (Georgian)
Currently translated at 31.7% (572 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-06-16 01:44:36 +02:00
Anonymous
ac763b0aaf
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1799 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:44:15 +02:00
Kazantsev Mikhail
9dd2049eae
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1799 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-16 01:44:15 +02:00
Américo Monteiro
cab491585c
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1799 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-06-16 01:44:14 +02:00
Dklfajsjfi49wefklsf32
ee2d236717
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-06-16 01:43:29 +02:00
Stéphane Graber
6e331127b8
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-16 01:43:28 +02:00
Tobias Gerold
5cd00a5e41
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-06-16 01:43:27 +02:00
Jan Mittelstädter
93634db0b6
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-06-16 01:43:25 +02:00
Anonymous
79b0b6a7bd
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:43:23 +02:00
Anonymous
17b1e4772a
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-16 01:42:51 +02:00
Yuhang Cao
a70acc60a3 storage/zfs: factor out send receive helper
Signed-off-by: Yuhang Cao <caoyuhang@fwerkor.com>
2026-06-15 17:31:33 +00:00
Stéphane Graber
0b9669ab76
Merge pull request #3502 from fwerkor/fix-openfga-ci-rate-limit
github: Authenticate OpenFGA release lookups
2026-06-15 11:46:28 -04:00
Yuhang Cao
d3e857e955 ci: authenticate OpenFGA release lookups
Signed-off-by: Yuhang Cao <caoyuhang@fwerkor.com>
2026-06-15 14:40:13 +00:00
Stéphane Graber
b487388c97
Merge pull request #3497 from fwerkor/fix-webui-response-body
incus: close web UI probe response body
2026-06-14 18:45:16 -04:00
Tycho Andersen
ef0b2e00ce
Merge pull request #3496 from stgraber/main
Add core.https_allowed_websocket_origin
2026-06-14 10:57:30 -06:00
Yuhang Cao
3a3ad140eb incus: close web UI probe response body
Signed-off-by: Yuhang Cao <caoyuhang@fwerkor.com>
2026-06-14 05:58:28 +00:00
Stéphane Graber
acd5db7be3
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-14 01:02:25 -04:00
Stéphane Graber
08a1c4382f
incusd: Add core.https_allowed_websocket_origin server config key
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-14 01:02:23 -04:00
Stéphane Graber
267891c544
shared/ws: Validate websocket origin against trusted origins
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-13 23:43:35 -04:00
Stéphane Graber
99ca24a5fb
api: core_https_allowed_websocket_origin
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-13 23:43:34 -04:00
Stéphane Graber
9460b4b91c
Merge pull request #3495 from augustodsgv/incus/add-remote-set-keepalive
Incus/add remote set keepalive
2026-06-13 23:32:59 -04:00
augustodsgv
4b10c5198d
i18n: Update translation templates
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-13 23:02:38 -04:00
augustodsgv
18cce5c4ed
incus/alias: Fix wrong example command typo
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-13 23:02:37 -04:00
augustodsgv
790f168357
doc/remote: Update docs with keepalive configuration via CLI commands
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-13 23:02:36 -04:00
augustodsgv
f2dab164b6
incus/keepalive: Fix comment typo
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-13 23:02:35 -04:00
augustodsgv
c661b9a624
incus/remote: Add set-keepalive subcommand
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-13 23:02:34 -04:00
Stéphane Graber
ab325d0d28
Merge pull request #3491 from stgraber/network
Implement per-instance BGP
2026-06-13 19:26:53 -04:00
Stéphane Graber
4de8318636
incusd/device: Add configOrVolatile helper
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-13 16:34:36 -04:00
Stéphane Graber
14b2f0025c
incusd: Use IsNoneOrEmpty helper
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-13 16:33:47 -04:00
Stéphane Graber
b0e8d32379
doc: Add NIC's to wordlist
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-13 16:33:46 -04:00
Stéphane Graber
b1fde00641
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-13 16:33:45 -04:00
Stéphane Graber
388e8ae12c
doc: Document BGP advertisement of instance addresses
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-13 16:33:44 -04:00
Stéphane Graber
f9bb9df501
incusd/device: Advertise individual instance addresses over BGP
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-13 16:33:43 -04:00
Stéphane Graber
a32b50f6f7
incusd/network: Add BGP instance advertisement config keys
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-13 16:33:42 -04:00
Stéphane Graber
8c3ca59dbb
api: network_bridge_bgp_instances
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-13 16:33:41 -04:00
Stéphane Graber
125f0865ce
Merge pull request #3492 from bensmrs/work
incus/utils_copy: Fix wrong error returned
2026-06-13 11:13:42 -04:00
Stéphane Graber
5e2f8801a9
Merge pull request #3493 from bensmrs/linkcheck
doc: Ignore criu.org link checking
2026-06-13 11:12:54 -04:00
Benjamin Somers
e50c1b34a0 doc: Ignore criu.org link checking
The CRIU website has proven quite unreliable in terms of uptime.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-06-13 07:31:26 +00:00
Benjamin Somers
bfc1c82d2a incus/utils_copy: Fix wrong error returned
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-06-13 06:45:35 +00:00
Stéphane Graber
d76c62ad52
Merge pull request #3490 from stgraber/doc
doc: Update preseed description to match with reality
2026-06-13 01:49:46 -04:00
Benjamin Somers
bacb2a9100
Merge pull request #3489 from stgraber/main
Various bugfixes
2026-06-13 07:47:42 +02:00
Stéphane Graber
85114681ae
doc: Update preseed description to match with reality
Looking through the code, the ApplyServerPreseed logic has always
performed configuration merging.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-13 00:48:05 -04:00
Stéphane Graber
7e01b20474
Merge pull request #3483 from augustodsgv/docs/add-cli-configuration-docs
doc/incus-cli: Add CLI configuration file reference
2026-06-12 18:49:10 -04:00
Stéphane Graber
a752fc8a7b
incusd/network/ovn: Don't use missing router IP as DNS server
Closes #3480

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 18:16:01 -04:00
Stéphane Graber
74880b8429
incusd/device/nic_routed: Add neighbour proxy entries on the on-link interface
Closes #3485

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 18:16:00 -04:00
Stéphane Graber
6b54564933
incusd/images: Mention images available for other instance types
Closes #3477

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 18:15:59 -04:00
Stéphane Graber
e8251f0a34
incusd/qemu: Handle long run paths for the virtiofs socket
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 18:15:58 -04:00
Leon Schoch
1969fee70a
incusd/qemu: Handle long run paths for the console socket
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-06-12 18:15:57 -04:00
Leon Schoch
ed6990f785
incusd/qemu: Handle long run paths for the migration socket
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-06-12 18:15:56 -04:00
Stéphane Graber
2f6a902f49
incusd/linux: Add ListenUnix helper
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 18:15:51 -04:00
Benjamin Somers
7e26621542 Makefile: Improve target padding in make help
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-06-12 21:35:10 +00:00
augustodsgv
a9fc956cf2 Makefile: add incremental spellcheck that skips the sphinx and cli setups
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-12 21:35:10 +00:00
augustodsgv
b640223de3 doc/incus-cli: Add CLI configuration file reference
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-12 21:35:10 +00:00
Stéphane Graber
6e150a5187
Merge pull request #3482 from stgraber/nbd
Handle concurrent NBD connections on instance endpoint
2026-06-12 16:39:24 -04:00
Stéphane Graber
c4159f3871
Merge pull request #3486 from DarkressX/shrink-ceph-base-block-image-to-minimal-size
incus/server/storage/driver/ceph: Shrink images to minimal size after unpacking
2026-06-12 15:02:01 -04:00
Leon Schoch
b4210078be
incus/server/storage/driver/ceph: Shrink images to minimal size after unpacking
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-06-12 14:50:53 +02:00
Stéphane Graber
6413aa99c7
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 00:26:52 -04:00
Stéphane Graber
9819b2f599
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 00:26:51 -04:00
Stéphane Graber
345b9a589c
incus/debug: Support multiple NBD client connections
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 00:26:50 -04:00
Stéphane Graber
23f1a504a8
incusd/instances: Add NBD reuse parameter
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 00:26:50 -04:00
Stéphane Graber
bd2ba18cff
incusd/storage: Add reuse support to GetInstanceAllDisksNBD
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 00:26:49 -04:00
Stéphane Graber
7db44c6fc2
incusd/instance: Add reuse support to ConnectNBDAllDisks
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 00:26:48 -04:00
Stéphane Graber
2e937a45fb
incusd/instance/qemu: Update NBDServerStart calls
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 00:26:47 -04:00
Stéphane Graber
052d6674ea
incusd/instance/qmp: Allow multiple NBD server connections
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 00:26:46 -04:00
Stéphane Graber
1aada45446
incusd/instance/qmp: Add listen path support to NBDServerStart
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 00:26:45 -04:00
Stéphane Graber
6e0b753179
client: Add reuse support to GetInstanceNBDConn
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-12 00:26:44 -04:00
Stéphane Graber
60c8df346a
Merge pull request #3469 from kazan417/patch-1
Tweak `incus debug nbd` description
2026-06-11 22:36:37 -04:00
Stéphane Graber
ff2069c531
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-11 22:14:15 -04:00
kazan417
5a40036a11
incus/debug: Fix NBD description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-06-11 22:13:45 -04:00
Stéphane Graber
fcc13e1fd0
Merge pull request #3479 from augustodsgv/docs/improve-alias-docs
doc: Improve incus alias docs
2026-06-11 22:08:00 -04:00
Benjamin Somers
e33e60b30f i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-06-11 21:47:28 +00:00
augustodsgv
2c28faa5e5 doc/incus-alias: Refactor doc to create new use-case section and provide how-to examples
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-11 21:46:55 +00:00
augustodsgv
397433348a Makefile: Fix sphinx build script to prevent issues with terminal colors
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-11 21:46:55 +00:00
augustodsgv
b78423c049 doc/incus-alias: Fix italic and ref modifers order to correctly apply both modifiers
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-11 21:46:55 +00:00
augustodsgv
326c70c9e2 incus/alias: Add alias add command examples with args and numbered args
Signed-off-by: augustodsgv <augustodsgv@gmail.com>
2026-06-11 21:46:55 +00:00
Stéphane Graber
89a377cea0
Merge pull request #3481 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-06-11 17:38:54 -04:00
Kazantsev Mikhail
e43f7e0395
Translated using Weblate (Russian)
Currently translated at 100.0% (1799 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-11 21:01:21 +00:00
Kazantsev Mikhail
6a17c73713
Translated using Weblate (Swedish)
Currently translated at 100.0% (1799 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-11 21:01:20 +00:00
Américo Monteiro
bc45b04668
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1799 of 1799 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-06-11 21:01:18 +00:00
Stéphane Graber
6728a1eafc
global: Update for go-yaml/v4 rc5
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-10 22:26:22 -04:00
Stéphane Graber
ee455f2e54
Update gomod
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-10 22:25:29 -04:00
Stéphane Graber
59325f2e11
Makefile: Remove pinned incus-os
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-10 22:15:45 -04:00
Stéphane Graber
01719749d2
Merge pull request #3475 from stgraber/main
Various bugfixes
2026-06-10 16:44:07 -04:00
Stéphane Graber
f830526711
shared/cliconfig: Remove duplicate file closing
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-10 11:25:56 -04:00
Stéphane Graber
dcac6a1e51
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-10 11:25:48 -04:00
Leon Schoch
a99211f266
incusd/qemu: Handle long run paths for the SPICE socket
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-06-10 11:25:47 -04:00
Stéphane Graber
577182644e
incusd/qemu: Handle long run paths for the QMP socket
Closes #3459

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-10 11:25:46 -04:00
Stéphane Graber
dc8130a8a8
incusd/linux: Add DialUnix helper
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-10 11:25:45 -04:00
Stéphane Graber
a00ce990dd
incusd/console: Read the container console without resetting it
Align the container behavior with VMs by reading the console ringbuffer
without resetting it, so the log can be fetched more than once.

Closes #3467

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-10 11:25:44 -04:00
Stéphane Graber
fe9bce8317
incus/cluster: Document the actions
Closes #3449

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-10 11:25:43 -04:00
Stéphane Graber
1a4ad43335
incus/remote: Move OIDC and cookie jar on rename
Closes #3470

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-10 11:25:42 -04:00
Stéphane Graber
1793e43589
incus/client: Fix panic when cancelling
Closes #3471

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-10 11:25:42 -04:00
Stéphane Graber
489d2b6694
Merge pull request #3474 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-06-09 15:04:03 -04:00
Américo Monteiro
0d0acb91a8
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1797 of 1797 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-06-09 21:01:16 +02:00
Kazantsev Mikhail
5d24120729
Translated using Weblate (Swedish)
Currently translated at 100.0% (1797 of 1797 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-09 21:01:16 +02:00
Kazantsev Mikhail
89ec8b84b5
Translated using Weblate (Russian)
Currently translated at 100.0% (1797 of 1797 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-09 21:01:15 +02:00
German Maglione
bf6a582dbc incusd/device/disk: Use virtiofsd --posix-acl=auto if supported
Detect virtiofsd negotiation mode support via --print-capabilities
and use --posix-acl=auto if possible, so virtiofsd
doesn't fail if the guest doesn't support posix ACLs.

Signed-off-by: German Maglione <gmaglione@redhat.com>
2026-06-08 23:59:17 +02:00
Stéphane Graber
541c3ea665
Merge pull request #3463 from stgraber/cli
Implement server.crt update through internal API
2026-06-08 13:36:48 -04:00
Stéphane Graber
df45e93e0e
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-08 11:53:51 -04:00
Stéphane Graber
f380d339f3
incus/admin: Add update-certificate command
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-08 11:52:15 -04:00
Stéphane Graber
8ce57ed781
incusd/api_internal: Add server-certificate endpoint
PUT can be used to replace the server certificate on systems where
direct filesystem access isn't possible (e.g. IncusOS).

This isn't allowed on clusters as clusters instead have a separate
public facing certificate which already has an API to update it.

Closes #2790

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-08 11:52:14 -04:00
Stéphane Graber
bd0b44cc48
Merge pull request #3466 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-06-08 11:51:37 -04:00
Américo Monteiro
092bbd2851
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1793 of 1793 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-06-08 10:01:02 +02:00
Stéphane Graber
920e06984c
Merge pull request #3464 from stgraber/main
Add logging helper for deferred functions and use in all packages
2026-06-07 10:39:50 -04:00
Stéphane Graber
4c8f49530a
Merge pull request #3465 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-06-06 19:46:11 -04:00
Daniel Dybing
7c2ec63c94
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-06-07 01:41:15 +02:00
Anonymous
ffbf5b38e6
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:41:15 +02:00
Anonymous
4947816841
Translated using Weblate (Russian)
Currently translated at 98.7% (1770 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:40:44 +02:00
Kazantsev Mikhail
832502149b
Translated using Weblate (Russian)
Currently translated at 98.7% (1770 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-07 01:40:43 +02:00
Dklfajsjfi49wefklsf32
8ce97ccf91
Translated using Weblate (Dutch)
Currently translated at 10.8% (194 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-06-07 01:40:10 +02:00
Anonymous
914f448480
Translated using Weblate (Dutch)
Currently translated at 10.8% (194 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:40:07 +02:00
Varlorg
ad38d6c2f4
Translated using Weblate (French)
Currently translated at 76.3% (1369 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-06-07 01:39:39 +02:00
Steeve Droz
dd54a0d9ab
Translated using Weblate (French)
Currently translated at 76.3% (1369 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-06-07 01:39:38 +02:00
Laterria.Severino
143dde785b
Translated using Weblate (French)
Currently translated at 76.3% (1369 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-06-07 01:39:37 +02:00
smCloudInTheSky
01f7c73894
Translated using Weblate (French)
Currently translated at 76.3% (1369 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-06-07 01:39:36 +02:00
Kazantsev Mikhail
f2ca1de105
Translated using Weblate (French)
Currently translated at 76.3% (1369 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-07 01:39:33 +02:00
Corabel Bertolini
4647646677
Translated using Weblate (French)
Currently translated at 76.3% (1369 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-06-07 01:39:32 +02:00
Anonymous
a46b2566d0
Translated using Weblate (French)
Currently translated at 76.3% (1369 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:39:30 +02:00
Benjamin Somers
5d2c835ade
Translated using Weblate (French)
Currently translated at 76.3% (1369 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-06-07 01:39:20 +02:00
montag451
f2d6d309a8
Translated using Weblate (French)
Currently translated at 76.3% (1369 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-06-07 01:38:59 +02:00
Anonymous
c348c0f1e2
Translated using Weblate (Swedish)
Currently translated at 98.7% (1770 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:38:53 +02:00
Kazantsev Mikhail
6326f92763
Translated using Weblate (Swedish)
Currently translated at 98.7% (1770 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-07 01:38:49 +02:00
Daniel Nylander
3182ce78c6
Translated using Weblate (Swedish)
Currently translated at 98.7% (1770 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-06-07 01:38:34 +02:00
Hiroaki Nakamura
9def4a8b80
Translated using Weblate (Japanese)
Currently translated at 72.0% (1292 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-06-07 01:37:57 +02:00
KATOH Yasufumi
1cbffae4b1
Translated using Weblate (Japanese)
Currently translated at 72.0% (1292 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-06-07 01:37:57 +02:00
Kazantsev Mikhail
e82f841f20
Translated using Weblate (Japanese)
Currently translated at 72.0% (1292 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-07 01:37:45 +02:00
Anonymous
5f5ccedf6a
Translated using Weblate (Japanese)
Currently translated at 72.0% (1292 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:37:33 +02:00
Dklfajsjfi49wefklsf32
398490d5e8
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-06-07 01:36:58 +02:00
Stéphane Graber
9c82ac128f
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-07 01:36:57 +02:00
Tobias Gerold
3f51bf3211
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-06-07 01:36:55 +02:00
Jan Mittelstädter
6fe77f9e50
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-06-07 01:36:52 +02:00
Anonymous
a68bd5466d
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:36:49 +02:00
Anonymous
ab671d52ca
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1792 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:36:13 +02:00
Kazantsev Mikhail
4ad8ac14e5
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1792 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-07 01:36:10 +02:00
Américo Monteiro
7c5b4236d0
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1792 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-06-07 01:36:09 +02:00
Anonymous
7bb92d2d79
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:35:24 +02:00
Kazantsev Mikhail
019a31843a
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-07 01:34:44 +02:00
Jorge Teixeira
9e8c385223
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-06-07 01:34:37 +02:00
Anonymous
6f2af9e922
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:34:33 +02:00
Kazantsev Mikhail
a9ccf271ef
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-07 01:34:00 +02:00
Andika Triwidada
23c2e3c6de
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-06-07 01:33:52 +02:00
Anonymous
a009c1799e
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:33:44 +02:00
Kazantsev Mikhail
62b762f72c
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-06-07 01:33:14 +02:00
Paulo Coghi
413855aae2
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-06-07 01:33:07 +02:00
Anonymous
f43b3ef3e8
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:33:01 +02:00
pesder
ccf82caa7d
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-06-07 01:32:31 +02:00
Anonymous
285e70824a
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:32:27 +02:00
meipeter
1e80cb59de
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-06-07 01:31:51 +02:00
daoge
de1f9faf32
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-06-07 01:31:50 +02:00
Kwok Guy
12524692b6
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-06-07 01:31:49 +02:00
yooadmin
969a37a54d
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-06-07 01:31:49 +02:00
Sakiko
9ba614edd9
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-06-07 01:31:48 +02:00
Loge X
6b0f3c06a1
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-06-07 01:31:41 +02:00
Anonymous
4ed790926b
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:31:26 +02:00
IO01
e6b7c58325
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-06-07 01:31:09 +02:00
Anonymous
a1c4e25cda
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:31:04 +02:00
Anonymous
026309d195
Translated using Weblate (Georgian)
Currently translated at 31.9% (572 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:30:26 +02:00
Temuri Doghonadze
08f75f1f1e
Translated using Weblate (Georgian)
Currently translated at 31.9% (572 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-06-07 01:30:05 +02:00
Alberto Donato
669051bc6b
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-06-07 01:29:52 +02:00
Anonymous
ecc8ee2343
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1792 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-06-07 01:29:51 +02:00
Stéphane Graber
2c9c4e76fe
github: Update DCO check
Fixes the failures when more than 50 commits.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:19:37 -04:00
Stéphane Graber
eb23817937
incusd: Log deferred errors in main_forknet with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:21 -04:00
Stéphane Graber
f518310d81
incusd: Rename forknet logger parameter to avoid shadowing
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:20 -04:00
Stéphane Graber
51738d34b8
generate-database/file: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:19 -04:00
Stéphane Graber
ecd9e93885
lxc-to-incus: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:18 -04:00
Stéphane Graber
0c41c18ab2
incus-simplestreams: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:17 -04:00
Stéphane Graber
b82db63473
incus-user: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:16 -04:00
Stéphane Graber
ae9e062c20
incus-benchmark: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:15 -04:00
Stéphane Graber
4d24f93964
incus-migrate: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:14 -04:00
Stéphane Graber
191206b420
shared/util: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:14 -04:00
Stéphane Graber
b002734cb6
shared/simplestreams: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:13 -04:00
Stéphane Graber
3675d12eba
shared/subprocess: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:12 -04:00
Stéphane Graber
e00a8f5745
shared/archive: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:11 -04:00
Stéphane Graber
6e887997ff
shared/cliconfig: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:10 -04:00
Stéphane Graber
583b48422a
shared/idmap: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:09 -04:00
Stéphane Graber
16b4399772
shared/resources/usbid: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:08 -04:00
Stéphane Graber
3fbc20137a
shared/resources: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:07 -04:00
Stéphane Graber
82139be67a
incusd/db/schema: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:06 -04:00
Stéphane Graber
a038d298c6
incusd/db/query: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:05 -04:00
Stéphane Graber
d5a466a39c
incusd/db/node: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:04 -04:00
Stéphane Graber
a37173e099
incusd/db/cluster: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:03 -04:00
Stéphane Graber
98f1441bd7
incusd/db: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:02 -04:00
Stéphane Graber
74d3995108
client: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:01 -04:00
Stéphane Graber
00e53e0d6a
incusd/storage/drivers: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:15:00 -04:00
Stéphane Graber
6292245a6b
incusd: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:59 -04:00
Stéphane Graber
d1f1345039
internal/util: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:58 -04:00
Stéphane Graber
aef6e11c27
incusd/util: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:57 -04:00
Stéphane Graber
4ef4c36dff
incusd/storage/s3/local: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:56 -04:00
Stéphane Graber
5511cb66f4
incusd/storage/s3: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:55 -04:00
Stéphane Graber
a15c351ef1
incusd/storage/quota: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:54 -04:00
Stéphane Graber
bd6b8e18f1
incusd/storage: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:53 -04:00
Stéphane Graber
a65bfb3e28
incusd/seccomp: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:52 -04:00
Stéphane Graber
9dd158bf9a
incusd/response: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:52 -04:00
Stéphane Graber
ccd137b446
incusd/network/acl: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:51 -04:00
Stéphane Graber
93dc13cef9
incusd/network: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:50 -04:00
Stéphane Graber
ffc84ff199
incusd/instance/drivers: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:49 -04:00
Stéphane Graber
773eb59651
incusd/firewall/drivers: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:48 -04:00
Stéphane Graber
43a81d5351
incusd/dnsmasq: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:47 -04:00
Stéphane Graber
42a173fe25
incusd/device/pci: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:46 -04:00
Stéphane Graber
46e5bc751e
incusd/device: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:45 -04:00
Stéphane Graber
9057c3bfd5
incusd/cluster: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:44 -04:00
Stéphane Graber
46cf572f3b
incusd/cgroup: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:43 -04:00
Stéphane Graber
2e0e711ad2
incusd/backup: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:42 -04:00
Stéphane Graber
770e527323
internal/rsync: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:41 -04:00
Stéphane Graber
2de2256436
internal/netutils: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:40 -04:00
Stéphane Graber
ea8a7bb53e
incusd/migration: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:39 -04:00
Stéphane Graber
b608e66e77
internal/linux: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:38 -04:00
Stéphane Graber
0624360732
internal/incusos: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:37 -04:00
Stéphane Graber
0280cfe17b
incus-agent: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:36 -04:00
Stéphane Graber
3473bbe61c
incus: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:35 -04:00
Stéphane Graber
767e8995a9
incusd/instancewriter: Log deferred errors with WarnOnError
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:34 -04:00
Stéphane Graber
1bc4d3feb8
shared/logger: Add WarnOnError helper
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 19:14:33 -04:00
Stéphane Graber
dc578fc972
Merge pull request #3461 from stgraber/main
Various bugfixes
2026-06-06 18:56:21 -04:00
Stéphane Graber
277c14d055
incusd/auth/oidc: Clear cookies on terminal refresh failure
Clear all the cookies so the user gets sent back to authentication.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 18:31:55 -04:00
Stéphane Graber
d4e1e50034
incusd/auth/oidc: Set expiration on authentication cookies
Base expiry based on refresh token lifetime with fallback to 30 days.

Closes #3454

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 18:31:54 -04:00
Stéphane Graber
50df3cccb8
Merge pull request #3462 from stgraber/cli
Implement a filtered version of the Server struct
2026-06-06 18:00:03 -04:00
Stéphane Graber
51b3724ea9
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 00:34:10 -04:00
Stéphane Graber
1452cd7f4d
incus/info: Add --show-sensitive
Default to filtered output now and use --show-sensitive to show the
original long output with all the sensitive config keys.

Closes #2337

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 00:34:09 -04:00
Stéphane Graber
3732e84290
shared/api: Add Server.Filtered()
This returns a filtered version of the struct where sensitive keys are
replaced with SENSITIVE and where some other noisy keys are removed or
summarized.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-06 00:34:07 -04:00
Stéphane Graber
a3a6508380
incusd/auth/oidc: Refactor cookie setting logic
Just refactoring, no functional change.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 21:31:53 -04:00
Stéphane Graber
b9cfdafaca
incusd/storage/drivers: Handle sgdisk return codes
sgdisk helpfully returns various exit codes based on the failure.

Exit 1 will be for most actual errors, exit 2 indicates it cannot locate
a partition table, exit 3 is for confirmed non-GPT.

Treat exit 2 and 3 as equivalent, don't attempt to resize the partition
table in such scenarios.

Closes #3450

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 21:13:08 -04:00
Stéphane Graber
ea476dec69
incusd/instance/qemu: Fully cleanup the old monitor
Fixes a potential race where the monitor was only lazily cleaned up
through its goroutine. It was therefore possible to hit the Start action
on Restart before it had time to fully cleanup.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 21:03:27 -04:00
Stéphane Graber
764078d6a2
incusd/instance/drivers/qmp: Add locking around event handlers
There was a potential race where we'd have two goroutines independently
get and set the event handler, leading to QEMU's onStop clearing the
event handler while another goroutine was still processing events and
using the old handler.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 21:03:26 -04:00
Stéphane Graber
a5139b75c6
Merge pull request #3457 from stgraber/nbd
Improve low level backup API
2026-06-05 19:27:28 -04:00
Stéphane Graber
f6c3d6f1bf
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 18:46:23 -04:00
Stéphane Graber
702858c7b9
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 18:46:22 -04:00
Stéphane Graber
610483e285
incus/debug: Add NBD command
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 18:46:21 -04:00
Stéphane Graber
80d2e08114
incusd/instance/qemu: Report disk usage on stopped instances
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 18:46:19 -04:00
Stéphane Graber
bf1f156b55
incusd/instance/qemu: Use empty NBD export name for single-disk exports
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 18:46:18 -04:00
Stéphane Graber
34b725adb2
incusd/instance: Implement ConnectNBDAllDisks
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 18:46:17 -04:00
Stéphane Graber
f50acecd4a
incusd/instance/qmp: Add block snapshot transaction and node size helpers
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 18:46:16 -04:00
Stéphane Graber
b15baedaa3
incusd/storage: Implement all-disks NBD function
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 18:46:15 -04:00
Stéphane Graber
fd3c3215e9
incusd/instances: Add NBD API
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 18:46:14 -04:00
Stéphane Graber
ab6c5f7189
client: Add GetInstanceNBDConn
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 09:49:12 -04:00
Stéphane Graber
2559b4cef4
api: instance_nbd
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 09:49:11 -04:00
Stéphane Graber
4336a234df
Merge pull request #3458 from stgraber/mux
incusd: Replace gorilla/mux with http.ServeMux
2026-06-05 09:48:28 -04:00
Stéphane Graber
20d8c78da2
Update go.mod
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 08:12:37 -04:00
Stéphane Graber
65eb825b19
incusd: Replace gorilla/mux with http.ServeMux
Apply what we did to incus-agent but to incusd.

Closes #2451

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 08:10:57 -04:00
Stéphane Graber
33f4bb810c
Merge pull request #3456 from stgraber/main
global: Clean latest gofumpt
2026-06-05 07:45:56 -04:00
Stéphane Graber
907dfc3e5d
Merge pull request #3455 from stgraber/cluster
Cluster evacuation improvements
2026-06-05 07:45:43 -04:00
Stéphane Graber
dc4f57c57d
global: Clean latest gofumpt
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 01:56:18 -04:00
Stéphane Graber
3ada40e4c0
incusd/cluster: Improve evacuation and restoration progress reporting
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 01:55:37 -04:00
Stéphane Graber
8c46af4a7c
incusd/cluster: Honor restricted cluster groups during evacuation
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 00:59:39 -04:00
Stéphane Graber
cff8f87ae2
incusd/cluster: Honor cluster group during evacuation
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-05 00:59:08 -04:00
Stéphane Graber
530f0b59b6
Merge pull request #3453 from stgraber/network
OVS/OVN related fixes
2026-06-04 19:53:12 -04:00
Stéphane Graber
c3d3d9c13a
Merge pull request #3452 from stgraber/storage
Storage migration/recovery related fixes
2026-06-04 19:29:57 -04:00
Stéphane Graber
15100844f9
Merge pull request #3451 from stgraber/main
Remove LXD to Incus logic
2026-06-04 19:29:46 -04:00
Stéphane Graber
cd412f9054
incusd/network: Clean up stale OVS ports on startup
Clean any leftover detached ports on the OVS switch.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-04 14:38:35 -04:00
Stéphane Graber
01cc86ead4
incusd/network/ovn: Don't require an active chassis when updating tunnels
Closes #3445

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-04 14:38:34 -04:00
Stéphane Graber
9915b56a0c
incusd: Use partial device validation when recovering instances
This allows for the out of order restoration of instances and volumes.
Validation will still occur on instance startup.

Closes #3429

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-04 14:30:32 -04:00
Stéphane Graber
d8014df167
Update gomod
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-04 14:26:11 -04:00
Stéphane Graber
c3baceec24
incusd/cluster: Remove legacy logic
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-04 14:23:25 -04:00
Stéphane Graber
ba407ebf09
shared/api: Remove legacy logic
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-04 14:23:12 -04:00
Stéphane Graber
fe296b7400
Remove lxd-to-incus
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-04 14:23:01 -04:00
Stéphane Graber
0c088b99fa
incusd/migrate: Bump migration handshake timeouts to 2 minutes
Very busy target systems like backup servers can sometimes take more
than 30s to prepare and send the migration header. As the goal is to
handle network failures, we can increase the timeout quite a bit so long
as it will eventually timeout and clear the operation.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-06-04 14:18:39 -04:00
Stéphane Graber
707514a8b2
incusd: Reject migration onto existing instance of different type
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-06-04 14:18:38 -04:00
Stéphane Graber
82f420a304
incusd/instance/qemu: Tweak migration fallback for VMs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-06-04 14:18:38 -04:00
Stéphane Graber
ef4e584fa1
incusd/migration: Detect target migration errors
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-06-04 14:18:37 -04:00
Stéphane Graber
4596075585
Merge pull request #3448 from stgraber/main
Fix block backup issues
2026-06-03 04:41:51 -04:00
Stéphane Graber
4ff2b98385
incusd/response: Abort piped exports that fail mid-stream
The PipeResponse mechanism would always send an early header, then
process the piped data. That's done to avoid hitting a header submission
timeout.

The problem with that is that a failure is now being interpreted as
success by the client as there is no way to go back and change the HTTP
status code.

Instead, use a bit of a hack by aborting the connection entirely.

This is done through a scary panic() call which is intercepted by the Go
HTTP server and will cause the underlying connection to be terminated
without affecting the rest of the daemon.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-02 14:18:47 -04:00
Stéphane Graber
89c7b49297
incusd/instance/qemu: Remove stale migrate.sock before qcow2 export
Cleanup any leftover unix sockets prior to running an export.

Closes #3447

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-02 14:18:46 -04:00
Stéphane Graber
05150c5df6
incusd/storage: Fix qcow2 custom volume backups
Fix an issue where we were incorrectly passing the prefixed version of a
volume name to a function expecting the unprefixed version.

Also fix access to volumes that aren't attached to a VM.

Closes #3446

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-06-02 14:18:45 -04:00
Stéphane Graber
c4a69983bc
Merge pull request #3441 from breml/align-node-specific-network-config
Align node specific network config
2026-06-02 13:59:34 -04:00
Stéphane Graber
92cac93341
Merge pull request #3444 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-06-02 00:22:11 -04:00
Américo Monteiro
54656b3e64
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-06-02 03:01:01 +02:00
Stéphane Graber
37d58716cf
Merge pull request #3443 from masnax/joinas
Generate-database `joinas` tag
2026-06-01 19:22:22 -04:00
Stéphane Graber
44c9c85f66
Merge pull request #3442 from masnax/qemu-hv
Add migration-compatible hv flags with migration.stateful=true
2026-06-01 17:45:20 -04:00
Max Asnaashari
1e104a75d8
cmd/generate-database/lex: Fix pluralizations ending in y
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-06-01 14:24:18 -07:00
Max Asnaashari
011c2a8b00
cmd/generate-database/db: Add joinas db tag
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-06-01 14:23:53 -07:00
Max Asnaashari
c953864723
internal/server/instance/drivers: Add migration-compatible hv flags with migration.stateful=true
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-06-01 14:21:03 -07:00
Lucas Bremgartner
39895ed07d
server/metadata: update generated metadata
Signed-off-by: Lucas Bremgartner <lucas.bremgartner@futurfusion.io>
2026-06-01 15:18:52 +02:00
Lucas Bremgartner
417d8976cc
doc: update generated metadata
Signed-off-by: Lucas Bremgartner <lucas.bremgartner@futurfusion.io>
2026-06-01 15:18:36 +02:00
Lucas Bremgartner
b9aeb4665c
server/network: fix scope of node specific network configs
align with "nodeSpecificNetworkConfig" in /internal/server/db/networks.go

Signed-off-by: Lucas Bremgartner <lucas.bremgartner@futurfusion.io>
2026-06-01 15:15:58 +02:00
Lucas Bremgartner
4a895d6d35
server/network: fix comment alignment
Signed-off-by: Lucas Bremgartner <lucas.bremgartner@futurfusion.io>
2026-06-01 15:13:56 +02:00
Stéphane Graber
fc82b2d437
Merge pull request #3439 from bensmrs/unset
incus: Make unset commands accept several keys
2026-05-31 20:09:19 -04:00
Benjamin Somers
710c399b8d i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-31 22:44:54 +00:00
Benjamin Somers
642feb7965 incus: Make unset commands accept several keys
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-31 22:44:36 +00:00
Stéphane Graber
5da195a703
Merge pull request #3438 from stgraber/debug
Fix Github Actions java setup
2026-05-31 15:21:01 -04:00
Stéphane Graber
db93b85c96
github: Remove pre-installed java
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-31 14:56:16 -04:00
Stéphane Graber
7c8273daf8
Merge pull request #3436 from stgraber/doc
doc/cloud-init: Clarify VM behavior
2026-05-31 11:08:17 -04:00
Stéphane Graber
e480441e68
doc/cloud-init: Clarify VM behavior
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-31 11:01:28 -04:00
Stéphane Graber
39123538c4
Merge pull request #3435 from stgraber/main
shared/tls: Detect Lego version/behavior based on help
2026-05-31 10:58:20 -04:00
Stéphane Graber
d59a96e45c
shared/tls: Detect Lego version/behavior based on help
The previous attempt at detecting Lego v5 wasn't successful as various
distribution and packages appear to be messing with reporting of the
version string...

Most notably the Debian lego package reports the version as "dev".
Some others report it based on git tag ("v4" prefix) while others report
the actual version ("4.x").

This is enough of a mess that we should instead just scan the help message.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-31 10:10:08 -04:00
Stéphane Graber
56ae0035fc
Merge pull request #3432 from stgraber/main
Various bugfixes
2026-05-31 09:44:34 -04:00
Stéphane Graber
a406d36edb
Merge pull request #3433 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-31 09:35:09 -04:00
Stéphane Graber
e03ff38e67
incusd/storage/zfs: Refuse refresh only when snapshots have no common base
The logic to delete and re-transfer didn't actually work as the volume
root GUID would still be different.

When the target has snapshots but none share a GUID with the source,
refuse the migration, allowing the user to decide whether to delete the
target and do a full transfer or keep things as they are.

When the target has no snapshots at all, there's simply no common base
to build an incremental stream on, so fall back to full transfer.

Closes #3330

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-31 08:37:21 -04:00
Stéphane Graber
a1276cdb57
incusd/instance/lxc: Fix environment quoting
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-31 08:37:20 -04:00
Stéphane Graber
ea9eeba6b7
shared/tls: Add support for Lego v5
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-31 08:37:19 -04:00
Stéphane Graber
f110f2deb3
doc/authorization: Fix markdownlint
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-31 08:37:18 -04:00
Américo Monteiro
731f6911b7
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1789 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-05-31 08:01:01 +00:00
Stéphane Graber
eeed14be2d
Merge pull request #3428 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-29 21:42:20 -04:00
Kazantsev Mikhail
21dad96c66
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-30 02:05:08 +02:00
Paulo Coghi
85052f2f3a
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-05-30 02:05:08 +02:00
Anonymous
77d896d827
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:05:08 +02:00
Daniel Dybing
4ea0737bde
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-05-30 02:04:47 +02:00
Anonymous
134748cdc8
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:04:46 +02:00
Dklfajsjfi49wefklsf32
187564f6ff
Translated using Weblate (Dutch)
Currently translated at 10.8% (195 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-05-30 02:04:25 +02:00
Anonymous
9b57c1ee15
Translated using Weblate (Dutch)
Currently translated at 10.8% (195 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:04:23 +02:00
meipeter
68e3039a75
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-05-30 02:04:06 +02:00
daoge
6884e7a442
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-05-30 02:04:06 +02:00
Kwok Guy
d04c6479fa
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-05-30 02:04:05 +02:00
yooadmin
d621619014
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-05-30 02:04:05 +02:00
Sakiko
9e7e78f474
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-05-30 02:04:05 +02:00
Loge X
5298ebbf36
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-05-30 02:04:04 +02:00
Anonymous
7040ceb384
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:03:58 +02:00
IO01
d784ddf035
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.1% (701 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-05-30 02:03:49 +02:00
Anonymous
2e61801c23
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1789 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:03:46 +02:00
Kazantsev Mikhail
0189864a1b
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1789 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-30 02:03:46 +02:00
Américo Monteiro
6bd8a624a0
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1789 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-05-30 02:03:46 +02:00
Anonymous
c0f8a51c67
Translated using Weblate (Georgian)
Currently translated at 31.9% (572 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:03:22 +02:00
Temuri Doghonadze
6f4c7ce635
Translated using Weblate (Georgian)
Currently translated at 31.9% (572 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-05-30 02:03:07 +02:00
Hiroaki Nakamura
1071b15f1e
Translated using Weblate (Japanese)
Currently translated at 72.4% (1297 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-05-30 02:02:59 +02:00
KATOH Yasufumi
bdd00ef237
Translated using Weblate (Japanese)
Currently translated at 72.4% (1297 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-05-30 02:02:59 +02:00
Kazantsev Mikhail
03a82f2f4b
Translated using Weblate (Japanese)
Currently translated at 72.4% (1297 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-30 02:02:55 +02:00
Anonymous
2a66c9b349
Translated using Weblate (Japanese)
Currently translated at 72.4% (1297 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:02:54 +02:00
Kazantsev Mikhail
70bfc5f7ea
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-30 02:02:37 +02:00
Jorge Teixeira
19fab2a3b7
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-05-30 02:02:37 +02:00
Anonymous
3dc264f12e
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:02:37 +02:00
Anonymous
17afd66ae4
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:02:17 +02:00
Alberto Donato
1dc23ea1c4
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-05-30 02:01:58 +02:00
Anonymous
9d6d8a1f1a
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:01:58 +02:00
Kazantsev Mikhail
9901648020
Translated using Weblate (Swedish)
Currently translated at 100.0% (1789 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-30 02:01:38 +02:00
Daniel Nylander
33ef65562a
Translated using Weblate (Swedish)
Currently translated at 100.0% (1789 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-05-30 02:01:36 +02:00
Anonymous
fe5b391346
Translated using Weblate (Russian)
Currently translated at 100.0% (1789 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:01:14 +02:00
Kazantsev Mikhail
3ddc6fb794
Translated using Weblate (Russian)
Currently translated at 100.0% (1789 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-30 02:01:14 +02:00
pesder
70a4a6fb12
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-05-30 02:00:47 +02:00
Anonymous
b39b4b2840
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:00:47 +02:00
Dklfajsjfi49wefklsf32
4774c4fa65
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-05-30 02:00:27 +02:00
Stéphane Graber
c51481b28d
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-30 02:00:27 +02:00
Tobias Gerold
0a414e0546
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-05-30 02:00:27 +02:00
Jan Mittelstädter
e731552408
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-05-30 02:00:26 +02:00
Anonymous
aa7abc939d
Translated using Weblate (German)
Currently translated at 10.3% (186 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:00:25 +02:00
Varlorg
b68af38021
Translated using Weblate (French)
Currently translated at 76.5% (1369 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-05-30 02:00:02 +02:00
Steeve Droz
24e34726a9
Translated using Weblate (French)
Currently translated at 76.5% (1369 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-05-30 02:00:02 +02:00
Laterria.Severino
e4a082e00f
Translated using Weblate (French)
Currently translated at 76.5% (1369 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-05-30 02:00:02 +02:00
smCloudInTheSky
d0f66c38b2
Translated using Weblate (French)
Currently translated at 76.5% (1369 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-05-30 02:00:01 +02:00
Kazantsev Mikhail
b4b41832ca
Translated using Weblate (French)
Currently translated at 76.5% (1369 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-30 02:00:01 +02:00
Corabel Bertolini
914c7326ca
Translated using Weblate (French)
Currently translated at 76.5% (1369 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-05-30 02:00:00 +02:00
Anonymous
66c5a14932
Translated using Weblate (French)
Currently translated at 76.5% (1369 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 02:00:00 +02:00
Benjamin Somers
77a2e6c4ea
Translated using Weblate (French)
Currently translated at 76.5% (1369 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-30 01:59:55 +02:00
montag451
037de501e5
Translated using Weblate (French)
Currently translated at 76.5% (1369 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-05-30 01:59:46 +02:00
Kazantsev Mikhail
cf2df8cc5f
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-30 01:59:43 +02:00
Andika Triwidada
c01d7a1a94
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-05-30 01:59:43 +02:00
Anonymous
e3711fd8a1
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 01:59:41 +02:00
Anonymous
7abe27505d
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1789 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-30 01:59:22 +02:00
Stéphane Graber
42da2b16a4
Release Incus 7.1
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 22:30:42 -04:00
Stéphane Graber
785fc8c50f
gomod: Update dependencies
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 22:29:06 -04:00
Stéphane Graber
096eedc73a
Merge pull request #3423 from stgraber/hardening
Add additional validation to device names
2026-05-28 20:10:21 -04:00
Stéphane Graber
89dc12da26
Merge pull request #3427 from stgraber/main
Fix a couple of issues with instance memory changes
2026-05-28 20:09:07 -04:00
Stéphane Graber
a20ed552e9
Merge pull request #3426 from stgraber/agent
Adjust instance-agent events
2026-05-28 19:30:03 -04:00
Stéphane Graber
9c77336b87
Merge pull request #3425 from stgraber/security
Fix security issues for Incus 7.1
2026-05-28 19:29:52 -04:00
Stéphane Graber
4b6507bd7d
incusd/instance/drivers: Round memory hotplug size up to block size
We were incorrectly rounding the memory down as well as having an off by
one, making it possible to round things in a way that QEMU would be
provided with a 0 byte chunk to add.

This would then fail with:

    property 'size' of memory-backend-memfd doesn't take value '0'

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-05-28 19:29:23 -04:00
Stéphane Graber
d2028a2116
incusd/instance/lxc: Allow unsetting limits.memory.swap without hitting a cgroup error
Because limits.memory.swap is handled in the same path as
limits.memory.priority, we end up with an attempted priority call on
value change. That call will currently fail due to cgroup2 not
supporting swap priority so handled the ErrControllerMissing.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-05-28 18:31:59 -04:00
Stéphane Graber
62499e41c3
tests: Update for new name restrictions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 18:26:11 -04:00
0xk1f0
057c09a3b8
doc: Update config
Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-05-28 18:12:04 -04:00
0xk1f0
cfb7f6f3cc
internal/server: fire agent events after checking current state
Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-05-28 18:12:03 -04:00
0xk1f0
24540be85c
internal/instance: Add volatile.last_state.agent
Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-05-28 18:08:14 -04:00
Stéphane Graber
a6012422b4
incusd/storage/s3: Confine multipart uploads with os.Root
This addresses CVE-2026-48753

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 17:52:05 -04:00
Stéphane Graber
98e64f0a6f
incusd/storage: Guard nil fields in createDependentVolumesFromBackup
This addresses CVE-2026-48754

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 17:52:04 -04:00
Stéphane Graber
ab6b7dff0c
incusd/storage: Guard nil ExpiresAt in CreateCustomVolumeFromBackup
This addresses CVE-2026-48756

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 17:52:03 -04:00
Stéphane Graber
d71c5053a4
incusd/storage: Fix unsafe access to backup data
This addresses CVE-2026-47753

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 17:52:01 -04:00
Stéphane Graber
934624a4f3
Merge pull request #3421 from stgraber/forkproxy
incusd/devices: Cleanup leftover forkproxy on startup
2026-05-28 17:39:14 -04:00
Stéphane Graber
dc66a719ff
incusd/device: Encode device names in DevicesPath storage paths
Consistently use linux.PathNameEncode across all device paths.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 17:35:31 -04:00
Stéphane Graber
5efa60cef0
incusd/instance/drivers: Apply standard API object name checks
Have all device name sent through validate.IsAPIName to limit the
maximum length and avoid issues with filesystem paths.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 17:35:30 -04:00
Stéphane Graber
ce14dedeeb
Merge pull request #3418 from bensmrs/push
Push operation follow-up
2026-05-28 14:00:52 -04:00
Stéphane Graber
9d77f41307
Merge pull request #3420 from stgraber/main
Allow for specific VM vCPU configuration
2026-05-28 14:00:40 -04:00
Stéphane Graber
e30a02cc9d
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 12:58:33 -04:00
Stéphane Graber
6372f95fc6
doc: Document CPU topology support for limits.cpu
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 12:58:32 -04:00
Stéphane Graber
0edebc22c8
incusd/instance: Support CPU topology for VM limits.cpu
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 12:58:31 -04:00
Stéphane Graber
e59ab0bebb
internal/instance: Allow CPU topology syntax for limits.cpu
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 12:58:30 -04:00
Stéphane Graber
094db782bf
shared/validate: Add CPU topology parsing helper
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 12:58:29 -04:00
Stéphane Graber
0fd9db984a
api: instance_limits_cpu_topology
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 12:58:27 -04:00
Benjamin Somers
7cf13aed32
i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-28 12:53:39 -04:00
Benjamin Somers
44785e940e
tests: Switch to recursive chown on file push
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-28 12:53:25 -04:00
Benjamin Somers
4435478be9
incus/file: Make recursive push apply UID/GID overrides recursively
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-28 12:53:24 -04:00
Benjamin Somers
4c166f0db4
incus/storage_volume: Put big subcommands into their own files
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-28 12:53:24 -04:00
Stéphane Graber
0bd1cee86e
Merge pull request #3416 from kazan417/patch-1
CLI wording fixes
2026-05-28 12:52:11 -04:00
Stéphane Graber
d43b7ce4f9
Merge pull request #3412 from bensmrs/volume-accounting
Fix daemon volume accounting
2026-05-28 12:35:02 -04:00
Stéphane Graber
e3ff929169
incusd/devices: Cleanup leftover forkproxy on startup
If a container shuts down or gets killed while incusd is down, the
forkproxy processes get reparented to PID1 and remain there forever. Add
logic to detect that and clean them up.

Closes #3415

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 12:25:02 -04:00
Stéphane Graber
ab13ef42e6
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 12:22:25 -04:00
kazan417
4b69c972d7
incus/config: Fix typo in usage
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-28 12:17:48 -04:00
kazan417
484003fc8b
incus/image: Improve usage
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-28 12:17:41 -04:00
kazan417
c092a5993e
incus/move: Improve usage
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-28 12:17:34 -04:00
kazan417
60deb2c3d7
incus/storage/volume: Improve usage
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-28 12:17:25 -04:00
kazan417
e11fb5e05a
incus/remote: Improve usage
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-28 12:17:17 -04:00
Stéphane Graber
3070a9159e
Merge pull request #3419 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-28 11:55:04 -04:00
Américo Monteiro
03f4e7a950
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1793 of 1793 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-05-28 17:31:12 +02:00
Kazantsev Mikhail
48cba5a167
Translated using Weblate (Swedish)
Currently translated at 100.0% (1793 of 1793 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-28 17:31:11 +02:00
Kazantsev Mikhail
4a2886a5d4
Translated using Weblate (Russian)
Currently translated at 100.0% (1793 of 1793 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-28 17:31:11 +02:00
Stéphane Graber
59bc605417
Merge pull request #3413 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-28 11:30:44 -04:00
Stéphane Graber
386553e993
Merge pull request #3414 from breml/simplestreams-absolute-paths
client: handle absolute paths for simplestream files
2026-05-28 11:30:07 -04:00
Benjamin Somers
b3dec570c3 incusd/images: Revert 36f513c
This reverts 36f513cf4e, as it no longer
makes sense when daemon volumes are not allowed to be on shared storage.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-28 10:15:48 +00:00
Benjamin Somers
94d9118a8b incusd/storage: Prevent creating daemon volumes on shared pools
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-28 10:15:02 +00:00
Benjamin Somers
7a931464e7 api: api_fragments
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-28 10:08:26 +00:00
Benjamin Somers
6a99ceb23b incusd/project: Handle server objects
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-28 10:07:02 +00:00
Benjamin Somers
ed0cd33415 incusd/db/cluster/entities: Add TypeServer and fix map sorting
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-28 10:07:02 +00:00
Benjamin Somers
acc1db764e incusd/storage: Improve handling of daemon volumes
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-28 10:07:02 +00:00
Benjamin Somers
ae5b55a706 shared/api/url: Add URL fragment setter
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-28 10:07:02 +00:00
Lucas Bremgartner
d033436180
client: handle absolute paths for simplestream files
Adds support for absolute paths in simplestream images.json.

Image servers other than the official image server at
https://images.linuxcontainers.org/ may serve from
non root locations (e.g. "https://server.tld/dir")
and additionally return absolute paths for the acutal
files, e.g. "/files/...", which then should result
in "https://server.tld/files/...".

Signed-off-by: Lucas Bremgartner <lucas.bremgartner@futurfusion.io>
2026-05-28 09:53:26 +02:00
Daniel Dybing
dcba87c56e
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-05-28 07:32:56 +02:00
Anonymous
8a721c74ae
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:32:56 +02:00
Kazantsev Mikhail
d7064c0dbd
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-28 07:32:37 +02:00
Andika Triwidada
69202dd313
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-05-28 07:32:37 +02:00
Anonymous
e6862c1791
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:32:35 +02:00
Anonymous
5c94b3b140
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:32:17 +02:00
Dklfajsjfi49wefklsf32
8bad15f2a7
Translated using Weblate (Dutch)
Currently translated at 10.9% (196 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-05-28 07:31:57 +02:00
Anonymous
c8c49c6f9c
Translated using Weblate (Dutch)
Currently translated at 10.9% (196 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:31:56 +02:00
Anonymous
590248e197
Translated using Weblate (Russian)
Currently translated at 99.7% (1787 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:31:32 +02:00
Kazantsev Mikhail
06be8b083a
Translated using Weblate (Russian)
Currently translated at 99.7% (1787 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-28 07:31:32 +02:00
Hiroaki Nakamura
687ab09752
Translated using Weblate (Japanese)
Currently translated at 73.0% (1309 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-05-28 07:31:13 +02:00
KATOH Yasufumi
c4d3a95167
Translated using Weblate (Japanese)
Currently translated at 73.0% (1309 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-05-28 07:31:13 +02:00
Kazantsev Mikhail
ec9b5ab66e
Translated using Weblate (Japanese)
Currently translated at 73.0% (1309 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-28 07:31:09 +02:00
Anonymous
514f3f9915
Translated using Weblate (Japanese)
Currently translated at 73.0% (1309 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:31:08 +02:00
Anonymous
d5b810454d
Translated using Weblate (Georgian)
Currently translated at 32.0% (574 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:30:48 +02:00
Temuri Doghonadze
87d6444d95
Translated using Weblate (Georgian)
Currently translated at 32.0% (574 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-05-28 07:30:35 +02:00
Dklfajsjfi49wefklsf32
b74e710f7b
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-05-28 07:30:27 +02:00
Stéphane Graber
642d7be016
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-28 07:30:27 +02:00
Tobias Gerold
8d822514fb
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-05-28 07:30:27 +02:00
Jan Mittelstädter
3d4860470a
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-05-28 07:30:26 +02:00
Anonymous
0fe039c7fb
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:30:25 +02:00
Kazantsev Mikhail
58ba3cf892
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-28 07:30:05 +02:00
Jorge Teixeira
84956273eb
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-05-28 07:30:05 +02:00
Anonymous
9c593eb2af
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:30:05 +02:00
Anonymous
8c2c8fd33e
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1791 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:29:45 +02:00
Américo Monteiro
2b8ed11f1e
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1791 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-05-28 07:29:45 +02:00
Anonymous
040304a6de
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:29:22 +02:00
meipeter
cf5cfdab1b
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-05-28 07:29:03 +02:00
daoge
ec894e109d
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-05-28 07:29:02 +02:00
Kwok Guy
dc07fa6cbd
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-05-28 07:29:02 +02:00
yooadmin
c47a4616b4
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-05-28 07:29:02 +02:00
Sakiko
8df8bf2ee0
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-05-28 07:29:02 +02:00
Loge X
3857f8d2c5
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-05-28 07:29:01 +02:00
Anonymous
ba59ec11b2
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:28:56 +02:00
IO01
9290adbb9b
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-05-28 07:28:45 +02:00
Anonymous
b7d472fe23
Translated using Weblate (Swedish)
Currently translated at 99.7% (1787 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:28:38 +02:00
Kazantsev Mikhail
2b55004c28
Translated using Weblate (Swedish)
Currently translated at 99.7% (1787 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-28 07:28:38 +02:00
Daniel Nylander
ab2f94586d
Translated using Weblate (Swedish)
Currently translated at 99.7% (1787 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-05-28 07:28:37 +02:00
pesder
c7a852ee02
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-05-28 07:28:17 +02:00
Anonymous
d5c44609a9
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:28:16 +02:00
Varlorg
8d8bb4c504
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-05-28 07:27:55 +02:00
Steeve Droz
e0562d4702
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-05-28 07:27:55 +02:00
Laterria.Severino
13602f5590
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-05-28 07:27:54 +02:00
Kazantsev Mikhail
366c6982c0
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-28 07:27:54 +02:00
smCloudInTheSky
a3faaa16c6
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-05-28 07:27:54 +02:00
Corabel Bertolini
d1f625dca5
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-05-28 07:27:53 +02:00
Anonymous
0a42626445
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:27:53 +02:00
Benjamin Somers
805c34e58f
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-28 07:27:47 +02:00
montag451
7261d2ac94
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-05-28 07:27:34 +02:00
Kazantsev Mikhail
e8aedd5236
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-28 07:27:28 +02:00
Paulo Coghi
61638c4eae
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-05-28 07:27:28 +02:00
Anonymous
5146266216
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:27:28 +02:00
Alberto Donato
227bca8e6f
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-05-28 07:27:05 +02:00
Anonymous
cf61cadeea
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-28 07:27:05 +02:00
Stéphane Graber
736c14e4e4
Merge pull request #3411 from stgraber/s3
Implement S3 pre-signed URLs
2026-05-27 18:27:12 -04:00
Stéphane Graber
e3cae1aa26
tests: Add storage bucket presigned URL test
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 16:55:36 -04:00
Stéphane Graber
6b04779b6c
incus/storage/s3: Support SigV2 presigned URLs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 16:55:30 -04:00
Stéphane Graber
653125ae33
incus/storage/s3: Support SigV4 presigned URLs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 16:53:23 -04:00
Stéphane Graber
20e7faa9ef
Merge pull request #3409 from bensmrs/rr-remotes
Add support for static round-robin remotes
2026-05-27 16:45:56 -04:00
Benjamin Somers
983aed4344 i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-27 19:35:26 +00:00
Benjamin Somers
49f293976b doc: Update command name
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-27 19:35:26 +00:00
Benjamin Somers
eb79979573 incus: Keep track of last working remote
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-27 19:35:26 +00:00
Benjamin Somers
74a7a507f3 incus: Remove global mutable state from the parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-27 19:35:26 +00:00
Benjamin Somers
39a68b12db incus: Refactor calls to the parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-27 19:35:26 +00:00
Benjamin Somers
19ce43ffd4 incus/remote: Add support for multiple URLs
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-27 19:31:13 +00:00
Stéphane Graber
0be992c3de
Merge pull request #3404 from stgraber/rebuild
Implement storage volume rebuild
2026-05-27 14:54:01 -04:00
Stéphane Graber
c13a531de1
Merge pull request #3403 from stgraber/hardening
incusd/instance/lxc: Use os.Root for templating
2026-05-27 13:24:59 -04:00
Stéphane Graber
a6e93dc2c6
Merge pull request #3408 from stgraber/network
VLAN filtering fixes
2026-05-27 10:11:30 -04:00
Stéphane Graber
731438dcb7
Merge pull request #3407 from stgraber/lint
More codebase cleanup
2026-05-27 10:10:38 -04:00
Stéphane Graber
423abf0e37
global: Use strings.Builder for string concatenation in loops
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:39:07 -04:00
Stéphane Graber
75bcc0159a
shared/api: Drop no-op omitempty on nested struct fields
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:37:58 -04:00
Stéphane Graber
6e39b60664
global: Use slices.Backward for reverse iteration
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:37:57 -04:00
Stéphane Graber
be3bb47d39
global: Use strings.CutSuffix instead of HasSuffix/TrimSuffix
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:37:56 -04:00
Stéphane Graber
b7a3c767f8
global: Use strings.Cut instead of strings.Split/SplitN
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:37:55 -04:00
Stéphane Graber
99e0d89fe1
incusd/instance/drivers: Use the min builtin for memory capping
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:37:54 -04:00
Stéphane Graber
fc58212d55
incusd: Use unsafe.Add for pointer arithmetic in forkproxy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:37:53 -04:00
Stéphane Graber
2b1230e469
global: Use t.Context in tests
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:37:52 -04:00
Stéphane Graber
eceb86e9cf
global: Use reflect.TypeFor
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:37:51 -04:00
Stéphane Graber
5003a4e3c1
global: Use range-over-int loops
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:37:50 -04:00
Stéphane Graber
78385fbe40
global: Use maps.Copy instead of manual copy loops
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:37:49 -04:00
Stéphane Graber
697b3bed3d
global: Use sync.WaitGroup.Go for goroutine management
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:37:48 -04:00
Stéphane Graber
d1ae749ed7
incusd: Rename dqlite references to cowsql
We use cowsql, not dqlite, so rename all internal references, but keep
the external ones (upgrade protocols) in place to avoid breakages.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-27 03:37:47 -04:00
Stéphane Graber
56db9d8aac
Merge pull request #3402 from stgraber/main
Always return the total disk size on instances
2026-05-27 03:36:33 -04:00
Stéphane Graber
6f008275c9
incusd/network/physical: Skip VLAN interface on filtered bridges
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 23:18:06 -04:00
Stéphane Graber
85b9c664b6
incusd/network/ovn: Correctly set VLAN on uplink veth
Closes #3160

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 23:18:05 -04:00
Stéphane Graber
85cff989f8
tests: Add storage volume rebuild test
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:35:11 -04:00
Stéphane Graber
41419811f2
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:35:10 -04:00
Stéphane Graber
a136516ac0
incus/storage_volume: Add rebuild command
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:35:09 -04:00
Stéphane Graber
aed1d697dc
client: Add RebuildStoragePoolVolume
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:35:08 -04:00
Stéphane Graber
596ce35833
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:35:07 -04:00
Stéphane Graber
10707d65f6
incusd/storage: Add storage volume rebuild API endpoint
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:35:06 -04:00
Stéphane Graber
a172b4ef43
shared/api: Add StorageVolumeRebuildPost
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:35:05 -04:00
Stéphane Graber
24c2416f45
incusd/storage: Add RebuildCustomVolume to pool backend
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:35:03 -04:00
Stéphane Graber
4e05c8f5ea
api: storage_volumes_rebuild
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:31:54 -04:00
Stéphane Graber
3bc1c78983
Merge pull request #3405 from stgraber/lint
Fix remaining golangci-lint issues
2026-05-26 18:31:00 -04:00
Stéphane Graber
b6d7760c98
test/lint: Run full golangci-lint instead of only new changes
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:47 -04:00
Stéphane Graber
814456248f
incusd/instance/operationlock: Omit redundant error type from sentinel var declaration (revive:var-declaration)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:46 -04:00
Stéphane Graber
a9502bc9e8
incusd/dnsmasq/dhcpalloc: Omit redundant error type from sentinel var declaration (revive:var-declaration)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:45 -04:00
Stéphane Graber
81c6b6a92a
incusd/cluster: Omit redundant error type from sentinel var declaration (revive:var-declaration)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:44 -04:00
Stéphane Graber
3ee097f617
incusd: Omit redundant error type from sentinel var declaration (revive:var-declaration)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:43 -04:00
Stéphane Graber
238e49c0d6
incusd/operations: Inline reflect.Ptr as reflect.Pointer (govet:inline)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:42 -04:00
Stéphane Graber
40131a533d
incus: Inline reflect.Ptr as reflect.Pointer (govet:inline)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:41 -04:00
Stéphane Graber
84ee63dd81
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:40 -04:00
Stéphane Graber
3fb3461f55
incus: Add newline after block before switch case (newline-after-block)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:39 -04:00
Stéphane Graber
3528cb980c
incusd/storage/drivers: Add newline after block before switch case (newline-after-block)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:38 -04:00
Stéphane Graber
6435d4d006
incusd/instance/drivers: Add newline after block before switch case (newline-after-block)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:37 -04:00
Stéphane Graber
a0ad11b41c
incusd/device: Add newline after block before switch case (newline-after-block)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:36 -04:00
Stéphane Graber
2259f9b7d7
incusd: Add newline after block before switch case (newline-after-block)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:35 -04:00
Stéphane Graber
43b8612f91
incusd/fsmonitor/drivers: Add doc comments on exported Name methods (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:34 -04:00
Stéphane Graber
093f3b1890
incusd/fsmonitor/drivers: Rename locals that shadow logger import (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:33 -04:00
Stéphane Graber
16eb18fb17
incusd/fsmonitor: Rename local that shadows logger import (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:32 -04:00
Stéphane Graber
d2b78d40f9
incusd/seccomp: Simplify setxattr whiteout check with early return (revive:early-return)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:31 -04:00
Stéphane Graber
90632ffdca
incusd/backup: Rename locals that shadow state import (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:30 -04:00
Stéphane Graber
4d634b231c
incusd/apparmor: Omit inferred type from strings.Builder declarations (staticcheck:ST1023)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:30 -04:00
Stéphane Graber
c9edc64fd0
incusd/apparmor: Add doc comment on nullWriteCloser.Close (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:29 -04:00
Stéphane Graber
ecbfb4d82f
internal/linux: Add missing doc comments on exported symbols (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:28 -04:00
Stéphane Graber
620ffa083b
internal/linux: Drop redundant = nil from err declaration (revive:var-declaration)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:27 -04:00
Stéphane Graber
9fc86085fd
internal/linux: Rename devpts_fd parameter (revive:var-naming)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:26 -04:00
Stéphane Graber
cedd8ffdf2
internal/linux: Return error last from GetErrno (revive:error-return)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:25 -04:00
Stéphane Graber
c7fc533113
incusd/device: Use tagged switch statements (staticcheck:QF1003)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:24 -04:00
Stéphane Graber
cd23fa78bf
incusd/device: Apply De Morgan's law to simplify booleans (staticcheck:QF1001)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:23 -04:00
Stéphane Graber
94be2574a3
incusd/device: Remove embedded StorageVolume field from selector (staticcheck:QF1008)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:22 -04:00
Stéphane Graber
aa652fc23f
incusd/device: Check container type assertions (revive:unchecked-type-assertion)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:21 -04:00
Stéphane Graber
7f5974536b
incusd/device: Invert conditions to return early (revive:early-return)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:20 -04:00
Stéphane Graber
5a864f5c48
incusd/device: Remove unnecessary blank line in validateConfig (whitespace)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:19 -04:00
Stéphane Graber
d0ed6ed11b
incusd/device: Remove blank line at start of block (revive:empty-lines)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:18 -04:00
Stéphane Graber
ce7debf9fb
incusd/device: Avoid defer inside loop in checkAttachedRunningProcesses (revive:defer)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:17 -04:00
Stéphane Graber
ebf1588336
incusd/device: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:16 -04:00
Stéphane Graber
93c7426174
incusd/auth/oidc: Add doc comments on exported methods (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:15 -04:00
Stéphane Graber
d2553fffa5
incusd/auth/oidc: Check email claim type assertion (revive:unchecked-type-assertion)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:14 -04:00
Stéphane Graber
e063a89782
incusd/auth: Use strings.Split instead of SplitN (staticcheck:QF1004)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:13 -04:00
Stéphane Graber
cbb27e8f83
incusd/auth: Add doc comments on exported symbols (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:12 -04:00
Stéphane Graber
7e1350d1e8
incusd/auth: Rename locals that shadow logger import (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:11 -04:00
Stéphane Graber
c9c23b654a
incusd/events: Add doc comments on exported methods (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:10 -04:00
Stéphane Graber
526127bca5
incusd/events: Remove embedded Conn field from selectors (staticcheck:QF1008)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:09 -04:00
Stéphane Graber
b37bcc2b10
incusd/response: Use fmt.Fprintf instead of WriteString with Sprintf (staticcheck:QF1012)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:08 -04:00
Stéphane Graber
8fb3f360dc
incusd/response: Avoid defer inside loop in fileResponse.Render (revive:defer)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:07 -04:00
Stéphane Graber
1f2358a4b8
incusd/response: Add doc comments on exported Render methods (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:06 -04:00
Stéphane Graber
981961766f
incusd/device/config: Rename copy locals that shadow builtin (revive:redefines-builtin-id)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:05 -04:00
Stéphane Graber
43a7872e36
incusd: Fix remaining identifier naming (revive:var-naming)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:05 -04:00
Stéphane Graber
717528f8f8
incusd: Annotate intentional os.Exit calls (revive:deep-exit)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:04 -04:00
Stéphane Graber
8ac571eefe
incusd: Remove useless break in case clauses (revive:useless-break)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:03 -04:00
Stéphane Graber
69d9cc6221
incusd: Remove blank line at start of block (revive:empty-lines)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:02 -04:00
Stéphane Graber
1ba279ff44
incusd: Remove empty else block (revive:empty-block)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:01 -04:00
Stéphane Graber
ff2c233261
incusd: Rename local that shadows builtin min (revive:redefines-builtin-id)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:08:00 -04:00
Stéphane Graber
6a3a46410b
incusd: Add space after comment delimiter (revive:comment-spacings)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:59 -04:00
Stéphane Graber
f8d1bb3e69
incusd: Avoid deferring inside loops (revive:defer)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:58 -04:00
Stéphane Graber
ce91687dba
incusd: Drop else after return (revive:indent-error-flow)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:57 -04:00
Stéphane Graber
8103a13e68
incusd: Return early to reduce nesting (revive:early-return)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:56 -04:00
Stéphane Graber
24dfc9ae0b
incusd: Use comma-ok form for type assertions (revive:unchecked-type-assertion)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:55 -04:00
Stéphane Graber
9a8dcf5e98
incusd: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:54 -04:00
Stéphane Graber
da5ef5efc0
incusd: Fix identifier naming (revive:var-naming)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:53 -04:00
Stéphane Graber
dcb035a495
incusd: Use tagged switch statements (staticcheck:QF1003)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:52 -04:00
Stéphane Graber
7f5b0065eb
incusd: Remove dead source connection (staticcheck:SA4006)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:51 -04:00
Stéphane Graber
e7947087b1
incusd: Fix errors.Is argument order (staticcheck:SA1032)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:50 -04:00
Stéphane Graber
af6895d5f5
incusd: Use fmt.Fprintf instead of Write of Sprintf (staticcheck:QF1012)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:49 -04:00
Stéphane Graber
b5e2a83584
incusd: Convert byte slice argument to string (staticcheck:QF1010)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:48 -04:00
Stéphane Graber
2efcc82b8b
incusd: Merge conditional assignments into declarations (staticcheck:QF1007)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:47 -04:00
Stéphane Graber
94fb33e79d
incusd: Remove unnecessary trailing newline (whitespace)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:46 -04:00
Stéphane Graber
83638731ce
incusd: End comments with a period (godot)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:45 -04:00
Stéphane Graber
84b8c47361
incusd: Fix import grouping (gci)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:44 -04:00
Stéphane Graber
8abd36d958
incusd/config: Use fmt.Fprintf instead of WriteString (staticcheck:QF1012)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:43 -04:00
Stéphane Graber
d1cbd38c9a
incusd/bgp: Remove unused setup method (unused)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:43 -04:00
Stéphane Graber
5fe12281c2
incusd/firewall/drivers: Remove unused subnetMask function (unused)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:42 -04:00
Stéphane Graber
18beb8050c
incusd/metadata: Add doc comment on exported var Data (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:41 -04:00
Stéphane Graber
9925757b44
incusd/refcount: Omit redundant type in var declaration (revive:var-declaration)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:40 -04:00
Stéphane Graber
1bf8a6da09
incusd/ucred: Check type assertion in GetConnFromContext (revive:unchecked-type-assertion)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:39 -04:00
Stéphane Graber
36d68e13a6
incusd/scriptlet/log: Fix doc comment on exported CreateLogger (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:38 -04:00
Stéphane Graber
36f7f5e136
incusd/scriptlet: Use tagged switch statements (staticcheck:QF1003)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:37 -04:00
Stéphane Graber
9bcd6a9e99
incusd/metrics: Use fmt.Fprintf instead of WriteString (staticcheck:QF1012)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:36 -04:00
Stéphane Graber
b23ccc98b4
incusd/dnsmasq/dhcpalloc: Lift break condition into loop (staticcheck:QF1006)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:35 -04:00
Stéphane Graber
87a18276ae
incusd/dnsmasq: Use strings.Split instead of SplitN (staticcheck:QF1004)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:34 -04:00
Stéphane Graber
0334f16feb
incusd/dns: Rename param that shadows db import (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:33 -04:00
Stéphane Graber
84566ee774
incusd/dns: Add doc comment on exported method ServeDNS (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:32 -04:00
Stéphane Graber
324d8c013b
incus/usage: Remove dead assignments to renderedAtoms (staticcheck:SA4006)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:31 -04:00
Stéphane Graber
4bf86aa954
incus: Remove unused functions (unused)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:30 -04:00
Stéphane Graber
e73b2e41ca
incus: Use tagged switch statement (staticcheck:QF1003)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:29 -04:00
Stéphane Graber
b1eef2f5c2
incusd/instance/drivers: Use tagged switch statements (staticcheck:QF1003)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:28 -04:00
Stéphane Graber
33be6f60b3
incusd/instance/drivers: Replace append loop with variadic append (staticcheck:S1011)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:27 -04:00
Stéphane Graber
4f27d1246d
incusd/instance/drivers: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:26 -04:00
Stéphane Graber
a710c14291
incusd/instance/drivers: Add doc comments on exported methods (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:25 -04:00
Stéphane Graber
36e2c11e95
incusd/instance/drivers: Check type assertions (revive:unchecked-type-assertion)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:24 -04:00
Stéphane Graber
03437dd807
incusd/instance/drivers: Return early to reduce nesting (revive:early-return)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:23 -04:00
Stéphane Graber
0b6a85be03
incusd/instance/drivers: Avoid deferring inside loops (revive:defer)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:22 -04:00
Stéphane Graber
89f566970c
incusd/instance/drivers: Omit inferred type from var declaration (revive:var-declaration)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:21 -04:00
Stéphane Graber
019eb3f596
incusd/instance/drivers: Remove unnecessary blank line at end of block (whitespace)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:20 -04:00
Stéphane Graber
d3ff931f30
incusd/instance/drivers: Remove unused const and function (unused)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:19 -04:00
Stéphane Graber
ae45d5ae84
incusd/instance: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:19 -04:00
Stéphane Graber
464aa82c27
incusd/instance: Use fmt.Fprintf instead of WriteString (staticcheck:QF1012)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:18 -04:00
Stéphane Graber
518dcb1ac8
incusd/instance: Return explicit values instead of bare returns (revive:bare-return)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:17 -04:00
Stéphane Graber
916f3ce294
incusd/instance/drivers/qmp: Use tagged switch statement (staticcheck:QF1003)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:16 -04:00
Stéphane Graber
477be9691a
incusd/instance/drivers/qmp: Fix doc comment on exported Run method (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:15 -04:00
Stéphane Graber
5bc49d4eba
incusd/logging: Use fmt.Fprintf instead of WriteString (staticcheck:QF1012)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:14 -04:00
Stéphane Graber
92f4224237
incusd/db: Omit type from strings.Builder declarations (staticcheck:ST1023)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:13 -04:00
Stéphane Graber
80ac90be06
incusd/db: Add space after comment delimiter (revive:comment-spacings)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:12 -04:00
Stéphane Graber
80cd08650d
incusd/db: Omit redundant types in var declarations (revive:var-declaration)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:11 -04:00
Stéphane Graber
8fb881a866
incusd/db: Use fmt.Fprintf instead of WriteString (staticcheck:QF1012)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:10 -04:00
Stéphane Graber
6cb6432f8c
incusd/db: Check type assertion result (revive:unchecked-type-assertion)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:09 -04:00
Stéphane Graber
9ddf037930
incusd/db: Rename local that redefines builtin max (revive:redefines-builtin-id)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:08 -04:00
Stéphane Graber
8d944986cc
incusd/db: Rename profileIds parameter to profileIDs (revive:var-naming)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:07 -04:00
Stéphane Graber
4e4e709ce1
incusd/db: Apply De Morgan's law to simplify boolean (staticcheck:QF1001)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:06 -04:00
Stéphane Graber
08da4b1f6d
incusd/db: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:05 -04:00
Stéphane Graber
5389cd310a
incusd/db/cluster: Use fmt.Fprintf instead of WriteString (staticcheck:QF1012)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:04 -04:00
Stéphane Graber
3080ffcf30
incusd/db/cluster: Check type assertion result (revive:unchecked-type-assertion)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:03 -04:00
Stéphane Graber
d99ada0a4c
incusd/db/cluster: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:02 -04:00
Stéphane Graber
405ef73621
incusd/db/cluster: Remove redundant import alias (revive:redundant-import-alias)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:01 -04:00
Stéphane Graber
4da6ad08a9
incusd/db/schema: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:07:00 -04:00
Stéphane Graber
f6dffb558a
incusd/db/schema: Check error from db.Close (errcheck)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:59 -04:00
Stéphane Graber
03a9b608e3
incusd/db/node: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:58 -04:00
Stéphane Graber
44b91faf24
incusd/db/query: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:57 -04:00
Stéphane Graber
12ae5b7b27
incusd/db/query: Add missing doc comments on exported symbols (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:56 -04:00
Stéphane Graber
132102b065
incusd/cluster: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:55 -04:00
Stéphane Graber
d1e7c49c35
incusd/cluster: Avoid deferring inside loops and chains (revive:defer)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:54 -04:00
Stéphane Graber
a08236a220
incusd/cluster: Simplify with early return (revive:early-return)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:54 -04:00
Stéphane Graber
92ec9d2d75
incusd/cluster: Add missing doc comments on exported methods (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:53 -04:00
Stéphane Graber
cab6a8da3a
incusd/cluster: Drop redundant client import alias (revive:redundant-import-alias)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:52 -04:00
Stéphane Graber
e262469e59
incusd/endpoints: Rename locals that shadow import (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:51 -04:00
Stéphane Graber
1ffa73f384
incusd/operations: Rename param that shadows import (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:50 -04:00
Stéphane Graber
9d31ab1804
incusd/operations: Add missing doc comments on exported methods (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:49 -04:00
Stéphane Graber
a54f03f832
incusd/network: Use tagged switch statements (staticcheck:QF1003)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:48 -04:00
Stéphane Graber
58cb0a01b0
incusd/network: Lift break condition into loop (staticcheck:QF1006)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:47 -04:00
Stéphane Graber
ab1f873434
incusd/network: Merge conditional assignment into declaration (staticcheck:QF1007)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:46 -04:00
Stéphane Graber
e40b627804
incusd/network: Remove embedded common field from selectors (staticcheck:QF1008)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:45 -04:00
Stéphane Graber
f5dde13dcf
incusd/network: Remove blank line at start of block (revive:empty-lines)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:44 -04:00
Stéphane Graber
5d24488c68
incusd/network: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:43 -04:00
Stéphane Graber
dcd9fe6071
incusd/network: Add and fix doc comments on exported symbols (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:42 -04:00
Stéphane Graber
62bdf878f1
incusd/network/acl: Remove blank line at start of switch (revive:empty-lines)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:41 -04:00
Stéphane Graber
d9c943bbf7
incusd/network/acl: Invert condition to return early (revive:early-return)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:40 -04:00
Stéphane Graber
fc4c24ec3a
incusd/network/acl: Merge conditional assignment into declaration (staticcheck:QF1007)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:39 -04:00
Stéphane Graber
d13e832262
incusd/network/acl: Use tagged switch on rule.Protocol (staticcheck:QF1003)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:38 -04:00
Stéphane Graber
7e118f8b47
incusd/network/acl: Use tagged switch on rule.Action (staticcheck:QF1002)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:37 -04:00
Stéphane Graber
39f821678d
incusd/network/acl: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:36 -04:00
Stéphane Graber
6bc4f9bedb
incusd/network/zone: Add and fix doc comments on exported methods (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:35 -04:00
Stéphane Graber
cab135ba68
incusd/network/zone: Rename param that shadows state import (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:34 -04:00
Stéphane Graber
de5ae4a2f5
incusd/network/ovn: Use tagged switch statements (staticcheck:QF1003)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:33 -04:00
Stéphane Graber
ccb14fbbce
incusd/network/ovs: Use strings.Split instead of SplitN (staticcheck:QF1004)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:32 -04:00
Stéphane Graber
03a39a4833
incusd/network/ovs: Remove unused unquote function (unused)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:31 -04:00
Stéphane Graber
b1286def8d
incusd/storage/drivers: Use tagged switch statements (staticcheck:QF1003)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:30 -04:00
Stéphane Graber
f5d5d3a516
incusd/storage/drivers: Use strings.Split instead of SplitN (staticcheck:QF1004)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:30 -04:00
Stéphane Graber
1888bb9e2a
incusd/storage/drivers: Omit inferable type from declaration (staticcheck:QF1011)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:29 -04:00
Stéphane Graber
271c754ee3
incusd/storage/drivers: Remove extra blank lines at start of block (revive:empty-lines)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:28 -04:00
Stéphane Graber
5940b9c082
incusd/storage/drivers: Simplify if/else with early return (revive:early-return)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:27 -04:00
Stéphane Graber
b3bfae10f2
incusd/storage/drivers: Avoid deferring inside loops (revive:defer)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:26 -04:00
Stéphane Graber
57e11bd8f6
incusd/storage/drivers: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:25 -04:00
Stéphane Graber
3050ab78d5
incusd/storage/drivers: Add missing doc comments on exported symbols (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:24 -04:00
Stéphane Graber
b7149911b8
incusd/storage: Simplify boolean with De Morgan's law (staticcheck:QF1001)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:23 -04:00
Stéphane Graber
ad71c6eb84
incusd/storage: Use tagged switch statements (staticcheck:QF1003)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:22 -04:00
Stéphane Graber
577d3d0c73
incusd/storage: Check type assertion result (revive:unchecked-type-assertion)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:21 -04:00
Stéphane Graber
e9736d2807
incusd/storage: Simplify if/else with early return (revive:early-return)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:20 -04:00
Stéphane Graber
5bd06f3742
incusd/storage: Rename locals that shadow imports (revive:import-shadowing)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:19 -04:00
Stéphane Graber
c8d0ef59ba
incusd/storage: Add missing doc comments on exported symbols (revive:exported)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 18:06:18 -04:00
Stéphane Graber
74964721d4
tests: Update btrfs test for new behavior
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 13:05:38 -04:00
Stéphane Graber
77130c0f3e
incusd/instance/lxc: Use os.Root for templating
In a recent security fix we introduced a clever O_BENEATH openat2 based
security check when applying templates.

This allowed us to return an actual error to the user when dealing with
a template that's attempting to escape the container and access host
files rather than just silently move on with access to the container
rootfs instead.

Unfortunately this approach has now caused at least 3 spurious security
reports by humans and LLMs alike getting confused by our logic.

So let's swap to an approach that's easier to understand even if it
doesn't yield as satisfying an error when it catches something odd going
on.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 12:43:15 -04:00
Stéphane Graber
376a46f5fa
incusd/instance: Handle negative disk usage values
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 10:41:51 -04:00
Stéphane Graber
1944097609
incusd/storage: Return -1 as disk usage when the driver doesn't support it
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 10:41:50 -04:00
Stéphane Graber
5b768b271d
incus/info: Handle negative usage values (unknown)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 10:41:50 -04:00
Stéphane Graber
1877275f55
Merge pull request #3395 from stgraber/main
More bugfixes
2026-05-26 10:41:40 -04:00
Stéphane Graber
b6bd467c2c
Merge pull request #3401 from bensmrs/fix-push
Fix push behavior with UID/GID/mode overrides
2026-05-26 10:36:24 -04:00
Benjamin Somers
bdfffe2ad1 i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-26 14:13:04 +00:00
Benjamin Somers
3b1cb14eb6 incus/storage_volume: Fix push behavior with UID/GID/mode overrides
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-26 14:12:49 +00:00
Benjamin Somers
041ef0b263 tests: Add thorough tests for incus file push with UID/GID/mode overrides
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-26 14:12:49 +00:00
Benjamin Somers
1c6abc45c6 incus/file: Fix typo
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-26 14:12:49 +00:00
Benjamin Somers
e663e798b3 incus/file: Fix push behavior with UID/GID/mode overrides
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-26 14:12:49 +00:00
Stéphane Graber
5462852101
incusd/instances: Only reset NVRAM on secureboot change for VMs
Profile updates could cause a VM-only volatile key to be applied to containers.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 10:08:19 -04:00
Stéphane Graber
d88c8b66b0
incusd/storage/zfs: Use latest common GUID as refresh base
Closes #2952

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 10:08:18 -04:00
Stéphane Graber
f32e9ff627
Merge pull request #3400 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-26 08:21:54 -04:00
Kazantsev Mikhail
d6a90ce88a
Translated using Weblate (Russian)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-26 14:18:32 +02:00
Stéphane Graber
8d82e0057b
Merge pull request #3399 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-26 08:18:31 -04:00
Kazantsev Mikhail
714cdec2a1
Translated using Weblate (Swedish)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-26 14:18:31 +02:00
Américo Monteiro
4f4afd6e94
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-05-26 14:18:30 +02:00
Kazantsev Mikhail
87c3226ddf
Translated using Weblate (Swedish)
Currently translated at 99.9% (1789 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-26 14:18:28 +02:00
Stéphane Graber
120d21914a
Merge pull request #3398 from presztak/tpm_live_migration
Enable TPM live migration
2026-05-26 08:18:18 -04:00
Kazantsev Mikhail
0e7cd57fda
Translated using Weblate (Russian)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-26 12:16:21 +00:00
Kazantsev Mikhail
5bd792814e
Translated using Weblate (Swedish)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-26 12:16:20 +00:00
Américo Monteiro
881517615b
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-05-26 12:16:19 +00:00
Kazantsev Mikhail
80e6d628df
Translated using Weblate (Swedish)
Currently translated at 99.9% (1789 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-26 12:16:19 +00:00
Stéphane Graber
0bd07e6879
Merge pull request #3397 from stgraber/network
incusd/network/ovn: Use dnat_and_snat for fully mapped external addre…
2026-05-26 08:16:10 -04:00
Stéphane Graber
35ba628e09
Merge pull request #3394 from stgraber/address-sets
Implement ranges in network address sets
2026-05-26 08:15:24 -04:00
Piotr Resztak
8d7c80dc29 inucsd/devices/tpm: Enable tpm live migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-05-26 09:49:10 +02:00
Stéphane Graber
3d3d55e7ad
tests: Add IP range coverage for network address sets
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 01:02:11 -04:00
Stéphane Graber
ab72b57400
doc: Document IP range support in network address sets
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 01:02:11 -04:00
Stéphane Graber
2ab2878d4b
incusd/network/address-set: Support IP ranges
Adds support for IP ranges in address sets.
Because those will need to get expanded, a maximum of 256 addresses can
be contained in a range. Anything else should use a CIDR subnet instead.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 01:02:10 -04:00
Stéphane Graber
91d79c875b
api: network_address_set_ip_ranges
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-26 01:02:07 -04:00
Stéphane Graber
b60e825486
Merge pull request #3396 from bensmrs/linstor-raw
Allow editing raw LINSTOR properties
2026-05-26 01:01:22 -04:00
Benjamin Somers
539689353d doc: Update config
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-26 02:31:47 +00:00
Stéphane Graber
322c8cf72d
incusd/network/ovn: Use dnat_and_snat for fully mapped external addresses
When we detect the scenario where an instance is the default target of a
network forward AND has ipvX.nat.external set to match, put a full
snat+dnat in place.

Closes #2921

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-25 22:22:11 -04:00
Benjamin Somers
80d9d767a3 api: linstor_raw
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-26 02:10:39 +00:00
Benjamin Somers
0ef09a14a4 tests: Add quick raw DRBD key checks
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-26 02:00:17 +00:00
Benjamin Somers
611504fc9f incusd/storage/linstor: Allow setting raw DRBD properties on storage volumes
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-26 01:59:28 +00:00
Benjamin Somers
370352d9fb incusd/storage/linstor: Allow setting raw DRBD properties on storage pools
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-26 01:59:28 +00:00
Benjamin Somers
ad28bf60e8 incusd/storage: Allow skipping validation for more prefixes
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-26 01:59:28 +00:00
Stéphane Graber
50af187c72
Merge pull request #3392 from stgraber/network
Fix forkdhcp issues
2026-05-25 17:36:46 -04:00
Stéphane Graber
8f23ef17bb
Merge pull request #3391 from stgraber/cli
Fix incus-simplestreams issues
2026-05-25 17:31:03 -04:00
Stéphane Graber
2361b9a14a
gomod: Update dependencies
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-25 17:03:03 -04:00
Stéphane Graber
2fa89dad12
Makefile: Use older incus-os for Go 1.25
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-25 17:03:02 -04:00
Stéphane Graber
25dd6a9a91
incusd/forknet: Filter the DHCPv4 raw socket
The DHCPv4 client uses a raw socket, getting all traffic in userspace
and then discarding it there. This can be rather slow, so use a BPF
filter to avoid having Go handle every packet.

DHCPv6 isn't affected as it doens't use a raw socket.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-25 17:03:01 -04:00
Stéphane Graber
2e6b2fb8af
incusd/forknet: Handle zero wait time for DHCPv6
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-25 17:02:59 -04:00
Stéphane Graber
dbe4d053a8
incusd/forknet: Time out DHCPv6 lease acquisition
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-25 17:02:58 -04:00
Stéphane Graber
9c96d3c8c1
incusd/forknet: Time out DHCPv4 lease acquisition
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-25 17:02:57 -04:00
Stéphane Graber
2fefc50d22
Merge pull request #3393 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-25 15:36:21 -04:00
Daniel Dybing
61d3813634
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-05-25 19:18:06 +00:00
Anonymous
b81a6c9b49
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:18:05 +00:00
Anonymous
46b235bf8f
Translated using Weblate (Russian)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:17:32 +00:00
Kazantsev Mikhail
9bec60392a
Translated using Weblate (Russian)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-25 19:17:31 +00:00
Alberto Donato
ff12e27c8d
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-05-25 19:17:00 +00:00
Anonymous
d28b5d82a1
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:16:59 +00:00
meipeter
e6dfe69cec
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-05-25 19:16:24 +00:00
daoge
15939cec78
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-05-25 19:16:23 +00:00
Kwok Guy
a06de8e1a0
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-05-25 19:16:21 +00:00
yooadmin
9acb2ed38d
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-05-25 19:16:20 +00:00
Sakiko
bee0ee71ce
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-05-25 19:16:19 +00:00
Loge X
b60cf87979
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-05-25 19:16:17 +00:00
Anonymous
ed1b9c17b0
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:16:07 +00:00
IO01
697016fea4
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (706 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-05-25 19:15:49 +00:00
Anonymous
75ea1e51dc
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:15:44 +00:00
Kazantsev Mikhail
e6b00c4277
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-25 19:15:12 +00:00
Andika Triwidada
1f285e8132
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-05-25 19:15:11 +00:00
Anonymous
0c89fd4e59
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:15:08 +00:00
Dklfajsjfi49wefklsf32
f8f131aee7
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-05-25 19:14:37 +00:00
Stéphane Graber
e4eccd9ca2
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-25 19:14:37 +00:00
Tobias Gerold
b228b8c02a
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-05-25 19:14:36 +00:00
Jan Mittelstädter
ff3ed2da7c
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-05-25 19:14:34 +00:00
Anonymous
779ab5fe88
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:14:32 +00:00
Kazantsev Mikhail
b36a067805
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-25 19:14:03 +00:00
Jorge Teixeira
261831d9ef
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-05-25 19:14:03 +00:00
Anonymous
90ed760124
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:14:02 +00:00
Kazantsev Mikhail
4ef48aa7af
Translated using Weblate (Swedish)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-25 19:13:30 +00:00
Daniel Nylander
c37b358934
Translated using Weblate (Swedish)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-05-25 19:13:27 +00:00
Hiroaki Nakamura
c96d01f2bf
Translated using Weblate (Japanese)
Currently translated at 73.2% (1311 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-05-25 19:12:58 +00:00
KATOH Yasufumi
63a485e349
Translated using Weblate (Japanese)
Currently translated at 73.2% (1311 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-05-25 19:12:57 +00:00
Kazantsev Mikhail
cf022392c5
Translated using Weblate (Japanese)
Currently translated at 73.2% (1311 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-25 19:12:50 +00:00
Anonymous
4bc612852c
Translated using Weblate (Japanese)
Currently translated at 73.2% (1311 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:12:48 +00:00
Varlorg
2b174d24c7
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-05-25 19:12:15 +00:00
Steeve Droz
be2829ad55
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-05-25 19:12:14 +00:00
Laterria.Severino
1719dd3e45
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-05-25 19:12:14 +00:00
Kazantsev Mikhail
40d9bcf79e
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-25 19:12:13 +00:00
smCloudInTheSky
dfdde2144f
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-05-25 19:12:12 +00:00
Corabel Bertolini
30c5660813
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-05-25 19:12:10 +00:00
Anonymous
87d91e259a
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:12:08 +00:00
Benjamin Somers
bbf6307c5b
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-25 19:11:57 +00:00
montag451
dab33eaf8b
Translated using Weblate (French)
Currently translated at 75.8% (1358 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-05-25 19:11:36 +00:00
pesder
e35c0a99c0
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-05-25 19:11:29 +00:00
Anonymous
6b5932cc69
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:11:28 +00:00
Anonymous
2820348a80
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:10:56 +00:00
Américo Monteiro
42a66eb030
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-05-25 19:10:56 +00:00
Kazantsev Mikhail
4dfa46c701
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-25 19:10:23 +00:00
Paulo Coghi
90e6ce4d95
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-05-25 19:10:23 +00:00
Anonymous
2fe30e17fd
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:10:22 +00:00
Dklfajsjfi49wefklsf32
ccb7536257
Translated using Weblate (Dutch)
Currently translated at 10.9% (196 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-05-25 19:09:50 +00:00
Anonymous
39c0323b2e
Translated using Weblate (Dutch)
Currently translated at 10.9% (196 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:09:46 +00:00
Anonymous
ceaff17bb6
Translated using Weblate (Georgian)
Currently translated at 32.0% (574 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:09:18 +00:00
Temuri Doghonadze
91d7540f74
Translated using Weblate (Georgian)
Currently translated at 32.0% (574 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-05-25 19:08:59 +00:00
Anonymous
b7828e2111
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-25 19:08:44 +00:00
Stéphane Graber
089c056e4c
incus-simplestreams: Detect type of unified images
Closes #3386

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-24 22:54:05 -04:00
Stéphane Graber
1b34606218
incus-simplestreams: Support split container images
Closes #3388

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-24 22:54:04 -04:00
Stéphane Graber
1d64af1e40
shared/simplestreams: Add combined_type
That key is used to indicate the type of a combined image as we can't
rely on the ftype of the root disk to detect it.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-24 22:54:03 -04:00
Stéphane Graber
d8b950e337
Merge pull request #3390 from urbalazs/incus-config-help-text
incus/config: Fix YAML file name in help text
2026-05-24 15:16:36 -04:00
Stéphane Graber
ee6c49765f
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-24 15:02:56 -04:00
Balázs Úr
62d2755626
incus/config: Fix YAML file name in help text
Signed-off-by: Balázs Úr <balazs@urbalazs.hu>
2026-05-24 15:02:32 -04:00
Stéphane Graber
fc8760f831
Merge pull request #3387 from kazan417/patch-1
Update network_forward.go
2026-05-24 15:01:35 -04:00
Stéphane Graber
e9589d2f77
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-24 14:48:33 -04:00
kazan417
e08de1ba6f
incus/launch: Update examples
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-24 14:46:38 -04:00
kazan417
aa007fb0ec
incus/network/forward: Fix typo in description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-24 14:44:07 -04:00
Stéphane Graber
4a495f42e3
Merge pull request #3383 from kazan417/patch-1
Fix CLI strings
2026-05-23 23:00:39 -04:00
Stéphane Graber
6303d795e5
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-23 22:19:47 -04:00
kazan417
110e67f96c
incus/remote_unix: Clarify socket type
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-23 22:19:27 -04:00
kazan417
1e98d81c52
incus/launch: Clarify examples
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-23 22:19:26 -04:00
kazan417
9166162c66
incus/cluster: Fix typo in description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-23 22:19:21 -04:00
Stéphane Graber
f98183303f
Merge pull request #3384 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-23 15:37:04 -04:00
Kazantsev Mikhail
7084c1d60c
Translated using Weblate (Russian)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-23 20:11:35 +02:00
Américo Monteiro
f78e4d214f
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-05-23 20:11:32 +02:00
Serge Hallyn
fd72f9bcb9
Merge pull request #3381 from stgraber/main
incusd/devices: Set volatileGet on Refresh
2026-05-22 23:39:47 -05:00
Stéphane Graber
70a9fec720
Merge pull request #3380 from stgraber/tpm
Allow setting up a TPM certificate authority
2026-05-22 21:49:10 -04:00
Stéphane Graber
889ea56c11
doc: Add PEM to wordlist
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-22 21:38:39 -04:00
Stéphane Graber
b580cd68c2
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-22 21:38:38 -04:00
Stéphane Graber
f2d004b264
incusd/device/tpm: Provision vTPM with platform CA when configured
Closes #3220

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-22 21:37:51 -04:00
Stéphane Graber
9479129a83
incusd/cluster/config: Add instances.tpm.platform keys
This adds configuration keys to setup a platform CA which can sign the
individual TPM keys.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-22 21:37:49 -04:00
Stéphane Graber
7197e275d5
incusd/devices: Set volatileGet on Refresh
Fixes startup crash during re-register when volatile keys are needed.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-22 21:26:56 -04:00
Stéphane Graber
0b5c928f2e
api: instances_tpm_platform_cert
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-22 16:12:51 -04:00
Stéphane Graber
d81326c37c
Merge pull request #3379 from stgraber/main
shared/archive: Improved ENOSPC detection
2026-05-22 12:03:41 -04:00
Stéphane Graber
5b6b50b707
shared/archive: Improved ENOSPC detection
Closes #3303

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-22 11:12:52 -04:00
Stéphane Graber
5253cb2f14
Merge pull request #3378 from stgraber/main
incus/utils: Tweak environment file handling to strip matching outer …
2026-05-22 10:21:09 -04:00
Stéphane Graber
d8f0286398
Merge pull request #3377 from stgraber/pr3332
Add support for `block.create_options`
2026-05-22 08:37:23 -04:00
Stéphane Graber
26229279ac
incus/utils: Tweak environment file handling to strip matching outer quotes
Closes #3371

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-22 08:35:43 -04:00
Stéphane Graber
b569ce20f0
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-22 08:11:56 -04:00
火星大王
aec75f2321
tests: Add test for block.create_options
Signed-off-by: 火星大王 <lijunyandeyouxiang@163.com>
2026-05-22 07:56:44 -04:00
火星大王
19e8c3ca39
incusd/storage/drivers: Add support for block.create_options
Signed-off-by: 火星大王 <lijunyandeyouxiang@163.com>
2026-05-22 07:56:43 -04:00
Stéphane Graber
b1517b5df7
api: storage_create_options
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-22 07:56:42 -04:00
Stéphane Graber
bea609d0e8
Merge pull request #3376 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-22 06:37:43 -04:00
pesder
99a44d149c
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-05-22 10:26:37 +00:00
Anonymous
195eb1320f
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:26:36 +00:00
Hiroaki Nakamura
ef17845e84
Translated using Weblate (Japanese)
Currently translated at 73.2% (1312 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-05-22 10:26:01 +00:00
KATOH Yasufumi
463b4171e5
Translated using Weblate (Japanese)
Currently translated at 73.2% (1312 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-05-22 10:26:01 +00:00
Kazantsev Mikhail
b538257a3e
Translated using Weblate (Japanese)
Currently translated at 73.2% (1312 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-22 10:25:54 +00:00
Anonymous
6f6be30a1b
Translated using Weblate (Japanese)
Currently translated at 73.2% (1312 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:25:52 +00:00
Dklfajsjfi49wefklsf32
246cc052d8
Translated using Weblate (Dutch)
Currently translated at 10.9% (196 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-05-22 10:25:25 +00:00
Anonymous
5680a5cbe4
Translated using Weblate (Dutch)
Currently translated at 10.9% (196 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:25:22 +00:00
Anonymous
719fc5d09e
Translated using Weblate (Georgian)
Currently translated at 32.1% (575 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:24:51 +00:00
Temuri Doghonadze
7e08a7ea82
Translated using Weblate (Georgian)
Currently translated at 32.1% (575 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-05-22 10:24:31 +00:00
Anonymous
7bbf635a90
Translated using Weblate (Swedish)
Currently translated at 98.6% (1767 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:24:13 +00:00
Kazantsev Mikhail
be9250edda
Translated using Weblate (Swedish)
Currently translated at 98.6% (1767 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-22 10:24:12 +00:00
Daniel Nylander
5ff7f52d73
Translated using Weblate (Swedish)
Currently translated at 98.6% (1767 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-05-22 10:24:04 +00:00
Anonymous
5c4ab7d7f7
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1791 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:23:28 +00:00
Américo Monteiro
335ae9ea5c
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1791 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-05-22 10:23:27 +00:00
meipeter
55d14ec1f7
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (707 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-05-22 10:22:48 +00:00
daoge
fb980ddf1a
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (707 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-05-22 10:22:48 +00:00
Kwok Guy
e00ab90337
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (707 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-05-22 10:22:47 +00:00
yooadmin
c037a359c3
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (707 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-05-22 10:22:46 +00:00
Sakiko
7b3321d870
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (707 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-05-22 10:22:45 +00:00
Loge X
60da3daad0
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (707 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-05-22 10:22:44 +00:00
Anonymous
dc0cf876e8
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (707 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:22:35 +00:00
IO01
ccf1bb6791
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.4% (707 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-05-22 10:22:17 +00:00
Anonymous
6855fa2a4a
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:22:10 +00:00
Alberto Donato
7d712e7970
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-05-22 10:21:36 +00:00
Anonymous
f2a3d0ab27
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:21:35 +00:00
Dklfajsjfi49wefklsf32
b4003add37
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-05-22 10:21:02 +00:00
Stéphane Graber
a58d03d96e
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-22 10:21:01 +00:00
Tobias Gerold
a59a9ab2ea
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-05-22 10:21:01 +00:00
Jan Mittelstädter
d320436eb2
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-05-22 10:20:58 +00:00
Anonymous
addc5f3be3
Translated using Weblate (German)
Currently translated at 10.4% (187 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:20:57 +00:00
Kazantsev Mikhail
bff0519e3b
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-22 10:20:25 +00:00
Jorge Teixeira
de9acaa35d
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-05-22 10:20:25 +00:00
Anonymous
bb240f2312
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:20:24 +00:00
Varlorg
8dd4c675b3
Translated using Weblate (French)
Currently translated at 76.3% (1368 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-05-22 10:19:51 +00:00
Steeve Droz
6a90a6ccca
Translated using Weblate (French)
Currently translated at 76.3% (1368 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-05-22 10:19:51 +00:00
Laterria.Severino
1dc1f01aac
Translated using Weblate (French)
Currently translated at 76.3% (1368 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-05-22 10:19:50 +00:00
Kazantsev Mikhail
7af801b3d8
Translated using Weblate (French)
Currently translated at 76.3% (1368 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-22 10:19:49 +00:00
smCloudInTheSky
438ed7e8d9
Translated using Weblate (French)
Currently translated at 76.3% (1368 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-05-22 10:19:48 +00:00
Corabel Bertolini
70741cafdd
Translated using Weblate (French)
Currently translated at 76.3% (1368 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-05-22 10:19:46 +00:00
Anonymous
f15d19ceac
Translated using Weblate (French)
Currently translated at 76.3% (1368 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:19:45 +00:00
Benjamin Somers
c7e2738db3
Translated using Weblate (French)
Currently translated at 76.3% (1368 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-22 10:19:36 +00:00
montag451
ad82330831
Translated using Weblate (French)
Currently translated at 76.3% (1368 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-05-22 10:19:20 +00:00
Kazantsev Mikhail
1f88c8da75
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-22 10:19:11 +00:00
Paulo Coghi
157ec4be7f
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-05-22 10:19:11 +00:00
Anonymous
c336434f32
Translated using Weblate (Portuguese (Brazil))
Currently translated at 4.9% (89 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:19:10 +00:00
Anonymous
ba5a0bb1a9
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:18:36 +00:00
Kazantsev Mikhail
b55ad2a9f4
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-22 10:18:03 +00:00
Andika Triwidada
8b3fd101a7
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-05-22 10:18:02 +00:00
Anonymous
0cd03c90d8
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:17:59 +00:00
Anonymous
e29f0f58c6
Translated using Weblate (Russian)
Currently translated at 99.8% (1789 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:17:27 +00:00
Kazantsev Mikhail
1e5994ba6c
Translated using Weblate (Russian)
Currently translated at 99.8% (1789 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-22 10:17:26 +00:00
Daniel Dybing
8ce791ea68
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-05-22 10:16:52 +00:00
Anonymous
70fa59c532
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-22 10:16:51 +00:00
Stéphane Graber
d73afebb34
Merge pull request #3305 from damex/virtio-vga-feature-gating
incusd/instance/qemu: Add virtio vga feature gating
2026-05-22 06:10:45 -04:00
Stéphane Graber
fc28248b2c
Merge pull request #3299 from kazan417/main
Fix another set of explanation typos.
2026-05-22 03:21:04 -04:00
Stéphane Graber
7cdf4a2ba9
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-22 05:57:53 +02:00
kazan417
b1bec1c9bf
incus/storage/volume: Align long and short description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:52 +02:00
kazan417
c3002b4980
incus/project: Align description formatting
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:51 +02:00
kazan417
1c928febb3
incus/project: Fix typo in description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:50 +02:00
kazan417
61fad8c5eb
incus/cluster/group: Fix typo in description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:49 +02:00
kazan417
5b2d9fd2de
incus/warning: Align description formatting
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:48 +02:00
kazan417
309461e86d
incus/config/trust: Align description formatting
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:47 +02:00
kazan417
df0299a654
incus/image: Align description formatting
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:46 +02:00
kazan417
5354022e59
incus/network/forward: Fix typo in description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:45 +02:00
kazan417
b15ff7982f
incus/config/trust: Fix typo in description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:44 +02:00
kazan417
101ffbb80f
incus/storage/volume: Fix typo in description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:43 +02:00
kazan417
6ae9364d12
incus/network: Fix typo in description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:42 +02:00
kazan417
a841076e1f
incus/network/zone: Align long and short descriptions
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:41 +02:00
kazan417
71e3293c0c
incus/network: Fix typo in description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-22 05:57:40 +02:00
Stéphane Graber
4d16839608
Merge pull request #3347 from urbalazs/incus-operation-help-text
incus/operation: Fix default column layout in help text
2026-05-21 23:57:28 -04:00
Balázs Úr
25fd923ccf
incus/operation: Fix default column layout in help text
Signed-off-by: Balázs Úr <balazs@urbalazs.hu>
2026-05-22 05:45:02 +02:00
Roman Kuzmitskii
04f226e680
incusd/instance/qemu: Add virtio vga feature gating
Signed-off-by: Roman Kuzmitskii <roman@damex.org>
2026-05-22 05:44:11 +02:00
Roman Kuzmitskii
c1c131d8b1
incusd/instance/qmp: Add QueryVirtioVGADevice
Signed-off-by: Roman Kuzmitskii <roman@damex.org>
2026-05-22 05:44:09 +02:00
Stéphane Graber
9a384298fa
Merge pull request #3374 from UweKrause/main
doc: Extend description for OCI-compliant remotes
2026-05-21 23:40:31 -04:00
Stéphane Graber
c59ea0c7a5
Merge pull request #3373 from DarkressX/fix-forward-duplicate-ip-check
Fix forward duplicate ip check
2026-05-21 23:36:15 -04:00
Uwe Krause
715ab7ed9a
Extend description for OCI-compliant remotes
Move instructions on how to add a remote from "instance creation"
chapter to "remote" chapter. Also extend log in instructions for custom
oci compliant remote.

Signed-off-by: Uwe Krause <16082815+UweKrause@users.noreply.github.com>
2026-05-22 05:33:26 +02:00
Leon Schoch
4659b17f83
incus/server/network/ovn/driver: Fix duplicate listening ip check in LoadBalancerCreate
Signed-off-by: Leon Schoch <git@darkress.xyz>
2026-05-21 20:44:54 +02:00
Leon Schoch
3c1ac4816f
incus/server/network/ovn/driver: Fix duplicate listening ip check in ForwardCreate
Signed-off-by: Leon Schoch <git@darkress.xyz>
2026-05-21 20:44:53 +02:00
Stéphane Graber
ee3227c856
Merge pull request #3372 from stgraber/main
Performance improvements
2026-05-21 10:59:56 -04:00
Stéphane Graber
150b21490c
client/oci: Pass --no-tags to skopeo inspect
Skopeo's inspect enumerates the full tag list of the repository by
default, which can take several minutes on images with many tags (e.g.
~9 minutes for immich-machine-learning). Incus has no use for that tag
list, so pass --no-tags to skip the pagination and avoid the delay.

Closes #3367

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 16:11:52 +02:00
Stéphane Graber
1e85dd6700
incusd/firewall/nftables: Use terse mode to improve performance
Closes #3322

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 16:11:47 +02:00
Stéphane Graber
6803e351f8
Merge pull request #3362 from stgraber/main
Various bugfixes
2026-05-21 06:19:40 -04:00
Stéphane Graber
2521828f8f
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:57 +02:00
Stéphane Graber
717751047a
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:36 +02:00
Stéphane Graber
616a97ff0d
doc: Update metadata
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:35 +02:00
Stéphane Graber
bd83091d2a
doc: Clarify snapshots.expiry
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:35 +02:00
Stéphane Graber
dbdc719722
cmd/incus: Clarify --expiry flag format
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:34 +02:00
Stéphane Graber
d56e91ceda
shared/api: Fix swagger examples
This fixes a few inconsistencies/issues with the current examples.

Closes #3335

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:33 +02:00
Stéphane Graber
94af3d0431
incusd/storage/ceph: Refuse pool deletion when unexpected images exist
Before destroying a Ceph OSD pool, list its RBD images and abort if
anything other than our placeholder marker is present. This prevents
accidentally wiping a pool that's still in use by another Incus
instance, such as after a failed cluster join.

Closes #3350

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:32 +02:00
Stéphane Graber
5d7cfa48fc
incus: Print console log when attaching via --console
Closes #3355

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:31 +02:00
Stéphane Graber
f290329fff
incusd/db/node: Allow using a fixed time in Offline checks
This handles situations where we perform lengthy operations after having
retrieved the cluster status but don't want to fetch an up to date copy
constantly.

Closes #3339

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:30 +02:00
Stéphane Graber
20b0b7dac0
incusd/forknet: Use space separator for DNS search domains
Closes #3361

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:29 +02:00
Stéphane Graber
613b50f937
incusd/device/nic_bridged: Recover orphaned veth on startup
Fix an issue where a bridge restart would drop all its members.

This also re-applies disable_ipv6 as that can apparently get lost when
an interface gets removed from a bridge.

Closes #3357

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:28 +02:00
Stéphane Graber
0d52709b1d
incusd/device/nic_bridged: Drop redundant accept_ra=0
We're setting disable_ipv6=1 anyway.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:27 +02:00
Stéphane Graber
14121e232e
incusd/ip: Set NUD_PERMANENT on neighbour proxy entries
Newer kernels allow marking NDP entries as permanent, making them
survive a link up/down event. Let's use that to avoid losing those
entries in some situations.

Closes #3341

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:26 +02:00
Stéphane Graber
11242e8ead
incusd/networks: Parallelize network startup and OVN restart
This fixes startup and cluster restore timeouts on systems with a very
large number of OVN networks by allowing them to start in parallel (with
some limits).

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-21 11:34:21 +02:00
Stéphane Graber
fc8c170238
Merge pull request #3370 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-21 05:29:41 -04:00
Américo Monteiro
6d880a7a4e
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1791 of 1791 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-05-21 08:11:33 +00:00
Stéphane Graber
ade79857cb
Merge pull request #3369 from presztak/fix_lvmcluster_delete
Add workaround for lvmcluster pool removal
2026-05-20 16:03:23 -04:00
Piotr Resztak
a05163cfef incusd/storage/drivers: Add workaround for shared VG removal failures
Before removing a shared VG, perform lockstop and change the
VG lock type to `none`. This avoids relying on lvmlockd/sanlock
during VG removal.

In lvmlockd 2.03.31(2) (2025-02-27), VG removal may fail due to
an inconsistent state between sanlock and lvmlockd, resulting in
lock-related errors.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-05-20 18:20:41 +02:00
Stéphane Graber
44cab2a59a
Merge pull request #3363 from stgraber/cli
Allow volume creation on attach
2026-05-20 00:43:31 -04:00
Stéphane Graber
c4b0cb37bd
Merge pull request #3365 from stgraber/storage
incusd/storage/s3: Implement S3 CopyObject
2026-05-20 00:42:08 -04:00
Stéphane Graber
c71ddfe781
tests/storage: Add S3 CopyObject coverage
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-20 02:12:15 +02:00
Stéphane Graber
5adbba7bbc
incusd/storage/s3: Implement ACL placeholder
Clients like s3cmd will sometimes be querying ?acl, it not being
implemented would then result in the client getting the object rather
than ACL data, then causing the client to be very confused when
receiving a binary rather than XML.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-20 02:12:14 +02:00
Stéphane Graber
eea07b2b94
tests/storage_volume_attach: Test --create on attach
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-20 02:02:01 +02:00
Stéphane Graber
20646aab4c
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-20 02:01:58 +02:00
Stéphane Graber
1f283fd40b
incus/storage_volume: Add --create flag to attach
Closes #3358

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-20 02:01:50 +02:00
Stéphane Graber
ed89dbe992
incusd/storage/s3: Implement S3 CopyObject
Closes #3321

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-19 23:54:53 +02:00
Stéphane Graber
1513600651
Merge pull request #3354 from bensmrs/linstor-shrink
test: Disable volume shrinking with LINSTOR
2026-05-19 13:22:23 -04:00
Stéphane Graber
1cba573c20
Merge pull request #3360 from bensmrs/attach-doc
doc/storage_volume: Fix outdated information
2026-05-19 13:08:02 -04:00
Benjamin Somers
69343d718c doc/storage_volume: Fix outdated information
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-19 16:49:33 +00:00
Stéphane Graber
22bd738352
Merge pull request #3352 from stgraber/main
Various bugfixes
2026-05-19 12:06:35 -04:00
Benjamin Somers
1233ea6749 test: Disable volume shrinking with LINSTOR
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-19 14:34:12 +00:00
Stéphane Graber
0a8bb1fcb7
incusd/instance/drivers/lxc: Quote values in lxc.environment
https://github.com/lxc/lxc/issues/4635

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-19 08:11:16 -04:00
Stéphane Graber
2de96a74f9
incusd/instances: Skip offline members in bulk state changes
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-19 02:51:47 -04:00
Stéphane Graber
1662110fba
incusd/network/ovn: Skip per-IP NAT for external routes when no uplink
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-19 02:51:33 -04:00
Stéphane Graber
af499f722c
incusd/storage/zfs: Avoid recursive zfs list in GetResources
GetResources only cares about top-level statistics and so shouldn't be
triggering a full cache run. This was making cluster state retrieval
extremely slow.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-05-19 02:50:25 -04:00
Stéphane Graber
936d01a1da
incusd/cluster: Better handle misisng OVS/OVN
Skip OVN setup when network.ovn.northbound_connection is empty so nodes
without OVS installed can apply the config change after the cluster
unsets OVN. During cluster join, drop OVN config keys from the trigger
changes map since the explicit setup calls already handle them with
error tolerance, preventing a join from failing on nodes that lack OVS.

Closes #3351

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-19 02:50:24 -04:00
Stéphane Graber
bf82cd21d3
Merge pull request #3349 from stephendotcarter/fix-cluster-join-address
Use correct host:port format for ClusterAddress
2026-05-18 17:43:17 -04:00
Stephen Carter
d3b62f7a26
Use correct host:port format for ClusterAddress
Signed-off-by: Stephen Carter <stephencarter@gmail.com>
2026-05-18 14:33:56 +01:00
Stéphane Graber
9824e8773e
Merge pull request #3346 from meeque/docs/pre-built-ubuntu-packages
Update list of Ubuntu LTS releases that get pre-built Incus packages
2026-05-17 08:09:24 -04:00
Michael
ef6cd6d17c
Update list of Ubuntu LTS releases that get pre-built Incus packages
According to Zabbly docs, they now host packages for recent Ubuntu 26.04 LTS ("resolute").
I have not tested any of these packages yet.

Signed-off-by: Michael <meeque@users.noreply.github.com>
2026-05-17 11:39:29 +02:00
Stéphane Graber
f8bc81c778
Merge pull request #3345 from chrisjsimpson/main
Update Ansible section with incus-client details
2026-05-16 20:49:48 -04:00
chrisjsimpson
9c3c8b8ac4
doc: Update Ansible section with incus-client details
Added information about using the 'incus-client' package for Ansible
connections, as it took a while to find this information and doesnt
refernce for the ubuntu installation (though it is
[mentioned](https://linuxcontainers.org/incus/docs/main/installing/) for
the default `Alpine` distro after looking here)

Signed-off-by: chrisjsimpson <chris15leicester@gmail.com>
2026-05-16 18:38:39 -04:00
Stéphane Graber
b1bb0f8809
Merge pull request #3343 from presztak/fix_lvm_restore
Restore config volume as part of VM block restoration (LVM storage)
2026-05-16 11:19:20 -04:00
Piotr Resztak
29bb090f2d incusd/storage/drivers: Restore config volume as part of VM block restoration
Fix snapshot restoration for LVM when using a thin pool.
The restore path was missing logic responsible for restoring the
config volume, which caused snapshot restoration to be incomplete.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-05-15 12:51:26 +02:00
Stéphane Graber
3b98d7bfa7
Merge pull request #3338 from lxc/dependabot/github_actions/actions/dependency-review-action-5
build(deps): bump actions/dependency-review-action from 4 to 5
2026-05-11 23:17:06 -04:00
dependabot[bot]
adbe30cc9f
build(deps): bump actions/dependency-review-action from 4 to 5
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 4 to 5.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](https://github.com/actions/dependency-review-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/dependency-review-action
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-12 02:02:07 +00:00
Stéphane Graber
8010b16e88
Merge pull request #3336 from breml/devcontainer
devcontainer: fix golangci-lint install source
2026-05-11 19:17:22 -04:00
Lucas Bremgartner
64e4daa6cd
devcontainer: fix golangci-lint install source
Signed-off-by: Lucas Bremgartner <lucas.bremgartner@futurfusion.io>
2026-05-11 15:27:46 +02:00
Stéphane Graber
2c4f51e2f5
Merge pull request #3331 from presztak/nbd_lock
Add lock handling for NBD operations
2026-05-10 20:57:31 -04:00
Piotr Resztak
9942c4d8fc incusd/storage: Add lock handling for NBD operations
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-05-10 11:22:38 +02:00
Piotr Resztak
293ebc1277 incusd/storage: Use InstanceByVolumeName in qcow2MigrateVolume
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-05-10 11:22:38 +02:00
Piotr Resztak
c0fc94ffa4 incusd/locking: Add TryLock
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-05-10 11:22:38 +02:00
Stéphane Graber
0c0e0441c4
Merge pull request #3327 from stgraber/network
Implement bridge.multicast_snooping
2026-05-08 10:14:52 -04:00
Stéphane Graber
fa091fe926
Merge pull request #3325 from stgraber/main
Fix some simple bugs
2026-05-08 10:14:30 -04:00
Stéphane Graber
cd01dc74ad
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-07 23:40:37 -04:00
Stéphane Graber
dbc8132454
incusd/network/bridge: Add bridge.multicast_snooping config key
Closes #3294

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-07 23:40:36 -04:00
Stéphane Graber
52d403ae1b
api: network_bridge_multicast_snooping
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-07 23:30:20 -04:00
Stéphane Graber
2bcf6f5f84
incusd/db/node: Cleanup node offline messages
We don't need nanosecond granularity on offline timestamps.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-07 23:09:58 -04:00
Stéphane Graber
f62d0da0e5
incusd/instance/qemu: Pass SMBIOS type 11 entries via files
Switch to QEMU's `-smbios type=11,path=<file>` form so that SMBIOS type 11
(OEM strings) values, including systemd credentials, are no longer
visible in the process list.

Closes #3319

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-07 23:09:57 -04:00
Stéphane Graber
9fd4dce677
incusd/endpoints: Fix Wait() race in Tomb shutdown
The endpoints logic is using a rough re-implementation of go-tomb
(which LXD used to rely on).

That includes its own slightly odd WaitGroup wrapper which would
conditionally call Add.

Given enough go routines poking at this, it was possible to get to a
point where Wait() would hang forever.

In practice none of this complexity appears to be needed as our own use
is quite straightforward with a regular WaitGroup with Add and Done
calls works just fine.

Closes #3252

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-07 23:09:56 -04:00
Stéphane Graber
dffb1d0c91
Merge pull request #3320 from stgraber/main
incusd/cluster: Skip operation creation on shutdown evacuate
2026-05-05 22:24:46 -04:00
Stéphane Graber
5b29ecc164
incusd/cluster: Re-order evacuations to happen earlier on shutdown
Otherwise we run into a bunch of problems as Incus refuses to migrate or
create operations when it's already ongoing the shutdown procedure.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-05 16:32:51 -04:00
Stéphane Graber
f4c1718e91
Merge pull request #3317 from stgraber/api
Fix NBD swagger
2026-05-05 12:35:01 -04:00
Stéphane Graber
a20e4528c1
Merge pull request #3318 from stgraber/main
incusd/instance/qemu: Remove deprecated QEMU flag
2026-05-05 11:50:51 -04:00
Stéphane Graber
c1f18c78fc
incusd/instance/qemu: Remove deprecated QEMU flag
zero-blocks has been deprecated since 9.1 and fully removed now

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-05 10:30:18 -04:00
Stéphane Graber
672c2da2d0
Merge pull request #3314 from stgraber/network
incusd/network/acl: Fix issue with instances in different project tha…
2026-05-05 10:28:39 -04:00
Stéphane Graber
41878729f0
test/network_acl: Add test for ACL used by instance in different project
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-05 10:00:37 -04:00
Stéphane Graber
2f32f975ce
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-05 09:56:32 -04:00
Stéphane Graber
f8ddabea9e
incusd/storage_volume_nbd: Fix incorrect swagger
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-05 09:55:40 -04:00
Stéphane Graber
25d9e703ee
Merge pull request #3315 from stgraber/cluster
incusd/projects: Fix targeting on project delete
2026-05-05 09:39:31 -04:00
Stéphane Graber
da131e7e69
Merge pull request #3313 from stgraber/doc
doc/authorization: Fix reference to old "manager" relation
2026-05-05 09:36:35 -04:00
Stéphane Graber
78d55094fb
Merge pull request #3312 from stgraber/main
Fix some network issues
2026-05-05 09:36:21 -04:00
Stéphane Graber
3a104e4dc2
incusd/projects: Fix targeting on project delete
Closes #3260

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-04 20:45:53 -04:00
Stéphane Graber
2a3584b6fc
incusd/network/acl: Fix issue with instances in different project than ACL
Closes #3306

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-04 20:27:41 -04:00
Stéphane Graber
c65ac0f4e6
doc/authorization: Fix reference to old "manager" relation
There is no such thing as a "manager" in the current model.
The relation that needs to be avoided is "admin".

Closes #3301

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-04 20:25:29 -04:00
Stéphane Graber
33ffcf7174
incusd/device/nic_bridged: Fix swapped IPv4/IPv6 DNS record
Closes #3307

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-04 18:18:59 -04:00
Stéphane Graber
2b24a260b6
incusd/forknet: Add jitter to DHCPv6 renewal
Apply the same logic as DHCPv4.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-04 18:18:58 -04:00
Stéphane Graber
3b127758c1
incusd/forknet: Properly renew stateful DHCPv6
We were putting together a renewal packet but never actually sending it.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-04 18:18:57 -04:00
Stéphane Graber
d7f1c9d75c
incusd/forknet: Include FQDN in DHCPv6 INFO requests
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-04 18:18:56 -04:00
Stéphane Graber
47377e3459
incusd/forknet: Persist DHCPv6 client DUID across restarts
Store the DHCPv6 DUID alongside the hostname file so it can be reused on
container restart.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-04 18:18:56 -04:00
Stéphane Graber
b61f8f4966
Merge pull request #3311 from stgraber/main
Fix some initial 7.0 issues
2026-05-04 18:00:44 -04:00
Stéphane Graber
5f2cdf7545
incusd/instance/lxc: Fix swap=false failure
When disabling swap with limits.memory.swap=false, Incus tries to both
set the swap size to 0 bytes AND set the swappiness down to 0.

The former only works well on Cgroup V2 while the latter only works on
CGroup V1. We should still keep the abstraction for the day where CGroup
V2 gets us swappiness control again, but we shouldn't treat the
inability to turn swapping off as a failure so long as we can set the
limit to 0 bytes.

Closes #3300

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-04 17:22:52 -04:00
Stéphane Graber
1e6ce18e8c
incusd: Re-introduce core scheduling detection
Depending on environment, even recent kernels will fail to set up core
scheduling, so we need to keep detecting it.

Closes #3304

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-04 17:22:51 -04:00
Stéphane Graber
a5f50d36ea
incusd/instance/qemu: Fix version detection for qemu-kvm
On systems using /usr/libexec/qemu-kvm, the QEMU version detection
wasn't working, resulting in an assumption that the system was running
an older QEMU than it did in practice.

Closes #3302

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-04 12:57:54 -04:00
Stéphane Graber
92b4a65859
Merge pull request #3309 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-04 09:44:34 -04:00
Kazantsev Mikhail
94f99528fd
Translated using Weblate (French)
Currently translated at 76.4% (1369 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-04 15:44:17 +02:00
Stéphane Graber
182e5babc1
Merge pull request #3297 from stgraber/doc
doc/devices/disk: Fix broken link
2026-05-04 09:44:09 -04:00
Stéphane Graber
b9f1e54c1d
Merge pull request #3298 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-03 01:17:53 -04:00
Kazantsev Mikhail
5c031df111
Translated using Weblate (Russian)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-03 04:10:13 +00:00
Kazantsev Mikhail
bca101fb8e
Translated using Weblate (Japanese)
Currently translated at 73.3% (1313 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-03 04:10:03 +00:00
Kazantsev Mikhail
5f915ae9cd
Translated using Weblate (Swedish)
Currently translated at 98.7% (1768 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-03 04:10:00 +00:00
Kazantsev Mikhail
cbbe9168c1
Translated using Weblate (French)
Currently translated at 76.4% (1369 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-03 04:09:54 +00:00
Kazantsev Mikhail
4b9810b081
Translated using Weblate (Russian)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-02 06:02:36 +02:00
Américo Monteiro
3f8b2925bb
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1790 of 1790 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-05-02 06:02:35 +02:00
Stéphane Graber
a5f1907e90
Merge pull request #3296 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-05-01 20:07:39 -04:00
Hiroaki Nakamura
4c824673dc
Translated using Weblate (Japanese)
Currently translated at 73.2% (1309 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-05-02 01:58:58 +02:00
KATOH Yasufumi
bd47b8f122
Translated using Weblate (Japanese)
Currently translated at 73.2% (1309 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-05-02 01:58:57 +02:00
Anonymous
a59b6aa8ad
Translated using Weblate (Japanese)
Currently translated at 73.2% (1309 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:58:51 +02:00
Alberto Donato
ded69d3727
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-05-02 01:58:26 +02:00
Anonymous
1513797700
Translated using Weblate (Italian)
Currently translated at 1.6% (30 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:58:25 +02:00
Kazantsev Mikhail
046a6dd144
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-02 01:57:43 +02:00
Jorge Teixeira
0a25b267fc
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-05-02 01:57:42 +02:00
Anonymous
18e04ce114
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:57:41 +02:00
Anonymous
5d714d0e42
Translated using Weblate (Swedish)
Currently translated at 93.5% (1672 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:57:02 +02:00
Daniel Nylander
4039492f7a
Translated using Weblate (Swedish)
Currently translated at 93.5% (1672 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-05-02 01:57:00 +02:00
Kazantsev Mikhail
18a015d17e
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-02 01:56:31 +02:00
Andika Triwidada
74ef46ffd9
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-05-02 01:56:31 +02:00
Anonymous
7aa96f3645
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:56:27 +02:00
Varlorg
5574de5d68
Translated using Weblate (French)
Currently translated at 76.8% (1373 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-05-02 01:55:44 +02:00
Steeve Droz
44fe3a675e
Translated using Weblate (French)
Currently translated at 76.8% (1373 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-05-02 01:55:43 +02:00
Laterria.Severino
d9f8064b96
Translated using Weblate (French)
Currently translated at 76.8% (1373 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-05-02 01:55:42 +02:00
Kazantsev Mikhail
e3b00998a8
Translated using Weblate (French)
Currently translated at 76.8% (1373 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-02 01:55:41 +02:00
smCloudInTheSky
ec52605f97
Translated using Weblate (French)
Currently translated at 76.8% (1373 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-05-02 01:55:40 +02:00
Corabel Bertolini
ab48eb54fb
Translated using Weblate (French)
Currently translated at 76.8% (1373 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-05-02 01:55:37 +02:00
Anonymous
a65a19a29a
Translated using Weblate (French)
Currently translated at 76.8% (1373 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:55:36 +02:00
Benjamin Somers
33f734dfd4
Translated using Weblate (French)
Currently translated at 76.8% (1373 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-02 01:55:25 +02:00
montag451
0c2d2f4c7f
Translated using Weblate (French)
Currently translated at 76.8% (1373 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-05-02 01:55:08 +02:00
Dklfajsjfi49wefklsf32
62445f0347
Translated using Weblate (German)
Currently translated at 10.5% (188 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-05-02 01:55:01 +02:00
Stéphane Graber
8e0986fb70
Translated using Weblate (German)
Currently translated at 10.5% (188 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-02 01:55:01 +02:00
Tobias Gerold
6d989da7ea
Translated using Weblate (German)
Currently translated at 10.5% (188 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-05-02 01:55:00 +02:00
Jan Mittelstädter
94c994f616
Translated using Weblate (German)
Currently translated at 10.5% (188 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-05-02 01:54:57 +02:00
Anonymous
863cd94e74
Translated using Weblate (German)
Currently translated at 10.5% (188 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:54:56 +02:00
pesder
02b9b22b68
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-05-02 01:54:26 +02:00
Anonymous
bd8efc7e45
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:54:25 +02:00
Dklfajsjfi49wefklsf32
17a08e38b6
Translated using Weblate (Dutch)
Currently translated at 11.0% (197 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-05-02 01:53:43 +02:00
Anonymous
63a099fe89
Translated using Weblate (Dutch)
Currently translated at 11.0% (197 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:53:39 +02:00
Daniel Dybing
8a5bfd95e4
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-05-02 01:53:03 +02:00
Anonymous
6bf72599d4
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:53:02 +02:00
Anonymous
13ec3ef214
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:52:32 +02:00
Anonymous
271c9f5d34
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:51:56 +02:00
meipeter
95a73b92fa
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.6% (709 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-05-02 01:51:10 +02:00
daoge
01333fc61e
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.6% (709 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-05-02 01:51:09 +02:00
Kwok Guy
fdb1a8b55f
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.6% (709 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-05-02 01:51:09 +02:00
yooadmin
a7adc355ae
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.6% (709 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-05-02 01:51:08 +02:00
Sakiko
dec4537ffa
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.6% (709 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-05-02 01:51:07 +02:00
Loge X
d22b0c9978
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.6% (709 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-05-02 01:51:06 +02:00
Anonymous
f7bd9bac2f
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.6% (709 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:50:57 +02:00
IO01
02c6ea0ca5
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.6% (709 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-05-02 01:50:41 +02:00
Anonymous
a215174fe6
Translated using Weblate (Georgian)
Currently translated at 32.1% (575 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:50:36 +02:00
Temuri Doghonadze
2d0397370a
Translated using Weblate (Georgian)
Currently translated at 32.1% (575 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-05-02 01:50:17 +02:00
Anonymous
b67ae06274
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:50:00 +02:00
Américo Monteiro
7d396a55e3
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-05-02 01:49:59 +02:00
Anonymous
c203981afb
Translated using Weblate (Russian)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:49:13 +02:00
Kazantsev Mikhail
e5e32984ae
Translated using Weblate (Russian)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-02 01:49:12 +02:00
Kazantsev Mikhail
0e4fbcdba6
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.0% (90 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-05-02 01:48:34 +02:00
Paulo Coghi
732b159bd3
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.0% (90 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-05-02 01:48:33 +02:00
Anonymous
e6a2b716f1
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.0% (90 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-05-02 01:48:33 +02:00
Stéphane Graber
faa636b70c
doc/devices/disk: Fix broken link
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-02 01:27:55 +02:00
Stéphane Graber
6255b39560
Release Incus 7.0.0
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-02 01:19:09 +02:00
Stéphane Graber
50180d73ef
gomod: Update dependencies
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-02 01:18:51 +02:00
Stéphane Graber
40dd4f151d
Rewrite Go import path to v7
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-02 01:18:25 +02:00
Stéphane Graber
06c2fe0bca
Merge pull request #3285 from stgraber/deps
Update dependencies
2026-05-01 19:14:58 -04:00
Stéphane Graber
d78350670c
github/workflows/tests: Build cowsql and raft from source
Drops the cowsql PPA in favor of building cowsql and raft from source
through "make deps" and pulls in the additional build tools needed to
do so (autoconf, automake, liblz4-dev, libuv1-dev). After "make deps",
the resulting include and library paths are exported through GITHUB_ENV
so subsequent steps pick them up, and LD_LIBRARY_PATH is added to the
sudo --preserve-env list when invoking main.sh so the test suite can
find the locally-built libcowsql.so.0 and libraft.so.*.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-02 00:46:55 +02:00
Stéphane Graber
b56b7fc6be
github/workflows/tests: Install mdl from rubygems instead of snap
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 22:00:53 +02:00
Stéphane Graber
676692e72d
github/workflows/tests: Configure PPAs without apt-add-repository
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 22:00:52 +02:00
Stéphane Graber
f556851706
Makefile: Switch to new golangci-lint install script
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 21:30:59 +02:00
Stéphane Graber
17502a12d1
gomod: Update dependencies
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 21:30:58 +02:00
Stéphane Graber
e81f11564c
Merge pull request #3295 from stgraber/vm
VM lifecycle fixes
2026-05-01 15:10:15 -04:00
Stéphane Graber
e1ebe70253
Merge pull request #3281 from stgraber/storage
Create missing sub-paths
2026-05-01 13:24:29 -04:00
Stéphane Graber
157465d653
incusd/instance/console: Emit a single instance-console event on SPICE
SPICE uses multiple connections, instead of triggering an event on each
of them, we only want to trigger it once at the beginning.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 17:31:41 +02:00
Stéphane Graber
c002012f18
incusd/instance/qemu: Don't restart the VM on shutdown
Closes #3261

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 17:31:30 +02:00
Stéphane Graber
63c140a954
incusd/instance/qemu: Don't emit shutdown lifecycle event during restart
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 17:21:01 +02:00
Stéphane Graber
58d7521f69
Merge pull request #3283 from stgraber/cli
incus/storage_bucket/key: Fix incorrect list column description
2026-05-01 09:24:01 -04:00
Stéphane Graber
4ae31e8909
Merge pull request #3278 from stgraber/network
incusd/device/nic: Set next-hop based on configured IP addresses
2026-05-01 09:22:12 -04:00
Stéphane Graber
378cf8645a
Merge pull request #3279 from stgraber/cluster
Allow scriptlet target selection during cluster re-balance
2026-05-01 09:18:45 -04:00
Stéphane Graber
19cc73d62a
Merge pull request #3284 from stgraber/vm
incusd/instance/qemu: Fix locking around VM reset
2026-05-01 09:17:39 -04:00
Stéphane Graber
0bb11a1207
Merge pull request #3282 from stgraber/main
tests: Use a 5MiB test file for buckets
2026-05-01 09:16:41 -04:00
Stéphane Graber
d81c582dce
tests: Extend sub-path tests to cover directory creation
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 15:15:45 +02:00
Stéphane Graber
7f5f2c9f3a
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 15:15:44 +02:00
Stéphane Graber
d47b354cc7
doc/devices/disk: Update to cover sub-path creation
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 15:15:43 +02:00
Stéphane Graber
237e577daf
incusd/instance: Allow initial keys for sub-paths
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 15:15:42 +02:00
Stéphane Graber
c8951dfc08
incusd/device/disk: Auto-create missing volume sub-directories
Allow for sub-paths in disk source to get created automatically, using
the initial.XYZ config keys for initial mode, uid and gid.

Closes #3243

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 15:15:41 +02:00
Stéphane Graber
533fe96658
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 14:24:48 +02:00
kazan417
08d9003a62
incus/storage: Add missing example description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-01 11:03:50 +02:00
kazan417
24985d9ec5
incus/network_zone: Add missing example description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-01 11:03:49 +02:00
kazan417
d3ba5a8a41
incus/network_integration: Add missing example description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-01 11:03:48 +02:00
kazan417
24ccbeab5c
incus/network_address_set: Add missing example description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-01 11:03:47 +02:00
kazan417
f45f7e0f80
incus/network_acl: Add missing example description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-01 11:03:46 +02:00
kazan417
9acd6ca190
incus/create: Add missing example description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-01 11:03:45 +02:00
kazan417
962e9895c6
incus/config_template: Add missing example description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-01 11:03:44 +02:00
kazan417
8844bd247f
incus/launch: Add missing example description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-01 11:03:43 +02:00
kazan417
137da4aa12
incus/storage_bucket/key: Fix incorrect list column description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-05-01 11:03:42 +02:00
Stéphane Graber
b5957ee100
incusd/instance/agent-loader: Remove some trailing whitespaces
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 11:03:41 +02:00
Stéphane Graber
59fc320026
tests: Adjust to work with next-hop
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 04:38:52 +02:00
Stéphane Graber
075b8ad8b5
incusd/device/nic: Set next-hop based on configured IP addresses
Closes #3156

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 04:38:51 +02:00
Stéphane Graber
46dd216572
incusd/instance/qemu: Fix locking around VM reset
Closes #3166

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 04:19:09 +02:00
Stéphane Graber
a07727a768
doc/clustering: Add new scriptlet reason
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 03:29:28 +02:00
Stéphane Graber
78a5b3e4e9
incusd/cluster: Run placement scriptlet during re-balancing
The placement scriptlet is now invoked during automatic cluster
re-balancing. It receives the full list of less-loaded compatible
candidates sorted from least to most loaded.

Closes #3237

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 03:29:27 +02:00
Stéphane Graber
a18b30213a
shared/api/scriptlet: Add InstancePlacementReasonRebalance
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 03:29:27 +02:00
Stéphane Graber
bea1e31305
api: instances_placement_scriptlet_rebalance
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 03:29:24 +02:00
Stéphane Graber
5b8a1adeaa
incus/cluster: Simplify logic
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 03:28:31 +02:00
Stéphane Graber
ccfdb366e9
tests: Use a 5MiB test file for buckets
LVM extent size is typically 4MiB so a 1MiB bucket will be rounded up to
4MiB making the 2MiB test file fit and the quota test fail.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 03:08:14 +02:00
Stéphane Graber
6dc658fd2d
Merge pull request #3274 from stgraber/main
Implement core.shutdown_action
2026-04-30 20:53:38 -04:00
Stéphane Graber
bdc2f43894
Merge pull request #3280 from bensmrs/make-help
Makefile: Add help target and remove tags target
2026-04-30 20:41:17 -04:00
Stéphane Graber
0daf5fb0c8
Merge pull request #3275 from stgraber/cli
Add --reuse to incus image copy --copy-aliases and fix cluster join bug
2026-04-30 20:35:26 -04:00
Stéphane Graber
7d216ce137
Merge pull request #3277 from stgraber/swagger
Add missing path parameters in swagger profile
2026-04-30 20:35:07 -04:00
Stéphane Graber
60fef9a6cd
Merge pull request #3273 from stgraber/security
Pre-release security fixes
2026-04-30 20:14:27 -04:00
Benjamin Somers
e7223abd89 Makefile: Add help target and remove tags target
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-05-01 00:01:08 +00:00
Stéphane Graber
3e617a79cc
Merge pull request #3276 from DarkressX/fix-duplicate-external-network-ip
incusd/network/ovn/driver: Fix duplicate external network ip check on network creation
2026-04-30 19:05:21 -04:00
Stéphane Graber
9b9c9aadb1
Merge pull request #3272 from stgraber/doc
doc/metrics: Mention Loki requirement
2026-04-30 19:04:43 -04:00
Stéphane Graber
56a55c02e1
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:54:30 +02:00
Stéphane Graber
b69464a8e3
incusd: Add missing path parameters
Closes #3170

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:54:26 +02:00
Stéphane Graber
3ad6ece9b0
doc/metrics: Mention Loki requirement
Closes #3151

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:47:48 +02:00
Leon Schoch
4add4e2433
incus/server/network/ovn/driver: Fix duplicate external network ip check on network creation
Signed-off-by: Leon Schoch <git@darkress.xyz>
2026-05-01 00:43:56 +02:00
Stéphane Graber
0b17373056
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:35:53 +02:00
Stéphane Graber
52f835d4d2
incus/image/copy: Add --reuse flag for --copy-aliases
When used together with --copy-aliases, this flag forces deletion and
recreation of any conflicting aliases on the target server so that they
end up pointing to the newly copied image.

Closes #3033

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:35:36 +02:00
Stéphane Graber
b4aab46e23
incus/cluster: Don't attempt to connect during join
When using the join command, the client already has a connection to the
cluster, so there is no need to start iterating IP addresses from the
token in order to get to a server certificate.

Closes #3075

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:26:51 +02:00
Stéphane Graber
67fe50f247
incusd: Implement core.shutdown_action
This will now allow for triggering a server evacuation on shutdown.

Closes #2785

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:12:06 +02:00
Stéphane Graber
7d4b52778b
incusd/evacuate: Extract evacuateStopInstance and evacuateMigrateInstance helpers
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:12:05 +02:00
Stéphane Graber
2b28bb4624
doc: Update metadata
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:09:56 +02:00
Stéphane Graber
b76536442d
incusd/cluster/config: Add core.shutdown_action
Add a new server configuration key controlling what action is performed
when the daemon is being shut down. Possible values are "shutdown" (the
default, stop all local instances) and "evacuate" (perform a server
evacuation prior to shutting down).

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:09:55 +02:00
Stéphane Graber
4817f5ef6b
api: Add server_shutdown_action extension
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:09:54 +02:00
Stéphane Graber
236711d0f2
incusd: Use QuotaWriter for backup and ISO uploads
Incus should always respect project disk limits when they are in place
as those are a very useful safety net to prevent users from causing a
denial of service by filling up the server's disk.

This addresses CVE-2026-41685

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:00:28 +02:00
Stéphane Graber
5ceb17630b
incusd: Fix nil pointer dereference in instance backup restore
Both the user triggered and admin triggered instance backup restore
mechanism could lead to a daemon crash by being fed partial backup
metadata.

This addresses CVE-2026-41684

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:00:27 +02:00
Stéphane Graber
da44e2d055
incusd: Limit tarball YAML reads to 1MiB
User provided image and backup tarballs would be unpacked and YAML files
parsed without any size restrictions. This was making it easy for an
authenticated user to provide a crafted image or backup tarball that
when parsed by Incus would lead to a very large YAML document being
loaded into memory, potentially causing the entire server to run out of
memory.

This addresses CVE-2026-41648

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:00:26 +02:00
Stéphane Graber
ec65c0015d
incusd/storage/s3: Fix nil pointer dereference on truncated input
Bad error checking could lead a truncated s3 backup archive to trigger a
nil pointer dereference during tar parsing.

This would lead to a daemon crash and with repeated use, a DoS of Incus.

This addresses CVE-2026-41647

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:00:25 +02:00
Stéphane Graber
afcf707e0e
incusd/storage/instance: Fix bad snapshot index calculation
The logic used to check if we have additional volume configuration
matching a backup was doing incorrect index math which could lead to
crashes when fed a bad index file.

This addresses CVE-2026-40251

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:00:24 +02:00
Stéphane Graber
2b7d83a017
incusd/network/ovn: Fix TLS validation logic
All 4 of the OVN connection handlers (NB, SB, IC-NB, IC-SB) were using a
rather broken validation logic which would effectively treat any remote
certificate as valid.

The updated logic now correctly uses the configured CA as the only valid
TLS root certificate and then loads the provided remote certificate and
intermediates before validating that a path exists between the root CA
and the server certificate.

Custom logic is used as OVN certificates and connection URLs don't
typically contain valid server name information.

This addresses CVE-2026-40243

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:00:23 +02:00
Stéphane Graber
d768f81c0a
incusd/storage/instance: Properly check dependent volumes on import
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:00:22 +02:00
Stéphane Graber
985a1dedf9
incusd/storage/volume: Validate snapshot entries on import
The volume import logic was missing some validation of the snapshot data
provided through the index. A nil snapshot entry would trigger a nil
pointer dereference causing the Incus daemon to crash.

This addresses CVE-2026-40197

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:00:21 +02:00
Stéphane Graber
030ced1b54
incusd/storage/bucket: Validate expected metadata on import
This adds missing validation for bucket metadata when processing a
bucket import. The missing logic would allow a malformed backup to crash
the Incus daemon, potentially allowing for a DoS by a user with access
to the Incus storage bucket functionality.

This addresses CVE-2026-40195

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:00:20 +02:00
Stéphane Graber
09b6ce57f0
incusd/images: Add image server restriction check in image URL download path
When asking Incus to directly download an image from a URL, Incus would
issue a HEAD request prior to validating if the image server was allowed
under project restriction.

An attacker with access to such an Incus project could use this gap in
coverage to probe the internal network of the server or otherwise cause
the server to send out HEAD requests to arbitrary URLs.

This addresses CVE-2026-35527

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-05-01 00:00:19 +02:00
Stéphane Graber
0ba6b1a0b2
Merge pull request #3258 from stgraber/deprecation
Replace minio with built-in S3 endpoint
2026-04-30 18:00:03 -04:00
Stéphane Graber
88b7166cf3
Merge pull request #3270 from bensmrs/linstor
Tune DrbdOptions/Disk/rs-discard-granularity
2026-04-30 16:27:59 -04:00
Stéphane Graber
f335073c59
Merge pull request #3271 from DarkressX/prevent-dplicate-network-external-ip
Prevent duplicate network external ip
2026-04-30 16:09:53 -04:00
Stéphane Graber
6509aa18bb
Merge pull request #3256 from presztak/dep_override_pool
Allow overriding storage pools for dependent volumes during instance migration
2026-04-30 15:13:17 -04:00
Leon Schoch
4c480ba1d9
incus/server/network/ovn/driver: Validate that networks external ips are not used by another network, forward or loadbalancer
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-04-30 20:44:23 +02:00
Benjamin Somers
8c75386a73 incusd: Patch LINSTOR to set DrbdOptions/Disk/rs-discard-granularity
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-30 18:16:29 +00:00
Stéphane Graber
242436a308
gomod: Update dependencies
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 19:45:11 +02:00
Stéphane Graber
03da9f6b89
incusd/storage/s3: Derive AWS region from S3 endpoint URL
The minio client hardcoded us-east-1 as the region which would then
break uploads to other AWS S3 regions. Add some logic to try and guess
the correct region.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 19:45:10 +02:00
Stéphane Graber
30969fc20d
incusd: Switch minio S3 client for AWS SDK
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 19:45:09 +02:00
Stéphane Graber
1a947907f4
tests: Replace minio with simple built-in S3 endpoint
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 19:45:08 +02:00
Stéphane Graber
4226c0a584
incusd/storage/s3: Remove minio supervisor and ActivateBucket
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 19:44:51 +02:00
Stéphane Graber
a49dcb5099
incusd/storage: Remove remaining minio interactions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 19:44:50 +02:00
Stéphane Graber
be6107a27e
incusd/storage/s3: Migrate data from minio to new format
Rather than implement this as a potentially very slow one-time operation
on startup, we instead will be doing the migration as buckets get
accessed. A lock is in place to avoid concurent migration and the
migration will be triggered until the minio directory is fully converted
(allows for resuming after a crash).

We can still add a patch later down the line converting whatever is
left, but this should reduce the impact of the transition to our own S3
listener.

The original minio metadata (.minio) is kept within the bucket so no
data is lost during conversion.

The migration logic handles both large chunked files and small file
storage in minio. It's made slightly harder because of minio writing a
32 byte checksum every 1MiB which needs to be stripped during
conversion.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 19:44:49 +02:00
Stéphane Graber
5f7739d494
incusd/storage/s3: Switch to new listener
This replaces the old minio proxy logic with instead using the new
built-in S3 listener logic.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 19:44:48 +02:00
Stéphane Graber
1cffadf40e
incusd/storage/s3: Add in-process S3 handler package
This introduces a new built-in S3 listener supporting the basic S3 operations.
It stores data on the filesystem under the data/ directory and uses a
.meta suffix for S3 JSON metadata.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 19:44:47 +02:00
Stéphane Graber
9dbdeeaffe
incusd/instances: Fix gofump
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 18:57:00 +02:00
Stéphane Graber
1a8513c966
internal/server/cgroup: Fix gofumpt
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 18:56:59 +02:00
Stéphane Graber
b3440a54ea
internal/rsync: Fix gofumpt
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 18:56:58 +02:00
Stéphane Graber
6b1eaa7bd3
Merge pull request #3265 from kazan417/patch-3
incus/storage_bucket: Fix bad list column help message
2026-04-30 12:51:20 -04:00
Stéphane Graber
088bc766b9
i18n: Updatee translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 18:50:51 +02:00
kazan417
1c03717b74
incus/storage_bucket: Fix bad list column help message
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-04-30 18:50:24 +02:00
Stéphane Graber
f3a047d521
Merge pull request #3267 from kazan417/patch-5
incus/network_zone: Fix missing example description
2026-04-30 12:47:28 -04:00
Stéphane Graber
1665ec10d6
i18n: Updatee translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 18:47:12 +02:00
kazan417
ab9c4bffe3
incus/network_zone: Fix missing example description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-04-30 18:47:02 +02:00
Stéphane Graber
a27d3801c1
Merge pull request #3268 from kazan417/patch-6
incus/cluster: Fix spelling of YAML
2026-04-30 12:45:25 -04:00
Stéphane Graber
a4029535e1
i18n: Updatee translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 18:44:53 +02:00
kazan417
fdb8f87546
incus/cluster: Fix spelling of YAML
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-04-30 18:44:13 +02:00
Stéphane Graber
0dab8e4354
Merge pull request #3262 from kazan417/patch-1
incus/storage: Fix typo
2026-04-30 10:16:31 -04:00
Stéphane Graber
260f5a750b
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-30 15:44:53 +02:00
kazan417
e9cf5710b6
incus/storage: Fix typo
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-04-30 15:43:19 +02:00
Benjamin Somers
36611e8842 incusd/storage/linstor: Tune DrbdOptions/Disk/rs-discard-granularity on pool creation
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-30 12:36:36 +00:00
Piotr Resztak
12257dd6dc incusd: Fix cross-server migration being used instead of intra-cluster migration when storage and target are specified
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-30 14:32:35 +02:00
Piotr Resztak
e96b5b7c4b incusd: Add support for overriding disk device pool during migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-30 14:32:35 +02:00
Piotr Resztak
dd6e654cf3 incusd/instance: Add support for overriding disk device pool during migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-30 14:32:35 +02:00
Piotr Resztak
69b080dcf2 incusd/instance: Add UpdateDevices
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-30 14:32:35 +02:00
Piotr Resztak
b8ba0244f4 incusd/storage: Add support for overriding disk device pool during migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-30 14:32:33 +02:00
Piotr Resztak
5814752278 incusd/migration: Add support for overriding disk device pool during migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-30 13:59:54 +02:00
Piotr Resztak
edc6875e92 client: Pass device override information during copy
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-30 12:20:01 +02:00
Piotr Resztak
872f3c203b incusd/migration: Add DeviceName field to DependentVolume
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-30 12:20:01 +02:00
Piotr Resztak
66f2ba05d2 incusd/storage: Allow overriding pool for dependent disk during migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-30 12:20:01 +02:00
Stéphane Graber
7be230030c
Merge pull request #3253 from bensmrs/drop-legacy
Client deprecations
2026-04-29 17:42:45 -04:00
Stéphane Graber
91abfceb0e
Merge pull request #3257 from bensmrs/slop
Help a bit with the slop
2026-04-29 17:40:29 -04:00
Benjamin Somers
6da91897be github: Add disclaimer on bug reports
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-29 20:32:27 +00:00
Benjamin Somers
90f33b04c9 github: Automatically close untyped issues
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-29 20:32:18 +00:00
Stéphane Graber
3bd0d73406
Merge pull request #3254 from stgraber/deprecation
Remove xtables support
2026-04-29 14:09:47 -04:00
Stéphane Graber
ec7ac5758c
tests: Drop xtables firewall driver support
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 17:39:06 +02:00
Stéphane Graber
ad217091e1
doc: Drop xtables/iptables/ebtables references
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 17:39:05 +02:00
Stéphane Graber
f55dba32b7
incusd/firewall: Drop xtables/iptables/ebtables backend (nftables only)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 17:39:04 +02:00
Benjamin Somers
c76f48ba91 i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-29 14:48:09 +00:00
Benjamin Somers
f57d9331ae tests: Drop legacy [custom/] prefix
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-29 14:47:35 +00:00
Benjamin Somers
a276dbb79d incus/storage_volume: Drop legacy [custom/] prefix
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-29 14:21:39 +00:00
Benjamin Somers
a0e3a97b07 incus/usage: Add deprecation warning for the <key> <value> syntax
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-29 14:21:39 +00:00
Benjamin Somers
6ad50791ee incus/color: Add warning prefix
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-29 14:21:39 +00:00
Benjamin Somers
e1e02589ea incus/remote_unix: Drop legacy <remote> syntax
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-29 14:21:39 +00:00
Benjamin Somers
a14ec478be shared/cliconfig: Drop legacy <remote> syntax
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-29 14:21:39 +00:00
Benjamin Somers
f416558d74 incus/config_trust: Drop legacy [<remote>:] ATOM syntax
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-29 14:21:39 +00:00
Stéphane Graber
7dc23766e1
Merge pull request #3249 from stgraber/deprecation
Bump minimum versions and remove version checks
2026-04-29 09:00:22 -04:00
Stéphane Graber
1924513f3c
incusd/storage/linstor: Update comment
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 14:01:45 +02:00
Stéphane Graber
5eea1e2f9e
Merge pull request #3250 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-04-29 07:30:13 -04:00
Américo Monteiro
da54afdefb
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1784 of 1784 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-04-29 10:09:49 +02:00
Stéphane Graber
d5ccd2f263
incusd/network/bridge: Drop dnsmasq version checks below 2.90
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 04:57:03 +02:00
Stéphane Graber
a4246c5469
incusd/rsync: Drop rsync version checks below 3.2.0
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 04:57:02 +02:00
Stéphane Graber
73d4ebc2f8
incusd/apparmor: Drop AppArmor version checks below 3.0.0
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 04:57:01 +02:00
Stéphane Graber
6d51ce3aca
incusd/firewall/nftables: Drop nftables version checks below 1.0.0
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 04:57:00 +02:00
Stéphane Graber
0c8a5ba0e3
incusd/storage/truenas: Bump baseline to 0.7.7
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 04:56:59 +02:00
Stéphane Graber
a03b2c3f29
incusd/storage/lvm: Drop LVM version checks below 2.03.11
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 04:56:58 +02:00
Stéphane Graber
26d064e6a7
incusd/storage/btrfs: Drop btrfs version checks below 6.12.0
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 04:56:57 +02:00
Stéphane Graber
37525af0ea
incusd/storage/zfs: Drop ZFS version checks below 2.1.0
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 04:56:56 +02:00
Stéphane Graber
0aa222dd98
incusd/instance/qemu: Drop QEMU version checks below 8.2
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 04:56:55 +02:00
Stéphane Graber
0bedc04677
incusd: Drop kernel version checks (6.12 baseline)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 04:56:54 +02:00
Stéphane Graber
57315170cb
doc/requirements: Expand on minimum versions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-29 04:55:48 +02:00
Serge Hallyn
0440b304c6
Merge pull request #3246 from stgraber/deprecation
Deprecate support for older kernels
2026-04-28 21:38:22 -05:00
Stéphane Graber
8473d66b57
Merge pull request #3247 from bensmrs/pull
Improve compatibility with `cp` for pull/push operations
2026-04-28 19:10:16 -04:00
Stéphane Graber
a099385b8c
Merge pull request #3248 from presztak/client_bitmap
client: Add bitmap manipulation functions
2026-04-28 19:09:10 -04:00
Stéphane Graber
e8b2db4134
shared/idmap: Keep respecting INCUS_IDMAPPED_MOUNTS_DISABLE
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:57 +02:00
Stéphane Graber
2513e34308
incusd/instance/lxc: Drop pidfd fallback paths
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:56 +02:00
Stéphane Graber
87df02fad6
incusd/seccomp: Assume pidfd kernel support in MakePidFd
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:55 +02:00
Stéphane Graber
1d0a118f44
incusd/device/proxy: Drop pidfd fallback in setupProxyProcInfo
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:54 +02:00
Stéphane Graber
e22258cc6e
incusd/forknet: Remove unused info subcommand
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:53 +02:00
Stéphane Graber
11edb7ec19
incusd/instance/lxc: Drop forknet info fallback in networkState
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:52 +02:00
Stéphane Graber
21c4e5324a
incusd/seccomp: Update LXC baseline
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:51 +02:00
Stéphane Graber
b29832f79d
incusd/seccomp: Update kernel baseline
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:50 +02:00
Stéphane Graber
328bde3339
incusd/apparmor: Update kernel baseline
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:49 +02:00
Stéphane Graber
6e54590334
incusd/device: Update kernel baseline
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:48 +02:00
Stéphane Graber
3819225c06
incusd/instance/lxc: Update kernel baseline
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:47 +02:00
Stéphane Graber
badeab48d2
incusd/sys: Update kernel baseline
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:46 +02:00
Stéphane Graber
ab0375fba6
incusd: Remove kernel feature detection
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 23:51:45 +02:00
Piotr Resztak
3608a8226f client: Add bitmap manipulation functions
- CreateInstanceBitmap
- GetStorageVolumeBitmapNames
- GetStorageVolumeBitmaps
- CreateStorageVolumeBitmap
- DeleteStorageVolumeBitmap

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-28 23:42:16 +02:00
Benjamin Somers
21fd4a1cf9 tests: Add more thorough tests for pull/push operations
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-28 21:24:44 +00:00
Benjamin Somers
198219b7e8 incus: Improve cp compatibility for pull operations
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-28 21:22:47 +00:00
Stéphane Graber
23c64cffe4
Merge pull request #3242 from stgraber/deprecation
Reset LXC feature detection
2026-04-28 09:36:49 -04:00
Stéphane Graber
1cbe023673
incusd/seccomp: Update LXC baseline
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 03:17:44 +02:00
Stéphane Graber
2738dba58a
incusd/instance/lxc: Update LXC baseline
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 03:17:43 +02:00
Stéphane Graber
ddb9596c12
incusd/device: Update LXC baseline
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 03:17:42 +02:00
Stéphane Graber
96debc3fba
incusd/cgroup: Update LXC baseline
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 03:17:41 +02:00
Stéphane Graber
63428c18e0
incusd: Reset LXC feature detection
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 03:17:40 +02:00
Stéphane Graber
1ad77c8b75
Merge pull request #3240 from bensmrs/wrapped-flags
Improve flags
2026-04-27 21:13:41 -04:00
Benjamin Somers
6a0001aebf
i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-28 02:50:57 +02:00
Benjamin Somers
5223b3afee
incus: Generalize -a shorthand for --all
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-28 02:50:56 +02:00
Benjamin Somers
6fd85b2f3c
incus: Generalize -t shorthand for --type
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-28 02:36:44 +02:00
Benjamin Somers
3013e8a320
incus: Generalize -f shorthand for --format
--force takes precedence

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-28 02:36:43 +02:00
Benjamin Somers
9af237518f
incus: Generalize -f shorthand for --force
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-28 02:36:42 +02:00
Benjamin Somers
68db650ea6
incus: Wrap addition of native integer flags
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-28 02:36:42 +02:00
Benjamin Somers
1d26fd0ee5
incus: Wrap addition of boolean flags
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-28 02:36:41 +02:00
Benjamin Somers
17bdaeff59
incus: Wrap addition of integer flags
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-28 02:36:40 +02:00
Benjamin Somers
4bd27e7954
incus: Wrap addition of string array flags
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-28 02:36:39 +02:00
Benjamin Somers
802bd453f2
incus: Wrap addition of string flags
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-28 02:36:38 +02:00
Stéphane Graber
fe16855706
Merge pull request #3241 from presztak/can_restore
Check whether an instance snapshot can be restored
2026-04-27 20:32:38 -04:00
Stéphane Graber
938510ce43
Merge pull request #3234 from kazan417/main
Bunch of typo fixes in sources strings
2026-04-27 20:02:30 -04:00
Stéphane Graber
d7eaca04bf
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-28 01:45:25 +02:00
kazan417
12e5b4dc48
incus/admin_sql: Clarify behavior on standalone systems
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-04-28 01:45:18 +02:00
kazan417
5e599d5cb8
incus/profile: Clarify example description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-04-28 01:45:09 +02:00
kazan417
a33515d914
incus: Add missing example descriptions
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-04-28 01:44:48 +02:00
kazan417
0de2b2036b
incus; Fix copy/pasted list column description
Signed-off-by: kazan417 <kazan417@mail.ru>
2026-04-28 01:44:03 +02:00
Stéphane Graber
b0894a01e1
Merge pull request #3239 from gibmat/agent-gopath-mode
incus-agent: Work around issue when built with GO111MODULE=off
2026-04-27 18:58:10 -04:00
Piotr Resztak
cc7daba8c5 incusd/storage/drivers: Fix migration import-shadowing
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-27 23:58:37 +02:00
Piotr Resztak
12f3fe8d5f incusd/instance/drivers: Check whether an instance snapshot can be safely restored
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-27 23:56:38 +02:00
Piotr Resztak
4da5b79c9f incusd/storage: Add CanRestoreInstanceSnapshot and qcow2CanRestoreSnapshot
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-27 23:56:38 +02:00
Piotr Resztak
4d217073f8 incusd/storage/drivers: Run Qcow2Info in read-only mode
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-27 23:56:38 +02:00
Piotr Resztak
9e3e53b7af incusd/storage/drivers: Add CanRestoreVolume
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-27 23:56:37 +02:00
Stéphane Graber
97fbcfa855
Merge pull request #3238 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-04-27 13:31:55 -04:00
Mathias Gibbens
0710b22ddd
incus-agent: Work around issue when built with GO111MODULE=off
In some build setups, such as Debian's packaging of Incus, the
environment variable GO111MODULE=off is set. Commit 4e828ca replaced
gorilla/mux with net/http, and net/http has a compatibility flag for
pre-1.22 behavior which is triggered by setting GO111MODULE=off. This
breaks the resulting incus-agent binary.

To work around this, unconditionally set httpmuxgo121=0 in the GODEBUG
environment variable when incus-agent starts to force 1.22+ net/http
behavior. This shouldn't cause any issues with builds that don't define
GO111MODULE=off, as they will be using the modern behavior of net/http.

Signed-off-by: Mathias Gibbens <gibmat@debian.org>
2026-04-27 17:11:55 +00:00
Kazantsev Mikhail
6daecfe4c1
Translated using Weblate (Russian)
Currently translated at 100.0% (1784 of 1784 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-04-27 19:09:49 +02:00
Stéphane Graber
231eef73be
Merge pull request #3235 from stgraber/deprecation
Remove CGroup v1 support
2026-04-27 12:31:29 -04:00
Stéphane Graber
5014387987
doc: Remove cgroup1 mentions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-27 02:13:09 +02:00
Stéphane Graber
5dd5ccbe31
incusd/sys: Remove cgroup1 support
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-27 02:13:08 +02:00
Stéphane Graber
aec0b124d9
incusd/seccomp: Remove cgroup1 support
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-27 02:13:08 +02:00
Stéphane Graber
9d8d8358c7
incusd/device: Remove cgroup1 support
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-27 02:13:07 +02:00
Stéphane Graber
5ac30f1301
incusd/apparmor: Remove cgroup1 support
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-27 02:13:06 +02:00
Stéphane Graber
aa4e6470cb
incusd: Remove cgroup1 support
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-27 02:13:05 +02:00
Stéphane Graber
3d69764bcc
incusd/instance/lxc: Remove cgroup1 support
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-27 02:13:04 +02:00
Stéphane Graber
48ea96d4f7
incusd/cgroup: Require Cgroup V2
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-27 02:13:02 +02:00
Stéphane Graber
8457098ecf
Merge pull request #3232 from DarkressX/fix-report-error-state-in-state-call
Report VM error state in /state call
2026-04-26 09:49:14 -04:00
Stéphane Graber
cf35799d9a
Merge pull request #3231 from UweKrause/patch-1
doc: Update benchmark_performance.md with GOPATH details
2026-04-25 20:50:04 -04:00
Leon Schoch
0a78b368be
incus/instance/drivers/lxc: Early return state call in case instance is in error state
Signed-off-by: Leon Schoch <git@darkress.xyz>
2026-04-26 00:11:12 +02:00
Leon Schoch
f96d10c34d
incus/instance/drivers/qemu: Early return state call in case instance is in error state
Signed-off-by: Leon Schoch <git@darkress.xyz>
2026-04-26 00:11:12 +02:00
Leon Schoch
f88c382cd4
incus/instance/drivers/common: Add isErrorStatusCode function
Signed-off-by: Leon Schoch <git@darkress.xyz>
2026-04-26 00:11:12 +02:00
Uwe Krause
4eb479d182
doc/benchmark_performance: Mention GOPATH
Added information about GOPATH and its default locations.

Signed-off-by: Uwe Krause <16082815+UweKrause@users.noreply.github.com>
2026-04-25 23:46:46 +02:00
Benjamin Somers
dc7086cf84
Merge pull request #3230 from stgraber/main
Add support for targeting network lists
2026-04-25 22:22:17 +02:00
Stéphane Graber
7680c2699a
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-25 19:43:35 +02:00
Stéphane Graber
6695640961
incus/network: Add --target to network list
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-25 19:43:09 +02:00
Stéphane Graber
2c92a0712e
incusd/networks: Support targeting of network list
Closes #3229

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-25 19:39:39 +02:00
Stéphane Graber
fa169215a2
Merge pull request #3228 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-04-25 12:55:09 -04:00
Kazantsev Mikhail
72b08d318c
Translated using Weblate (Russian)
Currently translated at 100.0% (1784 of 1784 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-04-25 18:09:53 +02:00
Benjamin Somers
f1cd16a496
Merge pull request #3227 from stgraber/main
internal/linux: Add logging to ClearBlock
2026-04-25 13:36:27 +02:00
Stéphane Graber
c35a936f9c
internal/linux: Add logging to ClearBlock
It can be pretty useful to know what block clearing method was used for
a particular device as not all storage arrays/backends behave the same.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-24 23:22:10 +02:00
Stéphane Graber
5426323b6f
Merge pull request #3226 from stgraber/main
shared/validate: Fix name validation on single character
2026-04-24 12:38:39 -04:00
Stéphane Graber
11401263c1
Merge pull request #3219 from presztak/dep_disk_copy
Add support for specifying new names for dependent volumes when copying an instance
2026-04-24 12:38:21 -04:00
Stéphane Graber
a05cb3bd0a
shared/validate: Fix name validation on single character
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-24 17:53:40 +02:00
Piotr Resztak
235b4dc891 incusd/storage: Prevent migration of dependent volumes for snapshot instances
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-24 14:22:29 +02:00
Stéphane Graber
170e562797
Merge pull request #3225 from stgraber/main
incusd/instances/qemu: Fix crash on nil qmp handler in RunJSON
2026-04-24 08:22:12 -04:00
Stéphane Graber
b54b7ca36c
incusd/instances/qemu: Fix crash on nil qmp handler in RunJSON
Closes #3223

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-24 14:00:31 +02:00
Piotr Resztak
2eb8f2cb2a incusd/instance/drivers: Add check to notify disk only during cluster move
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-24 12:54:11 +02:00
Piotr Resztak
d19382c0af incusd/instance/drivers: Add support for live-migration of dependent volumes with a changed name
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-24 12:54:11 +02:00
Piotr Resztak
a357bb02ad incusd/storage: Add support for copying dependent volumes on the same target when the root volume storage changes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-24 12:54:11 +02:00
Piotr Resztak
3dee40eabc incusd/storage: Add support for migrating dependent volumes with a new name
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-24 12:54:09 +02:00
Stéphane Graber
b56f3f9c3a
Merge pull request #3224 from presztak/fix_temp_snap_remove
Remove temporary snapshot block device after migration
2026-04-24 06:14:47 -04:00
Stéphane Graber
425e272fc9
Merge pull request #3222 from stgraber/main
incusd/instance/qemu: Use timeouts for agent operations
2026-04-24 06:13:34 -04:00
Piotr Resztak
f6a612ac5e incusd/instance/drivers: Remove temporary snapshot block device after migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-24 10:56:15 +02:00
Piotr Resztak
685ef4c2c1 incusd/storage: Include dependent disks in copy requests
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-24 09:46:26 +02:00
Piotr Resztak
1e94500748 incusd: Allow copy only when all volumes are on remote storage
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-24 09:44:37 +02:00
Piotr Resztak
08fb9970fc incusd: Add validation for dependent volumes during copy request
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-24 09:44:36 +02:00
Stéphane Graber
a9df55ddf7
incusd/instance/qemu: Use timeouts for agent operations
We don't want a slow/hung VM to be able to DoS the Incus host on metrics
operations.

Sponsored-by: https://webdock.io
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-24 01:41:52 +02:00
Stéphane Graber
a205f3e80c
Merge pull request #3221 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-04-23 19:10:50 -04:00
Kazantsev Mikhail
995f4eb088
Translated using Weblate (Russian)
Currently translated at 100.0% (1784 of 1784 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-04-23 23:09:57 +00:00
Américo Monteiro
8d9c85c01b
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1784 of 1784 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-04-23 23:09:49 +00:00
Stéphane Graber
9d98223149
Merge pull request #3218 from stgraber/main
incus-agent: Use psutil for process count
2026-04-23 14:50:26 -04:00
Stéphane Graber
b48d046bda
incus-agent: Use psutil for process count
The counting logic was widely off for Linux VMs, so use the psutil logic instead.

Sponsored-by: https://webdock.io
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-23 16:15:38 +02:00
Stéphane Graber
6e07c1bf9f
Merge pull request #3215 from bensmrs/freebsd
incusd/instance/qemu: Improve OS detection for FreeBSD
2026-04-22 17:37:26 -04:00
Stéphane Graber
b139044bfa
Merge pull request #3209 from bensmrs/file-push
Add cp-like flags to push commands
2026-04-22 17:36:52 -04:00
Benjamin Somers
1de223c976 incusd/instance/qemu: Improve OS detection for FreeBSD
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-22 19:41:16 +00:00
Benjamin Somers
a96ad4bcd6
Merge pull request #3214 from stgraber/main
incusd/instance/edk2: Add support for seabios at bios-256k
2026-04-22 21:09:25 +02:00
Benjamin Somers
58c0823ca8 i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-22 19:06:16 +00:00
Benjamin Somers
2f516db4d5 tests: Test cp-like flags in incus storage volume file push
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-22 19:03:50 +00:00
Benjamin Somers
e56a3a0fb4 incus: Add cp-like flags to incus storage volume file push
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-22 19:03:50 +00:00
Benjamin Somers
be8630b9f8 incus: Defer dereferencing error handling
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-22 19:03:50 +00:00
Benjamin Somers
855ae0da50 tests: Test cp-like flags in incus file push
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-22 19:03:50 +00:00
Benjamin Somers
e9b5ee4ebd incus: Add cp-like flags to incus file push
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-22 19:03:50 +00:00
Benjamin Somers
6b508d7417 incus: Widen stdout checks in pull commands
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-22 19:03:50 +00:00
Stéphane Graber
1b3db667c3
incusd/instance/edk2: Add support for seabios at bios-256k
Closes #3210

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-22 14:04:10 -04:00
Stéphane Graber
fa5513b2d1
Merge pull request #3208 from presztak/backup_qcow2
Add support for export/import qcow2 in raw format
2026-04-22 14:00:43 -04:00
Stéphane Graber
9c903916e5
Merge pull request #3211 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-04-22 13:56:24 -04:00
Américo Monteiro
4ac7b8ec38
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-04-22 08:09:49 +00:00
Piotr Resztak
ecde36d9fd incusd/storage: Add support for export/import qcow2 in raw format
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-22 09:48:07 +02:00
Piotr Resztak
ff161e7956 incusd/storage/drivers: Make createParentSnapshotDirIfMissing public
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-22 09:48:07 +02:00
Piotr Resztak
93a87a98b3 incusd/storage/drivers: Extract unpackVolume and backupVolume to util
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-22 09:48:06 +02:00
Stéphane Graber
4ea73b65aa
Merge pull request #3205 from stgraber/main
incusd/images: Allow simpler HTTP headers
2026-04-21 14:21:37 -04:00
Stéphane Graber
c45dfec159
incusd/images: Allow simpler HTTP headers
Closes #3199

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-21 11:01:51 -04:00
Stéphane Graber
aaf3a930ce
Merge pull request #3206 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-04-20 23:13:53 -04:00
Anonymous
723a493479
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:06:45 +02:00
Varlorg
3cecb3b235
Translated using Weblate (French)
Currently translated at 77.6% (1387 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-04-21 05:06:13 +02:00
Steeve Droz
e12d0b9fe5
Translated using Weblate (French)
Currently translated at 77.6% (1387 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-04-21 05:06:12 +02:00
Laterria.Severino
d9d4b9c21b
Translated using Weblate (French)
Currently translated at 77.6% (1387 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-04-21 05:06:12 +02:00
Kazantsev Mikhail
18dc92a0b2
Translated using Weblate (French)
Currently translated at 77.6% (1387 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-04-21 05:06:11 +02:00
smCloudInTheSky
f80c9cad55
Translated using Weblate (French)
Currently translated at 77.6% (1387 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-04-21 05:06:10 +02:00
Corabel Bertolini
a261f9e4d1
Translated using Weblate (French)
Currently translated at 77.6% (1387 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-04-21 05:06:08 +02:00
Anonymous
b59c809ec8
Translated using Weblate (French)
Currently translated at 77.6% (1387 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:06:07 +02:00
Benjamin Somers
1fe001a03b
Translated using Weblate (French)
Currently translated at 77.6% (1387 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-21 05:05:59 +02:00
montag451
ac67a360c8
Translated using Weblate (French)
Currently translated at 77.6% (1387 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-04-21 05:05:43 +02:00
Hiroaki Nakamura
b97d274837
Translated using Weblate (Japanese)
Currently translated at 73.5% (1315 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-04-21 05:05:37 +02:00
KATOH Yasufumi
ec6c78888a
Translated using Weblate (Japanese)
Currently translated at 73.5% (1315 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-04-21 05:05:37 +02:00
Anonymous
bb672a06b4
Translated using Weblate (Japanese)
Currently translated at 73.5% (1315 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:05:30 +02:00
Anonymous
185f11f79c
Translated using Weblate (Georgian)
Currently translated at 32.2% (576 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:05:04 +02:00
Temuri Doghonadze
cfef91def2
Translated using Weblate (Georgian)
Currently translated at 32.2% (576 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-04-21 05:04:45 +02:00
Dklfajsjfi49wefklsf32
32c8fce198
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-04-21 05:04:32 +02:00
Stéphane Graber
add12c5b16
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-21 05:04:32 +02:00
Tobias Gerold
ff2059c100
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-04-21 05:04:31 +02:00
Jan Mittelstädter
aec7c7bb80
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-04-21 05:04:29 +02:00
Anonymous
19e06dccaf
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:04:27 +02:00
Kazantsev Mikhail
8b3b548d0d
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-04-21 05:03:59 +02:00
Andika Triwidada
d313395d9b
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-04-21 05:03:59 +02:00
Anonymous
df09649b16
Translated using Weblate (Indonesian)
Currently translated at 9.4% (169 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:03:56 +02:00
meipeter
43aa2567bc
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-04-21 05:03:28 +02:00
daoge
035ff34eff
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-04-21 05:03:27 +02:00
Kwok Guy
9c63faab49
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-04-21 05:03:26 +02:00
yooadmin
791e595e10
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-04-21 05:03:25 +02:00
Sakiko
646c7a710a
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-04-21 05:03:24 +02:00
Loge X
c59f0be765
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-04-21 05:03:23 +02:00
Anonymous
8708d8b065
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:03:14 +02:00
IO01
9a930e77c0
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-04-21 05:02:57 +02:00
pesder
e3e02890ce
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-04-21 05:02:52 +02:00
Anonymous
eb6c49cb14
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:02:51 +02:00
Anonymous
5fc4f6a6e9
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:02:22 +02:00
Anonymous
87e9699efa
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:01:51 +02:00
Américo Monteiro
d50a2b6e80
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-04-21 05:01:51 +02:00
Anonymous
f93b465814
Translated using Weblate (Swedish)
Currently translated at 94.7% (1694 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:01:19 +02:00
Daniel Nylander
fd8e5af34b
Translated using Weblate (Swedish)
Currently translated at 94.7% (1694 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-04-21 05:01:17 +02:00
Kazantsev Mikhail
f020810b39
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.1% (92 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-04-21 05:00:47 +02:00
Paulo Coghi
c8829442f4
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.1% (92 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-04-21 05:00:46 +02:00
Anonymous
f9e0b711ba
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.1% (92 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:00:45 +02:00
Daniel Dybing
5d999a9c71
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-04-21 05:00:14 +02:00
Anonymous
58ea9ea9f7
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 05:00:13 +02:00
Kazantsev Mikhail
b478af42a3
Translated using Weblate (Spanish)
Currently translated at 3.6% (66 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-04-21 04:59:42 +02:00
Jorge Teixeira
1d466f332d
Translated using Weblate (Spanish)
Currently translated at 3.6% (66 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-04-21 04:59:42 +02:00
Anonymous
99d0410805
Translated using Weblate (Spanish)
Currently translated at 3.6% (66 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 04:59:41 +02:00
Dklfajsjfi49wefklsf32
27c4a78829
Translated using Weblate (Dutch)
Currently translated at 11.1% (199 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-04-21 04:59:11 +02:00
Anonymous
e25913a483
Translated using Weblate (Dutch)
Currently translated at 11.1% (199 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 04:59:07 +02:00
Anonymous
e806d2d7ef
Translated using Weblate (Russian)
Currently translated at 87.8% (1570 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 04:58:35 +02:00
Kazantsev Mikhail
088cd01492
Translated using Weblate (Russian)
Currently translated at 87.8% (1570 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-04-21 04:58:28 +02:00
Alberto Donato
fbae00bb25
Translated using Weblate (Italian)
Currently translated at 1.7% (31 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-04-21 04:57:56 +02:00
Anonymous
b2ff3a455e
Translated using Weblate (Italian)
Currently translated at 1.7% (31 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-21 04:57:55 +02:00
Stéphane Graber
87bb2109ab
Merge pull request #3204 from stgraber/main
shared/archive: Avoid concurrent calls to Wait
2026-04-20 14:56:02 -04:00
Stéphane Graber
5cf9bddd59
Merge pull request #3201 from presztak/commit_fail
Wait for BLOCK_JOB_COMPLETED event after block-job-complete
2026-04-20 14:40:15 -04:00
Stéphane Graber
dc6833bbb7
shared/archive: Avoid concurrent calls to Wait
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-20 14:29:01 -04:00
Stéphane Graber
c6b9378c12
incusd/migrate: Limit timeout to initial handshake
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-20 14:06:33 -04:00
Stéphane Graber
d610a8c3a2
Merge pull request #3200 from bensmrs/stdin-stdout
Improve import/export usage consistency
2026-04-20 13:59:18 -04:00
Piotr Resztak
c0ea1f9520
incusd/instance/drivers: Add support for handling BLOCK_JOB_COMPLETED and BLOCK_JOB_ERROR events
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-20 12:35:42 -04:00
Piotr Resztak
31c5e214fc
incusd/instance/drivers/qmp: Wait for block job completion after issuing block-job-complete
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-20 12:35:41 -04:00
Benjamin Somers
8431a28293
i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-20 12:32:52 -04:00
Benjamin Somers
879a451858
tests: Add import from stdin and export to stdout
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-20 12:32:38 -04:00
Benjamin Somers
64bd8f9dcd
incus/storage_bucket: Improve import/export file handling
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-20 12:32:37 -04:00
Benjamin Somers
e15aa2abcb
incus/storage_volume: Improve import/export file handling
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-20 12:32:36 -04:00
Benjamin Somers
9d332db998
incus/import: Improve stdin handling
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-20 12:32:35 -04:00
Benjamin Somers
3c262355de
incus/export: Improve target file handling
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-20 12:32:34 -04:00
Stéphane Graber
3152c190ce
Merge pull request #3203 from kazan417/patch-2
incus/info: Tweak wording in resources output
2026-04-20 12:29:16 -04:00
Stéphane Graber
47c8f826d6
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-20 12:21:21 -04:00
kazan417
76ec6bcf2c
incus/info: Tweak wording in resources output
Clarifiy "serial" as "serial number".

Signed-off-by: kazan417 <kazan417@mail.ru>
2026-04-20 12:21:11 -04:00
Stéphane Graber
6d65b79170
Merge pull request #3202 from kazan417/patch-1
incus/cluster: Tweak error message
2026-04-20 12:19:01 -04:00
Stéphane Graber
115791cd4f
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-20 12:02:34 -04:00
kazan417
b197dffe92
incus/cluster: Tweak error message
Fix term for more correct translation without warnings

Signed-off-by: kazan417 <kazan417@mail.ru>
2026-04-20 12:01:18 -04:00
Stéphane Graber
bd8db7f911
Merge pull request #3197 from stgraber/main
VM migration tweaks
2026-04-20 11:27:43 -04:00
Stéphane Graber
c0e224c12c
Merge pull request #3198 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-04-20 01:34:13 -04:00
Stéphane Graber
4777803e06
incusd/device/nic: Prevent USB NICs on migratable VMs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-20 01:25:26 -04:00
Stéphane Graber
14e58f87b8
gomod: Update dependencies
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-20 01:15:32 -04:00
Stéphane Graber
18e9f08792
incusd: Increase devices tmpfs
We use the devices tmpfs as scratch directory when setting up the
instance agent disk (when used) as that contains some binaries, 50MiB
could be a bit tight at times.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-20 00:32:51 -04:00
Stéphane Graber
f1c264a796
incusd/devices/disk: Lock creation of ISO images
Closes #3191

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-20 00:32:07 -04:00
Stéphane Graber
606647b880
incusd/instance/qemu: Fix boot state recording
We were getting into a situation where we would incorrectly strip the
boot state recording on VM boot due to relying on CanLiveMigrate in
various startup related functions.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-19 23:55:24 -04:00
Kazantsev Mikhail
7a7bb41ce3
Translated using Weblate (Russian)
Currently translated at 82.1% (1468 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-04-20 03:10:04 +00:00
Stéphane Graber
ec50d3b37b
incusd/migration: Bump timeouts to 30s
Doing some stress tests with busy clusters, even the 10s is sometimes
just a hair too short.

We can go pretty high with this timeout anyway as the main goal is to
prevent leftovers background operations when the remote end fails to
receive data from the source.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-19 22:53:06 -04:00
Stéphane Graber
2488d32e5a
Merge pull request #3194 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-04-19 16:11:46 -04:00
Kazantsev Mikhail
a474bf9cc0
Translated using Weblate (Russian)
Currently translated at 47.0% (841 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-04-19 04:09:50 +02:00
Stéphane Graber
b368185fce
Merge pull request #3192 from stgraber/main
Use io.CopyN with 4MiB buffer everywhere
2026-04-18 19:04:32 -04:00
Stéphane Graber
f05bd57bd4
incusd: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:43:56 -04:00
Stéphane Graber
f932d77bbc
incus: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:45 -04:00
Stéphane Graber
27402978fe
incus-migrate: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:44 -04:00
Stéphane Graber
573ba5a66e
incus-user: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:42 -04:00
Stéphane Graber
c0079ad850
incus-agent: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:41 -04:00
Stéphane Graber
8b1aeac6e1
incus-simplestreams: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:40 -04:00
Stéphane Graber
c37033dd5c
lxc-to-incus: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:39 -04:00
Stéphane Graber
e126d24f61
lxd-to-incus: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:38 -04:00
Stéphane Graber
3f98917f3e
internal/rsync: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:37 -04:00
Stéphane Graber
262451981d
internal/io: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:36 -04:00
Stéphane Graber
0e6b86c210
internal/util: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:35 -04:00
Stéphane Graber
309a2e60b2
shared/util: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:35 -04:00
Stéphane Graber
efc0c11e16
shared/cliconfig: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:34 -04:00
Stéphane Graber
a08d2db1b5
shared/ws: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:33 -04:00
Stéphane Graber
2614f7ff1d
client: Switch io.Copy to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:32 -04:00
Stéphane Graber
1396bcc735
incusd: Switch io.CopyN to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:31 -04:00
Stéphane Graber
3a6f94d8c8
incus: Switch io.CopyN to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:30 -04:00
Stéphane Graber
217433e530
incus-migrate: Switch io.CopyN to util.SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:29 -04:00
Stéphane Graber
9fb55bf99d
shared/util: Introduce SafeCopy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-18 15:42:28 -04:00
Serge Hallyn
f1bcd37c38
Merge pull request #3190 from stgraber/hardening
shared/archive: Improve detection and error handling
2026-04-18 00:28:43 -05:00
Stéphane Graber
85dc304ae8
incusd/migrate: Bump migration timeouts
Apparently 5s isn't always long enough to get the migration headers on Ceph.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-17 21:36:33 -04:00
Stéphane Graber
4e8b674283
incusd/seccomp: Cleanup pointless check
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-17 21:02:41 -04:00
Stéphane Graber
e57a32b762
shared/subprocess: Cleanup pointless check
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-17 21:02:28 -04:00
Stéphane Graber
42278bd2b5
shared/archive: Improve detection and error handling
Fuzzing by the 7asecurity team has discovered a few issues with our
handling of compressed images and backups.

This fixes 3 different issues:
 - We weren't checking that 0 bytes at the trailing end of a header were
   in fact 0 in the file itself (checking read length).
 - In case of unpacker error, the client may hang reading from the
   uncompressed pipe unless it implements its own timeout/context mechanism
   calling the canceler.
 - The signature of an uncompressed tarball is based on trailing bytes
   and so should be checked after all of those using leading bytes.

No crashes would result from such bad input but some of the consumers of
those archive functions would be left hanging indefinitely, wasting a
few goroutines.

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-17 20:41:13 -04:00
Stéphane Graber
da5b37a6d7
Merge pull request #3189 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-04-17 19:13:37 -04:00
Paulo Coghi
865297b223
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.0% (91 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-04-17 23:54:46 +02:00
Anonymous
eb4d8b09cd
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.0% (91 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:54:46 +02:00
Dklfajsjfi49wefklsf32
70e7733913
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-04-17 23:54:27 +02:00
Stéphane Graber
97791d99f4
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-17 23:54:27 +02:00
Tobias Gerold
78c85c4bae
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-04-17 23:54:27 +02:00
Jan Mittelstädter
80f7490627
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-04-17 23:54:26 +02:00
Anonymous
6c02c0eff2
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:54:25 +02:00
Dklfajsjfi49wefklsf32
a7db932b6b
Translated using Weblate (Dutch)
Currently translated at 11.1% (199 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-04-17 23:54:09 +02:00
Anonymous
dfac19eb32
Translated using Weblate (Dutch)
Currently translated at 11.1% (199 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:54:07 +02:00
Anonymous
0c719df860
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:53:49 +02:00
Américo Monteiro
c84f101490
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1787 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-04-17 23:53:49 +02:00
Daniel Dybing
9d9c37d4f2
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-04-17 23:53:30 +02:00
Anonymous
b0711d8047
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:53:30 +02:00
Varlorg
8f0f166c85
Translated using Weblate (French)
Currently translated at 77.5% (1386 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-04-17 23:53:11 +02:00
Steeve Droz
ca3e638324
Translated using Weblate (French)
Currently translated at 77.5% (1386 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-04-17 23:53:11 +02:00
Laterria.Severino
e9bfa975c4
Translated using Weblate (French)
Currently translated at 77.5% (1386 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-04-17 23:53:11 +02:00
smCloudInTheSky
75e97bf633
Translated using Weblate (French)
Currently translated at 77.5% (1386 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-04-17 23:53:11 +02:00
Corabel Bertolini
d931dbd92b
Translated using Weblate (French)
Currently translated at 77.5% (1386 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-04-17 23:53:10 +02:00
Anonymous
e5f26b2945
Translated using Weblate (French)
Currently translated at 77.5% (1386 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:53:10 +02:00
Benjamin Somers
56c3fa3138
Translated using Weblate (French)
Currently translated at 77.5% (1386 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-17 23:53:05 +02:00
montag451
26beb9fade
Translated using Weblate (French)
Currently translated at 77.5% (1386 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-04-17 23:52:56 +02:00
Anonymous
705e3cfafc
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:52:53 +02:00
pesder
524ad4213b
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-04-17 23:52:34 +02:00
Anonymous
3ca794e5f1
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:52:34 +02:00
Alberto Donato
271a432e3d
Translated using Weblate (Italian)
Currently translated at 1.7% (31 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-04-17 23:52:15 +02:00
Anonymous
f6bc421d48
Translated using Weblate (Italian)
Currently translated at 1.7% (31 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:52:15 +02:00
Anonymous
5b7b2c0356
Translated using Weblate (Georgian)
Currently translated at 32.2% (576 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:51:56 +02:00
Temuri Doghonadze
7250a43918
Translated using Weblate (Georgian)
Currently translated at 32.2% (576 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-04-17 23:51:46 +02:00
Andika Triwidada
4d69a6b696
Translated using Weblate (Indonesian)
Currently translated at 9.4% (168 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-04-17 23:51:38 +02:00
Anonymous
0954a6ea74
Translated using Weblate (Indonesian)
Currently translated at 9.4% (168 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:51:37 +02:00
Kazantsev Mikhail
3d5e09e9a6
Translated using Weblate (Russian)
Currently translated at 42.9% (768 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-04-17 23:51:20 +02:00
Anonymous
fb0d8d8486
Translated using Weblate (Russian)
Currently translated at 42.9% (768 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:51:13 +02:00
Anonymous
d70383bd35
Translated using Weblate (Swedish)
Currently translated at 94.7% (1694 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:50:59 +02:00
Daniel Nylander
384920c8e5
Translated using Weblate (Swedish)
Currently translated at 94.7% (1694 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-04-17 23:50:58 +02:00
meipeter
26e000eda3
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-04-17 23:50:40 +02:00
daoge
7c5d0d8824
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-04-17 23:50:40 +02:00
Kwok Guy
891bc2e345
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-04-17 23:50:40 +02:00
yooadmin
d8aedb5ef4
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-04-17 23:50:40 +02:00
Sakiko
51d70f9be8
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-04-17 23:50:39 +02:00
Loge X
f7474f883d
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-04-17 23:50:39 +02:00
Anonymous
7199423810
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:50:33 +02:00
IO01
e62d0af9d3
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (713 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-04-17 23:50:24 +02:00
Jorge Teixeira
163a7b450e
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-04-17 23:50:22 +02:00
Anonymous
7b011b8b01
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:50:21 +02:00
Hiroaki Nakamura
d2af801a0d
Translated using Weblate (Japanese)
Currently translated at 73.5% (1315 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-04-17 23:50:03 +02:00
KATOH Yasufumi
ab0015bb0a
Translated using Weblate (Japanese)
Currently translated at 73.5% (1315 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-04-17 23:50:03 +02:00
Anonymous
bf9a966025
Translated using Weblate (Japanese)
Currently translated at 73.5% (1315 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:49:59 +02:00
Anonymous
04a7a13580
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1787 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-04-17 23:49:42 +02:00
Stéphane Graber
2e358c59a9
Merge pull request #3162 from pranav767/feat/allow-limiting-storage-pools-to-project
Allow limiting storage pools to project
2026-04-17 16:37:53 -04:00
Stéphane Graber
229da7b64b
incusd/project: Make checkRestrictionsAndAggregateLimits validate pool access
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-17 15:10:48 -04:00
Pranav Patil
677120895f
doc: Update config
Signed-off-by: Pranav Patil <pranavppatil767@gmail.com>
2026-04-17 12:43:15 -04:00
Pranav Patil
d7cc9c59dd
incusd/project: Add support for restricted.storage-pools.access
Signed-off-by: Pranav Patil <pranavppatil767@gmail.com>
2026-04-17 12:43:15 -04:00
Pranav Patil
003932c0f1
api: Add projects_restricted_storage_pool_access extension
Signed-off-by: Pranav Patil <pranavppatil767@gmail.com>
2026-04-17 12:43:14 -04:00
Stéphane Graber
c87bc8c549
Merge pull request #3182 from stgraber/main
Various bugfixes
2026-04-17 11:27:14 -04:00
Stéphane Graber
d32364baec
Merge pull request #3185 from presztak/btrfs_errors
Improve QCOW2 volume handling
2026-04-17 11:14:54 -04:00
Stéphane Graber
28b24c268a
Merge pull request #3184 from DarkressX/fix-ovn-duplicate-route
Fix ovn duplicate route
2026-04-17 11:10:24 -04:00
Stéphane Graber
da618fb1d1
incusd/instances: Don't delete ephemeral instances on system shutdown
Closes #3108

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-17 10:57:24 -04:00
Piotr Resztak
d4c9dfcead incusd/storage/drivers: Use 'qemu-img info' in read-only mode
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-17 16:07:37 +02:00
Piotr Resztak
1de0a46521 incusd/storage/drivers: Add syncBtrfs
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-17 16:07:37 +02:00
Piotr Resztak
62cda5636b incusd/storage: Improve qcow2 volume handling
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-17 16:07:36 +02:00
Leon Schoch
8f7b2a2145
incus/server/network/ovn/driver: Only add discard route if it doesn't exist already
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-04-17 13:42:02 +02:00
Leon Schoch
91868e4366
incus/server/network/ovn/nb: Mark route as discord when nexthop is 'discard'
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-04-17 13:42:02 +02:00
Stéphane Graber
7f9535fa31
incusd/response/upgrade: Add small delay for NBD
This is a bit of a hack but is needed to avoid a race where the server
completes the protocol upgrade and sends initial raw data before the
client has a chance to process the upgrade confirmation header. The
client is therefore still treating the data as HTTP and ends up losing
that initial message from the server.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-16 21:54:59 -04:00
Stéphane Graber
c9d51c4667
client: Fix bad error handling
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-16 21:54:58 -04:00
Stéphane Graber
bed4cd20f6
incusd/migrate: Set short timeouts on read/write of control data
This allows for operations to fail quickly when something goes wrong
with the source or target.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-16 21:54:57 -04:00
Stéphane Graber
69255206c7
incusd/instance/qemu: Handle stateful detection corner case
It's technically possible for a profile change to trick Incus into
thinking a VM may be migratable when it's not. Use the new boot state
feature to properly detect this case and refuse migration when not
possible.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-16 21:54:56 -04:00
Stéphane Graber
1ad05bcbe6
Merge pull request #3181 from stgraber/main
Rework tracking of original VM properties for migration and stateful snapshots/stop
2026-04-16 12:31:42 -04:00
Stéphane Graber
2826d1ae9c
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-16 01:09:22 -04:00
Stéphane Graber
a59ad82eba
incusd/instance/qemu: Don't export internal vcpus and numa nodes maps
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-16 01:09:21 -04:00
Stéphane Graber
a4aed86f01
incusd/instance/qemu: Make use of new migration state logic
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-16 01:09:20 -04:00
Stéphane Graber
0c0a3ddfb4
incusd/instance/qemu: Move topology functions to new file
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-16 01:09:19 -04:00
Stéphane Graber
1f8037877f
incusd/instance/qemu: Add new migration state volatile
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-16 01:09:18 -04:00
Stéphane Graber
ee5cb850de
incusd/instance/qemu: Rename internal structs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-16 01:09:17 -04:00
Stéphane Graber
26227cae3c
internal/instance: Introduce volatile.vm.boot_state
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-16 01:09:16 -04:00
Stéphane Graber
e4c1a19d64
Merge pull request #3180 from presztak/restore_qcow2_snapshot
Improve snapshot creation rollback handling
2026-04-15 14:23:24 -04:00
Piotr Resztak
f272bb3566 incusd/storage: Improve snapshot creation rollback handling
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-15 13:29:45 +02:00
Piotr Resztak
99cc09c7bd incusd/instance/drivers: Improve snapshot creation rollback handling
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-15 13:11:49 +02:00
Piotr Resztak
18d1e53dc2 incusd/storage/drivers: Fix ordering in Qcow2DeletionCleanup
Defer volume deactivation and postpone volume removal until after
locking the snapshot volume to avoid removing the parent too early.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-15 13:09:53 +02:00
Stéphane Graber
a70db7897b
Merge pull request #3178 from presztak/expose_bitmaps
Add support for exposing dirty bitmaps
2026-04-14 13:48:31 -04:00
Stéphane Graber
b44efc626d
Merge pull request #3179 from stgraber/main
incusd/instance/qemu: Fix RTC handling on Windows
2026-04-14 13:48:20 -04:00
Piotr Resztak
bf95062544 incusd/storage: Allow exposing dirty bitmaps through NBD export in offline mode
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-14 18:25:07 +02:00
Piotr Resztak
4bb79479dc incusd/instance/drivers: Allow exposing dirty bitmaps through NBD export in online mode
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-14 18:04:48 +02:00
Stéphane Graber
d5bc02c004
incusd/instance/qemu: Fix RTC handling on Windows
Windows needs to always use a local time base.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-14 12:00:42 -04:00
Stéphane Graber
d885ef0865
Merge pull request #3177 from presztak/get_bitmaps_recursion
Return bitmap endpoints by default when listing
2026-04-14 09:04:36 -04:00
Piotr Resztak
b8ac4bde12 doc/rest-api: Refresh swagger YAML
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-14 14:26:08 +02:00
Piotr Resztak
5f26b611e4 incusd: Return bitmap endpoints by default, objects with recursion=1
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-14 14:26:07 +02:00
Stéphane Graber
4d8c41a987
Merge pull request #3176 from bensmrs/windows-sftp
incus: Fix Windows absolute paths
2026-04-13 21:08:18 -04:00
Benjamin Somers
38985cee88 i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-13 23:25:05 +00:00
Benjamin Somers
aac4f8a206 tests: Add strict pull checks for directories
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-13 23:25:05 +00:00
Benjamin Somers
f8ec5611ab incus: Enforce stricter directory checks
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-13 23:25:05 +00:00
Benjamin Somers
b67d5b8ab7 incus: Fix Windows absolute paths
This also removes path normalization on pull targets, as the OS is
clever enough.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-04-13 21:29:52 +00:00
Stéphane Graber
73675ab561
Merge pull request #3172 from stgraber/oci
client: Forward skopeo errors
2026-04-13 16:21:05 -04:00
Benjamin Somers
45cfa0ad09
Merge pull request #3175 from stgraber/apparmor
incusd/apparmor/qemuimg: Expand symlinks
2026-04-13 21:55:23 +02:00
Benjamin Somers
03deefd45d
Merge pull request #3169 from stgraber/cli
incus: Enable admin recover and admin sql on all platforms
2026-04-13 20:37:55 +02:00
Stéphane Graber
629047c3f8
incusd/apparmor/qemuimg: Expand symlinks
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-13 12:34:25 -04:00
Stéphane Graber
6318f02e46
Merge pull request #3173 from presztak/stateful_snap_dep
Fix stateful VM snapshot failure with dependent volumes
2026-04-13 12:26:58 -04:00
Piotr Resztak
cb0dc427b0 incusd: Pass instanceStateful flag during instance snapshot
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 14:23:00 +02:00
Piotr Resztak
13f4389fa3 incusd/device: Pass instanceStateful flag during instance snapshot
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 14:23:00 +02:00
Piotr Resztak
17ce1b91c3 incusd/storage: Add instanceStateful flag to volume snapshot operations
Introduce an instanceStateful flag to volume snapshot operations to
indicate that the snapshot is part of a stateful instance snapshot.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 14:22:59 +02:00
Stéphane Graber
89f5483663
client: Forward skopeo errors
Closes #3171

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-13 02:44:09 -04:00
Stéphane Graber
5ba82c4d2b
Merge pull request #3093 from stgraber/nbd
Add a NBD based backup API
2026-04-13 01:36:43 -04:00
Stéphane Graber
a9e6edfc9a
incusd/instance/lxc: Don't return nil when not implemented
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-13 01:17:36 -04:00
Piotr Resztak
5c0793cc20
doc/rest-api: Refresh swagger YAML
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 01:17:35 -04:00
Piotr Resztak
a642e83ca0
incusd: Add API endpoints for managing dirty bitmaps
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 01:17:34 -04:00
Piotr Resztak
1de4ab1bce
incusd/storage: Add InstanceByVolumeName
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 01:12:11 -04:00
Piotr Resztak
b9d98fb6e8
incusd/instance: Add methods to manage dirty bitmaps
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 01:12:11 -04:00
Piotr Resztak
f4ad06efbe
shared/api: Add structs for managing dirty bitmaps
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 01:12:10 -04:00
Piotr Resztak
46f96f9832
incusd/instance/qmp: Add commands to manage dirty bitmaps
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 01:12:09 -04:00
Piotr Resztak
b2d72df1b6
incusd/storage: Support NBD export in offline mode
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 01:12:08 -04:00
Piotr Resztak
437b102d2d
incusd/storage/drivers: Implement ActivateTask
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 01:12:07 -04:00
Piotr Resztak
9833e0508c
incusd/storage: Export snapshot when VM is running to ensure consistency
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 01:07:19 -04:00
Piotr Resztak
2db310feb7
incusd/instance: Export snapshot when VM is running to ensure consistency
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 01:07:18 -04:00
Piotr Resztak
eaf588f074
incusd/instance/drivers: Improve error when NBD server is already running
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 01:07:17 -04:00
Piotr Resztak
020793d724
incusd/instance/qmp: Add QueryBlockExports and QueryNBDBlockExports
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-13 01:07:16 -04:00
Stéphane Graber
d3f6f2ffee
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-13 01:07:15 -04:00
Stéphane Graber
a9170d9661
incus/storage/volume: Add NBD command
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-13 01:07:14 -04:00
Stéphane Graber
fc7d19bb58
incusd/instance: Implement ConnectNBD
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-13 01:07:13 -04:00
Stéphane Graber
ec3fde4457
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-13 01:07:12 -04:00
Stéphane Graber
926002c7f0
incusd/storage: Implement NBD functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-13 01:07:11 -04:00
Stéphane Graber
5f4869b5c3
incusd/storage_volumes: Add NBD API
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-13 01:07:10 -04:00
Stéphane Graber
b2c2095394
client: Add GetStoragePoolVolumeBlockNBDConn
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-13 01:07:09 -04:00
Stéphane Graber
e133c59e99
incusd/auth: Add can_connect_nbd
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-13 01:07:08 -04:00
Stéphane Graber
b5a81e51eb
api: storage_volume_nbd
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-13 01:07:03 -04:00
Stéphane Graber
8babda1d90
incus: Enable admin recover and admin sql on all platforms
Those are API driven and support remote server interactions.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-12 17:57:01 -04:00
Stéphane Graber
2d19860c6a
Merge pull request #3165 from stgraber/main
incusd/instance/qemu: Scale SCSI queues with CPUs
2026-04-10 20:51:58 -04:00
Stéphane Graber
9d4f3b7706
incusd/instance/qemu: Scale SCSI queues with CPUs
Similar to what we do for networking, setup one queue per core.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: Magalu Cloud (https://magalu.cloud)
2026-04-10 17:50:56 -04:00
Stéphane Graber
321c40f963
Merge pull request #3158 from presztak/fix_snapshot_migration
Fix live migration of instances with snapshots
2026-04-08 11:42:13 -04:00
Piotr Resztak
a001d5e8dd incusd/instance/drivers: Fix live migration of instances with snapshots
The export name was based on the last block device in the backing chain,
which could differ between source and destination.
This happened because snapshots may be created in different modes
(online on source vs offline during migration on the target),
leading to different block device naming and migration failure.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-08 12:28:52 +02:00
Stéphane Graber
cafef2c82d
Merge pull request #3157 from stgraber/main
incusd/device/nic_bridged: Handle physical NICs
2026-04-07 15:22:42 -04:00
Stéphane Graber
7f4c583205
incusd/device/nic_bridged: Handle physical NICs
Physical NICs now can jump into the bridged NIC logic for config
validation. We therefore can't solely rely on the NIC type during
validation anymore.

This is the missing piece to getting physical NICs behaving normally
again. This was missed in the most recent fix due to testing happening
on pre-existing instances and therefore not running through full
validation.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-07 14:13:44 -04:00
Stéphane Graber
1d3f376a7d
Merge pull request #3154 from neitsab/patch-1
doc/image_format: Update Pongo2 link
2026-04-07 10:35:11 -04:00
Bastien Traverse
47512f9624
doc/image_format: Update Pongo2 website
Previous URL doesn't exist anymore, it redirects to website root which is in German.

Signed-off-by: Bastien Traverse <neitsab@esrevart.net>
2026-04-07 14:57:35 +02:00
Stéphane Graber
3d6454b892
Merge pull request #3153 from stgraber/main
incusd/instances/qemu: Skip vmcoreinfo on ppc64le
2026-04-06 20:26:44 -04:00
Stéphane Graber
ee5d142bf1
incusd/instances/qemu: Skip vmcoreinfo on ppc64le
Apparently that QEMU device doesn't exist on ppc64le, so just skip it.
Only impact should be limited memory layout info on dump.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-06 18:35:52 -04:00
Benjamin Somers
ef2a89d935
Merge pull request #3152 from stgraber/main
incusd/device/nic_physical: Fix inheritance from network
2026-04-06 22:32:10 +02:00
Stéphane Graber
974eb2b8a3
incusd/device/nic_physical: Fix inheritance from network
With the reworked validation we weren't correctly pulling in
network-wide settings anymore as the list of optional fields has now
been trimmed down to correctly align with the type of instances being
run.

Introduce an internal networkFields list which lists the properties to
be inherited from the network, then ensure the user doesn't get to set
those when linked to a managed network and finally use that list to
import those properties from the network if set there.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-06 14:44:15 -04:00
Stéphane Graber
b030aad14f
Merge pull request #3150 from stgraber/main
incusd/device/nic_physical: Fix bridge handling
2026-04-05 12:44:56 -04:00
Stéphane Graber
2259e714e4
incusd/device/nic_physical: Fix bridge handling
The network config step needs to happen prior to return or subsequent
function calls will be misisng those configuration keys.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-05 01:40:17 -04:00
Stéphane Graber
13c9ae7a04
Merge pull request #3149 from stgraber/hardening
incusd: Don't expose the API extension list pre-authentication
2026-04-04 11:36:09 -04:00
Stéphane Graber
eefd6f8801
incusd: Don't expose the API extension list pre-authentication
Having access to the whole list of API extensions prior to
authentication makes it easier to target specific Incus features for
specific bugs or security issues.

While backports and cherry-picks, especially into LTS releases makes it
harder to get an exact match for a specific Incus version, it certainly
makes it easier to target a specific range of vulnerable Incus releases.

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-03 16:08:32 -04:00
Stéphane Graber
c78fb99d83
Merge pull request #3147 from presztak/fix_qcow2_stateful_snapshot
Fix stateful snapshots for qcow2 volumes
2026-04-03 14:48:34 -04:00
Benjamin Somers
19f47c9f0b
Merge pull request #3143 from stgraber/main
Rework physical NIC device validation
2026-04-03 20:15:28 +02:00
Stéphane Graber
6decd9c019
Merge pull request #3145 from yannis2707/doc-clarify-oidc-claim
Clarify description of oidc.claim option
2026-04-03 13:39:02 -04:00
Piotr Resztak
d71c370445 incusd/storage: Add support for stateful snapshots for qcow2 volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-03 18:09:25 +02:00
Piotr Resztak
b29ab524b3 incusd/instance: Add support for stateful snapshots for qcow2 volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-03 18:09:24 +02:00
Stéphane Graber
034c4a1b23
gomod: Update dependencies
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-03 11:40:28 -04:00
Stéphane Graber
39eef97658
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-03 11:40:27 -04:00
Stéphane Graber
880c84caab
incusd/device/nic_physical: Fix device validation
When dealing with a physical device that's treated as a bridged device
(parent is a type=physical bridge), also send device validation through
the bridge logic.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-03 11:40:26 -04:00
Stéphane Graber
0e7db4d83d
Merge pull request #3144 from presztak/fix_backup_dir_names
Use device names for dependent volumes when importing backups
2026-04-03 09:35:26 -04:00
Yannis
3777a484e4
doc: Update metadata
Signed-off-by: Yannis <yannis@yannis2707.me>
2026-04-03 12:38:41 +02:00
Yannis
644d69d7f3
incusd/cluster/config: Clarify description of oidc.claim option
Signed-off-by: Yannis <yannis@yannis2707.me>
2026-04-03 12:36:30 +02:00
Piotr Resztak
b84add7345 tests: Add tests for exporting/importing dependent volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-03 10:55:17 +02:00
Piotr Resztak
142e03b80f incusd/storage: Use device name when importing dependent volumes from backup
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-03 10:38:00 +02:00
Stéphane Graber
29d71fcde2
Merge pull request #3142 from stgraber/main
Fix mount interception dropping mount data flag on idmapped mount
2026-04-02 21:14:31 -04:00
Stéphane Graber
2889445b3b
incusd/forksyscall: Handle mount arguments when using idmap
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-02 18:20:24 -04:00
Stéphane Graber
cd449e825c
Merge pull request #3137 from stgraber/hardening
Implement a request body limit
2026-04-02 17:15:26 -04:00
Stéphane Graber
672189f101
incusd/storage: Improve comments on locks
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-02 16:31:38 -04:00
Stéphane Graber
662bd7168a
Merge pull request #3138 from presztak/mv_dependent_fix
Fix dependent volume flag removal during same-host storage moves
2026-04-02 15:36:24 -04:00
Stéphane Graber
be1a60487b
tests: Rewrite out-of-space test to use profiles
As otherwise the new 1MiB limit prevents the test from saturating the database.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-02 15:08:38 -04:00
Stéphane Graber
0aebe94fb8
Merge pull request #3141 from presztak/dependent_optimized_storage
Support optimized storage for dependent volumes
2026-04-02 11:01:04 -04:00
Stéphane Graber
767feb6767
Merge pull request #3140 from DarkressX/remove-stale-port-uuid
Remove stale port UUID
2026-04-02 10:44:12 -04:00
Piotr Resztak
68d6be36e5 incusd/instance/drivers: Pass the cleanupDependencies flag to device Remove
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-02 16:24:53 +02:00
Piotr Resztak
58fd96a51c incusd/device: Add cleanupDependencies argument to Remove() method
Introduce a new boolean argument, cleanupDependencies, to control
whether dependent resources are updated when removing a device.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-02 16:24:53 +02:00
Piotr Resztak
1ea73e37b8 incusd/storage: Rename createDependentVolumes to createDependentVolumesFromBackup
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-02 16:19:22 +02:00
Piotr Resztak
068dce801c incusd/storage: Improve logging during dependent volume creation from backup
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-02 16:16:03 +02:00
Piotr Resztak
07faf5e0bb incusd/storage: Support optimized storage for dependent volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-02 16:06:28 +02:00
Leon Schoch
65a56f4e33
incus/server/network/ovn/driver: Cleanup stale instance port uuids from acl port groups on instance stop
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-04-02 15:04:40 +02:00
Leon Schoch
40a7bbae08
incus/server/network/ovn/nb: Add function to get PortGroups by Port UUID
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-04-02 14:58:20 +02:00
Piotr Resztak
617d880282 incusd/instance: Rename deleteDependentVolumes to cleanupDependencies
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-02 11:03:17 +02:00
Stéphane Graber
97825998cf
incusd: Configure exceptions to the 1MiB limit
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-01 23:44:46 -04:00
Stéphane Graber
6aa3573318
incusd: Limit request body to 1MiB by default
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-01 23:44:33 -04:00
Stéphane Graber
9c4945c2b4
incusd: Clarify shutdown message
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-01 23:31:47 -04:00
Stéphane Graber
193e46358b
Merge pull request #3135 from stgraber/main
Implement cancel logic on all remaining websocket class operations
2026-04-01 22:04:19 -04:00
Serge Hallyn
2d5060d58e
Merge pull request #3136 from stgraber/storage
incusd/storage: Fix potential deadlock
2026-04-01 16:51:03 -05:00
Stéphane Graber
ea8289d960
incusd/instances: Implement cancelation in exec logic
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-01 17:20:28 -04:00
Stéphane Graber
d84ed053de
incusd/migration: Implement cancelation in migration logic
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-01 17:20:27 -04:00
Stéphane Graber
913dd14824
incusd/storage: Fix potential deadlock
Don't use defer to unlock the read lock when the same code path can call
back the parent logic causing a deadlock.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-01 17:20:18 -04:00
Stéphane Graber
3ee8b67941
Merge pull request #3127 from stgraber/main
Port to yaml/go-yaml
2026-04-01 14:32:26 -04:00
Serge Hallyn
290a2fcb01
Merge pull request #3134 from stgraber/storage
incusd/storage: Fix race in caching logic
2026-04-01 13:20:24 -05:00
Stéphane Graber
757f7ece69
Merge pull request #3133 from presztak/dependent_cross_cluster
Add support for cross-cluster dependent volume migration
2026-04-01 14:08:31 -04:00
Stéphane Graber
41589e8368
incusd/storage: Fix race in caching logic
Waitgroups don't work well when you're resetting them and when a Wait()
call may be happening prior to an Add() call.

Instead let's use a RWMutex which gives us a simpler mechanism to allow
the one writer many reader situation.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-04-01 13:49:22 -04:00
Piotr Resztak
a1d3f28c93 incusd/storage: Move dependent volume deletion from storage to instance delete()
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-01 16:17:56 +02:00
Piotr Resztak
95b7619231 incusd/instance: Move dependent volume deletion from storage to instance delete()
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-01 16:17:56 +02:00
Piotr Resztak
beed5b5880 incusd/storage: Pass additional parameter to Delete method
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-01 16:17:56 +02:00
Piotr Resztak
6573e9bc75 incusd/instance: Pass additional parameter to Delete method
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-01 16:17:55 +02:00
Piotr Resztak
43d86bef5f incusd/storage: use ForEachDependentDiskType and HasDependentDisk from instance
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-01 15:56:54 +02:00
Piotr Resztak
a223c01b8f incusd/instance: Add HasDependentDisk and ForEachDependentDiskType to instance interface
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-01 15:56:53 +02:00
Piotr Resztak
c25590ea55 incusd/storage: Add support for cross-cluster dependent volumes migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-01 15:54:14 +02:00
Piotr Resztak
372818c855 incusd/instance/drivers: Add support for cross-cluster dependent volumes migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-01 15:54:14 +02:00
Piotr Resztak
d2af510ecb incusd/instance: Add support for disk name to ExportQcow2Block
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-01 15:54:14 +02:00
Piotr Resztak
8f8fc28353 incusd/storage: Add ShouldMigrateDependentVolume
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-01 15:54:12 +02:00
Piotr Resztak
bca9d223df incusd/device: Ignore 'not found' errors when updating dependent config during device add/remove
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-04-01 11:30:30 +02:00
Stéphane Graber
e69aba01fb
tests: Update for slight YAML differences
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 17:21:56 -04:00
Stéphane Graber
271cd4cf0c
test: Fix ordering of godeps.list
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:43:40 -04:00
Stéphane Graber
81044dc52b
incus: Update for new YAML empty reader behavior
The new YAML parser doesn't seem to like empty input.
Instead of silently skipping as was the case with the v2 parser, we're
now getting an EOF or equivalent error.

To clean things up, stop using ReadAll and instead get a Loader and then
handle the io.EOF case.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:41 -04:00
Stéphane Graber
a996d03ae7
gomod: Update dependencies
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:40 -04:00
Stéphane Graber
853f96f9d2
test: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:39 -04:00
Stéphane Graber
4b69bf2db7
incus: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:38 -04:00
Stéphane Graber
0adef73227
incusd: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:37 -04:00
Stéphane Graber
3d178e135e
incusd/storage/drivers: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:36 -04:00
Stéphane Graber
b73a1fe4c2
incusd/backup: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:35 -04:00
Stéphane Graber
20a8c5e06a
incus-simplestreams: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:34 -04:00
Stéphane Graber
7a8c6aea46
incus-migrate: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:33 -04:00
Stéphane Graber
39a18a73b3
incus-agent: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:32 -04:00
Stéphane Graber
fa3a8d4ddc
incusd/storage: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:31 -04:00
Stéphane Graber
de27e44be9
incusd/instance/drivers: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:30 -04:00
Stéphane Graber
9f8574a71a
shared/validate: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:29 -04:00
Stéphane Graber
28e767d808
shared/subprocess: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:28 -04:00
Stéphane Graber
cda3ac59b7
shared/cmd: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:27 -04:00
Stéphane Graber
a74d566c0f
shared/cliconfig: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:26 -04:00
Stéphane Graber
0fae4ba67c
shared/api: Switch to go-yaml/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 16:14:26 -04:00
Stéphane Graber
7f77e65c5d
Merge pull request #3132 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-03-31 13:05:32 -04:00
meipeter
ffeb2f1f1a
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.0% (713 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-03-31 15:29:08 +00:00
daoge
a328acf71e
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.0% (713 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-03-31 15:29:08 +00:00
Kwok Guy
54c1875dad
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.0% (713 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-03-31 15:29:07 +00:00
yooadmin
2e2a90dbb4
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.0% (713 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-03-31 15:29:06 +00:00
Sakiko
5dbbf138b5
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.0% (713 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-03-31 15:29:05 +00:00
Loge X
a16f180748
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.0% (713 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-03-31 15:29:04 +00:00
Anonymous
8341cb20e4
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.0% (713 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:29:03 +00:00
IO01
1d2e9a8ce8
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.0% (713 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-03-31 15:29:02 +00:00
Anonymous
37bc93550f
Translated using Weblate (Swedish)
Currently translated at 95.2% (1694 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:29:01 +00:00
Daniel Nylander
5a741260a1
Translated using Weblate (Swedish)
Currently translated at 95.2% (1694 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-03-31 15:29:01 +00:00
Andika Triwidada
aca5655726
Translated using Weblate (Indonesian)
Currently translated at 9.4% (168 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-03-31 15:29:00 +00:00
Anonymous
c096a39a91
Translated using Weblate (Indonesian)
Currently translated at 9.4% (168 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:59 +00:00
Alberto Donato
2c81a01cf1
Translated using Weblate (Italian)
Currently translated at 1.7% (31 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-03-31 15:28:59 +00:00
Anonymous
5ca094a560
Translated using Weblate (Italian)
Currently translated at 1.7% (31 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:58 +00:00
Daniel Dybing
d70df485d1
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-03-31 15:28:57 +00:00
Anonymous
a1a425222d
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:56 +00:00
Anonymous
51f92c87ef
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:55 +00:00
Dklfajsjfi49wefklsf32
3cdda102e2
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-03-31 15:28:55 +00:00
Stéphane Graber
a465af979c
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-31 15:28:54 +00:00
Tobias Gerold
67184dafe6
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-03-31 15:28:53 +00:00
Jan Mittelstädter
d6eda2813e
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-03-31 15:28:53 +00:00
Anonymous
b91bc13bd9
Translated using Weblate (German)
Currently translated at 10.6% (190 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:52 +00:00
Dklfajsjfi49wefklsf32
b6ecebee33
Translated using Weblate (Dutch)
Currently translated at 11.1% (199 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-03-31 15:28:51 +00:00
Anonymous
8686539dfa
Translated using Weblate (Dutch)
Currently translated at 11.1% (199 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:51 +00:00
Kazantsev Mikhail
68d48808ba
Translated using Weblate (Russian)
Currently translated at 43.1% (768 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-03-31 15:28:50 +00:00
Anonymous
6ec02bbc97
Translated using Weblate (Russian)
Currently translated at 43.1% (768 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:49 +00:00
Jorge Teixeira
dcc24fbd63
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-03-31 15:28:49 +00:00
Anonymous
683b1c7208
Translated using Weblate (Spanish)
Currently translated at 3.6% (65 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:48 +00:00
pesder
8e892cf418
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-03-31 15:28:47 +00:00
Anonymous
ee6091fae9
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:45 +00:00
Varlorg
e0e9e891a2
Translated using Weblate (French)
Currently translated at 77.9% (1386 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-03-31 15:28:44 +00:00
Steeve Droz
13c8730171
Translated using Weblate (French)
Currently translated at 77.9% (1386 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-03-31 15:28:43 +00:00
Laterria.Severino
9f403f2706
Translated using Weblate (French)
Currently translated at 77.9% (1386 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-03-31 15:28:42 +00:00
smCloudInTheSky
8424417dcc
Translated using Weblate (French)
Currently translated at 77.9% (1386 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-03-31 15:28:42 +00:00
Corabel Bertolini
0232985c33
Translated using Weblate (French)
Currently translated at 77.9% (1386 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-03-31 15:28:41 +00:00
Anonymous
5e076e7951
Translated using Weblate (French)
Currently translated at 77.9% (1386 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:40 +00:00
Benjamin Somers
a723c451de
Translated using Weblate (French)
Currently translated at 77.9% (1386 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-31 15:28:39 +00:00
montag451
70d7b0f116
Translated using Weblate (French)
Currently translated at 77.9% (1386 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-03-31 15:28:39 +00:00
Anonymous
367262a09d
Translated using Weblate (Georgian)
Currently translated at 32.3% (576 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:38 +00:00
Temuri Doghonadze
0b68e72f7c
Translated using Weblate (Georgian)
Currently translated at 32.3% (576 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-03-31 15:28:36 +00:00
Anonymous
af5c0b7f22
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:35 +00:00
Anonymous
76f3524595
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1779 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:35 +00:00
Américo Monteiro
141c33107d
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1779 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-03-31 15:28:34 +00:00
Hiroaki Nakamura
e3b52179a2
Translated using Weblate (Japanese)
Currently translated at 73.9% (1315 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-03-31 15:28:33 +00:00
KATOH Yasufumi
3a1a6a31b9
Translated using Weblate (Japanese)
Currently translated at 73.9% (1315 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-03-31 15:28:32 +00:00
Anonymous
1ab8747c89
Translated using Weblate (Japanese)
Currently translated at 73.9% (1315 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:31 +00:00
Paulo Coghi
348b5b908a
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.1% (91 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-03-31 15:28:30 +00:00
Anonymous
d92cf32706
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.1% (91 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-31 15:28:29 +00:00
Stéphane Graber
6df9fdc28e
Merge pull request #3130 from bensmrs/legacy-zfs
Support old-style ZFS types
2026-03-31 11:18:30 -04:00
Stéphane Graber
cc43fdaf1e
Merge pull request #3128 from csprl/feature/simplestreams-prod-name-arg
incus-simplestreams: Add flag for overriding product name
2026-03-31 11:13:31 -04:00
Benjamin Somers
ac893aecc3 incusd/storage/zfs: Use old-style ZFS types
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-31 11:52:16 +00:00
Benjamin Somers
dfc98eeaf3 incusd/storage/truenas: Use old-style ZFS types
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-31 11:51:57 +00:00
Casper Löfgren
1b0c4d1d63 cmd/incus-simplestreams: Add flag for overriding product name
Signed-off-by: Casper Löfgren <casper.lofgren@hotmail.com>
2026-03-31 11:50:01 +03:00
Benjamin Somers
4ae79ae5cb
Merge pull request #3126 from stgraber/main
incusd/network/state: Use canAccessNetwork
2026-03-31 00:25:43 +02:00
Stéphane Graber
e63f6bf1a8
Merge pull request #3125 from bensmrs/remote-equal
shared/cliconfig: Avoid treating `=` as part of a remote name
2026-03-30 16:27:25 -04:00
Stéphane Graber
17e857533e
incusd/network/state: Use canAccessNetwork
This uses the same helper we have on the other network endpoints which
then allows for server-wide admin users to access the state endpoint
even on interfaces which aren't managed by Incus itself.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-30 16:26:19 -04:00
Benjamin Somers
c37b9bf7cc shared/cliconfig: Avoid treating = as part of a remote name
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-30 19:31:25 +00:00
Stéphane Graber
2010cdb734
Merge pull request #3122 from stgraber/main
Implement IncusOS update trigger on cluster version mismatch
2026-03-30 13:15:49 -04:00
Benjamin Somers
fcf927be53
Merge pull request #3121 from stgraber/storage
Rework storage caching logic (performance improvement)
2026-03-30 18:30:12 +02:00
Stéphane Graber
8c8733af63
incusd/storage/truenas: Retry iSCSI map request
For some reason the TrueNAS tool seems to be occasionally returning
empty values without returning an error.

Re-trying eventually gives us the state information and lets us connect.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-30 11:49:00 -04:00
Stéphane Graber
568bca413f
incusd/instances: Allow more concurency
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-30 11:48:58 -04:00
Stéphane Graber
ac805fc4a0
incusd/storage/truenas: Implement better caching
This moves TrueNAS to a per-pool cache rather than a per instance cache.
Because of that change, it adds proper locking and expiry of records and
plugs itself directly in the normal dataset property retrieval path.

This move then allows for merging multiple requests together, leading to
a dramatic reduction in the very expensive list calls. Requests are
batched in groups of 2 datasets due to TrueNAS concurrency limitations.

Resource usage properties are currently cached with a 1 minute expiry.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-30 11:48:56 -04:00
Stéphane Graber
5d05e18a87
incusd/storage/zfs: Implement better caching
This moves ZFS to a global cache rather than a per instance cache.
Because of that change, it adds proper locking and expiry of records and
plugs itself directly in the normal dataset property retrieval path.

This move then allows for merging multiple requests together, leading to
a dramatic reduction in the very expensive `zfs list` calls.

Resource usage properties are currently cached with a 15s expiry.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-30 11:48:52 -04:00
Stéphane Graber
77d89e32eb
incusd: Remove explicit caching mechanism in favor of implicit
Instead of attempting pre-fetching, often having to load data we don't
need, we'll instead move to a shared cache which can work across pool
struct instances and can be used to cache the actual data in use as well
as perform request merging.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-30 11:25:38 -04:00
Stéphane Graber
71b33fb57b
incusd/instance/common: Don't perform costly storage actions when no snapshots
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-30 11:25:28 -04:00
Stéphane Graber
4fe06996ce
Merge pull request #3120 from presztak/dependent_fixes
Improve handling of dependent volumes
2026-03-30 09:18:46 -04:00
Piotr Resztak
f7f600b2d2 tests: Add additional tests for dependent volume handling
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-30 09:39:25 +02:00
Piotr Resztak
ff71fe4423 incusd/device: Update 'dependent' flag on device add and detach
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-30 09:27:04 +02:00
Piotr Resztak
2f3b0f04c6 incusd: Disallow setting the 'dependent' key on volume creation
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-30 09:27:04 +02:00
Stéphane Graber
27d886a8fa
Merge pull request #3123 from bensmrs/pipe-flush
incusd/response: Make pipeResponse flush headers ASAP
2026-03-29 22:09:49 -04:00
Benjamin Somers
33fa8fe83b incusd/response: Make pipeResponse flush headers ASAP
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-29 23:13:39 +00:00
Stéphane Graber
3d4a75f7c9
incusd: Trigger IncusOS update check on version mismatch
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-29 16:01:21 -04:00
Stéphane Graber
312ba9f571
internal/incusos: Implement TriggerSystemUpdateCheck
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-29 16:00:57 -04:00
Stéphane Graber
0c0fd0e329
internal/incusos: Allow non-GET requests
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-29 16:00:49 -04:00
Stéphane Graber
122434df6b
Merge pull request #3117 from presztak/delete_dependent
Delete dependent volumes on instance deletion
2026-03-29 14:43:32 -04:00
Piotr Resztak
42653279ac tests: Test dependent volume deletion on instance deletion
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-29 16:03:03 +02:00
Piotr Resztak
e0ade0dfc5 incusd/storage: Delete dependent volumes on instance deletion
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-29 16:03:02 +02:00
Benjamin Somers
a6386825a6
Merge pull request #3106 from stgraber/main
incusd/instances/qemu: Rework qemuArchConfig
2026-03-28 19:13:37 +01:00
Stéphane Graber
be8e65211c
Merge pull request #3116 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-03-28 10:43:43 -04:00
Kazantsev Mikhail
43b992af83
Translated using Weblate (Russian)
Currently translated at 43.1% (768 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-03-28 15:34:17 +01:00
Temuri Doghonadze
db4deacffc
Translated using Weblate (Georgian)
Currently translated at 32.3% (576 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ka/
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2026-03-28 15:34:16 +01:00
Benjamin Somers
822565a914
Merge pull request #3107 from stgraber/cli
Cleanup cmd packages
2026-03-28 15:34:04 +01:00
Stéphane Graber
73ebeb9025
Merge pull request #3115 from damex/qemu-gate-virtio-audio
qemu: gate virtio audio based on presence of virtio-sound-pci
2026-03-28 10:20:34 -04:00
Benjamin Somers
64e352bca0
Merge pull request #3114 from stgraber/lint
incusd: Fix bad type in format strings
2026-03-28 14:56:38 +01:00
Roman Kuzmitskii
204c0fa52f incusd/instance/qemu: Omit audio device on systems without virtio-sound
Signed-off-by: Roman Kuzmitskii <roman@damex.org>
2026-03-28 20:34:06 +07:00
Roman Kuzmitskii
9d5c86f4f1 incusd/instance/qemu: Add virtio-sound detection logic
Signed-off-by: Roman Kuzmitskii <roman@damex.org>
2026-03-28 20:34:03 +07:00
Roman Kuzmitskii
f305f8fdd5 incusd/instance/qmp: Add QueryVirtioSoundDevice
Signed-off-by: Roman Kuzmitskii <roman@damex.org>
2026-03-28 20:33:43 +07:00
Stéphane Graber
e288325089
Merge pull request #3110 from damex/qemu-gate-spice-audio
incusd/instance/qemu: Enable SPICE audio feature gating
2026-03-28 09:05:07 -04:00
Stéphane Graber
b122de8300
Merge pull request #3109 from damex/qemu-plan9-feature
incusd/instances/qemu: Detect 9p support and hide it behind feature flag
2026-03-28 09:02:47 -04:00
Stéphane Graber
c95f5ba529
incusd: Fix bad type in format strings
Suggested-by: julienr123
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:47:56 -04:00
Stéphane Graber
5ee93ed5da
incus-benchmark: Remove unused function
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:16 -04:00
Stéphane Graber
5993969855
incusd: Un-export remaining exported functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:15 -04:00
Stéphane Graber
da956b9f07
incus-benchmark: Un-export remaining exported functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:14 -04:00
Stéphane Graber
73a55dc5b5
incus-migrate: Un-export remaining exported functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:14 -04:00
Stéphane Graber
d7696df141
incus: Un-export remaining exported functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:13 -04:00
Stéphane Graber
cf7d055175
fuidshift: Un-export Command and Run functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:12 -04:00
Stéphane Graber
15e1c60110
lxc-to-incus: Un-export Command and Run functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:11 -04:00
Stéphane Graber
92d4bccb69
lxd-to-incus: Un-export Command and Run functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:10 -04:00
Stéphane Graber
3affc2304f
incus-user: Un-export Command and Run functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:09 -04:00
Stéphane Graber
940eb27630
incus-agent: Un-export Command and Run functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:08 -04:00
Stéphane Graber
0774436935
incus-simplestreams: Un-export Command and Run functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:07 -04:00
Stéphane Graber
2eda714229
incus-benchmark: Un-export Command and Run functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:06 -04:00
Stéphane Graber
511834c558
incus: Un-export Command and Run functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 08:35:05 -04:00
Roman Kuzmitskii
60cc2aacbb incusd/instance/qemu: enable SPICE audio via feature gate
and keep virtio device present to a vm anyway, no matter has it
  spice support or not.

Signed-off-by: Roman Kuzmitskii <roman@damex.org>
2026-03-28 19:26:18 +07:00
Roman Kuzmitskii
1143820ebd incusd/instance/qemu: Export plan9 drives only when supported
Signed-off-by: Roman Kuzmitskii <roman@damex.org>
2026-03-28 14:36:04 +07:00
Roman Kuzmitskii
6b2bbb0148 incusd/instance/qemu: Add plan9 detection logic
Signed-off-by: Roman Kuzmitskii <roman@damex.org>
2026-03-28 14:36:02 +07:00
Roman Kuzmitskii
182a89bb28 incusd/instance/qmp: Add Query9pDevice
Signed-off-by: Roman Kuzmitskii <roman@damex.org>
2026-03-28 14:35:30 +07:00
Stéphane Graber
59bcf3c8b8
incusd/instances/qemu: Rework qemuArchConfig
This rewrites most of the logic of qemuArchConfig to simplify it and to
allow for a fallback to /usr/libexec/qemu-kvm which is common on Red Hat
based systems.

Closes #1301

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-28 01:32:30 -04:00
Stéphane Graber
adbc2b156e
Merge pull request #3103 from damex/qemu-spice-feature-qmp
qemu: gate SPICE support on incus host via QMP query-spice
2026-03-28 00:13:31 -04:00
Roman Kuzmitskii
e879723627
incusd/instance/qemu: Disable SPICE on systems missing support
Signed-off-by: Roman Kuzmitskii <roman@damex.org>
2026-03-27 23:35:42 -04:00
Roman Kuzmitskii
72d84b9516
incusd/instance/qemu: Add SPICE detection logic
Signed-off-by: Roman Kuzmitskii <roman@damex.org>
2026-03-27 23:35:36 -04:00
Roman Kuzmitskii
0ad430455f
incusd/instance/qmp: Add QuerySpice
Signed-off-by: Roman Kuzmitskii <roman@damex.org>
2026-03-27 23:35:27 -04:00
Stéphane Graber
a583ae777c
Merge pull request #3105 from bensmrs/freebsd-arch
incusd/instance/agent-loader: Use Linux arch names
2026-03-27 20:02:24 -04:00
Stéphane Graber
3665266c1a
Merge pull request #3104 from bensmrs/fix-version
incus/version: Gracefully fail when server unreachable
2026-03-27 19:23:42 -04:00
Benjamin Somers
ad80c08869 incusd/instance/agent-loader: Use Linux arch names
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-27 23:17:40 +00:00
Benjamin Somers
7144a9f7ff incus/version: Gracefully fail when server unreachable
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-27 22:31:54 +00:00
Tycho Andersen
6acde8bd71
Merge pull request #3097 from stgraber/main
Keepalive proxy improvements
2026-03-27 11:42:01 -06:00
Stéphane Graber
be7f77be36
Merge pull request #3102 from masnax/oidc-block
client: Optionally skip blocking for OIDC authentication
2026-03-27 13:34:15 -04:00
Max Asnaashari
c9c054f6d5
client: Optionally skip blocking for OIDC authentication
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-03-27 09:22:37 -07:00
Stéphane Graber
e03c9779ec
Merge pull request #3100 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-03-27 10:35:18 -04:00
Temuri Doghonadze
b6f19e119f
Added translation using Weblate (Georgian) 2026-03-27 14:31:21 +01:00
Stéphane Graber
8bb352acb4
Merge pull request #3098 from eoscloud/release-workflow-fix
github: format INCUS_VERSION from tag in release workflow
2026-03-27 04:19:04 -04:00
0xk1f0
60ada6cbce
github: format INCUS_VERSION from tag in release workflow
Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-03-27 08:16:13 +01:00
Stéphane Graber
5910ff48a6
Release Incus 6.23
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-27 01:19:47 -04:00
Stéphane Graber
5068001c23
shared/cliconfig: Add support for encrypted TLS keys to keepalive proxy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-27 01:19:21 -04:00
Stéphane Graber
ff17bc7c78
shared/cliconfig: Implement TLS cert/key/ca caching
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-27 01:19:20 -04:00
Stéphane Graber
12dda5c91a
shared/cliconfig: Shorten path to using keepalive proxy
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-27 01:19:19 -04:00
Stéphane Graber
65adcd1061
Merge pull request #3096 from stgraber/main
Pre-release bugfixes
2026-03-27 01:13:14 -04:00
Stéphane Graber
d78a38b7fd
gomod: Update dependencies
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-27 00:08:01 -04:00
Stéphane Graber
459196c6c8
incus: Don't hang on password prompt when run from script
Part of #3047

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-27 00:08:01 -04:00
Stéphane Graber
1b1a2600c8
incusd/seccomp: Fix mknod in /dev
Closes #3014

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-27 00:08:00 -04:00
Stéphane Graber
699ea94019
incusd/storage/volume/list: Fix project handling in all-projects queries
Closes #3043

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 23:27:54 -04:00
Stéphane Graber
396c8f279d
incusd/instance/lxc: Relax handling of initial.
tmpfs and tmpfs-overlay are effectively created on every boot so the
initial.XYZ values should be editable.

Closes #3061

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 23:17:30 -04:00
Stéphane Graber
32391d48d3
incus: Complete all configs keys
Don't restrict to config keys shared between containers and VMs.

Closes #3076

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 22:45:35 -04:00
Stéphane Graber
ed67039e7c
doc/images_create: Mention that OCI container publishing isn't recommended
Closes #2988

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 22:45:34 -04:00
Stéphane Graber
fc76fc0e13
incusd/instance/lxc: Include config.json on publish
Closes #2988

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 22:45:33 -04:00
Stéphane Graber
217335f420
incus-agent: Fix router to avoid global match
Closes #3056

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 22:45:32 -04:00
Stéphane Graber
19ed57f09a
incusd/storage/truenas: Fix VM rename
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 22:45:31 -04:00
Stéphane Graber
faa555a90b
incusd/storage/lvm: Use shared access mode for ISO
Closes #3055

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 22:45:30 -04:00
Stéphane Graber
0caa91bdfc
Merge pull request #3095 from stgraber/main
Small fixes and refactorings
2026-03-26 22:40:20 -04:00
Stéphane Graber
ef3abb6c0b
Merge pull request #3092 from stgraber/security
Fix some security issues
2026-03-26 20:13:23 -04:00
Stéphane Graber
b5e4988280
Merge pull request #3094 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-03-26 20:07:02 -04:00
Benjamin Somers
6eb5994c3a
Translated using Weblate (French)
Currently translated at 77.9% (1386 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-27 00:56:57 +01:00
Américo Monteiro
00af48e15d
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1779 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-03-27 00:56:55 +01:00
Kazantsev Mikhail
0e52e241e6
Translated using Weblate (Russian)
Currently translated at 31.5% (561 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-03-27 00:56:54 +01:00
Stéphane Graber
4db4a6cd92
Merge pull request #3091 from bensmrs/req-cloudinit
Add `image.requirements.cdrom_cloud_init` key
2026-03-26 19:46:13 -04:00
Stéphane Graber
b9f66d5b4b
client: Move to generic upgrader
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 19:35:05 -04:00
Stéphane Graber
87879b589e
incusd: Update for UpgradeResponse
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 19:35:02 -04:00
Stéphane Graber
911456b7bc
incusd/response: Make sftpResponse generic
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 19:34:58 -04:00
Stéphane Graber
f74199f998
incusd/instance/lxc: Confine credentials write to credentials directory
systemd credentials name could be abused to escape the credentials
folder and allow for arbitrary writes to the host filesystem allowing
for privilege escalation and denial of service attacks.

We now use Go's OpenRoot (openat2) to restrict all file interactions to
the "credentials" directory, avoiding such attacks.

This addresses CVE-2026-33945

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 18:11:50 -04:00
Stéphane Graber
9d3b455c1b
incusd/instance/lxc: Wait after thawing
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 17:41:22 -04:00
Stéphane Graber
37849d88cf
incusd/daemon_storage: Don't unmount logs path on shutdown
We can't unmount it as it's guaranteed to have open files in it.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 17:40:04 -04:00
Benjamin Somers
1cb6a23516 doc: Update config
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-26 20:51:30 +00:00
Benjamin Somers
c34394f4d5 incusd/instance/qemu: Add image.requirements.cdrom_cloud_init key
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-26 20:51:29 +00:00
Stéphane Graber
afa6a9f7ac
Merge pull request #3089 from presztak/dependent_live_migration2
Add support for live migration of dependent disks
2026-03-26 13:55:41 -04:00
Stéphane Graber
fae722663f
Merge pull request #3090 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-03-26 11:57:51 -04:00
Kazantsev Mikhail
10b1eaebee
Translated using Weblate (Russian)
Currently translated at 23.6% (421 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-03-26 16:15:23 +01:00
Benjamin Somers
9e075cc111
Translated using Weblate (French)
Currently translated at 71.8% (1278 of 1779 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-26 16:15:22 +01:00
Anonymous
e1e0ccf9a8
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1774 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:21 +01:00
Américo Monteiro
e09d702c62
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1774 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-03-26 16:15:21 +01:00
pesder
226390870a
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-03-26 16:15:20 +01:00
Anonymous
96b9b85ba5
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.4% (26 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:20 +01:00
Dklfajsjfi49wefklsf32
60db52e8d6
Translated using Weblate (German)
Currently translated at 10.7% (191 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-03-26 16:15:19 +01:00
Stéphane Graber
2aad5c24e8
Translated using Weblate (German)
Currently translated at 10.7% (191 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-26 16:15:18 +01:00
Tobias Gerold
00e1ff87a2
Translated using Weblate (German)
Currently translated at 10.7% (191 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-03-26 16:15:18 +01:00
Jan Mittelstädter
58d2b84e90
Translated using Weblate (German)
Currently translated at 10.7% (191 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-03-26 16:15:17 +01:00
Anonymous
8ea08dc947
Translated using Weblate (German)
Currently translated at 10.7% (191 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:16 +01:00
Anonymous
3783a46c73
Translated using Weblate (Greek)
Currently translated at 0.0% (0 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/el/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:16 +01:00
Alberto Donato
21718e036c
Translated using Weblate (Italian)
Currently translated at 1.8% (32 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-03-26 16:15:15 +01:00
Anonymous
3cf4af6b04
Translated using Weblate (Italian)
Currently translated at 1.8% (32 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:14 +01:00
Dklfajsjfi49wefklsf32
0a72f88a61
Translated using Weblate (Dutch)
Currently translated at 11.2% (199 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-03-26 16:15:14 +01:00
Anonymous
b6929f8d5d
Translated using Weblate (Dutch)
Currently translated at 11.2% (199 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:13 +01:00
Daniel Dybing
6ee45fd9d6
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-03-26 16:15:12 +01:00
Anonymous
e1eaa493d7
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:12 +01:00
Kazantsev Mikhail
c6e61b04d6
Translated using Weblate (Russian)
Currently translated at 22.0% (392 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Kazantsev Mikhail <kazan417@mail.ru>
2026-03-26 16:15:11 +01:00
Anonymous
08c53206d6
Translated using Weblate (Russian)
Currently translated at 22.0% (392 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:10 +01:00
meipeter
666aa8e5d0
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.2% (714 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-03-26 16:15:10 +01:00
daoge
d432e7dcf7
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.2% (714 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-03-26 16:15:09 +01:00
Kwok Guy
3bf20d19ba
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.2% (714 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-03-26 16:15:08 +01:00
yooadmin
c9764ca1b8
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.2% (714 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-03-26 16:15:08 +01:00
Sakiko
cced1496d8
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.2% (714 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-03-26 16:15:07 +01:00
Loge X
b655097ae2
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.2% (714 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-03-26 16:15:07 +01:00
Anonymous
487c6ab476
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.2% (714 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:06 +01:00
IO01
afe49eb261
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 40.2% (714 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-03-26 16:15:05 +01:00
Anonymous
5e221a90fd
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:05 +01:00
Andika Triwidada
591a0c99ba
Translated using Weblate (Indonesian)
Currently translated at 9.4% (168 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-03-26 16:15:04 +01:00
Anonymous
2bc0fdcece
Translated using Weblate (Indonesian)
Currently translated at 9.4% (168 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:04 +01:00
Jorge Teixeira
d59880aa92
Translated using Weblate (Spanish)
Currently translated at 3.7% (66 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-03-26 16:15:03 +01:00
Anonymous
20e0c95e0e
Translated using Weblate (Spanish)
Currently translated at 3.7% (66 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:02 +01:00
Anonymous
ca53d7e361
Translated using Weblate (Swedish)
Currently translated at 95.5% (1695 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:02 +01:00
Daniel Nylander
e963881584
Translated using Weblate (Swedish)
Currently translated at 95.5% (1695 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-03-26 16:15:01 +01:00
Paulo Coghi
2ca2a0a132
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.1% (92 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-03-26 16:15:00 +01:00
Anonymous
376710b1a4
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.1% (92 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:15:00 +01:00
Varlorg
f8a3b42913
Translated using Weblate (French)
Currently translated at 72.0% (1279 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-03-26 16:14:59 +01:00
Steeve Droz
3c26f8dc1a
Translated using Weblate (French)
Currently translated at 72.0% (1279 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-03-26 16:14:58 +01:00
Laterria.Severino
68e2845139
Translated using Weblate (French)
Currently translated at 72.0% (1279 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-03-26 16:14:58 +01:00
smCloudInTheSky
df789f4023
Translated using Weblate (French)
Currently translated at 72.0% (1279 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-03-26 16:14:57 +01:00
Corabel Bertolini
4b3122149d
Translated using Weblate (French)
Currently translated at 72.0% (1279 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-03-26 16:14:57 +01:00
Benjamin Somers
f1a51649b2
Translated using Weblate (French)
Currently translated at 72.0% (1279 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-26 16:14:56 +01:00
Anonymous
20d9d6154f
Translated using Weblate (French)
Currently translated at 72.0% (1279 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:14:55 +01:00
montag451
fc5754bd88
Translated using Weblate (French)
Currently translated at 72.0% (1279 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-03-26 16:14:54 +01:00
Hiroaki Nakamura
f29dcca5cb
Translated using Weblate (Japanese)
Currently translated at 74.1% (1316 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-03-26 16:14:54 +01:00
KATOH Yasufumi
071a291cfa
Translated using Weblate (Japanese)
Currently translated at 74.1% (1316 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-03-26 16:14:53 +01:00
Anonymous
5ccc3578de
Translated using Weblate (Japanese)
Currently translated at 74.1% (1316 of 1774 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-26 16:14:52 +01:00
Benjamin Somers
59b833787e
Merge pull request #3088 from stgraber/main
incusd/instances_post: Add extra validation during backup import
2026-03-26 16:14:41 +01:00
Piotr Resztak
6f26095123 incusd/instance/drivers: Add support for live migration of dependent disks
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-26 14:17:31 +01:00
Piotr Resztak
ebcf1e844e incusd/device: Allow live migration of dependent disks
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-26 11:38:39 +01:00
Stéphane Graber
82d3fcd5f2
incus/import: Fix bad rendering on error
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-25 21:44:03 -04:00
Stéphane Graber
4330648a95
incusd/instances_post: Add extra validation during backup import
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-25 21:44:02 -04:00
Stéphane Graber
0a173727df
Merge pull request #3087 from presztak/dependent_validation
Prevent setting the 'snapshots.XYZ' keys on dependent volumes
2026-03-25 21:40:17 -04:00
Stéphane Graber
633b0f9e4c
Merge pull request #3086 from bensmrs/pull-flags
Add cp-like flags to pull commands
2026-03-25 21:36:47 -04:00
Benjamin Somers
635e48d879 i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-26 00:36:52 +00:00
Benjamin Somers
8472989083 tests: Test cp-like flags in incus storage volume file pull
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-26 00:36:52 +00:00
Benjamin Somers
de5b958ce3 incus/storage_volume: Add cp-like flags to incus storage volume file pull
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-26 00:36:34 +00:00
Benjamin Somers
abecf4830b tests: Test cp-like flags in incus file pull
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-26 00:36:28 +00:00
Benjamin Somers
22e740552f incus: Add cp-like flags to incus file pull
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-26 00:18:57 +00:00
Stéphane Graber
2a0f9e3f6b
Merge pull request #3085 from presztak/live_migrate_refactor
Refactor live migration - extract common logic
2026-03-25 20:17:58 -04:00
Piotr Resztak
a3a17efc94 incusd/device: Use ValidateDependentConfigKey for dependent config validation
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-26 00:58:05 +01:00
Piotr Resztak
35ade69474 incusd/storage/drivers: Prevent setting the 'snapshots.XYZ' keys on dependent volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-26 00:58:03 +01:00
Piotr Resztak
6f5a1c0e93 incusd/instance/drivers: Refactor live migration - extract common logic
Introduce createMigrationSnapshot, sendMigrationSnapshot, and
receiveMigrationSnapshot for reuse.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-25 22:23:21 +01:00
Stéphane Graber
9ec5ef1475
Merge pull request #3083 from bensmrs/config-options
doc: Remove config-options page
2026-03-25 08:28:26 -04:00
Stéphane Graber
0cb041b829
Merge pull request #3082 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-03-25 08:27:16 -04:00
Simos Xenitellis
b36ab4f755
Added translation using Weblate (Greek) 2026-03-25 10:56:41 +01:00
Benjamin Somers
49fe039588 doc: Remove config-options page
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-25 09:46:36 +00:00
Varlorg
55ec8a24f3
Translated using Weblate (French)
Currently translated at 75.4% (1281 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-03-25 10:22:26 +01:00
Steeve Droz
caa990b3ed
Translated using Weblate (French)
Currently translated at 75.4% (1281 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-03-25 10:22:25 +01:00
Laterria.Severino
1f175a16c7
Translated using Weblate (French)
Currently translated at 75.4% (1281 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-03-25 10:22:24 +01:00
smCloudInTheSky
8d0e7311aa
Translated using Weblate (French)
Currently translated at 75.4% (1281 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-03-25 10:22:24 +01:00
Corabel Bertolini
ff78d7cf1f
Translated using Weblate (French)
Currently translated at 75.4% (1281 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-03-25 10:22:22 +01:00
Anonymous
35c8ebae59
Translated using Weblate (French)
Currently translated at 75.4% (1281 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:22:21 +01:00
Benjamin Somers
09be31b787
Translated using Weblate (French)
Currently translated at 75.4% (1281 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-25 10:22:13 +01:00
montag451
142154546e
Translated using Weblate (French)
Currently translated at 75.4% (1281 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-03-25 10:21:59 +01:00
Paulo Coghi
b94878c566
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.4% (92 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-03-25 10:21:52 +01:00
Anonymous
348fd096f8
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.4% (92 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:21:52 +01:00
meipeter
42b30f9ad9
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 42.1% (715 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-03-25 10:21:23 +01:00
daoge
18579cf65b
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 42.1% (715 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-03-25 10:21:23 +01:00
Kwok Guy
aab85f8e13
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 42.1% (715 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-03-25 10:21:22 +01:00
yooadmin
43e03ea719
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 42.1% (715 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-03-25 10:21:21 +01:00
Sakiko
d1fc65e529
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 42.1% (715 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-03-25 10:21:20 +01:00
Loge X
192298215d
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 42.1% (715 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-03-25 10:21:19 +01:00
Anonymous
eb8e7eef3d
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 42.1% (715 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:21:09 +01:00
IO01
f94a9a0515
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 42.1% (715 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-03-25 10:20:54 +01:00
Anonymous
417fc95849
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1698 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:20:50 +01:00
Américo Monteiro
be09a10445
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1698 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-03-25 10:20:49 +01:00
Anonymous
2601d2a497
Translated using Weblate (Swedish)
Currently translated at 99.9% (1697 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:20:21 +01:00
Daniel Nylander
60ad0ff44f
Translated using Weblate (Swedish)
Currently translated at 99.9% (1697 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-03-25 10:20:20 +01:00
Dklfajsjfi49wefklsf32
59bb586fe4
Translated using Weblate (German)
Currently translated at 11.2% (191 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-03-25 10:19:51 +01:00
Stéphane Graber
08a32577bd
Translated using Weblate (German)
Currently translated at 11.2% (191 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-25 10:19:50 +01:00
Tobias Gerold
b37bf03190
Translated using Weblate (German)
Currently translated at 11.2% (191 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-03-25 10:19:49 +01:00
Jan Mittelstädter
6b677ab640
Translated using Weblate (German)
Currently translated at 11.2% (191 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-03-25 10:19:47 +01:00
Anonymous
98b032aef7
Translated using Weblate (German)
Currently translated at 11.2% (191 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:19:45 +01:00
Jorge Teixeira
1aed14d8fc
Translated using Weblate (Spanish)
Currently translated at 3.9% (67 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-03-25 10:19:21 +01:00
Anonymous
970bccd9da
Translated using Weblate (Spanish)
Currently translated at 3.9% (67 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:19:20 +01:00
pesder
259daa7187
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.5% (26 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-03-25 10:18:51 +01:00
Anonymous
59a2de19d1
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.5% (26 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:18:50 +01:00
Andika Triwidada
5e3379a3d4
Translated using Weblate (Indonesian)
Currently translated at 9.8% (168 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-03-25 10:18:22 +01:00
Anonymous
26c2a27346
Translated using Weblate (Indonesian)
Currently translated at 9.8% (168 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:18:18 +01:00
Dklfajsjfi49wefklsf32
25630cb0fa
Translated using Weblate (Dutch)
Currently translated at 11.7% (199 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-03-25 10:17:54 +01:00
Anonymous
84e483c858
Translated using Weblate (Dutch)
Currently translated at 11.7% (199 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:17:50 +01:00
Anonymous
97575984e5
Translated using Weblate (Russian)
Currently translated at 1.0% (18 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:17:24 +01:00
Hiroaki Nakamura
e754c95d30
Translated using Weblate (Japanese)
Currently translated at 77.2% (1311 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-03-25 10:16:54 +01:00
KATOH Yasufumi
bc06c5fe11
Translated using Weblate (Japanese)
Currently translated at 77.2% (1311 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-03-25 10:16:53 +01:00
Anonymous
05b850d49e
Translated using Weblate (Japanese)
Currently translated at 77.2% (1311 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:16:47 +01:00
Daniel Dybing
212b89524e
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-03-25 10:16:23 +01:00
Anonymous
744b9697d0
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.8% (15 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:16:22 +01:00
Alberto Donato
76594b831e
Translated using Weblate (Italian)
Currently translated at 1.8% (32 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-03-25 10:15:53 +01:00
Anonymous
f1c6a6cf5f
Translated using Weblate (Italian)
Currently translated at 1.8% (32 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:15:52 +01:00
Anonymous
2e50c7cdfb
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-25 10:15:20 +01:00
Serge Hallyn
39a5abfdab
Merge pull request #3079 from stgraber/hardening
Cleanup and harden the OIDC allowed_subnets claim
2026-03-24 21:04:50 -05:00
Serge Hallyn
ff02e0c6cb
Merge pull request #3078 from stgraber/main
Update dependencies
2026-03-24 20:58:04 -05:00
Stéphane Graber
49336cd542
Merge pull request #3080 from bensmrs/fix-diagnosis
incus/usage: Fix edge case
2026-03-24 19:10:48 -04:00
Benjamin Somers
26c1c65bdb incus/usage: Fix edge case
This fixes an off-by-n error when diagnosing incomplete RTL-parsed
commands.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-24 21:53:41 +00:00
Stéphane Graber
dc3aaa31a0
github: Allow GHSA-4p9m-8gc4-rw2h (no fix available)
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 17:48:55 -04:00
Stéphane Graber
4e590e4ef7
gomod: Update dependencies
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 17:48:54 -04:00
Stéphane Graber
3528d6354a
Makefile: Bump to Go 1.25.6
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 17:48:53 -04:00
Stéphane Graber
d344fec2f2
incusd/bgp: Port to go-bgp/v4
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 17:48:53 -04:00
Stéphane Graber
7281aa2247
shared/logger: Implement basic slog wrapper
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 17:48:52 -04:00
Stéphane Graber
08107b9746
incusd/network: Switch to go-criu/v8
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 17:48:51 -04:00
Stéphane Graber
0139c1a1ec
incusd/network: Switch to backoff/v5
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 17:48:50 -04:00
Stéphane Graber
a4f1c2bd52
incus-agent: Use same YAML version as rest of code base
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 17:48:49 -04:00
Stéphane Graber
071d395144
incusd/auth/oidc: Cleanup and tighten subnet claim handling
Move to a separate function and reject authentication for invalid values.

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 17:45:47 -04:00
Stéphane Graber
370d9c6882
doc/authentication: Clarify the type of incus.allowed_subnets
Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 17:38:35 -04:00
Stéphane Graber
d81d49e746
incus/remote: Actually validate the token code in incus webui
Fix the logic to validate the token both on initial use and through cookie.
Also add an Origin check for good measure.

This addresses CVE-2026-33898

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 17:01:50 -04:00
Stéphane Graber
487edf5984
incusd/instance: Use restricted pongo2 parser
The chroot logic in pongo2 doesn't work and therefore allows all
templates to read and write to arbitrary paths on the host filesystem.

Given the logic seemingly never worked properly, no template out there
should be dependent on the file related functions being functional.

Transition to our standard RenderTemplate logic which specifically block
all file related functions. Introduces a new RenderTemplateFile to
handle cases where we want to directly write to a file (useful for
write quotas).

This addresses CVE-2026-33897

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 16:58:13 -04:00
Stéphane Graber
4bca6332e8
incusd/storage/s3: Don't assume backup structure
Properly skip anything that doesn't have the expected path prefix for a
file within the bucket. Then use strings.TrimPrefix rather than a fixed
offset to clear the prefix.

This addresses CVE-2026-33743

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 16:58:11 -04:00
Stéphane Graber
ef006240ac
incusd/instance_console: Prevent symlink attacks
This fixes an issue when running on systems without the protect_symlinks
kernel protection enabled (introduced in 2012).

On such systems, a user could pre-create symlinks to sensitive files on
the system and trick Incus into truncating them and altering their file
mode and ownership.

This addresses CVE-2026-33711

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 16:58:10 -04:00
Stéphane Graber
04e9741818
client/simplestreams: Validate the full image hash
Following download of the files/deltas, compute a full hash to make sure
we have the expected image.

This is part of a fix for CVE-2026-33542.

Reported-by: wl2018
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 16:58:09 -04:00
Stéphane Graber
72688b7d94
incusd: Update for changes to incus.ImageFileRequest
This is part of a fix for CVE-2026-33542.

Reported-by: wl2018
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 16:58:08 -04:00
Stéphane Graber
4a80447c52
incus: Update for changes to incus.ImageFileRequest
This is part of a fix for CVE-2026-33542.

Reported-by: wl2018
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 16:58:07 -04:00
Stéphane Graber
ee26f72524
client: Make ImageFileRequest require a ReadWriteSeeker
This is a small Go API break which is needed to address a security issue
where we need the ability to re-hash the final image files.

This is part of a fix for CVE-2026-33542.

Reported-by: wl2018
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-24 16:58:06 -04:00
Christian Brauner
0b2570ed9a
Merge pull request #3070 from stgraber/main
incusd/seccomp: Limit the new mount API system calls we block
2026-03-24 15:01:45 +01:00
Stéphane Graber
40f2a8e3d3
Merge pull request #3073 from bensmrs/ova-url
incus-migrate: Allow importing OVAs from URLs
2026-03-24 09:55:04 -04:00
Benjamin Somers
e246b790c8 incus-migrate: Allow importing OVAs from URLs
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-24 09:39:56 +00:00
Benjamin Somers
ff17a87932
Merge pull request #3072 from stgraber/migrate
incus-migrate: Fix OVA handling within os.Root
2026-03-24 10:37:40 +01:00
Stéphane Graber
b32e643288
Merge pull request #3021 from Adevixxx/metrics-project-resources
Add project resource and limit metrics
2026-03-24 00:18:23 -04:00
Stéphane Graber
790bf83b82
incus-migrate: Fix OVA handling within os.Root
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-23 23:11:07 -04:00
Stéphane Graber
6329d9ce6f
Merge pull request #3071 from bensmrs/lz4
Add LZ4 compression
2026-03-23 22:13:37 -04:00
Benjamin Somers
38e30639b3 shared/validate: Allow LZ4 compression
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-24 00:56:38 +00:00
Stéphane Graber
fcfd161c20
Merge pull request #3065 from bensmrs/colors
Few tweaks around CLI colors
2026-03-23 19:06:42 -04:00
Stéphane Graber
71855ed443
incusd/seccomp: Limit the new mount API system calls we block
We only really need to block fsconfig and fsopen to effectively trigger
a fallback to the old mount API in most applications.

So only block those two and allow the rest to still be used, allowing
modern features in such containers.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-23 18:12:17 -04:00
Stéphane Graber
82a969c4ab
Merge pull request #3068 from stgraber/hardening
Harden certificate updates
2026-03-23 18:11:38 -04:00
Benjamin Somers
61f64e8ba1 incus: Add no_color config key
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-23 21:59:26 +00:00
Stéphane Graber
b845b9334e
tests: Confirm certificate type can't be changed
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-23 16:46:30 -04:00
Stéphane Graber
0670e760c8
incusd/certificates: Prevent any type change
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-23 16:42:48 -04:00
Serge Hallyn
d28889779e
Merge pull request #3063 from stgraber/main
Fix issues with logs volume
2026-03-23 13:53:24 -05:00
Stéphane Graber
20a50d09b6
Merge pull request #3057 from presztak/dependent_migration
Add support for migrating dependent volumes with instances
2026-03-23 13:58:48 -04:00
Stéphane Graber
c1a5aba3c0
Merge pull request #3067 from stgraber/hardening
HTTP hardening
2026-03-23 13:47:26 -04:00
Stéphane Graber
bb885a0618
incusd: Tighten HTTP listener configuration
This configures some timeouts on the HTTP server to prevent clients from
keeping connections open longer than they should.

Depending on the endpoints, we can either just timeout on the receiving
side (headers, request body) or also on the sending direction (client
reading the response).

Endpoints that need to support long-poll style APIs or need to handle
potentially very large requests (file uploads, connection upgrades, ...)
only get to benefit from the header timeout logic.

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-23 11:53:27 -04:00
Stéphane Graber
318fa0eb96
incus-agent: Tighten HTTP listener configuration
This configures some timeouts on the HTTP server to prevent clients from
keeping connections open longer than they should.

We can generally have reasonable timeouts on receiving headers and
receiving the client's request. We however can't easily put timeouts in
place in the other direction as we have to support long-poll style
endpoints in this API.

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-23 11:53:23 -04:00
Stéphane Graber
2f1d1cba54
incusd/auth/oidc: Tighten cookie policy
Our OIDC cookies are only ever used as part of user driven HTTP(S)
requests and don't need to be accessible directly to Javascript.

The current policy was likely set expecting the Javascript client to
need to check or directly interact with the cookies to handle renewal
and such, similar to what the Go client does.

But this didn't turn out to be needed and OIDC is effectively handled
transparently by the web browser instead.

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-23 11:32:49 -04:00
Stéphane Graber
e88f76b1a0
incusd/s3: Use standard TLS config on S3 API calls
The existing logic was likely taken from Minio's examples where TLS 1.2
is always explicitly set as the minimum version.

I couldn't find any reason for why this needs to be done when dealing
with standard public S3 compatible APIs, so let's make it use our normal
base config which will then respect the INCUS_INSECURE_TLS environment
variable should TLS 1.2 really be required.

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-23 11:28:14 -04:00
Stéphane Graber
a86e741255
shared/ws: Remove CheckOrigin bypass
We've apparently always turned off this particular safety check but
can't find a good reason for that as all complex Websocket operations
are done outside of the browser.

For browser-based interactions, the default behavior of enforcing an
Origin match seems quite appropriate.

Reported-by: https://7asecurity.com
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-23 11:17:09 -04:00
Benjamin Somers
63700fdf2a incus: Print a new line before printing parsing errors
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-23 09:03:29 +00:00
Benjamin Somers
8f8cacc38b incus: Disable colors in parsing error messages
This prevents error messages which are used in `(skipped:...)` lines to
be incorrectly rendered, as the `color` module resets all formatting
after printing. This led the end of the `(skipped:...)` line to show in
plain instead of dimmed colors.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-23 08:55:13 +00:00
Stéphane Graber
c003199471
incusd/daemon_storage: Fix log directory handling after LogPath change
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-23 00:24:36 -04:00
Stéphane Graber
06ce0fe5f8
incusd/instances: Use internalUtil.LogPath
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-23 00:24:35 -04:00
Stéphane Graber
a352246c91
internal/util: Fix LogPath logic to work with logs volume
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-23 00:24:34 -04:00
Stéphane Graber
7908709084
Merge pull request #3058 from bensmrs/colors
Add colors to the CLI client
2026-03-20 17:59:35 -04:00
Stéphane Graber
77949716a6
Merge pull request #3050 from presztak/fix_btrfs_subvolume_names
Simplify config subvolume naming by using static "instance" prefix
2026-03-20 12:51:32 -04:00
Piotr Resztak
0a20083758 incusd: Add support for removing dependent volumes on source after migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-20 16:54:26 +01:00
Piotr Resztak
be595af00f incusd/instance: Add support for dependent volumes migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-20 16:54:26 +01:00
Piotr Resztak
f2a2b22ca6 incusd/storage: Add support for dependent volumes migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-20 16:54:26 +01:00
Piotr Resztak
fb9dc9f8cc incusd: Switch to common VolumeSnapshotToProtobuf
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-20 16:54:26 +01:00
Piotr Resztak
47e186e719 incusd/migration: Add structs and helper functions for dependent volume migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-20 16:54:26 +01:00
Piotr Resztak
0ec9a61d1d incusd/migration: Add protobuf definitions to support dependent volume migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-20 16:54:26 +01:00
Piotr Resztak
795ff20a73 incusd/instance: Pass partial validation flag to device validation functions
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-20 16:54:26 +01:00
Piotr Resztak
a9cc8ae0bf incusd: Pass partial validation flag to device validation functions
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-20 16:54:26 +01:00
Piotr Resztak
da5685a30a incusd/device: Add support for partial device validation
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-20 16:54:26 +01:00
Piotr Resztak
7cc42495df incusd: Add patch to rename existing Btrfs subvolumes from '<instance-name>-' to 'instance-'
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-20 16:53:56 +01:00
Piotr Resztak
4945ba14a8 incusd/storage/drivers: Switch Btrfs subvolume naming to 'instance-' prefix
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-20 16:53:56 +01:00
Piotr Resztak
e90f964d5a incusd/storage: Remove renaming of config volume Btrfs subvolume
This is no longer needed because the config subvolume name no longer includes
the instance name, but uses the 'instance-' prefix instead.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-20 16:53:56 +01:00
Benjamin Somers
f843a086a6 i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-20 15:24:31 +00:00
Benjamin Somers
8738c7d306 Makefile: Add missing packages to translate
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-20 15:24:26 +00:00
Benjamin Somers
cb17e92a49 incusd: Re-add colons in description headers
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-20 15:11:51 +00:00
Benjamin Somers
5574320b5f incus-simplestreams: Re-add colons in description headers
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-20 15:11:51 +00:00
Benjamin Somers
ba8b327011 incus: Refactor description strings
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-20 15:11:51 +00:00
Benjamin Somers
843e762fd2 shared/cmd: Remove non-translatable colon
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-20 15:11:51 +00:00
Benjamin Somers
6368f04f29 golangci: ignore errcheck for colored printers
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-20 15:11:51 +00:00
Benjamin Somers
d900d2a113 go.mod: Make color a direct dependency
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-20 15:11:51 +00:00
Benjamin Somers
772f3b056b incus: Add colors
This incidentally allows translating command usage sections.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-20 15:11:51 +00:00
Stéphane Graber
ce55df3dc3
Merge pull request #3052 from stgraber/main
incus/info: Allow querying alternative log files
2026-03-19 21:05:25 -04:00
Stéphane Graber
b3a6145bb0
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-19 18:08:12 -04:00
Stéphane Graber
2424cc750d
incus/info: Allow querying alternative log files
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-19 18:07:41 -04:00
Stéphane Graber
a41ded7183
Merge pull request #3039 from J0nasDotDev/print-newly-created-snapshot-name
incus: Print newly-created snapshot name if unspecified
2026-03-19 17:15:07 -04:00
Stéphane Graber
53fd21a47f
Merge pull request #3053 from presztak/qemu_info_write
Restrict `security.shared` to raw custom block volumes on `lvmcluster`
2026-03-19 17:10:47 -04:00
Jonas Sprenger
4b93c92b8d
i18n: Update translation templates
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-03-19 20:47:06 +01:00
Jonas Sprenger
6e4cb7fdb4
cmd/incus: Print newly-created snapshot name if unspecified
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-03-19 19:37:42 +01:00
Piotr Resztak
e9937f8cac doc: Document restriction for qcow2 custom block volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-19 11:20:15 +01:00
Piotr Resztak
5a6a4104a2 incusd/storage/drivers: Disallow for qcow2 custom block volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-19 11:19:38 +01:00
Stéphane Graber
30257fc5fc
Merge pull request #3051 from bensmrs/freebsd-agent
Diverse agent fixes
2026-03-18 21:42:31 -04:00
Benjamin Somers
091eed9524 github: Disable shellcheck for rc.d services
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-19 01:01:53 +00:00
Benjamin Somers
6f82c015a5 incus-agent: Add hostname update logic for FreeBSD
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-19 00:47:59 +00:00
Benjamin Somers
a97557ad3b incusd/instance/agent-loader: Make stop kill the daemon instead of the agent
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-18 22:14:51 +00:00
Benjamin Somers
ba71537557 incus-agent: Fix typos
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-18 22:14:41 +00:00
Serge Hallyn
74e7a89232
Merge pull request #3045 from stgraber/cluster
incusd/daemon: Allow internal and os API during startup
2026-03-17 14:43:54 -05:00
Serge Hallyn
c8a055e667
Merge pull request #3044 from stgraber/main
Introduce goreleaser
2026-03-17 14:11:26 -05:00
Saad Eddine KHAZARI
4eea6d1a29 doc: Add project metrics documentation
Signed-off-by: Saad Eddine KHAZARI <saadeddine.khazari@gmail.com>
2026-03-17 11:49:51 +01:00
Saad Eddine KHAZARI
b1e3ab29df incusd/metrics: Add project resource, limit and usage metrics
Signed-off-by: Saad Eddine KHAZARI <saadeddine.khazari@gmail.com>
2026-03-17 11:49:51 +01:00
Saad Eddine KHAZARI
95666a652a api: Add project_metrics extension
Signed-off-by: Saad Eddine KHAZARI <saadeddine.khazari@gmail.com>
2026-03-17 11:49:51 +01:00
Stéphane Graber
469aab7d20
incusd/daemon: Allow internal and os API during startup
This is required so Incus running on IncusOS can still be controlled to
apply updates over an entire cluster.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-17 03:39:53 -04:00
Stéphane Graber
8249952155
Merge pull request #3025 from presztak/dependent_disks
Add initial support for dependent volumes
2026-03-17 03:33:59 -04:00
Stéphane Graber
e423ed91e0
Introduce goreleaser
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-17 03:22:19 -04:00
Serge Hallyn
a3d5936552
Merge pull request #3042 from stgraber/main
incus: Fix indent on --sub-commands
2026-03-16 16:57:01 -05:00
Piotr Resztak
73c74472a6
i18n: Update translation templates
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 15:36:23 -04:00
Piotr Resztak
dc8ce7bbaa
api: Add dependent extension
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:43 -04:00
Piotr Resztak
04fc6ae591
doc: Update metadata
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:42 -04:00
Piotr Resztak
2cfc5497d8
doc/rest-api: Refresh swagger YAML
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:41 -04:00
Piotr Resztak
d2399d7fa0
tests: Add tests for dependent volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:40 -04:00
Piotr Resztak
ef86ddc343
incusd/instance: Pass rootOnly argument where needed
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:39 -04:00
Piotr Resztak
2e6f880af5
incusd/storage: Conditionally export dependent volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:38 -04:00
Piotr Resztak
778cdd003d
incusd/db: Read and write 'root_only' field in table operations
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:37 -04:00
Piotr Resztak
1154285d33
incusd/db/cluster: Add root_only column to instances_backups
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:36 -04:00
Piotr Resztak
73f11c4063
incusd/backup: Add support for dependent volumes to backup
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:35 -04:00
Piotr Resztak
3c1c72d5d5
shared/api: Add RootOnly to InstanceBackupsPost
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:34 -04:00
Piotr Resztak
20c4c4a886
incusd: Pass rootOnly argument where needed
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:33 -04:00
Piotr Resztak
84bbd47d62
incusd/export: Add support for root-only flag
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:32 -04:00
Piotr Resztak
7e8733b804
incusd/storage/drivers: Create QCOW2 config volume snapshot during unpack if needed
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:32 -04:00
Piotr Resztak
d77d384574
incusd/storage: Add support for exporting/importing dependent volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:31 -04:00
Piotr Resztak
96b1201a4a
incusd: Pass path info when exporting/importing custom volume
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:30 -04:00
Piotr Resztak
fb4f305586
incusd/backup/config: Add DependentVolumes field to Config struct
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:29 -04:00
Piotr Resztak
f420c720ff
incusd/backup: Add DefaultBackupPrefix constant
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:28 -04:00
Piotr Resztak
02ad89c168
incusd/storage/drivers: Add ability to set archive files path when exporting/importing volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:27 -04:00
Piotr Resztak
088c939c22
incusd/storage: Support restoring an instance with dependent volumes from a snapshot
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:26 -04:00
Piotr Resztak
49e0035f5b
incusd/storage: Create and delete dependent volume snapshots with instance snapshots
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:25 -04:00
Piotr Resztak
0ccaadce01
incusd: Prevent direct snapshot creation and deletion on dependent volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:24 -04:00
Piotr Resztak
c42389c66a
incusd/device: Add 'dependent' config key to disk device
1. Prevent attaching a dependent volume to more than one instance.
2. Disallow attaching dependent volumes that already have snapshots.
3. Automatically create blank snapshots on dependent volumes when attached to an instance

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:23 -04:00
Piotr Resztak
dce06365dc
incusd/storage: Add readonly 'dependent' volume config key
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-03-16 14:24:18 -04:00
Stéphane Graber
facda827de
Merge pull request #3041 from urbalazs/incus-cluster-help-text
incus/cluster: Fix default column layout in help text
2026-03-16 13:53:49 -04:00
Stéphane Graber
983269c417
incus: Fix indent on --sub-commands
Closes #3040

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-16 13:52:28 -04:00
Stéphane Graber
096c7fbe06
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-16 13:27:34 -04:00
Balázs Úr
4d4cb5485b
incus/cluster: Fix default column layout in help text
Signed-off-by: Balázs Úr <balazs@urbalazs.hu>
2026-03-16 13:27:07 -04:00
Stéphane Graber
acd073930e
Merge pull request #3038 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-03-16 09:04:00 -04:00
Daniel Nylander
d4fe6891c8
Translated using Weblate (Swedish)
Currently translated at 100.0% (1698 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-03-16 09:22:22 +01:00
Stéphane Graber
8b085be37b
Merge pull request #3035 from eoscloud/update-devcontainer
devcontainer: update Go version and pipx install command
2026-03-13 17:09:40 -04:00
Stéphane Graber
b6269c54bf
Merge pull request #3034 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-03-13 17:08:53 -04:00
0xk1f0
aff090c707
devcontainer: update Go version and pipx install command
Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-03-13 21:39:49 +01:00
Daniel Nylander
7f43c0800c
Translated using Weblate (Swedish)
Currently translated at 100.0% (1698 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-03-13 21:00:55 +01:00
Daniel Nylander
490ce5b46d
Translated using Weblate (Swedish)
Currently translated at 100.0% (1698 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-03-13 20:54:16 +01:00
Stéphane Graber
06c31d6d55
Merge pull request #3032 from J0nasDotDev/fix-sftp-mkdir-log
incus: fix log in sftpRecursiveMkdir
2026-03-13 13:56:45 -04:00
Jonas Sprenger
4a5dd51189
cmd/incus: fix log in sftpRecursiveMkdir
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-03-13 16:49:40 +01:00
Serge Hallyn
62ca2ba864
Merge pull request #3027 from stgraber/debug
Fix ZFS test failures
2026-03-13 10:48:51 -05:00
Stéphane Graber
7c5857a1b2
Merge pull request #3031 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-03-13 10:42:42 -04:00
Daniel Nylander
8fcf814795
Translated using Weblate (Swedish)
Currently translated at 100.0% (1698 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-03-13 14:54:26 +01:00
Stéphane Graber
b5ca1c5230
incusd/storage: Don't allow loop pools on IncusOS
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-13 05:54:55 -04:00
Stéphane Graber
1bf8e5192e
incus/storage/volume: Fix image deletion
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-13 05:54:55 -04:00
Stéphane Graber
3b62e86116
incusd/storage/zfs: Don't unmap a mounted snapshot
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-13 05:14:55 -04:00
Stéphane Graber
cfbaab0ccb
Merge pull request #3029 from bensmrs/freebsd-agent
Add FreeBSD agent
2026-03-13 03:07:08 -04:00
Stéphane Graber
995853ef4a
incusd/storage/zfs: Don't create temporary snapshot for inactive volumes
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-13 00:27:42 -04:00
Stéphane Graber
16c62a0a51
incusd/storage/zfs: Freeze ZFS instances when using block_mode
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-13 00:27:41 -04:00
Stéphane Graber
094b598814
incusd/instance/lxc: Stop any forkfile instances prior to migration
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-13 00:27:40 -04:00
Benjamin Somers
35c804f36d doc/wordlist: Update wordlist
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-13 03:48:28 +00:00
Stéphane Graber
24e06b95c2
Merge pull request #3022 from stgraber/main
Fix linter reported issues
2026-03-12 23:33:39 -04:00
Benjamin Somers
8c66076188 doc/instance/create: Add details for FreeBSD
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-13 03:31:44 +00:00
Benjamin Somers
fabc6632c5 incusd/instance/qemu: Support FreeBSD
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-13 03:22:24 +00:00
Benjamin Somers
ca63676a4c incusd/instance/agent-loader: Add FreeBSD files
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-13 03:21:30 +00:00
Benjamin Somers
c7ebba574b incus-agent/freebsd: Add FreeBSD agent
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-13 03:19:18 +00:00
Benjamin Somers
a05a9e377d incus-agent/darwin: Factor BSD-like bits out
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-13 03:17:59 +00:00
Stéphane Graber
466c8fe825
incusd/backup: Make extra sure backup.yaml is consistent on disk
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-12 22:20:43 -04:00
Stéphane Graber
3c5e006436
Merge pull request #3028 from bensmrs/defer-remote-connect
incus/usage: Defer remote connection
2026-03-12 19:53:09 -04:00
Benjamin Somers
cc37ee292f incus/usage: Defer remote connection
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-12 23:30:01 +00:00
Stéphane Graber
167a0a043c
Merge pull request #3024 from bensmrs/ovn-usb-nic
NIC improvements
2026-03-12 15:01:53 -04:00
Stéphane Graber
e74387e6a0
Merge pull request #3026 from eoscloud/instance-agent-events
Add support for instance-agent events
2026-03-12 14:48:47 -04:00
0xk1f0
35b9d4e619 doc: add instance-agent entries to lifecycle events
Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-03-12 17:25:18 +01:00
0xk1f0
8d100d3093 internal/server: fire instance-agent events when agent status changes
Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-03-12 17:25:09 +01:00
0xk1f0
d7eacd827e
shared/api: add new instance-agent events
Signed-off-by: 0xk1f0 <dev@k1f0.dev>
2026-03-12 15:58:14 +01:00
Benjamin Somers
c596be6458 api: network_io_bus_ovn
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-12 11:50:06 +00:00
Benjamin Somers
dd14295208 doc: Update config
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-12 11:46:23 +00:00
Benjamin Somers
814e1543a0 incusd/device/nic_ovn: Add io.bus key for OVN NICs
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-12 11:45:12 +00:00
Benjamin Somers
d95c0f66ab incusd/device/nic_physical: Drop support for connected key
This feature never actually worked, but because the link status is not
set at hotplug time if connected is true or unset, it didn’t trigger any
error.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-12 11:02:03 +00:00
Stéphane Graber
b70a01c7f3
incusd/network/common: Use FPrintf instead of WriteString
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-12 01:40:34 -04:00
Stéphane Graber
11c181acc1
incusd/storage_volumes: Use switch statement
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-12 01:40:32 -04:00
Stéphane Graber
aef1d651b7
incus: Fix import shadowing
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-12 01:40:31 -04:00
Stéphane Graber
f070ed47fa
Merge pull request #3020 from stgraber/main
Mixed bugfixes
2026-03-11 19:19:40 -04:00
Stéphane Graber
15ca92d879
incusd/instance/qemu: Relax SEV check
Systems can have memory encryption enabled (through forcing it on in
firmware) without having to pass the kernel boot parameter.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-11 01:28:02 -04:00
Stéphane Graber
d56540062b
incusd/network_allocations: Use canAccessNetwork
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-10 23:28:17 -04:00
Stéphane Graber
5b8cb2e8ed
incus/network_allocation: Fix project handling
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-10 23:28:16 -04:00
Stéphane Graber
96b27eece6
incus-migrate: Restrict OVA unpack path
Reported-by: Korantin Auguste
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-10 23:28:15 -04:00
Stéphane Graber
a9afe06dd2
incusd/instance_logs: Prevent bad values for exec-output
Reported-by: Korantin Auguste
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-10 23:28:14 -04:00
Stéphane Graber
c153370720
Merge pull request #3019 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-03-09 19:48:25 -04:00
Daniel Nylander
4a6c04808b
Translated using Weblate (Swedish)
Currently translated at 99.4% (1688 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-03-09 22:09:47 +01:00
Stéphane Graber
d29f87e9f5
Merge pull request #3015 from stgraber/main
incusd/metrics: Increase node-exporter timeout to 5s
2026-03-09 16:47:20 -04:00
Stéphane Graber
a440b0c665
doc: Add preselects to wordlist
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-09 01:06:31 -04:00
Stéphane Graber
9888ec0412
incusd/metrics: Increase node-exporter timeout to 5s
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-08 23:12:41 -04:00
Stéphane Graber
eb342e4391
Merge pull request #3013 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-03-07 12:43:58 -05:00
Américo Monteiro
1a2594b232
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1698 of 1698 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-03-07 09:09:52 +00:00
Stéphane Graber
2fcb812b27
Merge pull request #3012 from stgraber/main
incusd/operations: Fix missing Unlock
2026-03-06 19:21:55 -05:00
Stéphane Graber
8f4fc5c3e7
incusd: Fix typo
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-06 12:38:53 -05:00
Stéphane Graber
7f241fa438
doc: Fix typo
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-06 12:38:40 -05:00
Stéphane Graber
10145de283
incusd/operations: Fix missing Unlock
Closes #3010

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-06 12:24:48 -05:00
Stéphane Graber
8b34da9db7
Merge pull request #3009 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-03-06 09:58:48 -05:00
Anonymous
312eac6f3d
Translated using Weblate (Swedish)
Currently translated at 99.2% (1897 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:19:16 +00:00
Daniel Nylander
01415d67eb
Translated using Weblate (Swedish)
Currently translated at 99.2% (1897 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-03-06 07:19:15 +00:00
Anonymous
035b5c15f2
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:18:11 +00:00
Paulo Coghi
67aef11a44
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.2% (100 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2026-03-06 07:16:54 +00:00
Anonymous
675103d15f
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.2% (100 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:16:53 +00:00
Dklfajsjfi49wefklsf32
9608935f9e
Translated using Weblate (German)
Currently translated at 10.8% (208 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-03-06 07:15:35 +00:00
Stéphane Graber
4959c5a6c9
Translated using Weblate (German)
Currently translated at 10.8% (208 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-06 07:15:34 +00:00
Tobias Gerold
bc944ee57c
Translated using Weblate (German)
Currently translated at 10.8% (208 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2026-03-06 07:15:33 +00:00
Jan Mittelstädter
5f309084d8
Translated using Weblate (German)
Currently translated at 10.8% (208 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2026-03-06 07:15:30 +00:00
Anonymous
6403490e73
Translated using Weblate (German)
Currently translated at 10.8% (208 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:15:26 +00:00
Anonymous
394b12bd81
Translated using Weblate (Russian)
Currently translated at 0.9% (19 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:14:16 +00:00
Jorge Teixeira
4b2a86dc3d
Translated using Weblate (Spanish)
Currently translated at 3.7% (71 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2026-03-06 07:12:56 +00:00
Anonymous
a687916953
Translated using Weblate (Spanish)
Currently translated at 3.7% (71 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:12:55 +00:00
Andika Triwidada
e8aef3fb71
Translated using Weblate (Indonesian)
Currently translated at 12.8% (245 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2026-03-06 07:11:51 +00:00
Anonymous
463966a088
Translated using Weblate (Indonesian)
Currently translated at 12.8% (245 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:11:46 +00:00
Hiroaki Nakamura
cea6ce5112
Translated using Weblate (Japanese)
Currently translated at 79.0% (1511 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-03-06 07:10:44 +00:00
KATOH Yasufumi
4cd8558f59
Translated using Weblate (Japanese)
Currently translated at 79.0% (1511 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-03-06 07:10:43 +00:00
Anonymous
0a5422b9a6
Translated using Weblate (Japanese)
Currently translated at 79.0% (1511 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:10:34 +00:00
Dklfajsjfi49wefklsf32
b485754edd
Translated using Weblate (Dutch)
Currently translated at 11.0% (212 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2026-03-06 07:09:30 +00:00
Anonymous
8a06f6ea9d
Translated using Weblate (Dutch)
Currently translated at 11.0% (212 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:09:26 +00:00
Anonymous
c4c552a2a1
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1912 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:08:20 +00:00
Américo Monteiro
570c20e605
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1912 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-03-06 07:08:19 +00:00
Alberto Donato
b7ae9e4a7b
Translated using Weblate (Italian)
Currently translated at 1.8% (35 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <ack@users.noreply.hosted.weblate.org>
2026-03-06 07:07:08 +00:00
Anonymous
ece427c623
Translated using Weblate (Italian)
Currently translated at 1.8% (35 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:07:08 +00:00
meipeter
fa4fc34503
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.5% (757 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2026-03-06 07:05:48 +00:00
daoge
9b402ac0ea
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.5% (757 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2026-03-06 07:05:48 +00:00
Kwok Guy
8d16c45aa5
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.5% (757 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2026-03-06 07:05:47 +00:00
yooadmin
417856ab3d
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.5% (757 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2026-03-06 07:05:46 +00:00
Sakiko
04f78cbdd8
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.5% (757 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2026-03-06 07:05:45 +00:00
Loge X
7377391e6d
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.5% (757 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2026-03-06 07:05:44 +00:00
Anonymous
1d16c2407a
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.5% (757 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:05:34 +00:00
IO01
daecb45541
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.5% (757 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2026-03-06 07:05:15 +00:00
Daniel Dybing
ae763b4b35
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.7% (15 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2026-03-06 07:04:36 +00:00
Anonymous
4ce4d72f5d
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.7% (15 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:04:36 +00:00
Varlorg
d5ad7486c5
Translated using Weblate (French)
Currently translated at 80.1% (1533 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2026-03-06 07:03:10 +00:00
Steeve Droz
42664c2597
Translated using Weblate (French)
Currently translated at 80.1% (1533 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2026-03-06 07:03:10 +00:00
Laterria.Severino
914b879920
Translated using Weblate (French)
Currently translated at 80.1% (1533 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2026-03-06 07:03:09 +00:00
smCloudInTheSky
de75d0e8d9
Translated using Weblate (French)
Currently translated at 80.1% (1533 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2026-03-06 07:03:08 +00:00
Corabel Bertolini
7837cda546
Translated using Weblate (French)
Currently translated at 80.1% (1533 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2026-03-06 07:03:06 +00:00
Anonymous
99121a1254
Translated using Weblate (French)
Currently translated at 80.1% (1533 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:03:04 +00:00
Benjamin Somers
508f9d0241
Translated using Weblate (French)
Currently translated at 80.1% (1533 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-06 07:02:55 +00:00
montag451
807cbc68f1
Translated using Weblate (French)
Currently translated at 80.1% (1533 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2026-03-06 07:02:36 +00:00
pesder
e3b649b7d6
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.6% (32 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2026-03-06 07:01:57 +00:00
Anonymous
706b8233c1
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.6% (32 of 1912 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2026-03-06 07:01:56 +00:00
Stéphane Graber
0ec2fcb386
Merge pull request #3007 from bensmrs/cli-parser
Implement new parser for CLI client
2026-03-05 19:44:42 -05:00
Benjamin Somers
551c6e395f i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
73b67704b2 Makefile: Properly set POT encoding
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
26be0e1602 go.mod: Make runewidth a direct dependency
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
af1f223f0e test: ISO import now allows setting no volume name
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
f61e17104b test: Fix incus storage volume snapshot show tests
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
d1fb097324 test: Fix incus storage volume attach tests
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
61f5c156fc test: Fix incus profile assign tests
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
8410488a67 test: Fix incus config set tests
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
bb2b908035 incus/webui: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
593192ea22 incus/warning: Switch to new parser
This also changes `incus warning delete` by:
- Not making it fail on the first deletion error
- Making explicit in its usage string that `--all` changes its expected
  arguments
- Properly handling `--all`

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
183c261e22 incus/wait: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
e4b21b4039 incus/version: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
ca71fd0e47 incus/top: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
44cfe9e1cb incus/storage_volume: Switch to new parser
This also changes :
- `incus storage volume detach` and
  `incus storage volume detach-profile`, by actually checking when a
  device name is provided that it matches a disk with the correct config
- `incus storage volume import`, by automatically guessing imported ISO
  volume names
- `incus storage volume snapshot show`, by changing its expected
  arguments
- `incus storage volume snapshot list`, by properly enforcing the
  argument count

This deprecated old syntaxes where volume names could be prefixed with
`custom/` in commands that only support custom volumes.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
bab103a6b9 incus/storage_bucket: Switch to new parser
This also changes the usage string of `incus storage bucket list` to
indicate that it supports filtering.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
144db2dc55 incus/storage: Switch to new parser
This also changes:
- `incus storage delete` by not making it fail on the first deletion
  error
- `incus storage set` by making explicit in its usage string that
  new-style K/V pairs are supported

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
da39af327c incus/snapshot: Switch to new parser
This also changes:
- `incus snapshot create`, by deprecating the old
  `<instance>/<snapshot>` syntax
- `incus snapshot restore`, by preventing users to restore a snapshot to
  another instance

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
04c34cf228 incus/rename: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
bccaf027ef incus/remote: Switch to new parser
This also changes the usage string of `incus remote proxy` to indicate
that two syntaxes are allowed for remotes.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
ad2aa070a0 incus/rebuild: Switch to new parser
This also changes the usage string of `incus rebuild` to make explicit
that `--empty` changes its expected arguments.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
9f14e5da1f incus/query: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
b234dc414c incus/publish: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
906972f173 incus/project: Switch to new parser
This also changes:
- `incus project delete` by not making it fail on the first deletion
  error
- `incus project get-current` by allowing it to accept an optional
  remote

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
e9d78e33ca incus/profile: Switch to new parser
This also changes:
- `incus profile assign`, by requiring an explicit `--no-profiles` flag
  to unassign all profiles
- `incus profile delete`, by not making it fail on the first deletion
  error

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
95cf37d752 incus/operation: Switch to new parser
This also changes `incus operation delete`, by not making it fail on the
first deletion error.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
a9368d7cf1 incus/network_zone: Switch to new parser
This also changes `incus zone delete`, by not making it fail on the
first deletion error.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
148fadc0f8 incus/network_peer: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
189fc0afb1 incus/network_load_balancer: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
51b5a93e5c incus/network_integration: Switch to new parser
This also changes `incus network integration delete`, by not making it
fail on the first deletion error.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
71a803b21d incus/network_forward: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
9b2a8d614a incus/network_allocations: Switch to new parser
This also changes the usage string of `incus network list-allocations`
to properly reflect that the command accepts an optional remote.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
c33bc6b002 incus/network_address_set: Switch to new parser
This also changes `incus network address-set delete`, by not making it
fail on the the first deletion error.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
6e946aa489 incus/network_acl: Switch to new parser
This also changes `incus network acl delete`, by not making it fail on
the first deletion error.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
34d4b2979e incus/network: Switch to new parser
This also changes `incus network delete`, by not making it fail on the
first deletion error.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
ae6ccf5641 incus/monitor: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
ff427d21cd incus/manpage: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
62ded1cf01 incus/list: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
eae83a73be incus/info: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
07a66ce262 incus/import: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
06524e957c incus/image_alias: Switch to new parser
This also changes `incus image alias delete`, by not making it fail on
the first deletion error.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
d78c7b54b0 incus/image: Switch to new parser
This also changes:
- `incus image delete` by not making it fail on the first deletion error
- `incus image set-property` by allowing it to accept new-style KV pairs

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
c5b54dea62 incus/file: Switch to new parser
This also changes `incus file delete` by not making it fail on the first
deletion error. Plenty of small bugs are fixed and some errors are made
clearer.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
b1ea2443c6 incus/export: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
59e60256da incus/exec: Switch to new parser
This also changes the usage string of `incus exec` to be more in phase
with how the parser behaves.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
8398e750f9 incus/debug: Switch to new parser
This also changes the usage string for `incus debug dump-memory` to
properly indicate that the target file argument is mandatory.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
f42cc879ef incus: Switch create and launch to new parser
This also changes:
- Both `incus create` and `incus launch` to make explicit in their usage
  string that `--empty` changes their expected arguments.
- `incus launch` by allowing to run it with only `--empty`, like it is
  the case with `incus create` (and like its usage suggests).

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:37 +00:00
Benjamin Somers
7e5777f79a incus: Switch copy and move to new parser
This also changes `incus move` by adding a check to force users to
specify a new name for local-migrated instances to avoid returning to
the user an error harder to understand.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
6c68602f85 incus/delete: Switch to new parser
This also changes `incus delete`, by not making it fail on the first
deletion error.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
e01ef21175 incus/console: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
44d813952e incus/config_trust: Switch to new parser
This also changes `incus config trust revoke-token`, which advertised
`[<remote>:] <token>` but only supported the newer-style
`[<remote>:]<token>`; both syntaxes are now supported, as with
`incus config trust remove`.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
e6c237e2ab incus/config_template: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
fb351d4059 incus/config_metadata: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
6c54d6970a incus/config_device: Switch to new parser
This also changes `incus config [profile] device delete`, by not making it fail on
the first deletion error.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
ab071e73a7 incus/config: Switch to new parser
This also changes the usage string for `incus config get`,
`incus config set`, and `incus config unset` to properly advertise the
`/snapshot` syntax.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
90c15c89b2 incus/cluster_role: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
a7caefc493 incus/cluster_group: Switch to new parser
This also changes:
- `incus cluster group assign`, by making explicit that its second
  argument accepts a comma-separated list;
- `incus cluster group delete`, by not making it fail on the first
  deletion error.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
0b7eb1efa0 incus/cluster: Switch to new parser
This also changes `incus cluster add`, by marking its argument
wrongfully marked optional as mandatory.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
f6a0fbfba3 incus/alias: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
f3cf1e9030 incus/admin_waitready: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
bef7bee044 incus/admin_sql: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
fbced31283 incus/admin_shutdown: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
410556e380 incus/admin_recover: Switch to new parser
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
84e60a423b incus/admin_init: Switch to new parser
This also adds support for `-` to refer to stdin, for consistency with
the rest of the commands, and changes the usage string to make the use
of `--preseed` more explicit.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
f8f5717216 incus/action: Switch to new parser
This also changes the usage string to make the use of `--all` more
explicit.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
4037251a01 incus/usage: Add legacy support functions
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
2151585523 incus: Add --explain global flag
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 13:57:36 +00:00
Benjamin Somers
2ee41690d1 incus/usage: Add parsers
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-05 12:37:39 +00:00
Stéphane Graber
98bd4eef93
Merge pull request #3008 from stgraber/main
Add an instance repair API
2026-03-04 23:57:48 -05:00
Stéphane Graber
2544af0f4d
incusd/instance/debug: Implement instance repair API
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-04 22:17:47 -05:00
Stéphane Graber
f4b175e432
incusd/storage: Implement ActivateTask
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-04 22:17:31 -05:00
Stéphane Graber
920b6f8b8d
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-04 22:16:50 -05:00
Stéphane Graber
c1caca2a0f
shared/api: Add InstanceDebugRepairPost
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-04 22:16:27 -05:00
Stéphane Graber
46a116715f
api: instances_debug_repair
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-04 22:16:18 -05:00
Benjamin Somers
708479fd17 incus/usage: Small tweaks before adding parsers
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-04 23:02:08 +00:00
Benjamin Somers
72155f385a incus/usage: Add a way to show the user a parsing rule different from the one in use
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-03-04 23:02:08 +00:00
Stéphane Graber
9aa9be9e10
Merge pull request #3004 from J0nasDotDev/chore/2636/golangci-lint-internal-server-task
server task: fix linter complaints
2026-03-03 20:23:47 -05:00
Stéphane Graber
c27125bb3a
Merge pull request #3003 from J0nasDotDev/chore/2636/golangci-lint-internal-server-migration
server migration: fix linter complaints
2026-03-03 20:22:20 -05:00
Stéphane Graber
2210d17ba3
Merge pull request #3002 from J0nasDotDev/chore/2636/golangci-lint-internal-server-seccomp
server seccomp: fix linter complaints
2026-03-03 20:21:51 -05:00
Stéphane Graber
2df3a7dc70
Merge pull request #3001 from stgraber/main
incusd/instance/lxc: Add /usr/bin/init to OCI PID1 list
2026-03-03 19:45:56 -05:00
Jonas Sprenger
675ed1d3aa
internal/server/task: fix linter complaints - #2636
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-03-04 01:00:32 +01:00
Jonas Sprenger
868d95842d
internal/server/migration: fix linter complaints - #2636
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-03-04 00:46:38 +01:00
Jonas Sprenger
784341787a
internal/server/seccomp: fix linter complaints - #2636
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-03-04 00:34:47 +01:00
Stéphane Graber
51f3816a54
incusd/instance/lxc: Add /usr/bin/init to OCI PID1 list
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-03 16:28:47 -05:00
Stéphane Graber
f5293ff4fa
Merge pull request #3000 from J0nasDotDev/chore/2636/golangci-lint-internal-server-util
server util: fix linter complaints
2026-03-03 15:43:24 -05:00
Jonas Sprenger
cfc2412555
internal/server/util: fix linter complaints - #2636
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-03-03 19:56:24 +01:00
Stéphane Graber
fbba0c48e6
Merge pull request #2998 from J0nasDotDev/chore/2636/golangci-lint-internal-server-project
incusd/project: fix linter complaints
2026-03-02 23:02:04 -05:00
Stéphane Graber
432d5f4504
Merge pull request #2999 from J0nasDotDev/chore/2636/golangci-lint-internal-server-sys
incusd/sys: fix linter complaints
2026-03-02 22:46:11 -05:00
Jonas Sprenger
0624971f72
internal/server/project: fix linter complaints - #2636
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-03-02 22:36:02 -05:00
Jonas Sprenger
69fb80406e
internal/server/sys: fix linter complaints - #2636
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-03-03 01:36:10 +01:00
Stéphane Graber
88371da9ff
Merge pull request #2990 from JulesdeCube/feat/ovn-dhcp-gateway
OVN add `ipv4.dhcp.gateway` + allow `none` value
2026-03-02 19:28:38 -05:00
Stéphane Graber
ab1e936365
Merge pull request #2997 from J0nasDotDev/chore/2636/golangci-lint-internal-server-firewall
firewall: fix linter complaints
2026-03-02 19:27:06 -05:00
Jonas Sprenger
71439fa3e3
internal/server/firewall: fix linter complaints - #2636
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-03-03 00:40:38 +01:00
Jules Lefebvre
73899d1c21
doc: Update config
Signed-off-by: Jules Lefebvre <jules@julesdecube.com>
2026-03-02 18:20:12 -05:00
Jules Lefebvre
f6fb30c4e3
incusd/network/ovn: Implement ipv4.dhcp.gateway
Alllowing to define OVN DHCPV4 router options (gateway).

Signed-off-by: Jules Lefebvre <jules@julesdecube.com>
2026-03-02 18:19:57 -05:00
Jules Lefebvre
1a94b7dd3f
incusd/network/bridge: Support disabling DHCPv4 router announcement
Alllowing to set `ipv4.dhcp.gateway` to none to disable anoucement of
default gateway via DHCPv4.

Signed-off-by: Jules Lefebvre <jules@julesdecube.com>
2026-03-02 18:19:29 -05:00
Stéphane Graber
886b91c255
Merge pull request #2996 from lxc/dependabot/github_actions/actions/upload-artifact-7
build(deps): bump actions/upload-artifact from 6 to 7
2026-03-02 16:34:52 -05:00
dependabot[bot]
2576d3e7f2
build(deps): bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 21:03:24 +00:00
Stéphane Graber
f831d5be9f
Merge pull request #2995 from J0nasDotDev/chore/2636/golangci-lint-cmd-generate-database
generate-database: fix linter complaints
2026-03-02 14:18:28 -05:00
Jonas Sprenger
02a5da3bd7
cmd/generate-database: fix linter complaints - #2636
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-03-02 19:38:27 +01:00
Stéphane Graber
296d22f81e
Merge pull request #2993 from stgraber/main
incusd/endpoints/starttls: Report correct ServerName
2026-03-01 23:53:25 -05:00
Stéphane Graber
f9b3047734
incusd/endpoints/starttls: Report correct ServerName
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-01 18:33:05 -05:00
Tycho Andersen
e2853c55ee
Merge pull request #2991 from stgraber/main 2026-03-01 13:48:32 -07:00
Stéphane Graber
bcebaebb9e
Merge pull request #2989 from presztak/qcow2_custom_volume_live
Allow custom volume snapshot create/delete when attached to running instance
2026-03-01 12:31:37 -05:00
Stéphane Graber
51e416c7ef
shared/cliconfig: Add lock to prevent panic
We were getting occasional panics on bulk actions when using OIDC
authentication.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-03-01 03:30:52 -05:00
Piotr Resztak
0bdd30275b incusd/server: Allow custom volume snapshot create/delete when attached to running instance
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-28 20:40:47 +01:00
Piotr Resztak
dfd6776eb9 incusd/instance: Allow custom volume snapshot create/delete when attached to running instance
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-28 20:40:46 +01:00
Stéphane Graber
0b978d096f
Release Incus 6.22
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-27 00:21:43 -05:00
Stéphane Graber
93db5a55d6
Merge pull request #2987 from stgraber/main
Network related bugfixes
2026-02-27 00:19:03 -05:00
Stéphane Graber
b5a5c941fe
gomod: Update dependencies
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 23:11:19 -05:00
Stéphane Graber
79fb03cd27
Makefile: Bump minimum to Go 1.25
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 23:11:18 -05:00
Stéphane Graber
a1f00923e8
incusd/db/networks: Set Project in getPartialNetworkByProjectAndName
Closes #2928

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 23:11:17 -05:00
Stéphane Graber
7f84fb6272
incusd/cluster: Don't stop local networking on healing
The healing action isn't running on the dead server (obviously) but on
the leader instead. So we should only be running the migration logic and
not the network logic.

Closes #2976

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 23:11:16 -05:00
Stéphane Graber
5f2f67ed86
incusd/network/zone: Allow wildcard records
Closes #2890

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 23:11:15 -05:00
Stéphane Graber
e00e6349ca
incusd/acme: Support multiple domains
Closes #2932

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 23:07:02 -05:00
Stéphane Graber
3a28659650
shared/tls: Support multiple domains in ACME functions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 23:07:01 -05:00
Stéphane Graber
77e43c46a5
incusd/response: Store original Host in forwardedResponse
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 23:07:00 -05:00
Stéphane Graber
010aace147
tests: Update for network zone filtering
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 23:06:59 -05:00
Stéphane Graber
9a8080367a
ncusd/network/zone: Include records from all relevant projects
When compiling records for a zone, look at all projects that have access
to said zone. Specifically, if a zone is defined in the default project,
any other project that have the `features.networks.zones` feature
disabled will inherit from the default project and should therefore have
their instances get record in the zone.

Closes #2927

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 23:06:58 -05:00
Tycho Andersen
e0c4ab8f04
Merge pull request #2986 from stgraber/cluster 2026-02-26 17:33:11 -07:00
Stéphane Graber
26533bd537
incusd/device/nic_bridged: Lookup ACLs in the correct project
Closes #2918

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 19:02:27 -05:00
Stéphane Graber
de2eb6854e
incusd/instance/qemu: Record and re-use base memory configuration
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 18:57:38 -05:00
Stéphane Graber
0887a2c2dd
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 18:57:37 -05:00
Stéphane Graber
4f4983f97a
internal/instance: Add volatile.hotplug.memory
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 18:57:31 -05:00
Stéphane Graber
df14434eb9
incusd/cluster: Handle evacuation on single-node clusters
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 18:57:29 -05:00
Stéphane Graber
6500e1a4bc
Merge pull request #2984 from stgraber/main
Logs volume fixes
2026-02-26 17:43:52 -05:00
Stéphane Graber
37995cf144
incusd/daemon_storage: Don't fail on log volume unmount failure
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 16:39:54 -05:00
Stéphane Graber
170abded0b
Merge pull request #2985 from presztak/fix_acl_default_rule
Use 'allow-related' instead of 'allow' for default egress action
2026-02-26 16:30:04 -05:00
Piotr Resztak
7d83b6784c incusd/network/acl: Use 'allow-related' instead of 'allow' for default egress action
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-26 22:06:01 +01:00
Stéphane Graber
939fbddb23
Merge pull request #2981 from DarkressX/fix-gateway-static-mac-binding
incus/server/network/ovn/nb: Fix static gateway hwaddr update
2026-02-26 14:25:21 -05:00
Stéphane Graber
55f4e57104
Merge pull request #2983 from bensmrs/secureboot-override
incusd/instances: Properly instruct to reset NVRAM when changing secure boot config
2026-02-26 12:32:14 -05:00
Benjamin Somers
6d5709f555 incusd/instance/config: Propagate volatile.apply_nvram to copied instances
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-26 17:29:13 +00:00
Benjamin Somers
139046c77e incusd/instances: Properly instruct to reset NVRAM when changing secure boot config
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-26 15:53:00 +00:00
Stéphane Graber
6c8df75eed
Merge pull request #2982 from bensmrs/cluster-set
incusd/api_cluster: Fix database-client count logic
2026-02-26 10:32:48 -05:00
Benjamin Somers
5d10ea44c3 incusd/api_cluster: Fix database-client count logic
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-26 13:30:00 +00:00
Leon Schoch
4e70e0139c
incus/server/network/ovn/nb: Overwrite static mac bindings if it already exists
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-02-26 14:10:48 +01:00
Stéphane Graber
324c07b6c3
Merge pull request #2979 from DarkressX/automatically-update-ovn-ranges
Automatically update ovn ranges
2026-02-26 05:24:00 -05:00
Stéphane Graber
58b4dded33
incusd/apparmor/instance: Fix logs volume handling
With storage.logs_volume, the LogPath can now be a symlink and so needs
to be dereferenced before being passed to AppArmor.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 05:13:49 -05:00
Leon Schoch
1de1b506e6
incusd/network/ovn: Resetup network on change of uplink ovn range/gateway
Signed-off-by: Leon Schoch <git@darkress.xyz>
2026-02-26 04:43:28 -05:00
Stéphane Graber
c96019d44f
incusd/network/bridge: Trigger dependency notifcation on changes
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 04:43:26 -05:00
Stéphane Graber
6d26b59d06
Merge pull request #2839 from hlloreda/logs-volume-config
Add logs volume config
2026-02-26 02:29:15 -05:00
Leon Schoch
8e1a3f0f9c
incus/server/network/util: Add ipInPoinerRanges util function
Signed-off-by: Leon Schoch <git@darkress.xyz>
2026-02-26 02:11:10 -05:00
Hugo Lloreda
03bb491e46
doc: Update config
Signed-off-by: Hugo Lloreda <hugo.lloreda.sanchez@gmail.com>
2026-02-26 01:28:54 -05:00
Stéphane Graber
7864c0039e
incusd/instance_logs: Use LogPath
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 01:28:53 -05:00
Stéphane Graber
b2d24b1ba5
incusd/instance/lxc: Use LogPath for forkstart
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-26 01:28:53 -05:00
Hugo Lloreda
0048a8b53d
incusd/instance/common: Use logs folder when configured
Signed-off-by: Hugo Lloreda <hugo.lloreda.sanchez@gmail.com>
2026-02-26 01:08:37 -05:00
Hugo Lloreda
5579a90e77
incusd/api: Add validation and management of 'storage.logs_volume'
Signed-off-by: Hugo Lloreda <hugo.lloreda.sanchez@gmail.com>
2026-02-25 21:29:01 -05:00
Hugo Lloreda
dd3e6ed0fb
incusd/daemon_storage: Add storage operation for 'storage.logs_volume'
Signed-off-by: Hugo Lloreda <hugo.lloreda.sanchez@gmail.com>
2026-02-25 21:29:00 -05:00
Stéphane Graber
6d1bb85424
Merge pull request #2974 from J0nasDotDev/add-file-mount-checks
incus: Add checks before starting sshSFTPserver
2026-02-25 20:47:28 -05:00
Hugo Lloreda
5c9f4d6823
incusd/config: Add storage logs_volume option
Signed-off-by: Hugo Lloreda <hugo.lloreda.sanchez@gmail.com>
2026-02-25 20:24:13 -05:00
Stéphane Graber
d265aa6979
api: daemon_storage_logs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-25 20:24:11 -05:00
Stéphane Graber
fcc892a4c0
incusd: Pass volume type to daemonStorageValidate
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-25 20:23:44 -05:00
Stéphane Graber
fe28aefd5f
Merge pull request #2977 from presztak/remove_snapshots_config
Add `lvmcluster.remove_snapshots` config key
2026-02-25 20:22:48 -05:00
Jonas Sprenger
bdd4811175
i18n: Update translation templates
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-02-25 20:21:41 -05:00
Jonas Sprenger
1b924895fd
tests: Add validation for sftp checks
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-02-25 20:20:04 -05:00
Jonas Sprenger
9778ff4946
incus: Add validation before starting sshSFTPserver
Signed-off-by: Jonas Sprenger <jonas@sprenger.dev>
2026-02-25 20:20:03 -05:00
Piotr Resztak
1f88674e86
doc: Update config
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-25 19:36:19 -05:00
Piotr Resztak
be0d8992f7
incusd/storage: Handle snapshot restore when 'lvmcluster.remove_snapshots' is set
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-25 19:36:18 -05:00
Piotr Resztak
31960e5cc2
incusd/storage/drivers: Add 'lvmcluster.remove_snapshots' config key
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-25 19:36:17 -05:00
Piotr Resztak
aa4d48d0d0
api: lvmcluster_remove_snapshots
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-25 19:36:10 -05:00
Stéphane Graber
4e4f40bf1a
Merge pull request #2978 from stgraber/main
incusd/images: Simplify image URL check
2026-02-25 19:30:36 -05:00
Stéphane Graber
ff025d736d
Merge pull request #2973 from bensmrs/autz-scriptlet
Expose certificate data in authorization scriptlet
2026-02-25 17:11:02 -05:00
Stéphane Graber
6e40fbcfee
incusd/images: Simplify image URL check
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-25 13:26:33 -05:00
Benjamin Somers
1faf993654
api: authorization_scriptlet_cert
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-25 13:10:47 -05:00
Benjamin Somers
5fed3adf6b
doc/authorization: Document new scriptlet details fields
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-25 13:10:01 -05:00
Benjamin Somers
c9602f8d65
incusd/auth/scriptlet: Expose API certificate and request TLS chain to the scriptlet
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-25 13:09:59 -05:00
Benjamin Somers
48db801fd6
incusd/certificate: Allow to retrieve a single API certificate
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-25 13:09:57 -05:00
Benjamin Somers
4b5a0f9ea5
incusd/project: Update permissions test for new certificate cache
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-25 13:09:55 -05:00
Benjamin Somers
ed76fc05e2
incusd/certificates: Store full API objects in the cache
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-25 13:09:53 -05:00
Stéphane Graber
7641866827
Merge pull request #2975 from presztak/expanding_lvmcluster_pool
Add support for expanding an existing `lvmcluster` storage pool
2026-02-25 12:58:04 -05:00
Piotr Resztak
1e53e08bdc doc: Update config
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-25 15:40:51 +01:00
Piotr Resztak
79699cd9b2 api: Add storage_lvmcluster_size extension
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-25 15:40:51 +01:00
Piotr Resztak
16dad199cf incusd: Add additional checks fro re-sizing lvmcluster pool
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-25 15:40:51 +01:00
Piotr Resztak
0f1bd8974a incusd/storage: Add DisallowedStorageConfigForCreation and ClusterWideStorageConfig
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-25 15:40:51 +01:00
Piotr Resztak
d48c70d86d incusd/storage: Add support for expanding lvmcluster storage pool
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-25 15:40:50 +01:00
Piotr Resztak
1dc48a39e5 incusd: Switch usages to NodeSpecificStorageConfig function
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-25 14:19:58 +01:00
Piotr Resztak
3401e04fb1 incusd/db: Turn NodeSpecificStorageConfig into driver aware function
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-25 13:44:07 +01:00
Serge Hallyn
51b9ca34bb
Merge pull request #2972 from stgraber/main
Additional validation and project restrictions
2026-02-24 21:15:46 -06:00
Stéphane Graber
39f90106a4
Merge pull request #2971 from luissimas/fix-linstor-fill-error-handling
incusd/storage/linstor: Propagate error when volume filler fails
2026-02-24 20:41:38 -05:00
Stéphane Graber
bc28533328
incusd/images: Check project restrictions on image download
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 20:30:19 -05:00
Stéphane Graber
23549678d2
incusd/project: Implement image server restrictions
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 19:59:42 -05:00
Stéphane Graber
efef135a0e
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 19:58:26 -05:00
Stéphane Graber
ad05844c14
incusd/project: Introduce restricted.images.servers
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 19:58:25 -05:00
Stéphane Graber
eaab12e273
api: projects_restricted_image_servers
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 19:52:50 -05:00
Stéphane Graber
4280aa97ea
incusd/project: Prevent restricted projects from pulling data
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 19:52:49 -05:00
Stéphane Graber
31e1dbaae8
tests: Check compression algorithm validation
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 19:52:48 -05:00
Stéphane Graber
cd05e344cc
incusd: Validate CompressionAlgorithm everywhere it's received
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 19:04:07 -05:00
Stéphane Graber
a16b672a03
shared/validate: Allow a specific set of compressors
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 18:56:29 -05:00
Stéphane Graber
59538efa14
Merge pull request #2966 from presztak/qcow2_custom_volumes
Add snapshot support for qcow2 custom volumes
2026-02-24 17:29:07 -05:00
Luís Simas
d9e857863e
incusd/storage/linstor: Propagate error when volume filler fails
The current implementation was incorrectly suppressing errors that
occurred in the filler function when creating volumes via the Linstor
driver.

When any error ocurred in the filler function, the reversion logic would
delete the volume, but the return nil would signal to the caller that
the operation succeeded, causing a "Resource definition not found" error
when performing any subsequent Linstor operations on the volume.

Signed-off-by: Luís Simas <luissimas@protonmail.com>
2026-02-24 21:05:19 +01:00
Serge Hallyn
a69c456dc5
Merge pull request #2969 from stgraber/network
incusd/device/nic_ovn: Fix nested NIC state
2026-02-24 07:43:16 -06:00
Serge Hallyn
017eb50ec7
Merge pull request #2968 from stgraber/main
Fix preseed struct
2026-02-24 07:40:16 -06:00
Serge Hallyn
e0f5510b44
Merge pull request #2967 from stgraber/cluster
Introduce evacuating and restoring cluster member states
2026-02-24 07:37:28 -06:00
Stéphane Graber
893158b60d
Merge pull request #2906 from tlusser/incus-guest-uptime-metrics
Incus guest uptime metrics
2026-02-24 05:08:14 -05:00
Thorsten Lusser
a6466c25bc
doc: Add description of incus_boot_time_seconds and incus_time_seconds
Signed-off-by: Thorsten Lusser <tlusser@gmail.com>
2026-02-24 02:34:06 -05:00
Stéphane Graber
fceddab787
incusd/instance/lxc: Implement time metrics
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 02:34:04 -05:00
Thorsten Lusser
9f67663de8
incus-agent: Implement incus_boot_time_seconds and incus_time_seconds
Signed-off-by: Thorsten Lusser <tlusser@gmail.com>
2026-02-24 02:33:57 -05:00
Thorsten Lusser
f95d40522e
incusd/metrics: Implement incus_boot_time_seconds and incus_time_seconds
Signed-off-by: Thorsten Lusser <tlusser@gmail.com>
2026-02-24 02:33:50 -05:00
Stéphane Graber
c2e46ec9f2
incusd/device/nic_ovn: Fix nested NIC state
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 02:08:32 -05:00
Stéphane Graber
d6aa609e85
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 01:40:40 -05:00
Stéphane Graber
c17b9aa481
incusd: Update for InitPreseed change
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 01:36:49 -05:00
Stéphane Graber
95266436b9
incus: Update for InitPreseed change
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 01:36:44 -05:00
Stéphane Graber
f9da920f8a
client: Update for InitPreseed change
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 01:36:38 -05:00
Stéphane Graber
091c4f2912
shared/api: Align JSON and YAML behavior for preseeding
YAML which is our primary user facing format has been using in-lining of
the server configuration within the preseed. But the Go and JSON side of
the struct were not set up to match, leading to a bunch of issues with
IncusOS and associated projects that frequently flip back and forth
between JSON and YAML.

To fix this properly, change the struct to reflect the way it's been
used by users since its introduction. This is technically a small
breaking change for anyone directly interacting with the struct through Go.

This isn't an actual REST API struct, so there is no impact at the REST
API level.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 01:34:10 -05:00
Stéphane Graber
554d1191dc
incusd/cluster: Implement evacuating and restoring states
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 01:25:43 -05:00
Stéphane Graber
f4448698f8
api: cluster_evacuating_restoring
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-24 01:25:20 -05:00
Piotr Resztak
09b258db14 incusd/storage: Block custom volume snapshot create/delete when attached to an instance
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-23 18:51:11 +01:00
Piotr Resztak
5203fdc5de incusd/device: Pass backing path information for disk devices
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-23 18:51:11 +01:00
Piotr Resztak
3c47b7a246 incusd/storage: Add snapshot management for qcow2 custom volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-23 18:51:10 +01:00
Piotr Resztak
754b359010 incusd/instance/drivers: Support detaching qcow2 custom volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-23 18:49:22 +01:00
Piotr Resztak
4ed9e20406 incusd/storage/drivers: Allow creation of qcow2 custom volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-23 18:49:21 +01:00
Serge Hallyn
3caec34c3b
Merge pull request #2965 from stgraber/main
Tweak CPU and memory hotplug errors
2026-02-22 19:29:44 -06:00
Stéphane Graber
24e0a95d26
doc/instance: Cover CPU and memory hotplug limits
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-22 19:19:21 -05:00
Stéphane Graber
a8e88e5f99
incusd/instance/qemu: Improve error message on memory hotplug
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-22 19:19:20 -05:00
Stéphane Graber
2f71c4e555
incusd/instance/qmp: Add MemoryConfiguration
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-22 19:19:19 -05:00
Stéphane Graber
0fb0680301
incusd/instance/qemu: Clarify CPU hotplug error
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-22 19:19:18 -05:00
Stéphane Graber
d5660abc42
Merge pull request #2961 from zgttotev/hotplug
incusd/fsmonitor: Read multiple fanotify events
2026-02-22 17:51:49 -05:00
Serge Hallyn
7c1eb23a3c
Merge pull request #2962 from stgraber/doc
doc/instance_units: Mention common units
2026-02-21 12:14:04 -06:00
Stéphane Graber
63eee11803
doc/instance_units: Mention common units
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-21 02:58:18 -05:00
Gabriel Totev
51485b6255 incusd/fsmonitor: Read multiple fanotify events
fanotify(7) states:
> After a successful read(2), the read buffer contains one or more of
> the following structures [events].
...
> For performance reasons, it is recommended to use a large buffer size
> (for example, 4096 bytes), so that multiple events can be retrieved by a
> single read(2).

func getEvents was only processing one event from a buffer which
potentially contained more, leading to dropped events as observed with
a watch on /dev/loop0p{1,2} where frequently only one partition would
make it to the Incus device directory.

Unfortunately, just reading more events did not solve the issue. It
seems the watch callbacks spawned in goroutines would race and again
result in missing partitions in the device directory. I suspect the real
culprit behind issue #2404 was not reading multiple events from the
buffer as is fixed here. To address the concern about kernel-dropped
events, I've added a warning here to diagnose but fanotify(7) seems to
indicate this will be rare (I certainly never saw it trigger):
> FAN_Q_OVERFLOW
>        The  event  queue  exceeded the limit of 16384 entries.

In testing I used a small 2-partition img file, two unix-block devices
on loop0p{1,2} with required=false, and following script:

devs=/var/lib/incus/devices/warpstation/unix.hotplug-dev-loop0p
loops() { echo ${devs}${1}.dev-loop0p$1; }
while true; do
  losetup -d /dev/loop0
  losetup -P /dev/loop0 loopit.img
  sleep 1
  if [ ! -e $(loops 1) ] || [ ! -e $(loops 2) ]; then
    ls -l ${devs}*
    break
  fi
done

On Incus 6.21 stable, it fails within the first few iterations
(increasing the timeout did not help either). With this patch it has not
once failed over several minutes.

Additionally, a potential fd leak is addressed for the file handle.

Signed-off-by: Gabriel Totev <gabriel.totev@zetier.com>
2026-02-20 16:19:09 -05:00
Stéphane Graber
733a85e318
Merge pull request #2958 from masnax/win-agent
Windows agent over vsock
2026-02-19 17:41:25 -05:00
Stéphane Graber
03c8a4efd2
Merge pull request #2957 from presztak/cleanup_mount_paths
Remove mount paths when deleting snapshots
2026-02-19 17:41:03 -05:00
Max Asnaashari
9c14b11fca
Use vsock fork
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-02-19 13:38:28 -08:00
Max Asnaashari
e2393796a7
cmd/incus-agent: Use vsock for Windows agent
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-02-19 13:36:39 -08:00
Max Asnaashari
945b5a4e80
cmd/incus-agent: Only use TCP agent for macOS
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-02-19 13:35:42 -08:00
Piotr Resztak
496bbf98bc incusd/storage/drivers: Delete mount paths when deleting snapshots
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-19 22:34:58 +01:00
Max Asnaashari
14e2b692d3
cmd/incus-agent: Add serial communication for Windows
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-02-19 13:34:47 -08:00
Max Asnaashari
e14f947a95
internal/server/instance/drivers: Get vsock client for Windows
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-02-19 13:33:41 -08:00
Stéphane Graber
b0da835fd6
Merge pull request #2954 from presztak/fix_blockdevs_ordering
Fix backing block device ordering when fetching from QEMU
2026-02-19 14:27:01 -05:00
Piotr Resztak
6687bbcada incusd/instance/drivers: Fix backing block device ordering when fetching from QEMU
Backing nodes with the highest index represent the oldest layers and should be
ordered first. This change also fixes an issue where the correct root block
node was not fetched when creating a snapshot of a running instance.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-19 17:02:47 +01:00
Stéphane Graber
af7d034b2a
Merge pull request #2953 from stgraber/main
incusd/storage/qcow2: Wait for qemu-nbd to be ready
2026-02-18 19:15:48 -05:00
Stéphane Graber
c4a608a978
incusd/storage/qcow2: Wait for qemu-nbd to be ready
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-18 16:34:08 -05:00
Stéphane Graber
7e176dee2b
Merge pull request #2950 from stgraber/hotplug
Allow filtering `unix-hotplug` by USB controller PCI address
2026-02-18 14:00:25 -05:00
Stéphane Graber
4f66c8b580
Merge pull request #2949 from stgraber/main
incusd/storage/ceph: Use the standard error for unsupported disk usage
2026-02-18 00:15:00 -05:00
Stéphane Graber
a6f6e60fdd
incusd/instance/qmp: Fix gofumpt
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-18 00:08:29 -05:00
Stéphane Graber
75fe88b491
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-18 00:08:05 -05:00
Stéphane Graber
57e62a483d
incusd/devices/unix_hotplug: Allow selecting by PCI bus
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-18 00:08:04 -05:00
Stéphane Graber
bbe7bb6dc9
api: unix_hotplug_pci
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-18 00:05:26 -05:00
Stéphane Graber
2414cdaa34
incusd/storage/ceph: Use the standard error for unsupported disk usage
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-17 21:35:27 -05:00
Stéphane Graber
757ba65d0e
Merge pull request #2946 from stgraber/main
incusd/instance/qemu: Force a real reboot after applying templates
2026-02-16 20:36:10 -05:00
Stéphane Graber
7df3e454d8
incusd/instance/qemu: Force a real reboot after applying templates
Otherwise when dealing with cloud-init, the agent will trigger a restart
which will then cause a restart loop.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-16 20:15:39 -05:00
Stéphane Graber
c63980cd8e
Merge pull request #2945 from bensmrs/list-commands
incus: Refactor CLI usage strings
2026-02-16 17:11:57 -05:00
Benjamin Somers
ebe7400121 i18n: Update translation templates
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-16 21:31:46 +00:00
Benjamin Somers
26acb4b3c0 incus: Refactor CLI usage strings
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-16 21:31:46 +00:00
Stéphane Graber
d4efc99ce1
Merge pull request #2943 from presztak/prevent_concurrent_snapshot_deletion
Prevent concurrent snapshot deletions
2026-02-16 14:15:31 -05:00
Stéphane Graber
5822c43940
Merge pull request #2942 from stgraber/main
incusd/instance/qemu: Require full restart for agent drive
2026-02-16 09:29:54 -05:00
Piotr Resztak
1f8a4309d0 incusd/storage: Prevent concurrent snapshot deletions
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-16 10:28:13 +01:00
Stéphane Graber
b52b3d8cb9
incusd/instance/qemu: Require full restart after eject
Ejected drives that are expected to be re-attached on reboot need a full
VM reset or they'll go missing.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-16 03:40:45 -05:00
Stéphane Graber
d85ef1d13e
Merge pull request #2941 from presztak/fix_bulk_snapshot_deletion
Prevent concurrent QCOW2 snapshot deletions
2026-02-15 16:50:25 -05:00
Stéphane Graber
2301d8764d
Merge pull request #2938 from presztak/fix_hang_on_target
Fix source hang when target migration fails
2026-02-15 16:49:37 -05:00
Stéphane Graber
c325461a69
Merge pull request #2937 from presztak/revert_volume_delete
Remove instance volume on revert after failed live migration
2026-02-15 16:48:41 -05:00
Piotr Resztak
acf27c1ed3 incusd/storage: Prevent concurrent QCOW2 snapshot deletions
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-15 20:30:53 +01:00
Piotr Resztak
69d4b28ac2 incusd/instance/drivers: Propagate target migration failure to source using context cancellation
Previously, if an error occurred during migration on the target,
the failure was not properly propagated back to the source. As a result,
the source could block indefinitely in MigrateWait, repeatedly querying
QEMU for migration status even after communication channels were closed.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-15 15:29:20 +01:00
Piotr Resztak
46f90806d7 incusd/instance/drivers: Remove instance volume on revert after failed live migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-15 14:38:11 +01:00
Tycho Andersen
bce1b79d64
Merge pull request #2935 from stgraber/migrate 2026-02-14 07:39:44 -07:00
Tycho Andersen
c40428f1fb
Merge pull request #2934 from stgraber/migration 2026-02-14 07:39:18 -07:00
Tycho Andersen
cfd64189cf
Merge pull request #2933 from stgraber/main 2026-02-14 07:39:00 -07:00
Stéphane Graber
156800b113
incus-migrate: Fix URL detection
We don't want local paths treated as URLs.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-14 01:17:35 -05:00
Stéphane Graber
56e15e45c4
incusd/instance/qemu: Report QEMU error on VM restore
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-14 01:11:45 -05:00
Stéphane Graber
75f50c23fb
incusd/instance/qmp: Fix cross-server live-migration
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-14 00:59:30 -05:00
Stéphane Graber
478d3c63bc
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-13 21:13:18 -05:00
Stéphane Graber
fecec8cbb8
incusd/instance/qemu: Implement fast reboot
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-13 21:12:32 -05:00
Stéphane Graber
4bf7943a92
internal/instance: Add volatile.vm.needs_reset
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-13 21:12:14 -05:00
Stéphane Graber
f2264d9f8d
incusd/instance/qemu: Use standard QEMU actions and catch in handler
This makes it possible for us to decide whether to let a VM perform a
fast reboot or send it through the full initialization process.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-13 20:13:39 -05:00
Stéphane Graber
bff2bf92a4
incusd/instance/qemu: Add EventVMReset
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-13 20:11:39 -05:00
Stéphane Graber
8d63da8aae
incusd/instance/qemu: Rename onDisconnectEvent to initialized
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-13 20:11:22 -05:00
Stéphane Graber
5312e1fde5
Merge pull request #2931 from presztak/fix_default_pool
Validate requested storage pool during instance migration
2026-02-12 14:27:35 -05:00
Piotr Resztak
af8f62bf99 Validate requested storage pool during instance migration
Ensure an error is raised when the requested storage pool does not exist.
Previously, 'instanceFindStoragePool' could silently fall back to the pool defined in root disk device, profiles etc.
Which is acceptable for cross-server migration but incorrect for intra-cluster pool migration.
This change enforces the explicitly requested pool and prevents unintended fallback to a
different storage pool.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-12 18:28:22 +01:00
Stéphane Graber
48660d9224
Merge pull request #2926 from stgraber/doc
doc/requirements: Bump minimal requirements
2026-02-12 11:40:36 -05:00
Stéphane Graber
2da034d1c7
doc/requirements: Bump minimal requirements
Closes #2920

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-12 09:45:46 -05:00
Stéphane Graber
46b29cb5f0
Merge pull request #2923 from presztak/live_qcow2_snapshots
Add QCOW2 live migration support for instances with snapshots
2026-02-11 15:38:57 -05:00
Stéphane Graber
f6954b28d7
Merge pull request #2925 from presztak/pass_live_info
Pass live migration flag and skip final filesystem sync for VMs
2026-02-11 15:21:23 -05:00
Piotr Resztak
e43dd3ce26 incusd/storage: Skip final filesystem sync for VMs during migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-11 18:06:37 +01:00
Piotr Resztak
aaa1b2bea1 incusd/instance/drivers: Propagate live migration information
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-11 18:04:22 +01:00
Piotr Resztak
27ab629c35 doc: Remove outdated doc about live QCOW2 migration limitation
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-11 15:27:49 +01:00
Piotr Resztak
0065387fb1 incusd: Remove ensureMigratable as checks are no longer valid
The limitations that 'ensureMigratable' was enforcing have been removed,
since QCOW2 live migration of instance with snapshots is now supported.
The function is no longer needed.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-11 15:23:04 +01:00
Piotr Resztak
63a91a126d incusd/storage: Add QCOW2 live migration support for instances with snapshots
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-11 15:15:06 +01:00
Piotr Resztak
01f1702e9f incusd/instance: Add QCOW2 live migration support for instances with snapshots
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-11 15:14:44 +01:00
Stéphane Graber
2fbd62bbbb
Merge pull request #2917 from presztak/qcow2_live_migration
Support live migration of qcow2 volumes
2026-02-10 15:56:20 -05:00
Piotr Resztak
2ca7d81641 doc: Add information about lvmcluster limitations
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-10 17:37:57 +01:00
Piotr Resztak
d28d49e020 incusd/storage: Support live migration of qcow2 volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-10 16:35:34 +01:00
Piotr Resztak
356889a52e incusd/instance: Add ExportQcow2Disk
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-10 16:35:33 +01:00
Piotr Resztak
76fb4423ee incusd/instance/drivers/qmp: Add NBDUnixServerStart
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-10 16:11:09 +01:00
Piotr Resztak
87d4380fd8 incusd/instance/drivers: Add writable argument to NBDBlockExportAdd
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-10 16:11:09 +01:00
Piotr Resztak
83edce68d5 incusd: Validate that instance can be migrated
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-10 16:11:09 +01:00
Serge Hallyn
7ec5fbcc3d
Merge pull request #2916 from stgraber/main
Add `incus image generate-metadata` and update `incus-migrate`documentation
2026-02-10 07:51:38 -06:00
Stéphane Graber
3496d3eb36
doc: Update incus-migrate documentation
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-10 00:49:58 -05:00
Stéphane Graber
55286bf852
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-10 00:44:04 -05:00
Stéphane Graber
eccf85df36
incus/image: Add generate-metadata
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-10 00:43:37 -05:00
Stéphane Graber
a73a8787d7
Merge pull request #2914 from presztak/fix_live_migration
Prevent moving shared storage volumes
2026-02-09 16:08:37 -05:00
Piotr Resztak
a5e48412a3 incusd/storage: Prevent moving shared storage volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-09 18:29:53 +01:00
Serge Hallyn
d116f90f1b
Merge pull request #2911 from stgraber/main
Skip special disk devices in metrics
2026-02-09 07:33:26 -06:00
Stéphane Graber
764a331d5c
Merge pull request #2912 from stgraber/storage
Implement disk-only snapshot restore
2026-02-08 23:33:15 -05:00
Leon Schoch
a58ade1f59
i18n: Update translation templates
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-02-08 21:58:04 -05:00
Leon Schoch
fc6906bd75
incus/snapshot: Add disk only restore
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-02-08 21:58:03 -05:00
Leon Schoch
8d8df2958a
client: Check for diskOnly api extension when invoked
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-02-08 21:58:02 -05:00
Leon Schoch
d98cb87333
doc/rest-api: Refresh swagger YAML
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-02-08 21:58:01 -05:00
Leon Schoch
07de765995
incusd/instance: Adjust interface for diskOnly parameter
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-02-08 21:58:00 -05:00
Leon Schoch
18ee2f6343
incusd/instance/lxc: Implement disk-only restore logic in lxc driver
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-02-08 21:57:59 -05:00
Leon Schoch
d64172dd5b
incusd/instance/qemu: Implement disk-only restore logic in qemu driver
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-02-08 21:57:58 -05:00
Leon Schoch
55f9a7d48e
incusd/instance_put: Add DiskOnly option and check for mismatching options
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-02-08 21:57:57 -05:00
Leon Schoch
463f3fa039
shared/api: Add DiskOnly option in InstancePut
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-02-08 21:40:48 -05:00
Leon Schoch
0637873872
api: instance_snapshot_disk_only_restore
Signed-off-by: Leon Schoch <lschoch@anexia.com>
2026-02-08 21:40:47 -05:00
Stéphane Graber
e953758510
github: Resolve /dev/scratch symlink when consumed
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-08 21:39:22 -05:00
Stéphane Graber
5980894f36
incusd/instance/lxc: Skip metrics on special disks
Closes #2904

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-08 21:38:36 -05:00
Stéphane Graber
4410362bfa
incusd/device/disk: Add IsSpecialDisk
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-08 21:38:35 -05:00
Stéphane Graber
dd0740be16
incusd/instance/qemu: gofumpt
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-08 21:38:34 -05:00
Stéphane Graber
fd654ffce7
Merge pull request #2899 from bensmrs/direct-export
Implement direct backup exports
2026-02-08 16:04:23 -05:00
Benjamin Somers
e226cbf1aa api: direct_backup
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:45:09 +00:00
Benjamin Somers
a46a196b07 doc/rest-api: Refresh swagger YAML
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Benjamin Somers
13a0d33f45 incusd/storage_buckets_backup: Add direct backup capability
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Benjamin Somers
e60d3e8ad4 incusd/storage_volumes_backup: Add direct backup capability
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Benjamin Somers
92682f4195 incusd/instance_backup: Add direct backup capability
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Benjamin Somers
2a45853371 incusd/backup: Refactor S3 upload
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Benjamin Somers
2e7320729f incus/storage_bucket: Add direct backup capability
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Benjamin Somers
bef9d91dce incus/storage_volume: Add direct backup capability
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Benjamin Somers
6d247a3f7e incus/export: Add direct backup capability
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Benjamin Somers
3868ef2d64 incusd/response: Add pipe response
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Benjamin Somers
44b6fd3c7f client/storage_buckets: Add direct backup capability
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Benjamin Somers
7c8099e68e client/storage_volumes: Add direct backup capability
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Benjamin Somers
89baf98b17 client/instances: Add direct backup capability
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Benjamin Somers
9ff17e13f1 incusd/instancewriter: Make signature more generic
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-02-08 19:44:21 +00:00
Stéphane Graber
a23c185800
Merge pull request #2908 from presztak/fix_nil_return
Propagate error when adding qcow2 backing block device
2026-02-08 11:19:40 -05:00
Piotr Resztak
cc9b34b188 incusd/instance/drivers: Propagate error when adding qcow2 backing block device
In case of failure, nil was returned instead of err, which could mask
the underlying error.

Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-08 12:14:54 +01:00
Stéphane Graber
845df519e6
Merge pull request #2880 from Mujib-Ahasan/manual-pattern-snapshots2
Manual pattern snapshots maintain uniqueness with pongo-pattern.
2026-02-07 23:53:12 -05:00
Mujib Ahasan
df76956b95
incusd/storage_volumes_snapshot: Treat pongo templates as unique
Signed-off-by: Mujib Ahasan <ahasanmujib8@gmail.com>
2026-02-07 22:31:21 -05:00
Stéphane Graber
6291722afb
Merge pull request #2885 from AJRepo/backup_doc_update
doc/backup: Fix MarkdownLint warnings
2026-02-07 00:45:13 -05:00
AJRepo
337985bfd8
doc/backup: Fix MarkdownLint warnings
Signed-off-by: AJRepo <AJRepo@users.noreply.github.com>
2026-02-07 00:22:15 -05:00
Stéphane Graber
de67c6e2b4
Merge pull request #2903 from Shaderbug/feat/sriov-trust
SR-IOV: Implement support for trust property
2026-02-06 19:03:03 -05:00
Shaderbug
842cca5d9a
doc: Update config for SR-IOV security.trusted
Signed-off-by: Shaderbug <119610832+Shaderbug@users.noreply.github.com>
2026-02-06 18:07:52 -05:00
Shaderbug
be064a701e
tests: Add tests for SR-IOV security.trusted property
Signed-off-by: Shaderbug <119610832+Shaderbug@users.noreply.github.com>
2026-02-06 18:07:51 -05:00
Shaderbug
bb9c225c8c
internal/instance: Add volatile.<name>.last_state.vf.trusted
Signed-off-by: Shaderbug <119610832+Shaderbug@users.noreply.github.com>
2026-02-06 18:07:50 -05:00
Shaderbug
09c8d0c54d
incusd/device/nic: Add security.trusted configuration key
Signed-off-by: Shaderbug <119610832+Shaderbug@users.noreply.github.com>
2026-02-06 18:07:49 -05:00
Shaderbug
3cd5c98580
incusd/ip/link: Add support for virtual function trusted property
Signed-off-by: Shaderbug <119610832+Shaderbug@users.noreply.github.com>
2026-02-06 18:07:48 -05:00
Shaderbug
39963f1e27
api: nic_sriov_security_trusted
Signed-off-by: Shaderbug <119610832+Shaderbug@users.noreply.github.com>
2026-02-06 18:07:47 -05:00
Stéphane Graber
4da31c463f
Merge pull request #2898 from dankm/ovs-bridge
incusd: Search OVS switch external_interfaces
2026-02-06 15:38:10 -05:00
Dan McGregor
71588565db incusd: Search OVS switch external_interfaces
In the case where an openvswitch bridge has external_interfaces,
ensure that we query OVS's bridge ports to see if it's already
attached. This was already done in the native bridge case.

Fixes #2893

Signed-off-by: Dan McGregor <danmcgr@protonmail.com>
2026-02-06 09:55:42 -06:00
Christian Brauner
1638abc7e5
Merge pull request #2902 from stgraber/main
Assorted bugfixes
2026-02-06 13:55:54 +01:00
Stéphane Graber
ebd805b9f2
doc/cloud-init: Fix bad link
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-05 23:37:06 -05:00
Stéphane Graber
659a645a74
incusd/cluster: Also transfer public key on join
This avoids issues with more complex public keys (certificate chain).

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-05 22:24:56 -05:00
Stéphane Graber
da03a4bf41
incusd/instances/agent-loader: Silence semanage
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-05 21:56:40 -05:00
Stéphane Graber
2905945836
doc/howto/instances: Mention keeping agent drive attached
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-05 21:53:59 -05:00
Stéphane Graber
57a41d6d9a
Merge pull request #2896 from presztak/qcow2_migration
Add support for QCOW2 migration whether the instance is stopped
2026-02-05 21:40:56 -05:00
Stéphane Graber
ec9e469dbf
Merge pull request #2901 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-02-05 21:34:18 -05:00
Américo Monteiro
1a2ad27aad
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1911 of 1911 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-02-06 01:05:11 +01:00
Stéphane Graber
c893837210
incusd/device/nic_riov: Retry MAC setting logic
Closes #2894

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Suggested-by: Paul Saab <ps@mu.org>
2026-02-05 18:54:41 -05:00
Piotr Resztak
b3b3d1c27c incusd/storage: Add snapshot mount paths parameter to the task function
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-05 18:21:02 +01:00
Piotr Resztak
1dde134919 incusd/storage: Add support for qcow2 volume migration
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-05 15:33:35 +01:00
Piotr Resztak
e2e098d6f2 incusd/instance/drivers: Pass information about whether migration is live
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-05 15:17:00 +01:00
Piotr Resztak
336ec10ad1 incusd/storage/drivers: Load NBD module for lvmcluster
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-05 15:17:00 +01:00
Piotr Resztak
5c9b30069d incusd/storage: Add support for renaming qcow2 volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-02-05 15:17:00 +01:00
Serge Hallyn
a6d836de67
Merge pull request #2891 from stgraber/main
Various bugfixes
2026-02-04 15:34:43 -06:00
Stéphane Graber
bb6e2b09eb
incusd/operations: Prevent concurrent access to metadata
Closes #2865

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-04 12:07:37 -05:00
Stéphane Graber
b234ba988c
incusd/storage/lvm: Prevent use of lvmcluster with loop files
Closes #2875

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-04 12:07:36 -05:00
Stéphane Graber
b2a41e7b9f
incusd/cluster: Restrict join token to database servers
This avoids generating a huge token on very large clusters.

Closes #2886

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-04 12:07:35 -05:00
Stéphane Graber
80a5519509
doc: Update config
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-04 16:42:36 +01:00
Stéphane Graber
5493daf958
internal/instance; Correct doc for boot.autostart.priority
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-04 16:41:52 +01:00
Stéphane Graber
ad3246391e
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-04 16:37:19 +01:00
Stéphane Graber
4d5964728f
incus/cluster: Add --action for restore
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-04 16:36:34 +01:00
Stéphane Graber
06f30e185f
incusd/cluster: Allow restoring a cluster without its instances
Closes #2888

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-04 16:32:38 +01:00
Stéphane Graber
36ad2cbcbc
shared/cliconfig: Don't pass scheme to OCI creds helper
Closes #2876

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-04 16:24:23 +01:00
Stéphane Graber
cbeffb0083
incusd/device/nic_physical: Allow migration of managed devices
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-03 08:32:37 +01:00
Stéphane Graber
3d4b1d9323
Merge pull request #2882 from Shaderbug/fix/sriov-attached-key-test
tests: Fix SR-IOV attached key test
2026-02-02 19:18:58 -05:00
Serge Hallyn
189c89ce03
Merge pull request #2883 from stgraber/main
Improvements to incus-migrate
2026-02-01 17:34:14 -06:00
Shaderbug
9bbd1361a8 tests: Fix SR-IOV attached key test
Signed-off-by: Shaderbug <119610832+Shaderbug@users.noreply.github.com>
2026-02-01 16:20:19 +01:00
Stéphane Graber
2eae0da145
github: Deal with new Github images
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-01 15:23:41 +01:00
Stéphane Graber
6da39979ec
doc: Ignore broken links on docbook website
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-01 14:32:40 +01:00
Stéphane Graber
8d709107af
doc: Ignore broken links on Alpine gitlab
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-01 14:08:09 +01:00
Stéphane Graber
7f5bef42be
incus-migrate: Add URL imports
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-01 13:48:50 +01:00
Stéphane Graber
4fcdbbc479
incus-migrate: Allow running as non-root
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-02-01 13:33:37 +01:00
Stéphane Graber
1d802206b8
Merge pull request #2874 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-01-30 12:09:29 -05:00
Benjamin Somers
c8be94db0c
Translated using Weblate (French)
Currently translated at 80.3% (1534 of 1910 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-30 17:56:45 +01:00
Américo Monteiro
8f86946aee
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1910 of 1910 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-01-30 17:56:44 +01:00
Benjamin Somers
6591c79689
Translated using Weblate (French)
Currently translated at 76.1% (1455 of 1910 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-30 17:56:43 +01:00
Stéphane Graber
75f95c3c76
Merge pull request #2871 from stgraber/main
incusd/storage/lvm: Move IncusOS check to pool creation
2026-01-30 11:56:30 -05:00
Stéphane Graber
336e9c14a3
incusd/storage/lvm: Move IncusOS check to pool creation
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-28 14:01:27 -05:00
Stéphane Graber
47b31414e4
Merge pull request #2870 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-01-28 11:50:52 -05:00
Stéphane Graber
6dca194a56
Merge pull request #2866 from MarcosDaNight/issue/2850/incus-remote-cert-bug
incus: Fix get-client-certificate ignoring per-remote certs
2026-01-28 11:47:42 -05:00
Benjamin Somers
7dd563bcf2
Translated using Weblate (French)
Currently translated at 61.5% (1175 of 1910 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-28 17:46:36 +01:00
Stéphane Graber
aea5915cef
Merge pull request #2869 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-01-28 11:03:52 -05:00
Benjamin Somers
46924fe48b
Translated using Weblate (French)
Currently translated at 57.4% (1097 of 1910 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-28 13:32:18 +01:00
Benjamin Somers
bc0b5987bf
Translated using Weblate (French)
Currently translated at 54.8% (1047 of 1910 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-28 12:27:18 +01:00
Marcos Guillermo
4e5af56d12 cmd/incus: Fix get-client-certificate ignoring per-remote certs
Signed-off-by: Marcos Guillermo <marcos.cosson@ccc.ufcg.edu.br>
2026-01-28 00:47:01 -03:00
Stéphane Graber
b9562af3ec
Merge pull request #2867 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-01-27 19:03:47 -05:00
Benjamin Somers
c1dd25188e
Translated using Weblate (French)
Currently translated at 53.8% (1028 of 1910 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-28 01:01:58 +01:00
Serge Hallyn
60690039bd
Merge pull request #2863 from stgraber/main
shared/util: Fix SingleQuote to actually quote
2026-01-26 17:11:48 -06:00
Stéphane Graber
5e19938aae
shared/util: Fix SingleQuote to actually quote
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-26 07:00:36 -05:00
Stéphane Graber
c5c48e3fb0
Merge pull request #2861 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-01-25 19:10:37 -05:00
KATOH Yasufumi
0326b54aba
Translated using Weblate (Japanese)
Currently translated at 79.1% (1511 of 1910 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-01-25 18:06:59 +01:00
Serge Hallyn
a0470f7b04
Merge pull request #2857 from stgraber/main
incusd/storage/zfs: Set IncusOS storage usage property
2026-01-24 08:56:21 -06:00
Stéphane Graber
9ba026a742
Merge pull request #2858 from hnakamur/fix_doc_typo_Supported_cConditions
Fix typo: Supported cConditions to Supported Conditions
2026-01-24 02:34:16 -05:00
Hiroaki Nakamura
0de3f4ed71
Fix typo: Supported cConditions to Supported Conditions
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2026-01-24 14:22:04 +09:00
Stéphane Graber
9a7eaf1333
incusd/storage/zfs: Set IncusOS storage usage property
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-24 00:06:47 -05:00
Stéphane Graber
432359f590
Merge pull request #2855 from bensmrs/nic-attached-connected
incusd/device/nic: Fix connected logic for non-NIC QEMU devices
2026-01-23 18:44:33 -05:00
Benjamin Somers
ee2fc45f2d incusd/instance/qemu: Properly initialize connected status
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-23 21:56:58 +00:00
Benjamin Somers
945a885af9 incusd/instance/qmp: Prevent setting link up at initialization
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-23 21:30:39 +00:00
Stéphane Graber
23a1cdf348
Merge pull request #2854 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-01-23 16:11:50 -05:00
Benjamin Somers
c829eba4b7 doc: Update config
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-23 20:59:58 +00:00
Benjamin Somers
1c0455c2ca incusd/device/nic: Fix connected logic for non-NIC QEMU devices
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-23 20:59:53 +00:00
Benjamin Somers
fa4d8c64a5
Translated using Weblate (French)
Currently translated at 32.2% (616 of 1910 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@telecom-bretagne.eu>
2026-01-23 19:37:05 +01:00
Stéphane Graber
6f11417f35
Release Incus 6.21
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-22 23:51:52 -05:00
Serge Hallyn
75723a3330
Merge pull request #2849 from stgraber/main
Fix some issues before 6.21 release
2026-01-22 22:48:38 -06:00
Stéphane Graber
b59c5c8704
incusd/instance: Report clear error on concurent migrations
Closes #2814

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-22 22:43:57 -05:00
Stéphane Graber
5a5555e0bd
incusd/auth/tls: Fix handling of GetPermissionChecker
Closes #2824

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-22 22:43:32 -05:00
Stéphane Graber
c8399c28c0
incusd/cluster: Skip first re-balance
This allows for the server to correctly come online first.

Closes #2808

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-22 22:07:31 -05:00
Stéphane Graber
d24ea94363
mini-oidc: Update for newer Zitadel
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-22 22:07:26 -05:00
Stéphane Graber
34d1f76671
gomod: Update dependencies
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-22 21:53:28 -05:00
Stéphane Graber
5722ee3c70
Makefile: Bump to Go 1.24.12
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-22 21:52:41 -05:00
Stéphane Graber
2591dceca4
Merge pull request #2847 from bensmrs/nic-attached-connected
Add `attached` and `connected` keys to NIC devices
2026-01-22 21:49:26 -05:00
Benjamin Somers
3bfc9423b1 tests: Add NIC tests for attached and connected keys
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-22 23:46:03 +00:00
Stéphane Graber
e4c267db82
Merge pull request #2848 from stgraber/security
Security fixes ahead of Incus 6.21
2026-01-22 16:56:20 -05:00
Stéphane Graber
c1d90bd34a
incusd/instance/lxc: Restrict path of template files and targets
This fixes three security issues related to file templates:

 - The template target path could be made to be relative or gothrough
   symlinks in a way that could lead to arbitrary write to the host
   filesystem.

 - The template directory could be relative, allowing for arbitrary read
   from the host filesystem.

 - The template file itself could be made relative, allowing for
   arbitrary reads from the host filesystem.

In the case of the template target path, the new logic makes use of the
kernel's openat2 system call which brings a variety of flags that can be
used to restrict path resolution and detect potential issues.

For the template path itself, we now validate that it is a simple local
file and that the template directory isn't a symlink.

This fixes CVE-2026-23954

Reported-by: Rory McNamara <rory.mcnamara@snyk.io>
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-22 16:55:54 -05:00
Stéphane Graber
7ffdda2198
Merge pull request #2846 from presztak/doc_hash_value
doc: Add warning about long device names
2026-01-22 16:55:20 -05:00
Benjamin Somers
24ce2b63c4 doc: Update config
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-22 20:58:38 +00:00
Benjamin Somers
79cd4ad52b api: nic_attached_connected
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-22 20:58:38 +00:00
Benjamin Somers
7ff5d06a97 incusd/instance/lxc: Implement NIC connected config key
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-22 20:58:30 +00:00
Benjamin Somers
74b7cd5d14 incusd/ip/link: Relax parent detection logic
This commit fixes the fact that `LinkByName` reported a link not found
error when run on a veth pair whose other end is in a container.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-22 20:58:30 +00:00
Benjamin Somers
189171c269 incusd/instance/qemu: Implement NIC connected config key
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-22 20:58:26 +00:00
Stéphane Graber
d036170a0d
Merge pull request #2845 from presztak/remove_vfs_bump
Remove automatic increasing of SR-IOV VF count
2026-01-22 14:49:21 -05:00
Stéphane Graber
0fdd982b49
Merge pull request #2844 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-01-22 14:35:37 -05:00
Benjamin Somers
f52525b349 incusd/device/nic_p2p: Fix boot.priority spelling in gendoc
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-22 18:47:37 +00:00
Benjamin Somers
0d6bc20fb0 incusd/device/nic_ovn: Factor common options
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-22 18:47:37 +00:00
Benjamin Somers
65b0ba52cb incusd/instance/lxc: Properly update detached devices
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-22 18:47:33 +00:00
Benjamin Somers
299db59b4b incusd/instance/qemu: Properly update detached devices
This fixes a bug where modifying an updatable configuration key (for
example, `limits.read`) while the device (for example a disk) is
detached could lead the update function to ask QEMU to perform
operations on a device it doesn't know.

Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-22 18:40:18 +00:00
Benjamin Somers
8c27e80a67 incusd/device/nic: Add connected configuration key
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-22 18:40:17 +00:00
Benjamin Somers
fbf8b44406 incusd/device/nic: Add attached configuration key
Signed-off-by: Benjamin Somers <benjamin.somers@imt-atlantique.fr>
2026-01-22 18:37:31 +00:00
Piotr Resztak
671a807264 doc: Add warning about long device names
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-22 12:24:42 +01:00
Piotr Resztak
b13817f2b0 incusd/network: Remove automatic increasing of SR-IOV VF count
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-22 10:58:17 +01:00
Américo Monteiro
e334c39b0e
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1910 of 1910 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2026-01-22 10:25:13 +01:00
Stéphane Graber
8b4070931a
Merge pull request #2843 from dankm/dns-soa
Use the standard DNS SOA format
2026-01-21 23:41:58 -05:00
Stéphane Graber
d0c973ae83
Merge pull request #2840 from Mujib-Ahasan/dnsmasq-disable
Tweak dnsmasq startup condition
2026-01-21 23:03:40 -05:00
Stéphane Graber
f4fcde7d96
Merge pull request #2804 from neelchauhan/rocky9-10
Update Rocky Linux instructions
2026-01-21 22:56:53 -05:00
Stéphane Graber
f7ab2aed25
Merge pull request #2795 from tibeer/doc/linstor_source_parameter
doc/linstor: Add documentation for `source` parameter.
2026-01-21 22:49:41 -05:00
Stéphane Graber
66ad7d941a
api: network_zones_dns_contact
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-21 22:41:10 -05:00
Stéphane Graber
e4db78f8c4
doc: Update configs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-21 22:41:09 -05:00
Dan McGregor
b939dae106
incusd/network/zone: Allow setting DNS admin contact
Adds a new `dns.contact` configuration option to zones.

Signed-off-by: Dan McGregor <danmcgr@protonmail.com>
2026-01-21 22:40:56 -05:00
Dan McGregor
9632a6d461
incusd/network/zone: Use the standard SOA format
Up until now, the SOA format returned by the internal DNS server
used the zone's name for the primary dns server field, and either
the first dns.nameservers entry or hostmaster.{.zone} for the contact
address.

Instead, use the first entry in dns.nameservers for the master dns
server if set, and adjust the contact address accordingly.

Old SOA entry (no dns.nameserver set):
incus.example.com. 3600 IN SOA incus.example.com. hostmaster.incus.example.com. 1769025229 120 60 86400 30

Old SOA entry (with dns.nameserver set):
incus.example.com. 3600 IN SOA incus.example.com. ns1.example.com. 1769025229 120 60 86400 30

New SOA entry (no dns.nameserver set):
incus.example.com. 3600 IN SOA incus.example.com. hostmaster.incus.example.com. 1769025229 120 60 86400 30

New SOA entry (with dns.nameserver set):
incus.example.com. 3600 IN SOA ns1.example.com. hostmaster.ns1.example.com. 1769025229 120 60 86400 30

Signed-off-by: Dan McGregor <danmcgr@protonmail.com>
2026-01-21 22:40:44 -05:00
Neel Chauhan
189058c156
Update Rocky Linux instructions
Signed-off-by: Neel Chauhan <neel@neelc.org>
2026-01-21 21:53:12 -05:00
Mujib Ahasan
a0b3fb03a2
incusd/network/bridge: Skip dnsmasq on non-routed IPv6
Closes #2820

Signed-off-by: Mujib Ahasan <ahasanmujib8@gmail.com>
2026-01-21 21:48:25 -05:00
Stéphane Graber
86a4c6cb02
doc: Update configs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-21 21:40:30 -05:00
Tim Beermann
af86ca6c70
doc/linstor: Add documentation for source parameter.
`source` is a shortcut for the `linstor.resource_group.name` option and is actively used in lxc/incus-deploy, but not
documented yet.

Signed-off-by: Tim Beermann <tibeer@berryit.de>
2026-01-21 21:39:47 -05:00
Stéphane Graber
b258523793
Merge pull request #2841 from presztak/long_serial
Hash serial value if it exceeds the maximum length
2026-01-21 16:55:13 -05:00
Piotr Resztak
a7f414b7a4 incusd/instance/drivers: Hash serial value if it exceeds the maximum length
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-21 16:57:28 +01:00
Piotr Resztak
7148f0963b incusd/instance/drivers: Rename hashName to hashValue
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-21 14:48:44 +01:00
Stéphane Graber
b1649d3e0f
Merge pull request #2834 from Mujib-Ahasan/incus-wait-command
Add `incus wait`
2026-01-20 23:33:37 -05:00
Stéphane Graber
cdf037409f
internal/instance: Prevent line breaks in environment variables
LXC doesn't currently have a syntax to hold a multi-line environment
variable in its configuration. The use of multi-line environment
variables leads to a corrupted configuration file and to a security
issue where additional lines may be added by an unprivileged user to
escalate their privileges.

This fixes CVE-2026-23953.

Reported-by: Rory McNamara <rory.mcnamara@snyk.io>
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-20 23:27:27 -05:00
Stéphane Graber
fd8cb473f2
i18n: Update translation templates
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-20 21:58:11 -05:00
Mujib Ahasan
e78c232695
incus: Implement "incus wait"
Closes #2806

Signed-off-by: Mujib Ahasan <ahasanmujib8@gmail.com>
2026-01-20 21:57:19 -05:00
Stéphane Graber
938fee4d0e
Merge pull request #2837 from stek29/fix-pci-rombar
incusd: pass firmware opt from device/pci to instance/qemu
2026-01-20 09:21:26 -05:00
Stéphane Graber
3becc2be44
Merge pull request #2828 from presztak/selection_sriov
Add support for nic SR-IOV selection by vendorid, productid and pci
2026-01-20 08:43:10 -05:00
Stéphane Graber
d6e84f4823
Merge pull request #2838 from presztak/admin_recover_fail
Allow setting 'vg_name' for non-clustered LVM during init
2026-01-20 08:42:35 -05:00
Stéphane Graber
82d2b57b7d
doc: Fix build failure
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-20 08:41:19 -05:00
Piotr Resztak
d906be1fe7 incusd/storage/drivers: Allow setting 'vg_name' for non-clustered LVM during init
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-20 11:24:56 +01:00
Piotr Resztak
3a3f5201d3 api: Add 'nic_sriov_select_ext' extension
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-20 09:31:23 +01:00
Piotr Resztak
a0e9f28be7 doc: Update configs
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-20 09:22:08 +01:00
Piotr Resztak
13104131f1 incusd/device: Add support for nic SR-IOV selection by vendorid, productid and pci
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-20 09:22:08 +01:00
Piotr Resztak
9b07fb98ec incusd/network: Add SRIOVCountFreeVirtualFunctions
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-20 09:22:08 +01:00
Piotr Resztak
a16f42b5a0 incusd/device: Move reusable code into getNumaNodeSet helper
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-20 09:22:08 +01:00
Viktor Oreshkin
0d9635370c incusd: pass firmware opt from device/pci to instance/qemu
Fixes #2836

Signed-off-by: Viktor Oreshkin <imselfish@stek29.rocks>
2026-01-20 06:35:02 +03:00
Serge Hallyn
00f9c935c6
Merge pull request #2832 from stgraber/main
Fix some potential race conditions
2026-01-18 18:37:50 -06:00
Stéphane Graber
85402757af
incusd/instance_console: Align cleanup logic with exec
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-18 17:49:13 -05:00
Stéphane Graber
22243dbafc
incusd/api_internal: Block instance hooks until daemon is ready
This fixes a race condition where an instance could attempt to process a
shutdown while the daemon state isn't fully setup yet (missing device handler).

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-18 17:49:12 -05:00
Serge Hallyn
c14777c40d
Merge pull request #2829 from stgraber/storage
Fix required=false with custom volumes
2026-01-17 18:31:57 -06:00
Tycho Andersen
da4913720f
Merge pull request #2827 from stgraber/main 2026-01-17 11:56:16 -07:00
Stéphane Graber
2af1715cab
incusd/device/disk: Handle required=false on custom volumes
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-01-17 13:45:13 -05:00
Stéphane Graber
bcb13e1584
incusd/device/disk: Move check for attached property
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-01-17 13:45:10 -05:00
Stéphane Graber
1b6d6016ef
incusd/device/disk: Use isRequired
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Sponsored-by: https://webdock.io
2026-01-17 13:45:04 -05:00
Stéphane Graber
7fe96efe96
Merge pull request #2826 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-01-17 09:13:21 -05:00
Rory McNamara
0e0cf45ecd
incusd/instance/lxc: Use SingleQuote instead of Quote
This avoids potential shell expansion of the strings should some special
characters manage to make it through.

Signed-off-by: Rory McNamara <rory.mcnamara@snyk.io>
2026-01-17 09:05:50 -05:00
Stéphane Graber
a5c1c73b53
shared/util: Add SingleQuote
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Suggested-by: Rory McNamara <rory.mcnamara@snyk.io>
2026-01-17 09:04:48 -05:00
KATOH Yasufumi
8d87b575a7
Translated using Weblate (Japanese)
Currently translated at 79.1% (1507 of 1904 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2026-01-17 14:01:47 +00:00
Stéphane Graber
26f45a11ae
shared/validate: Don't allow $ in API names
Since some of those names may be passed to a shell either on the client
or server side, let's avoid getting into potential variable expansions.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
Reported-by:  Rory McNamara <rory.mcnamara@snyk.io>
2026-01-17 08:35:27 -05:00
Stéphane Graber
81b7e14a24
Merge pull request #2819 from presztak/long_device_name
Fix adding disk with a device name longer than 31 bytes
2026-01-14 00:41:26 -05:00
Piotr Resztak
fe9c020eea incusd/instance/drivers: Add tests for hashName
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-13 22:59:42 +01:00
Piotr Resztak
bef2fc76a6 incusd/instance/drivers: Fix adding disk with a device name longer than 31 bytes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-13 22:59:41 +01:00
Stéphane Graber
d360baa40a
Merge pull request #2818 from breml/generate-database-association-table-respect-import-type
generate-database: fix import type for association tables
2026-01-13 10:53:24 -05:00
Lucas Bremgartner
3d4f168d12
generate-database: fix import type for association tables
Signed-off-by: Lucas Bremgartner <lucas.bremgartner@futurfusion.io>
2026-01-13 06:21:22 +01:00
Stéphane Graber
7a7d053ff7
Merge pull request #2817 from masnax/proxyproto
Use proxy protocol package with v2 support
2026-01-12 13:38:36 -05:00
Max Asnaashari
75fa89e6c1
internal/server/endpoints/listeners: Use new proxyproto package
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-01-12 09:57:47 -08:00
Max Asnaashari
f9876f5b7d
Add pires/go-proxyproto
Signed-off-by: Max Asnaashari <max.asna@futurfusion.io>
2026-01-12 09:57:32 -08:00
Stéphane Graber
ad832c0f9a
Merge pull request #2816 from MOBergeron/windows-env
Added a few more environment variables
2026-01-12 12:24:48 -05:00
Marc Olivier Bergeron
27870526d1 Added a few more environment variables. PATHEXT and COMPUTERNAME were needed for 'shutdown.exe'. Meanwhile, I've connected as SYSTEM with PsExec to show the environment variables by default and added them.
Signed-off-by: Marc Olivier Bergeron <mbergeron28@proton.me>
2026-01-12 11:58:14 -05:00
Stéphane Graber
967be81d7b
Merge pull request #2811 from presztak/qcow_disk_size
Add qcow2 resize support and respect specified disk size
2026-01-12 08:49:50 -05:00
Stéphane Graber
f2660419af
Merge pull request #2815 from breml/generate-database-respect-primary
generate-database: Respect "primary" config for Identifier in mappings
2026-01-12 08:44:07 -05:00
Lucas Bremgartner
7659c68b2f
generate-database: Respect "primary" config for Identifier in mappings
Signed-off-by: Lucas Bremgartner <lucas.bremgartner@futurfusion.io>
2026-01-12 14:22:46 +01:00
Piotr Resztak
ef90f5de6a incusd/storage: Add support for resizing qcow2 volumes
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-12 10:03:21 +01:00
Stéphane Graber
ff19c615c2
Merge pull request #2813 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2026-01-10 07:06:06 -05:00
Daniel Nylander
82c94d5894
Translated using Weblate (Swedish)
Currently translated at 99.6% (1898 of 1904 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2026-01-10 12:01:48 +00:00
Piotr Resztak
62b535b9c0 incusd/storage/drivers: Add Qcow2Resize and export isQcow2Block function
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-09 17:31:54 +01:00
Piotr Resztak
06309e0d5f incusd/storage/drivers: Export roundAbove function
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-09 17:31:54 +01:00
Piotr Resztak
58e7df140e incusd/instance/drivers: Add size parameter to UpdateBlockSize method
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-09 17:31:54 +01:00
Stéphane Graber
728b6b5b36
Merge pull request #2809 from presztak/parallel_startup
Parallelize instance startup on daemon start
2026-01-08 18:51:00 -05:00
Piotr Resztak
c92eccaddf incusd: Parallelize instance startup on daemon start
Signed-off-by: Piotr Resztak <piotr.resztak@futurfusion.io>
2026-01-08 22:38:52 +01:00
Serge Hallyn
90c266e627
Merge pull request #2805 from stgraber/doc
doc/network_ovn: Add note about advanced external_interfaces syntax
2026-01-08 00:03:28 -06:00
Stéphane Graber
110a523531
doc/network_ovn: Add note about advanced external_interfaces syntax
Same as for bridges.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-07 21:22:05 -05:00
Stéphane Graber
aafe095697
Merge pull request #2801 from stgraber/main
Implement forced deletion in legacy file API
2026-01-04 14:17:44 -05:00
Stéphane Graber
bf512b985d
api: file_delete_force
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-04 12:22:26 -05:00
Stéphane Graber
f9c3aff11c
doc/rest-api: Refresh swagger YAML
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-04 12:22:25 -05:00
Stéphane Graber
0f937900ba
incusd: Add X-Incus-force header for file operations
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-04 12:22:23 -05:00
Serge Hallyn
69b2e1725c
Merge pull request #2802 from stgraber/network
Add vlan.tagged to physical networks
2026-01-04 11:11:28 -06:00
Stéphane Graber
add134c50d
incusd/device/nic_physical: Fix internal bridge handling
Closes #2787

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-04 10:42:15 -05:00
Stéphane Graber
6dd6948000
doc: Update configs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-04 10:42:14 -05:00
Stéphane Graber
b72643a540
incusd/device: Add vlan.tagged to physical NICs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-04 10:42:13 -05:00
Stéphane Graber
969f323000
incusd/network/physical: Allow vlan.tagged
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2026-01-04 10:42:12 -05:00
Stéphane Graber
112678ceca
Merge pull request #2796 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2025-12-28 12:15:07 -05:00
Américo Monteiro
5fe4c0eca1
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1904 of 1904 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2025-12-28 14:00:24 +01:00
Stéphane Graber
5b58cff1e5
Merge pull request #2794 from weblate/weblate-incus-cli
Translations update from Hosted Weblate
2025-12-27 01:14:51 -05:00
meipeter
50c5c6f41d
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (757 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: meipeter <meipeter114514@outlook.com>
2025-12-27 04:21:00 +01:00
daoge
eab77fbf70
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (757 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: daoge <renmadao@163.com>
2025-12-27 04:20:59 +01:00
Kwok Guy
b0a9cec253
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (757 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Kwok Guy <kwokjuy@163.com>
2025-12-27 04:20:58 +01:00
yooadmin
e141bc0b60
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (757 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: yooadmin <yooadmin@163.com>
2025-12-27 04:20:58 +01:00
Sakiko
1916544bfc
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (757 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Sakiko <sakiko@anontokyo.co.uk>
2025-12-27 04:20:56 +01:00
Loge X
79b9a45b25
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (757 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Loge X <wazolm5643@163.com>
2025-12-27 04:20:55 +01:00
Anonymous
39fd7fe869
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (757 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:20:45 +01:00
IO01
80d89f58a3
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 39.8% (757 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hans/
Signed-off-by: IO01 <pf.man@live.com>
2025-12-27 04:20:27 +01:00
Hiroaki Nakamura
f36e53a5d7
Translated using Weblate (Japanese)
Currently translated at 78.4% (1492 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Hiroaki Nakamura <hnakamur@gmail.com>
2025-12-27 04:20:21 +01:00
KATOH Yasufumi
29663ec239
Translated using Weblate (Japanese)
Currently translated at 78.4% (1492 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: KATOH Yasufumi <karma@jazz.email.ne.jp>
2025-12-27 04:20:20 +01:00
Anonymous
43859827fd
Translated using Weblate (Japanese)
Currently translated at 78.4% (1492 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ja/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:20:13 +01:00
Américo Monteiro
1b5405a2dd
Translated using Weblate (Portuguese)
Currently translated at 100.0% (1902 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt/
Signed-off-by: Américo Monteiro <a_monteiro@gmx.com>
2025-12-27 04:19:45 +01:00
Anonymous
c0a8d9f802
Translated using Weblate (Russian)
Currently translated at 0.9% (19 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ru/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:19:11 +01:00
Daniel Dybing
42a44b204d
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.7% (15 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Daniel Dybing <daniel.dybing@gmail.com>
2025-12-27 04:18:36 +01:00
Anonymous
aea99bc7a1
Translated using Weblate (Norwegian Bokmål)
Currently translated at 0.7% (15 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nb_NO/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:18:35 +01:00
Andika Triwidada
fb9dbb5445
Translated using Weblate (Indonesian)
Currently translated at 12.8% (245 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Andika Triwidada <andika@gmail.com>
2025-12-27 04:18:03 +01:00
Anonymous
8414310b31
Translated using Weblate (Indonesian)
Currently translated at 12.8% (245 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/id/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:17:58 +01:00
Varlorg
3f53bcdae2
Translated using Weblate (French)
Currently translated at 29.9% (569 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Varlorg <varlorg@gmail.com>
2025-12-27 04:17:18 +01:00
Laterria.Severino
c0ad8a79a0
Translated using Weblate (French)
Currently translated at 29.9% (569 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: "Laterria.Severino" <Laterria.Severino@openmail.pro>
2025-12-27 04:17:17 +01:00
Benjamin Somers
68ac12b999
Translated using Weblate (French)
Currently translated at 29.9% (569 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Benjamin Somers <benjamin.somers@telecom-bretagne.eu>
2025-12-27 04:17:17 +01:00
smCloudInTheSky
633a79c4b9
Translated using Weblate (French)
Currently translated at 29.9% (569 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: smCloudInTheSky <sylvain.maret@hotmail.fr>
2025-12-27 04:17:16 +01:00
Steeve Droz
38d4e600a4
Translated using Weblate (French)
Currently translated at 29.9% (569 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Steeve Droz <steeve.droz+weblate@protonmail.ch>
2025-12-27 04:17:12 +01:00
Corabel Bertolini
3c9b7f8aee
Translated using Weblate (French)
Currently translated at 29.9% (569 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Corabel Bertolini <Corabel.Bertolini@freemailonline.us>
2025-12-27 04:17:11 +01:00
Anonymous
b93b9fbd29
Translated using Weblate (French)
Currently translated at 29.9% (569 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:17:10 +01:00
montag451
423706c9f8
Translated using Weblate (French)
Currently translated at 29.9% (569 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/fr/
Signed-off-by: montag451 <montag451@laposte.net>
2025-12-27 04:16:47 +01:00
Paulo Coghi
3cd4124624
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.2% (100 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Paulo Coghi <paulo@coghi.com.br>
2025-12-27 04:16:40 +01:00
Anonymous
659869e648
Translated using Weblate (Portuguese (Brazil))
Currently translated at 5.2% (100 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/pt_BR/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:16:39 +01:00
Dklfajsjfi49wefklsf32
c90b936aa3
Translated using Weblate (German)
Currently translated at 10.9% (208 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2025-12-27 04:16:04 +01:00
Stéphane Graber
6d701de311
Translated using Weblate (German)
Currently translated at 10.9% (208 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2025-12-27 04:16:04 +01:00
Tobias Gerold
9117a8d77b
Translated using Weblate (German)
Currently translated at 10.9% (208 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Tobias Gerold <tobias@g3ro.eu>
2025-12-27 04:16:03 +01:00
Jan Mittelstädter
ff7a1ae21f
Translated using Weblate (German)
Currently translated at 10.9% (208 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Jan Mittelstädter <jan@mittelstaedter.de>
2025-12-27 04:16:00 +01:00
Anonymous
1944fb3a3b
Translated using Weblate (German)
Currently translated at 10.9% (208 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/de/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:15:58 +01:00
Jorge Teixeira
5bc650f1ef
Translated using Weblate (Spanish)
Currently translated at 3.7% (71 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Jorge Teixeira <hey@teixe.es>
2025-12-27 04:15:27 +01:00
Anonymous
3360d342f1
Translated using Weblate (Spanish)
Currently translated at 3.7% (71 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/es/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:15:27 +01:00
pesder
6cfc7485cf
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.6% (32 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: pesder <j_h_liau@yahoo.com.tw>
2025-12-27 04:14:51 +01:00
Anonymous
ef1a824989
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 1.6% (32 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/zh_Hant/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:14:50 +01:00
Dklfajsjfi49wefklsf32
a087fedc61
Translated using Weblate (Dutch)
Currently translated at 11.1% (212 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Dklfajsjfi49wefklsf32 <nlincus@users.noreply.hosted.weblate.org>
2025-12-27 04:14:10 +01:00
Anonymous
a9d9b9f806
Translated using Weblate (Dutch)
Currently translated at 11.1% (212 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/nl/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:14:06 +01:00
Anonymous
62869f0cb5
Translated using Weblate (Tamil)
Currently translated at 0.0% (0 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/ta/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:13:34 +01:00
Anonymous
41b7935950
Translated using Weblate (Swedish)
Currently translated at 99.7% (1897 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:13:00 +01:00
Daniel Nylander
f1b80dba06
Translated using Weblate (Swedish)
Currently translated at 99.7% (1897 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/sv/
Signed-off-by: Daniel Nylander <daniel@danielnylander.se>
2025-12-27 04:12:59 +01:00
Alberto Donato
e49c02796a
Translated using Weblate (Italian)
Currently translated at 1.8% (35 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Alberto Donato <alberto.donato@gmail.com>
2025-12-27 04:12:11 +01:00
Anonymous
b0c6c21b4c
Translated using Weblate (Italian)
Currently translated at 1.8% (35 of 1902 strings)

Translation: Incus/CLI
Translate-URL: https://hosted.weblate.org/projects/incus/cli/it/
Signed-off-by: Anonymous <noreply@weblate.org>
2025-12-27 04:12:10 +01:00
Serge Hallyn
d351f52931
Merge pull request #2793 from stgraber/network
incusd/network/physical: Allow parent re-use for bridges
2025-12-26 15:48:02 -06:00
Serge Hallyn
c568f819b9
Merge pull request #2791 from stgraber/main
Tweak boot.autostart
2025-12-26 14:46:26 -06:00
Stéphane Graber
f95e2af5b7
incusd/network/physical: Allow parent re-use for bridges
Closes #2792

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2025-12-26 15:10:03 -05:00
Stéphane Graber
eee18e103e
incusd/instances: Support last-state value for boot.autostart
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2025-12-26 13:51:56 -05:00
Stéphane Graber
8d6d705ee4
doc: Update configs
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2025-12-26 13:50:48 -05:00
Stéphane Graber
81399c2731
internal/instance: Tweak handling of boot.autostart
Closes #2788

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2025-12-26 13:49:10 -05:00
Serge Hallyn
e6944d7eea
Merge pull request #2789 from stgraber/main
Add custom OIDC claim to restrict access to specific subnet
2025-12-25 10:41:47 -06:00
Stéphane Graber
44369a0cdd
doc/authentication: Mentioned incus.allowed_subnets claim
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2025-12-25 00:38:48 -05:00
Stéphane Graber
4d28a1ee5a
incusd/auth/oidc: Introduce incus.restricted_subnets
This introduces a new custom OIDC claim (`incus.restricted_subnets`)
which can be set by the IdP to a list of CIDRs that are allowed access
to Incus.

That's useful to restrict access for Incus for some specific users to a
specific set of source subnets (VPNs).

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2025-12-24 09:41:02 -05:00
Stéphane Graber
705214e0a4
api: oidc_allowed_subnets
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2025-12-24 09:41:01 -05:00
Stéphane Graber
a8aa58696f
Merge pull request #2784 from MarcosDaNight/issue/2524/incus-user-skip-reset
incus-user: Don't reset setup if user has access
2025-12-23 12:44:55 -05:00
Marcos Guillermo
eb0b2f5d9b cmd/incus-user: Don't reset setup if user has access
Currently, incus-user might reset a user's setup if the project name
doesn't match the expected format. This change checks if the user
already has a valid certificate and access to at least one project
before attempting a reset.

Fixes #2524

Signed-off-by: Marcos Guillermo <marcos.cosson@ccc.ufcg.edu.br>

cmd/incus-user: Don't reset setup if user has access

Currently, incus-user might reset a user's setup if the project name
doesn't match the expected format. This change checks if the user
already has a valid certificate and access to at least one project
before attempting a reset.

Fixes #2524

Signed-off-by: Marcos Guillermo <marcos.cosson@ccc.ufcg.edu.br>
2025-12-22 16:40:22 -03:00
Stéphane Graber
b728e761d2
Merge pull request #2783 from truenas/se-truenas-setvolumequota-fix
incusd/storage/truenas: Fix SetVolumeQuota issue when growing FS volumes
2025-12-22 09:21:49 -05:00
Stuart Espey
539860ce96 incusd/storage/truenas: fix SetVolumeQuota issue when growing FS volumes
Fixes https://github.com/lxc/incus/issues/2776

When growing an FS volume, the remote volume was resized, but the change
was not visible until the remote volume was re-activated.

Thus the filesystem was only expanded to the visible size, but since the
visible size was still the old size, this would cause a quiet failure.

The first thing to do was to actually check the device size after the
resize to determine if the resize had succeeded before attempting a FS
resize, which should then succeed

The second part of the fix is to simply activate the volume after resizing
it rather than before, which means it can succeed.

Unfortunately, this means we could no longer grow an inUse filesystem, as we
must de-activate in order to re-activate.

To rectify this, `iscsi refresh` support was added to the TrueNAS tool,
and when using version >=0.7.5, the driver can refresh the iscsi bus to
pickup a size change without having to de-activate an inUse volume.

When the `iscsi refresh` command is not available, and the volume is not
in use, the driver will atttempt to de-activate the volume before changing
the size.

Signed-off-by: Stuart Espey <stuart.espey@mactrix.com>
2025-12-22 11:59:22 +00:00
Serge Hallyn
acc419eaaf
Merge pull request #2782 from stgraber/main
incusd/network/ovn: Drop now obsolete DNS check
2025-12-21 13:17:21 -06:00
Stéphane Graber
eafa7db765
incusd/network/ovn: Drop now obsolete DNS check
As we now populate PTR records, we can get up to 3 records per LSP.

Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
2025-12-21 13:23:47 -05:00
Stéphane Graber
65cb909e18
Merge pull request #2779 from tibeer/doc/openfga_doc_improvement
doc/openfga: Improve required config keys
2025-12-21 01:11:50 -05:00
Tim Beermann
0b0311794c
doc/openfga: Improve required config keys
Signed-off-by: Tim Beermann <tibeer@berryit.de>
2025-12-21 06:32:57 +01:00
1166 changed files with 165332 additions and 100190 deletions

View File

@ -1,4 +1,4 @@
ARG GO_VERSION=1.24
ARG GO_VERSION=1.25
ARG DEBIAN_VERSION=trixie
# Go development container
@ -70,8 +70,8 @@ RUN sed -r -i 's/^Components: main$/Components: main contrib/g' /etc/apt/sources
# zfsutils-linux
xz-utils
# With pipx >= 1.5.0, we could use pipx --global instead.
RUN PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/usr/local/bin pipx install codespell
# Globally install codespell
RUN pipx install --global codespell
# Add vscode user and add it to sudoers.
RUN groupadd -g 1000 $USERNAME && \
@ -97,7 +97,7 @@ RUN go install -v github.com/google/go-licenses@latest && \
go install -v golang.org/x/tools/cmd/goimports@latest && \
go install -v golang.org/x/vuln/cmd/govulncheck@latest && \
go install -v mvdan.cc/gofumpt@latest && \
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
curl -sSfL https://golangci-lint.run/install.sh | sh -s -- -b $(go env GOPATH)/bin
# Make dependencies
COPY Makefile /home/vscode

View File

@ -2,6 +2,12 @@ name: Bug report
description: File a bug report.
type: bug
body:
- type: markdown
attributes:
value: |
> [!NOTE]
> Thank you for taking the time to fill out this bug report. As this issue will be read and debugged by humans, we kindly ask you to refrain from using AI tools to try to interpret your problem or suggest patches, as per our [contribution guidelines](https://github.com/lxc/incus/blob/main/CONTRIBUTING.md).
- type: checkboxes
attributes:
label: Is there an existing issue for this?

30
.github/packaging/macos/build.sh vendored Executable file
View File

@ -0,0 +1,30 @@
#!/bin/bash
# Build a universal Incus client PKG installer.
set -eu
VERSION="${VERSION:?VERSION must be set}"
here="$(dirname "$0")"
out="installers"
root="pkgroot"
res="pkgresources"
mkdir -p "${out}" "${root}/usr/local/bin" "${res}"
cp COPYING "${res}/LICENSE.txt"
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o incus.amd64 ./cmd/incus
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o incus.arm64 ./cmd/incus
lipo -create -output "${root}/usr/local/bin/incus" incus.amd64 incus.arm64
chmod 0755 "${root}/usr/local/bin/incus"
pkgbuild --root "${root}" \
--identifier org.linuxcontainers.incus \
--version "${VERSION}" \
--install-location / \
incus-component.pkg
productbuild --distribution "${here}/distribution.xml" \
--package-path . \
--resources "${res}" \
"${out}/incus.macos.pkg"
rm -rf incus.amd64 incus.arm64 incus-component.pkg "${root}" "${res}"

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<installer-gui-script minSpecVersion="2">
<title>Incus</title>
<license file="LICENSE.txt" />
<options customize="never" require-scripts="false" hostArchitectures="x86_64,arm64" />
<choices-outline>
<line choice="default">
<line choice="org.linuxcontainers.incus" />
</line>
</choices-outline>
<choice id="default" />
<choice id="org.linuxcontainers.incus" visible="false">
<pkg-ref id="org.linuxcontainers.incus" />
</choice>
<pkg-ref id="org.linuxcontainers.incus" version="0" onConclusion="none">incus-component.pkg</pkg-ref>
</installer-gui-script>

30
.github/packaging/windows/build.sh vendored Executable file
View File

@ -0,0 +1,30 @@
#!/bin/bash
# Build per-architecture Incus client MSI installers.
set -eu
VERSION="${VERSION:?VERSION must be set}"
here="$(dirname "$0")"
out="installers"
mkdir -p "${out}"
bash "${here}/make-license-rtf.sh" COPYING "${out}/license.rtf"
build_one() {
goarch="$1"
wixarch="$2"
name="$3"
CGO_ENABLED=0 GOOS=windows GOARCH="${goarch}" go build -o "${out}/incus.exe" ./cmd/incus
wix build -arch "${wixarch}" \
-ext WixToolset.UI.wixext \
-d Version="${VERSION}" \
-d BinPath="${out}/incus.exe" \
-d LicenseRtf="${out}/license.rtf" \
-o "${out}/incus.windows.${name}.msi" \
"${here}/incus.wxs"
}
build_one amd64 x64 x86_64
build_one arm64 arm64 aarch64
rm -f "${out}/incus.exe" "${out}/license.rtf"

33
.github/packaging/windows/incus.wxs vendored Normal file
View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
xmlns:ui="http://wixtoolset.org/schemas/v4/wxs/ui">
<Package Name="Incus"
Manufacturer="Linux Containers"
Version="$(var.Version)"
UpgradeCode="7E2B5C1D-4A3F-4B8E-9C6D-1F0A2B3C4D5E"
Scope="perMachine">
<MajorUpgrade DowngradeErrorMessage="A newer version of Incus is already installed." />
<MediaTemplate EmbedCab="yes" />
<StandardDirectory Id="ProgramFiles6432Folder">
<Directory Id="INSTALLFOLDER" Name="Incus">
<Directory Id="BINFOLDER" Name="bin" />
</Directory>
</StandardDirectory>
<ComponentGroup Id="ProductComponents" Directory="BINFOLDER">
<Component Id="IncusExe" Guid="*">
<File Id="IncusExe" Name="incus.exe" Source="$(var.BinPath)" KeyPath="yes" />
<Environment Id="UpdatePath" Name="PATH" Value="[BINFOLDER]"
Permanent="no" Part="last" Action="set" System="yes" />
</Component>
</ComponentGroup>
<Feature Id="Main">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
<ui:WixUI Id="WixUI_Minimal" />
<WixVariable Id="WixUILicenseRtf" Value="$(var.LicenseRtf)" />
</Package>
</Wix>

12
.github/packaging/windows/make-license-rtf.sh vendored Executable file
View File

@ -0,0 +1,12 @@
#!/bin/bash
# Wrap a plain-text license into a minimal RTF for the WiX license dialog.
set -eu
src="$1"
dst="$2"
{
printf '{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0 Courier New;}}\\fs16\n'
sed -e 's/\\/\\\\/g' -e 's/{/\\{/g' -e 's/}/\\}/g' -e 's/$/\\par/' "$src"
printf '}\n'
} > "$dst"

93
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,93 @@
name: Build
on:
push:
branches:
- main
- stable-*
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: Build (${{ matrix.architecture }})
strategy:
fail-fast: false
matrix:
architecture:
- amd64
- arm64
runs-on:
- self-hosted
- lxc-incus-build
- arch-${{ matrix.architecture }}
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Install Go
uses: actions/setup-go@v7
with:
go-version: stable
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends -y \
autoconf \
automake \
curl \
git \
libacl1-dev \
libcap-dev \
libdbus-1-dev \
liblz4-dev \
libseccomp-dev \
libselinux-dev \
libsqlite3-dev \
libtool \
libudev-dev \
libuv1-dev \
lxc-dev \
make \
pkg-config \
zip
- name: Download go dependencies
run: |
go mod download
- name: Build cowsql and raft
run: |
set -x
make deps
raft_path="$(go env GOPATH)/deps/raft"
cowsql_path="$(go env GOPATH)/deps/cowsql"
{
echo "CGO_CFLAGS=-I${raft_path}/include/ -I${cowsql_path}/include/"
echo "CGO_LDFLAGS=-L${raft_path}/.libs -L${cowsql_path}/.libs/"
echo "LD_LIBRARY_PATH=${raft_path}/.libs/:${cowsql_path}/.libs/"
echo "CGO_LDFLAGS_ALLOW=(-Wl,-wrap,pthread_create)|(-Wl,-z,now)"
} >> "$GITHUB_ENV"
- name: Build incusd and incus
run: |
make
- name: Collect binaries
run: |
mkdir -p build
cp "$(go env GOPATH)/bin/incusd" build/
cp "$(go env GOPATH)/bin/incus" build/
- name: Upload build artifacts
uses: actions/upload-artifact@v7
with:
name: build.${{ matrix.architecture }}
path: build/

View File

@ -12,16 +12,38 @@ jobs:
name: Signed-off-by (DCO)
runs-on: ubuntu-24.04
steps:
- name: Get PR Commits
id: 'get-pr-commits'
uses: tim-actions/get-pr-commits@master
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Check that all commits are signed-off
uses: tim-actions/dco@master
uses: KineticCafe/actions-dco@v3.2.0
llm-commit-policy:
permissions:
contents: none
name: LLM commit policy
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v7
with:
commits: ${{ steps.get-pr-commits.outputs.commits }}
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
- name: Check LLM commit policy
run: |
set -eu
# Inspired by https://github.com/yaml/go-yaml/pull/340
agents="(aider|anthropic|claude|codex|copilot|devin|gemini|grok|openai)"
commits=$(git rev-list ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }})
for commit in $commits; do
if git log -n 1 "$commit" | tr '[:upper:]' '[:lower:]' | grep -qE "(author|assisted-by|co-authored-by|signed-off-by):.*$agents"; then
echo "Error: The following commit appears to violate this repo's LLM/AI contribution policy:"
echo ""
git log -n 1 "$commit"
exit 1
fi
done
target-branch:
permissions:

146
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,146 @@
name: Release
on:
push:
tags:
- '*'
permissions:
contents: write
issues: write
id-token: write
attestations: write
jobs:
version:
name: Format version
runs-on: ubuntu-latest
outputs:
display: ${{ steps.version.outputs.display }}
full: ${{ steps.version.outputs.full }}
steps:
- name: Format version
id: version
run: |
raw="${GITHUB_REF_NAME#v}"
IFS='.' read -r major minor patch <<< "$raw"
echo "full=${major}.${minor}.${patch}" >> $GITHUB_OUTPUT
if [ "${patch}" = "0" ]; then
echo "display=${major}.${minor}" >> $GITHUB_OUTPUT
else
echo "display=${major}.${minor}.${patch}" >> $GITHUB_OUTPUT
fi
build-msi:
name: Build Windows installer
runs-on: windows-latest
needs: version
steps:
- name: Checkout
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Install Go
uses: actions/setup-go@v7
with:
go-version: stable
# Pinned to v5, the last release before WiX v6/v7 moved to the Open
# Source Maintenance Fee license requiring EULA acceptance.
- name: Install WiX
shell: pwsh
run: |
dotnet tool install --global wix --version 5.0.2
echo "$env:USERPROFILE\.dotnet\tools" | Out-File -FilePath $env:GITHUB_PATH -Append
- name: Add WiX extensions
shell: pwsh
run: wix extension add -g WixToolset.UI.wixext/5.0.2
- name: Build installers
shell: bash
env:
VERSION: ${{ needs.version.outputs.full }}
run: bash .github/packaging/windows/build.sh
- name: Upload installers
uses: actions/upload-artifact@v7
with:
name: installers-windows
path: installers/*.msi
if-no-files-found: error
build-pkg:
name: Build macOS installer
runs-on: macos-latest
needs: version
steps:
- name: Checkout
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Install Go
uses: actions/setup-go@v7
with:
go-version: stable
- name: Build installer
env:
VERSION: ${{ needs.version.outputs.full }}
run: bash .github/packaging/macos/build.sh
- name: Upload installer
uses: actions/upload-artifact@v7
with:
name: installers-macos
path: installers/*.pkg
if-no-files-found: error
goreleaser:
name: Release
runs-on: ubuntu-latest
needs: [version, build-msi, build-pkg]
steps:
- name: Checkout
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Install Go
uses: actions/setup-go@v7
with:
go-version: stable
- name: Install syft
uses: anchore/sbom-action/download-syft@v0
- name: Download installers
uses: actions/download-artifact@v8
with:
pattern: installers-*
path: installers
merge-multiple: true
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v7
with:
distribution: goreleaser
version: latest
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
INCUS_VERSION: ${{ needs.version.outputs.display }}
- name: Handle attestation
uses: actions/attest@v4
with:
subject-checksums: ./dist/checksums.txt
- name: Handle installer attestation
uses: actions/attest@v4
with:
subject-path: |
installers/*.msi
installers/*.pkg

32
.github/workflows/slop.yml vendored Normal file
View File

@ -0,0 +1,32 @@
name: Cleanup slop
on:
issues:
types:
- opened
permissions:
issues: write
jobs:
close-untyped:
name: Close issue if type is missing
if: ${{ !github.event.issue.pull_request && !github.event.issue.type && github.event.issue.author_association != 'MEMBER' && github.event.issue.author_association != 'OWNER' }}
runs-on: ubuntu-latest
steps:
- name: Close issue
uses: actions/github-script@v9
with:
script: |
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: "Issues must be created through the [GitHub web interface](https://github.com/lxc/incus/issues/new/choose). Closing automatically."
});
await github.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
state: "closed",
});

View File

@ -26,14 +26,16 @@ jobs:
- tip
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
# Differential ShellCheck requires full git history
fetch-depth: 0
- name: Dependency Review
uses: actions/dependency-review-action@v4
uses: actions/dependency-review-action@v5
if: github.event_name == 'pull_request'
with:
allow-ghsas: GHSA-4p9m-8gc4-rw2h
- id: ShellCheck
name: Differential ShellCheck
@ -42,23 +44,24 @@ jobs:
SHELLCHECK_OPTS: --shell sh
with:
token: ${{ secrets.GITHUB_TOKEN }}
exclude-path: internal/server/instance/drivers/agent-loader/rc.d/incus-agent
if: github.event_name == 'pull_request' && matrix.go == 'stable'
- name: Upload artifact with ShellCheck defects in SARIF format
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: Differential ShellCheck SARIF
path: ${{ steps.ShellCheck.outputs.sarif }}
if: github.event_name == 'pull_request' && matrix.go == 'stable'
- name: Install Go (${{ matrix.go }})
uses: actions/setup-go@v6
uses: actions/setup-go@v7
with:
go-version: ${{ matrix.go }}
if: matrix.go != 'tip'
- name: Install Go (stable)
uses: actions/setup-go@v6
uses: actions/setup-go@v7
with:
go-version: stable
if: matrix.go == 'tip'
@ -238,17 +241,23 @@ jobs:
sudo ip link delete docker0
sudo nft flush ruleset
- name: Remove pre-installed Java
run: |
set -eux
sudo apt-get update
sudo apt-get remove --yes --purge temurin.*
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
- name: Install Go (${{ matrix.go }})
uses: actions/setup-go@v6
uses: actions/setup-go@v7
with:
go-version: ${{ matrix.go }}
if: matrix.go != 'tip'
- name: Install Go (stable)
uses: actions/setup-go@v6
uses: actions/setup-go@v7
with:
go-version: stable
if: matrix.go == 'tip'
@ -262,16 +271,33 @@ jobs:
if: matrix.go == 'tip'
- name: Install dependencies
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
set -x
sudo add-apt-repository ppa:ubuntu-lxc/daily -y --no-update
sudo add-apt-repository ppa:cowsql/stable -y --no-update
# Configure ppa:ubuntu-lxc/daily directly
# (apt-add-repository relies on the Launchpad API which is unreliable).
sudo install -d -m 0755 /etc/apt/keyrings
codename="$(lsb_release -cs)"
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&options=mr&search=0xE9C00C1B1B59A86C2CFEE6990CE27B8C4122B4B7" | sudo tee /etc/apt/keyrings/ubuntu-lxc-daily.asc > /dev/null
sudo tee /etc/apt/sources.list.d/ubuntu-lxc-daily.sources > /dev/null <<EOF
Types: deb
URIs: https://ppa.launchpadcontent.net/ubuntu-lxc/daily/ubuntu
Suites: ${codename}
Components: main
Signed-By: /etc/apt/keyrings/ubuntu-lxc-daily.asc
EOF
sudo apt-get update
sudo systemctl mask lxc.service lxc-net.service
sudo apt-get install --no-install-recommends -y \
apparmor \
autoconf \
automake \
bsdextrautils \
bzip2 \
curl \
@ -280,14 +306,15 @@ jobs:
libacl1-dev \
libcap-dev \
libdbus-1-dev \
libcowsql-dev \
libelf-dev \
liblxc-dev \
liblz4-dev \
libseccomp-dev \
libselinux-dev \
libsqlite3-dev \
libtool \
libudev-dev \
libuv1-dev \
linux-modules-extra-$(uname -r) \
llvm \
make \
@ -324,49 +351,67 @@ jobs:
# Reclaim some space
sudo apt-get clean
# Download minio.
curl -sSfL https://dl.min.io/server/minio/release/linux-$(dpkg --print-architecture)/archive/minio_20240116160738.0.0_$(dpkg --print-architecture).deb --output /tmp/minio.deb
sudo apt-get install /tmp/minio.deb --yes
# Download MinIO client
curl -sSfL https://dl.min.io/client/mc/release/linux-$(dpkg --print-architecture)/archive/mc.RELEASE.2024-01-16T16-06-34Z --output /tmp/mc
sudo mv /tmp/mc /usr/local/bin/
sudo chmod +x /usr/local/bin/mc
github_api_curl() {
curl -sSfL \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2026-03-10" \
"$@"
}
# Download latest release of openfga server.
mkdir -p "$(go env GOPATH)/bin/"
curl -sSfL https://api.github.com/repos/openfga/openfga/releases/latest | jq -r ".assets | .[] | .browser_download_url | select(. | test(\"_linux_$(dpkg --print-architecture).tar.gz$\"))" | xargs -I {} curl -sSfL {} -o openfga.tar.gz
github_api_curl https://api.github.com/repos/openfga/openfga/releases/latest | jq -r ".assets | .[] | .browser_download_url | select(. | test(\"_linux_$(dpkg --print-architecture).tar.gz$\"))" | xargs -I {} curl -sSfL {} -o openfga.tar.gz
tar -xzf openfga.tar.gz -C "$(go env GOPATH)/bin/"
# Download latest release of openfga cli.
curl -sSfL https://api.github.com/repos/openfga/cli/releases/latest | jq -r ".assets | .[] | .browser_download_url | select(. | test(\"_linux_$(dpkg --print-architecture).tar.gz$\"))" | xargs -I {} curl -sSfL {} -o fga.tar.gz
github_api_curl https://api.github.com/repos/openfga/cli/releases/latest | jq -r ".assets | .[] | .browser_download_url | select(. | test(\"_linux_$(dpkg --print-architecture).tar.gz$\"))" | xargs -I {} curl -sSfL {} -o fga.tar.gz
tar -xzf fga.tar.gz -C "$(go env GOPATH)/bin/"
- name: Download go dependencies
run: |
go mod download
- name: Build cowsql and raft
run: |
set -x
make deps
raft_path="$(go env GOPATH)/deps/raft"
cowsql_path="$(go env GOPATH)/deps/cowsql"
{
echo "CGO_CFLAGS=-I${raft_path}/include/ -I${cowsql_path}/include/"
echo "CGO_LDFLAGS=-L${raft_path}/.libs -L${cowsql_path}/.libs/"
echo "LD_LIBRARY_PATH=${raft_path}/.libs/:${cowsql_path}/.libs/"
echo "CGO_LDFLAGS_ALLOW=(-Wl,-wrap,pthread_create)|(-Wl,-z,now)"
} >> "$GITHUB_ENV"
- name: Run Incus build
env:
CGO_LDFLAGS_ALLOW: "(-Wl,-wrap,pthread_create)|(-Wl,-z,now)"
run: |
make
- name: Setup scratch space
if: "matrix.backend == 'ceph' || matrix.backend == 'linstor'"
run: |
set -eux
if mountpoint -q /mnt; then
[ -e /mnt/swapfile ] && sudo swapoff /mnt/swapfile
block_path="$(findmnt --noheadings --output SOURCE --target /mnt | sed 's/[0-9]\+$//')"
sudo umount /mnt
sudo wipefs -a "${block_path}"
sudo ln -s "${block_path}" "/dev/scratch"
else
sudo truncate -s 20G /scratch.img
block_path="$(sudo losetup --show -f /scratch.img)"
sudo ln -s "${block_path}" "/dev/scratch"
fi
- name: Setup MicroCeph
if: ${{ matrix.backend == 'ceph' }}
if: matrix.backend == 'ceph'
run: |
set -x
# If the rootfs and the ephemeral part are on the same physical disk, giving the whole
# disk to microceph would wipe our rootfs. Since it is pretty rare for GitHub Action
# runners to have a single disk, we immediately bail rather than trying to gracefully
# handle it. Once snapd releases with https://github.com/snapcore/snapd/pull/13150,
# we will be able to stop worrying about that special case.
if [ "$(stat -c '%d' /)" = "$(stat -c '%d' /mnt)" ]; then
echo "FAIL: rootfs and ephemeral part on the same disk, aborting"
exit 1
fi
sudo apt-get install --no-install-recommends -y snapd
sudo snap install microceph --channel=quincy/stable
sudo apt-get install --no-install-recommends -y ceph-common
@ -379,11 +424,9 @@ jobs:
for flag in nosnaptrim noscrub nobackfill norebalance norecover noscrub nodeep-scrub; do
sudo microceph.ceph osd set $flag
done
# Repurpose the ephemeral disk for ceph OSD.
sudo swapoff /mnt/swapfile
ephemeral_disk="$(findmnt --noheadings --output SOURCE --target /mnt | sed 's/[0-9]\+$//')"
sudo umount /mnt
sudo microceph disk add --wipe "${ephemeral_disk}"
sudo microceph disk add --wipe "$(readlink -f /dev/scratch)"
sudo rm -rf /etc/ceph
sudo ln -s /var/snap/microceph/current/conf/ /etc/ceph
sudo microceph enable rgw
@ -393,6 +436,7 @@ jobs:
sudo microceph.ceph fs ls
sleep 30
sudo microceph.ceph status
# Wait until there are no more "unkowns" pgs
for _ in $(seq 60); do
if sudo microceph.ceph pg stat | grep -wF unknown; then
@ -405,17 +449,22 @@ jobs:
sudo rm -f /snap/bin/rbd
- name: Setup LINSTOR
if: ${{ matrix.backend == 'linstor' }}
if: matrix.backend == 'linstor'
run: |
set -x
# As with Ceph, we hope for a spare disk.
if [ "$(stat -c '%d' /)" = "$(stat -c '%d' /mnt)" ]; then
echo "FAIL: rootfs and ephemeral part on the same disk, aborting"
exit 1
fi
sudo add-apt-repository ppa:linbit/linbit-drbd9-stack -y
# Configure ppa:linbit/linbit-drbd9-stack directly
# (apt-add-repository relies on the Launchpad API which is unreliable).
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&options=mr&search=0xCC1B5A793C04BB3905AD837734893610CEAA9512" | sudo tee /etc/apt/keyrings/linbit-drbd9-stack.asc > /dev/null
sudo tee /etc/apt/sources.list.d/linbit-drbd9-stack.sources > /dev/null <<EOF
Types: deb
URIs: https://ppa.launchpadcontent.net/linbit/linbit-drbd9-stack/ubuntu
Suites: $(lsb_release -cs)
Components: main
Signed-By: /etc/apt/keyrings/linbit-drbd9-stack.asc
EOF
sudo apt-get update
# Install everything required to compile DRBD and run LINSTOR tools.
sudo apt-get install --no-install-recommends -y \
@ -437,11 +486,7 @@ jobs:
sudo linstor node create local "${runner_ip}" --node-type combined
# Repurpose the ephemeral disk for LINSTOR physical storage.
sudo swapoff /mnt/swapfile
ephemeral_disk="$(findmnt --noheadings --output SOURCE --target /mnt | sed 's/[0-9]\+$//')"
sudo umount /mnt
sudo wipefs -a "${ephemeral_disk}"
sudo linstor physical-storage create-device-pool --storage-pool incus --pool-name linstor-incus zfsthin local "${ephemeral_disk}"
sudo linstor physical-storage create-device-pool --storage-pool incus --pool-name linstor-incus zfsthin local "$(readlink -f /dev/scratch)"
# Update the runner env.
echo "INCUS_LINSTOR_CLUSTER=${runner_ip}" >> "$GITHUB_ENV"
@ -469,7 +514,7 @@ jobs:
chmod +x ~
echo "root:1000000:1000000000" | sudo tee /etc/subuid /etc/subgid
cd test
sudo --preserve-env=PATH,GOPATH,GITHUB_ACTIONS,INCUS_VERBOSE,INCUS_BACKEND,INCUS_CEPH_CLUSTER,INCUS_CEPH_CEPHFS,INCUS_CEPH_CEPHOBJECT_RADOSGW,INCUS_LINSTOR_LOCAL_SATELLITE,INCUS_LINSTOR_CLUSTER,INCUS_OFFLINE,INCUS_SKIP_TESTS,INCUS_REQUIRED_TESTS, INCUS_BACKEND=${{ matrix.backend }} ./main.sh ${{ matrix.suite }}
sudo --preserve-env=PATH,GOPATH,GITHUB_ACTIONS,INCUS_VERBOSE,INCUS_BACKEND,INCUS_CEPH_CLUSTER,INCUS_CEPH_CEPHFS,INCUS_CEPH_CEPHOBJECT_RADOSGW,INCUS_LINSTOR_LOCAL_SATELLITE,INCUS_LINSTOR_CLUSTER,INCUS_OFFLINE,INCUS_SKIP_TESTS,INCUS_REQUIRED_TESTS, INCUS_BACKEND=${{ matrix.backend }} env LD_LIBRARY_PATH=${LD_LIBRARY_PATH} JAVA_HOME= ./main.sh ${{ matrix.suite }}
client:
name: Client
@ -487,10 +532,10 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@v7
- name: Install Go
uses: actions/setup-go@v6
uses: actions/setup-go@v7
with:
go-version: ${{ matrix.go }}
@ -534,14 +579,6 @@ jobs:
GOARCH=amd64 go build -o bin/incus-migrate.x86_64 ./cmd/incus-migrate
GOARCH=arm64 go build -o bin/incus-migrate.aarch64 ./cmd/incus-migrate
- name: Build static lxd-to-incus
if: runner.os == 'Linux'
env:
CGO_ENABLED: 0
run: |
GOARCH=amd64 go build -o bin/lxd-to-incus.x86_64 ./cmd/lxd-to-incus
GOARCH=arm64 go build -o bin/lxd-to-incus.aarch64 ./cmd/lxd-to-incus
- name: Unit tests (client)
env:
CGO_ENABLED: 0
@ -559,7 +596,7 @@ jobs:
- name: Upload incus client artifacts
if: matrix.go == 'stable'
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
continue-on-error: true
with:
name: ${{ runner.os }}
@ -570,17 +607,17 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
- name: Install Go
uses: actions/setup-go@v6
uses: actions/setup-go@v7
with:
go-version: stable
- name: Install dependencies
run: |
sudo apt-get install aspell aspell-en
sudo snap install mdl
sudo apt-get install -y aspell aspell-en ruby
sudo gem install --no-document mdl
- name: Run markdown linter
run: |
@ -608,7 +645,7 @@ jobs:
- name: Upload documentation artifacts
if: always()
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@v7
with:
name: documentation
path: doc/html

View File

@ -13,7 +13,7 @@ jobs:
name: PR labels
runs-on: ubuntu-24.04
steps:
- uses: actions/labeler@v6
- uses: actions/labeler@v7
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
sync-labels: true

2
.gitignore vendored
View File

@ -2,6 +2,7 @@
po/*.mo
po/*.po~
incus-*.tar.xz
installers
.vagrant
*~
tags
@ -10,7 +11,6 @@ tags
cmd/fuidshift/fuidshift
cmd/incus/incus
cmd/lxc-to-incus/lxc-to-incus
cmd/lxd-to-incus/lxd-to-incus
cmd/incus-agent/incus-agent
cmd/incus-benchmark/incus-benchmark
cmd/incus-migrate/incus-migrate

View File

@ -16,6 +16,8 @@ linters:
- (*github.com/mdlayher/vsock.Listener).Close
- os.Remove
- (*compress/gzip.Writer).Close
- (*github.com/fatih/color.Color).Printf
- (*github.com/fatih/color.Color).Println
revive:
rules:
- name: exported
@ -75,6 +77,12 @@ linters:
source: '^// Example:'
- path: internal/util/
text: "avoid meaningless package names"
- path: internal/server/util/
text: "avoid meaningless package names"
- path: shared/uefi/guid.go
linters:
- revive
text: '^(var-naming|exported):'
paths:
- third_party$
- builtin$

188
.goreleaser.yaml Normal file
View File

@ -0,0 +1,188 @@
version: 2
archives:
- id: incus
ids:
- incus
formats:
- binary
name_template: >-
bin.
{{- if eq .Os "darwin" }}macos
{{- else }}{{ .Os }}{{ end }}.incus.
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "arm64" }}aarch64
{{- else }}{{ .Arch }}{{ end }}
- id: incus-agent
ids:
- incus-agent
formats:
- binary
name_template: >-
bin.
{{- if eq .Os "darwin" }}macos
{{- else }}{{ .Os }}{{ end }}.incus-agent.
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "arm64" }}aarch64
{{- else }}{{ .Arch }}{{ end }}
- id: incus-benchmark
ids:
- incus-benchmark
formats:
- binary
name_template: >-
bin.
{{- if eq .Os "darwin" }}macos
{{- else }}{{ .Os }}{{ end }}.incus-benchmark.
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "arm64" }}aarch64
{{- else }}{{ .Arch }}{{ end }}
- id: incus-migrate
ids:
- incus-migrate
formats:
- binary
name_template: >-
bin.
{{- if eq .Os "darwin" }}macos
{{- else }}{{ .Os }}{{ end }}.incus-migrate.
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "arm64" }}aarch64
{{- else }}{{ .Arch }}{{ end }}
- id: incus-simplestreams
ids:
- incus-simplestreams
formats:
- binary
name_template: >-
bin.
{{- if eq .Os "darwin" }}macos
{{- else }}{{ .Os }}{{ end }}.incus-simplestreams.
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "arm64" }}aarch64
{{- else }}{{ .Arch }}{{ end }}
before:
hooks:
- go mod download
- go mod vendor
- sh -c "git show-ref HEAD | cut -d' ' -f1 > .gitref"
- git clone --depth=1 https://github.com/cowsql/cowsql vendor/cowsql
- sh -c "cd vendor/cowsql && git show-ref HEAD | cut -d' ' -f1 > .gitref"
- rm -Rf vendor/cowsql/.git
- git clone --depth=1 https://github.com/cowsql/raft vendor/raft
- sh -c "cd vendor/raft && git show-ref HEAD | cut -d' ' -f1 > .gitref"
- rm -Rf vendor/raft/.git
- make doc
builds:
- id: incus
main: ./cmd/incus
env:
- CGO_ENABLED=0
goos:
- darwin
- freebsd
- linux
- windows
goarch:
- amd64
- arm64
- id: incus-agent
main: ./cmd/incus-agent
env:
- CGO_ENABLED=0
goos:
- darwin
- freebsd
- linux
- windows
goarch:
- amd64
- arm64
- id: incus-benchmark
main: ./cmd/incus-benchmark
env:
- CGO_ENABLED=0
goos:
- darwin
- freebsd
- linux
- windows
goarch:
- amd64
- arm64
- id: incus-migrate
main: ./cmd/incus-migrate
env:
- CGO_ENABLED=0
goos:
- linux
goarch:
- amd64
- arm64
- id: incus-simplestreams
main: ./cmd/incus-simplestreams
env:
- CGO_ENABLED=0
goos:
- linux
goarch:
- amd64
- arm64
changelog:
use: "github-native"
checksum:
name_template: "checksums.txt"
gomod:
proxy: true
mod: mod
milestones:
- repo:
owner: lxc
name: incus
close: true
fail_on_error: false
name_template: "incus-{{ .Env.INCUS_VERSION }}"
release:
github:
owner: lxc
name: incus
name_template: "Incus {{ .Env.INCUS_VERSION }}"
extra_files:
- glob: ./installers/*.msi
- glob: ./installers/*.pkg
sboms:
- id: archive
artifacts: archive
ids:
- incus
- incus-agent
- incus-benchmark
- incus-migrate
- incus-simplestreams
- id: source
artifacts: source
source:
enabled: true
format: "tar.gz"
prefix_template: "{{ .ProjectName }}-{{ .Env.INCUS_VERSION }}/"
files:
- ".gitref"
- "doc/html"
- "vendor/*"

20
AGENTS.md Normal file
View File

@ -0,0 +1,20 @@
# Legal
- All contributions to this repository must be compatible with the Apache 2.0 license.
- Specifically (but not limited to), contributions cannot include code licensed under the terms of the GPL, AGPL or LGPL licenses.
- Only human beings are allowed to sign the Developer Certificate of Ownership (DCO / Signed-off-by).
- Only human beings can ever be credited within commit messages.
# Formatting
- Code comments should be no longer than one line, unless they are required to cover complex unintuitive logic.
- Commit messages should similarly be kept as short and to the point as possible, no need to summarize the whole issue.
- We don't use the define and test one line `if` syntax, instead splitting defintion and testing across two lines.
# Testing / validation
- The commit structure described in `CONTRIBUTING.md` should generally be followed.
- All branches are expected to pass `make static-analysis` and `go test -v ./...`.
- Excessive unit tests are generally discouraged.
- When possible, existing system tests should be extended to cover new features.
- A full local system test run isn't required prior to contribution, all tests get run in our CI.

View File

@ -18,21 +18,83 @@ By default, any contribution to this project is made under the Apache
The author of a change remains the copyright holder of their code
(no copyright assignment).
## No Large Language Models (LLMs) or similar AI tools
## Policy on the use of Large Language Models (LLMs) and AI tooling
### For issue reporting
All contributions to this project are expected to be done by human
beings or through standard predictable tooling (e.g. scripts, formatters, ...).
We do NOT allow direct filing of issues by LLMs.
We expect all contributors to be able to reason about the code that they
contribute and explain why they're taking a particular approach.
We REQUIRE a human being to go through our issue reporting form on
Github and accurately describe their issue and provide all needed
information.
LLMs and similar predictive tools have the annoying tendency of
producing large amount of low quality code with subtle issues which end
up taking the maintainers more time to debug than it would have taken to
write the code by hand in the first place.
The more concise and to the point the issue is, the more likely it is to
be understood, tracked down and resolved quickly.
Any attempt at hiding the use of LLMs or similar tools in Incus contributions
will result in a revert of the affected changes and a ban from the project.
Long winded AI written essays can easily look overwhelming and cause our
maintainers and other contributors to just entirely skip the issue to
focus their energy on something else.
We also don't benefit from AI generated root cause analysis or proposed
fixes in those issues. If you yourself understand the code base well
enough to go through that content and suggested fix, then turn it into a
pull request and submit it yourself. Otherwise, please limit your report
to describing the issue at hand and we'll take it from there.
### For contributions
We REQUIRE all contributions to Incus to be submitted by human beings who
can assert full copyright ownership of their contribution or have been
allowed by their employer to contribute. This is what the DCO (see below)
requires of all contributors.
AI tools can sometimes be beneficial, particularly when it comes to
finding patterns among a large data set (entire code base), performing
tedious repetitive changes or large refactoring/re-organization.
While we now tolerate the use of such tools, they must abide by our
instructions (`AGENTS.md`) and their operators cannot override those
instructions.
We expect everyone contributing to Incus to fully own their
contribution, be able to reason about it, be able to explain why things
were done a particular way and act as the full owner of that code. AI
tools are treated the same as traditional tooling like `sed`, `awk` or
`coccinelle`.
For the purpose of this project, AI tools CANNOT be treated as author,
co-author or be credited in any way that would suggest any ownership
over the contribution.
The contributor should have done all the thinking, planning and
understanding of the changes needed to resolve an issue or implement a
new feature prior to using automated tooling to perform the grunt work.
Unguided use of those tools or the inability to prove understanding of
the code contributed will result in a loss of trust in that contributor
by project maintainers which can then lead to exclusion from any further
contribution to the project.
It's also worth pointing out that while those tools are good at
implementing the more boring/repetitive/grunt work. We've generally
found that you only really understand the project and its structure by
having done such work yourself a few times.
### For anyone with write access to the repository
Anyone with write access to this repository must ensure to NEVER run an
AI agent or similar tool on a system which holds repository credentials
(SSH key, GPG key, web browser cookies, ...).
Any use of AI tooling should be done inside of a clean VM/container that
itself cannot directly push to or alter this repository in any way.
The safest approach is to SSH into that environment and then extract the
changes using `git format-patch`, then review and apply them to your
actual tree, tweak them as needed, sign them off and then push and open
the pull request.
Any potential credential compromise or loss of control should be
immediately reported to `security@linuxcontainers.org`.
## Pull requests

308
Makefile
View File

@ -23,11 +23,13 @@ else
COWSQL_PATH=$(GOPATH)/deps/cowsql
endif
# raft
# section(Build): Build Incus
.PHONY: default
default: build
.PHONY: build
# doc: Build all Incus binaries (same as make and make default)
build:
ifeq "$(TAG_SQLITE3)" ""
@echo "Missing cowsql, run \"make deps\" to setup."
@ -40,21 +42,66 @@ endif
@echo "Incus built successfully"
.PHONY: client
# doc: Build the Incus client
client:
$(GO) install -v -tags "$(TAG_SQLITE3)" $(DEBUG) ./cmd/incus
@echo "Incus client built successfully"
.PHONY: incus-agent
# doc: Build the Incus agent
incus-agent:
CGO_ENABLED=0 $(GO) install -v -tags agent,netgo ./cmd/incus-agent
@echo "Incus agent built successfully"
.PHONY: incus-migrate
# doc: Build the Incus migration tool
incus-migrate:
CGO_ENABLED=0 $(GO) install -v -tags netgo ./cmd/incus-migrate
@echo "Incus migration tool built successfully"
.PHONY: debug
# doc: Build Incus in debug mode
debug:
ifeq "$(TAG_SQLITE3)" ""
@echo "Missing custom libsqlite3, run \"make deps\" to setup."
exit 1
endif
CC="$(CC)" CGO_LDFLAGS_ALLOW="$(CGO_LDFLAGS_ALLOW)" $(GO) install -v -tags "$(TAG_SQLITE3) logdebug" $(DEBUG) ./...
CGO_ENABLED=0 $(GO) install -v -tags "netgo,logdebug" ./cmd/incus-migrate
CGO_ENABLED=0 $(GO) install -v -tags "agent,netgo,logdebug" ./cmd/incus-agent
@echo "Incus built successfully"
.PHONY: nocache
# doc: Build Incus ignoring the local Go cache
nocache:
ifeq "$(TAG_SQLITE3)" ""
@echo "Missing custom libsqlite3, run \"make deps\" to setup."
exit 1
endif
CC="$(CC)" CGO_LDFLAGS_ALLOW="$(CGO_LDFLAGS_ALLOW)" $(GO) install -a -v -tags "$(TAG_SQLITE3)" $(DEBUG) ./...
CGO_ENABLED=0 $(GO) install -a -v -tags netgo ./cmd/incus-migrate
CGO_ENABLED=0 $(GO) install -a -v -tags agent,netgo ./cmd/incus-agent
@echo "Incus built successfully"
.PHONY: race
# doc: Build Incus in race condition detection mode
race:
ifeq "$(TAG_SQLITE3)" ""
@echo "Missing custom libsqlite3, run \"make deps\" to setup."
exit 1
endif
CC="$(CC)" CGO_LDFLAGS_ALLOW="$(CGO_LDFLAGS_ALLOW)" $(GO) install -race -v -tags "$(TAG_SQLITE3)" $(DEBUG) ./...
CGO_ENABLED=0 $(GO) install -v -tags netgo ./cmd/incus-migrate
CGO_ENABLED=0 $(GO) install -v -tags agent,netgo ./cmd/incus-agent
@echo "Incus built successfully"
# section(Dependencies): Manage Incus dependencies
.PHONY: deps
# doc: Build Incus dependencies
deps:
@if [ ! -e "$(RAFT_PATH)" ]; then \
git clone --depth=1 "https://github.com/cowsql/raft" "$(RAFT_PATH)"; \
@ -88,18 +135,22 @@ deps:
@echo "export CGO_LDFLAGS_ALLOW=\"(-Wl,-wrap,pthread_create)|(-Wl,-z,now)\""
.PHONY: update-gomod
# doc: Update Go dependencies
update-gomod:
ifneq "$(INCUS_OFFLINE)" ""
@echo "The update-gomod target cannot be run in offline mode."
exit 1
endif
$(GO) get -t -v -u ./...
$(GO) mod tidy --go=1.24.7
$(GO) mod tidy --go=1.25.12
$(GO) get toolchain@none
@echo "Dependencies updated"
# section(Schemas): Update Incus data schemas
.PHONY: update-ovsdb
# doc: Update OVSDB schema
update-ovsdb:
go install github.com/ovn-kubernetes/libovsdb/cmd/modelgen@main
@ -122,10 +173,12 @@ update-ovsdb:
rm internal/server/network/ovn/schema/*.json
.PHONY: update-protobuf
# doc: Update Protobuf schema
update-protobuf:
protoc --go_out=. ./internal/migration/migrate.proto
.PHONY: update-schema
# doc: Update database schema
update-schema:
cd cmd/generate-database && $(GO) build -o $(GOPATH)/bin/generate-database -tags "$(TAG_SQLITE3)" $(DEBUG) && cd -
$(GO) generate ./...
@ -134,6 +187,7 @@ update-schema:
@echo "Code generation completed"
.PHONY: update-api
# doc: Update API schema
update-api:
ifeq "$(INCUS_OFFLINE)" ""
(cd / ; $(GO) install -v -x github.com/go-swagger/go-swagger/cmd/swagger@master)
@ -141,12 +195,29 @@ endif
swagger generate spec -o doc/rest-api.yaml -w ./cmd/incusd -m
.PHONY: update-metadata
# doc: Update configuration metadata
update-metadata: build
@echo "Generating golang documentation metadata"
cd cmd/generate-config && CGO_ENABLED=0 $(GO) build -o $(GOPATH)/bin/generate-config
$(GOPATH)/bin/generate-config . --json ./internal/server/metadata/configuration.json --txt ./doc/config_options.txt
# OpenFGA Syntax Transformer: https://github.com/openfga/syntax-transformer
.PHONY: update-openfga
# doc: Update OpenFGA schema
update-openfga:
ifeq ($(shell command -v fga),)
(cd / ; $(GO) install -v -x github.com/openfga/cli/cmd/fga@latest)
endif
@printf 'package auth\n\n// Code generated by Makefile; DO NOT EDIT.\n\nvar authModel = `%s`\n' '$(shell fga model transform --file=./internal/server/auth/driver_openfga_model.openfga | jq -c)' > ./internal/server/auth/driver_openfga_model.go
# section(Documentation): Build Incus documentation
.PHONY: doc
# doc: Setup the build environment and build the documentation
doc: doc-setup doc-incremental
.PHONY: doc-setup
# doc: Setup a documentation build environment
doc-setup: client
@echo "Setting up documentation build environment"
python3 -m venv doc/.sphinx/venv
@ -158,75 +229,52 @@ doc-setup: client
rm -Rf doc/html
rm -Rf doc/.sphinx/.doctrees
.PHONY: doc
doc: doc-setup doc-incremental
.PHONY: doc-incremental
# doc: Build the documentation
doc-incremental:
@echo "Build the documentation"
. $(SPHINXENV) ; sphinx-build -c doc/ -b dirhtml doc/ doc/html/ -d doc/.sphinx/.doctrees -w doc/.sphinx/warnings.txt
. $(SPHINXENV) ; NO_COLOR=1 sphinx-build -c doc/ -b dirhtml doc/ doc/html/ -d doc/.sphinx/.doctrees -w doc/.sphinx/warnings.txt
.PHONY: doc-serve
# doc: Serve the documentation on localhost:8001
doc-serve:
cd doc/html; python3 -m http.server 8001
.PHONY: doc-spellcheck
# doc: Check spelling errors on the documentation
doc-spellcheck: doc
. $(SPHINXENV) ; python3 -m pyspelling -c doc/.sphinx/spellingcheck.yaml
.PHONY: doc-spellcheck-incremental
# doc: Check spelling errors on the documentation, building the documentation only
doc-spellcheck-incremental: doc-incremental
. $(SPHINXENV) ; python3 -m pyspelling -c doc/.sphinx/spellingcheck.yaml
.PHONY: doc-linkcheck
# doc: Check broken links on the documentation
doc-linkcheck: doc-setup
. $(SPHINXENV) ; LOCAL_SPHINX_BUILD=True sphinx-build -c doc/ -b linkcheck doc/ doc/html/ -d doc/.sphinx/.doctrees
.PHONY: doc-lint
# doc: Lint the documentation
doc-lint:
doc/.sphinx/.markdownlint/doc-lint.sh
.PHONY: woke-install
# doc: Install the inclusive checker
woke-install:
@type woke >/dev/null 2>&1 || \
{ echo "Installing \"woke\" snap... \n"; sudo snap install woke; }
.PHONY: doc-woke
# doc: Check for non-inclusive phrasing
doc-woke: woke-install
woke *.md **/*.md -c https://github.com/canonical/Inclusive-naming/raw/main/config.yml
.PHONY: debug
debug:
ifeq "$(TAG_SQLITE3)" ""
@echo "Missing custom libsqlite3, run \"make deps\" to setup."
exit 1
endif
CC="$(CC)" CGO_LDFLAGS_ALLOW="$(CGO_LDFLAGS_ALLOW)" $(GO) install -v -tags "$(TAG_SQLITE3) logdebug" $(DEBUG) ./...
CGO_ENABLED=0 $(GO) install -v -tags "netgo,logdebug" ./cmd/incus-migrate
CGO_ENABLED=0 $(GO) install -v -tags "agent,netgo,logdebug" ./cmd/incus-agent
@echo "Incus built successfully"
.PHONY: nocache
nocache:
ifeq "$(TAG_SQLITE3)" ""
@echo "Missing custom libsqlite3, run \"make deps\" to setup."
exit 1
endif
CC="$(CC)" CGO_LDFLAGS_ALLOW="$(CGO_LDFLAGS_ALLOW)" $(GO) install -a -v -tags "$(TAG_SQLITE3)" $(DEBUG) ./...
CGO_ENABLED=0 $(GO) install -a -v -tags netgo ./cmd/incus-migrate
CGO_ENABLED=0 $(GO) install -a -v -tags agent,netgo ./cmd/incus-agent
@echo "Incus built successfully"
race:
ifeq "$(TAG_SQLITE3)" ""
@echo "Missing custom libsqlite3, run \"make deps\" to setup."
exit 1
endif
CC="$(CC)" CGO_LDFLAGS_ALLOW="$(CGO_LDFLAGS_ALLOW)" $(GO) install -race -v -tags "$(TAG_SQLITE3)" $(DEBUG) ./...
CGO_ENABLED=0 $(GO) install -v -tags netgo ./cmd/incus-migrate
CGO_ENABLED=0 $(GO) install -v -tags agent,netgo ./cmd/incus-agent
@echo "Incus built successfully"
# section(Tests): Run the tests
.PHONY: check
# doc: Run the test suite
check: default
ifeq "$(INCUS_OFFLINE)" ""
(cd / ; $(GO) install -v -x github.com/rogpeppe/godeps@latest)
@ -236,7 +284,94 @@ endif
CGO_LDFLAGS_ALLOW="$(CGO_LDFLAGS_ALLOW)" $(GO) test -v -tags "$(TAG_SQLITE3)" $(DEBUG) ./...
cd test && ./main.sh
.PHONY: static-analysis
# doc: Run static analysis
static-analysis:
ifeq ($(shell command -v go-licenses),)
(cd / ; $(GO) install -v -x github.com/google/go-licenses@latest)
endif
ifeq ($(shell command -v govulncheck),)
go install golang.org/x/vuln/cmd/govulncheck@latest
endif
ifeq ($(shell command -v golangci-lint),)
curl -sSfL https://golangci-lint.run/install.sh | sh -s -- -b $$($(GO) env GOPATH)/bin
endif
ifeq ($(shell command -v shellcheck),)
echo "Please install shellcheck"
exit 1
endif
ifeq ($(shell command -v flake8),)
echo "Please install flake8"
exit 1
endif
ifeq ($(shell command -v codespell),)
echo "Please install codespell"
exit 1
endif
ifeq ($(shell command -v run-parts),)
echo "Please install run-parts"
exit 1
endif
flake8 test/deps/import-busybox
shellcheck --shell sh test/*.sh test/includes/*.sh test/suites/*.sh test/backends/*.sh test/lint/*.sh
shellcheck test/extras/*.sh
run-parts $(shell run-parts -V >/dev/null 2>&1 && echo -n "--verbose --exit-on-error --regex '.sh'") test/lint
.PHONY: staticcheck
# doc: Run static checks
staticcheck:
ifeq ($(shell command -v staticcheck),)
(cd / ; $(GO) install -v -x honnef.co/go/tools/cmd/staticcheck@latest)
endif
# To get advance notice of deprecated function usage, consider running:
# sed -i 's/^go 1\.[0-9]\+$/go 1.18/' go.mod
# before 'make staticcheck'.
# Run staticcheck against all the dirs containing Go files.
staticcheck $$(git ls-files *.go | sed 's|^|./|; s|/[^/]\+\.go$$||' | sort -u)
.PHONY: unit-test
# doc: Run unit tests
unit-test:
sudo --preserve-env=CGO_CFLAGS,CGO_LDFLAGS,CGO_LDFLAGS_ALLOW,LD_LIBRARY_PATH LD_LIBRARY_PATH=${LD_LIBRARY_PATH} env "PATH=${PATH}" $(GO) test ./...
# section(Internationalization): Generate internationalization files
.PHONY: i18n
# doc: Generate internationalization files
i18n: update-pot update-po
po/%.mo: po/%.po
msgfmt --statistics -o $@ $<
po/%.po: po/$(DOMAIN).pot
msgmerge -U po/$*.po po/$(DOMAIN).pot
.PHONY: update-po
# doc: Update PO files
update-po:
set -eu; \
for lang in $(LINGUAS); do\
msgmerge --backup=none -U $$lang.po po/$(DOMAIN).pot; \
done
.PHONY: update-pot
# doc: Update POT file
update-pot:
ifeq "$(INCUS_OFFLINE)" ""
(cd / ; $(GO) install -v -x github.com/snapcore/snapd/i18n/xgettext-go@2.57.1)
endif
xgettext-go -o po/$(DOMAIN).pot --add-comments-tag=TRANSLATORS: --sort-output --package-name=$(DOMAIN) --msgid-bugs-address=lxc-devel@lists.linuxcontainers.org --keyword=i18n.G --keyword-plural=i18n.NG cmd/incus/*.go cmd/incus/color/*.go cmd/incus/usage/*.go shared/cliconfig/*.go
sed -i s/CHARSET/UTF-8/ po/$(DOMAIN).pot
.PHONY: build-mo
# doc! Build MO files
build-mo: $(MOFILES)
# section(Miscellaneous): Targets that dont fit in any category
.PHONY: dist
# doc: Prepare a release tarball
dist: doc
# Cleanup
rm -Rf $(ARCHIVE).xz
@ -265,91 +400,8 @@ dist: doc
# Cleanup
rm -Rf $(TMP)
.PHONY: i18n
i18n: update-pot update-po
po/%.mo: po/%.po
msgfmt --statistics -o $@ $<
po/%.po: po/$(DOMAIN).pot
msgmerge -U po/$*.po po/$(DOMAIN).pot
.PHONY: update-po
update-po:
set -eu; \
for lang in $(LINGUAS); do\
msgmerge --backup=none -U $$lang.po po/$(DOMAIN).pot; \
done
.PHONY: update-pot
update-pot:
ifeq "$(INCUS_OFFLINE)" ""
(cd / ; $(GO) install -v -x github.com/snapcore/snapd/i18n/xgettext-go@2.57.1)
endif
xgettext-go -o po/$(DOMAIN).pot --add-comments-tag=TRANSLATORS: --sort-output --package-name=$(DOMAIN) --msgid-bugs-address=lxc-devel@lists.linuxcontainers.org --keyword=i18n.G --keyword-plural=i18n.NG cmd/incus/*.go shared/cliconfig/*.go
.PHONY: build-mo
build-mo: $(MOFILES)
.PHONY: static-analysis
static-analysis:
ifeq ($(shell command -v go-licenses),)
(cd / ; $(GO) install -v -x github.com/google/go-licenses@latest)
endif
ifeq ($(shell command -v govulncheck),)
go install golang.org/x/vuln/cmd/govulncheck@latest
endif
ifeq ($(shell command -v golangci-lint),)
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $$($(GO) env GOPATH)/bin
endif
ifeq ($(shell command -v shellcheck),)
echo "Please install shellcheck"
exit 1
endif
ifeq ($(shell command -v flake8),)
echo "Please install flake8"
exit 1
endif
ifeq ($(shell command -v codespell),)
echo "Please install codespell"
exit 1
endif
ifeq ($(shell command -v run-parts),)
echo "Please install run-parts"
exit 1
endif
flake8 test/deps/import-busybox
shellcheck --shell sh test/*.sh test/includes/*.sh test/suites/*.sh test/backends/*.sh test/lint/*.sh
shellcheck test/extras/*.sh
run-parts $(shell run-parts -V >/dev/null 2>&1 && echo -n "--verbose --exit-on-error --regex '.sh'") test/lint
.PHONY: staticcheck
staticcheck:
ifeq ($(shell command -v staticcheck),)
(cd / ; $(GO) install -v -x honnef.co/go/tools/cmd/staticcheck@latest)
endif
# To get advance notice of deprecated function usage, consider running:
# sed -i 's/^go 1\.[0-9]\+$/go 1.18/' go.mod
# before 'make staticcheck'.
# Run staticcheck against all the dirs containing Go files.
staticcheck $$(git ls-files *.go | sed 's|^|./|; s|/[^/]\+\.go$$||' | sort -u)
.PHONY: tags
tags: */*.go
ifeq ($(shell command -v gotags),)
(cd / ; $(GO) install -v -x github.com/jstemmer/gotags@latest)
endif
find . -type f -name '*.go' | gotags -L - -f tags
# OpenFGA Syntax Transformer: https://github.com/openfga/syntax-transformer
.PHONY: update-openfga
update-openfga:
ifeq ($(shell command -v fga),)
(cd / ; $(GO) install -v -x github.com/openfga/cli/cmd/fga@latest)
endif
@printf 'package auth\n\n// Code generated by Makefile; DO NOT EDIT.\n\nvar authModel = `%s`\n' '$(shell fga model transform --file=./internal/server/auth/driver_openfga_model.openfga | jq -c)' > ./internal/server/auth/driver_openfga_model.go
.PHONY: unit-test
unit-test:
sudo --preserve-env=CGO_CFLAGS,CGO_LDFLAGS,CGO_LDFLAGS_ALLOW,LD_LIBRARY_PATH LD_LIBRARY_PATH=${LD_LIBRARY_PATH} env "PATH=${PATH}" $(GO) test ./...
.PHONY: help
# doc: Show this help
help:
@echo The following targets are supported:
@sed -En 's/^#\s*section\(([^)]*)\):\s*(.*)$$/\n\x1b[1m\1:\x1b[0m \2/p;/^\.PHONY:/{N;N;s/^\.PHONY:\s*([^[:space:]]+)\n#\s*doc(:\s*(.*)\n\1:\s*$$|!\s*(.*)\n\1:[^\n]*)/ \1!\3\4/p;s/^\.PHONY:\s*([^[:space:]]+)\s*\n#\s*doc:\s*(.*)\n\1:\s*(.+)$$/ \1!\2 (runs \3)/p}' Makefile | awk -F! '{if(NF<2)print$$1;else{s=$$1;if(length(s)%2)s=s" ";while(length(s)<28)s=s" .";print s" "$$2}}'

View File

@ -25,8 +25,6 @@ Incus is a true open source community project, free of any [CLA](https://en.wiki
remains released under the [Apache 2.0 license](https://www.apache.org/licenses/LICENSE-2.0).
It's maintained by the same team of developers that first created LXD.
LXD users wishing to migrate to Incus can easily do so through a migration tool called [`lxd-to-incus`](https://linuxcontainers.org/incus/docs/main/howto/server_migrate_lxd/).
## Get started
See [Getting started](https://linuxcontainers.org/incus/docs/main/tutorial/first_steps/) in the Incus documentation for installation instructions and first steps.
@ -40,7 +38,7 @@ See [Getting started](https://linuxcontainers.org/incus/docs/main/tutorial/first
Type | Service | Status
--- | --- | ---
Tests | GitHub | [![Build Status](https://github.com/lxc/incus/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/lxc/incus/actions?query=event%3Apush+branch%3Amain)
Go documentation | Godoc | [![GoDoc](https://godoc.org/github.com/lxc/incus/v6/client?status.svg)](https://godoc.org/github.com/lxc/incus/v6/client)
Go documentation | Godoc | [![GoDoc](https://godoc.org/github.com/lxc/incus/v7/client?status.svg)](https://godoc.org/github.com/lxc/incus/v7/client)
Static analysis | GoReport | [![Go Report Card](https://goreportcard.com/badge/github.com/lxc/incus)](https://goreportcard.com/report/github.com/lxc/incus)
Translations | Weblate | [![Translation status](https://hosted.weblate.org/widget/incus/svg-badge.svg)](https://hosted.weblate.org/projects/incus/)

View File

@ -15,10 +15,10 @@ import (
"github.com/gorilla/websocket"
"github.com/zitadel/oidc/v3/pkg/oidc"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v6/shared/simplestreams"
"github.com/lxc/incus/v6/shared/util"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/simplestreams"
"github.com/lxc/incus/v7/shared/util"
)
// ConnectionArgs represents a set of common connection properties.
@ -62,6 +62,9 @@ type ConnectionArgs struct {
// OpenID Connect tokens
OIDCTokens *oidc.Tokens[*oidc.IDTokenClaims]
// Do not block for OIDC authentication
OIDCNonInteractive bool
// Skip the event listener endpoint
SkipGetEvents bool
@ -351,6 +354,7 @@ func ConnectOCI(uri string, args *ConnectionArgs) (ImageServer, error) {
httpCertificate: args.TLSServerCert,
cache: map[string]ociInfo{},
errors: map[string]error{},
tempPath: args.TempPath,
}
@ -410,7 +414,7 @@ func httpsIncus(ctx context.Context, requestURL string, args *ConnectionArgs) (I
server.http = httpClient
if args.AuthType == api.AuthenticationMethodOIDC {
server.setupOIDCClient(args.OIDCTokens)
server.setupOIDCClient(args.OIDCTokens, args.OIDCNonInteractive)
}
// Test the connection and seed the server information

View File

@ -5,7 +5,7 @@ import (
"errors"
"sync"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// The EventListener struct is used to interact with an Incus event stream.

View File

@ -16,9 +16,9 @@ import (
"github.com/gorilla/websocket"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v6/shared/tcp"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/tcp"
)
// ProtocolIncus represents an Incus API server.
@ -327,7 +327,7 @@ func (r *ProtocolIncus) rawQuery(method string, url string, data any, ETag strin
return nil, "", err
}
defer func() { _ = resp.Body.Close() }()
defer logger.WarnOnError(resp.Body.Close, "Failed to close response body")
return incusParseResponse(resp)
}

View File

@ -5,7 +5,7 @@ import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// Certificate handling functions

View File

@ -5,7 +5,7 @@ import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// GetCluster returns information about a cluster.

View File

@ -11,7 +11,7 @@ import (
"github.com/gorilla/websocket"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// Event handling functions

View File

@ -14,12 +14,13 @@ import (
"strings"
"time"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/cancel"
"github.com/lxc/incus/v6/shared/ioprogress"
localtls "github.com/lxc/incus/v6/shared/tls"
"github.com/lxc/incus/v6/shared/units"
"github.com/lxc/incus/v6/shared/util"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/cancel"
"github.com/lxc/incus/v7/shared/ioprogress"
"github.com/lxc/incus/v7/shared/logger"
localtls "github.com/lxc/incus/v7/shared/tls"
"github.com/lxc/incus/v7/shared/units"
"github.com/lxc/incus/v7/shared/util"
)
// Image handling functions
@ -234,7 +235,7 @@ func incusDownloadImage(fingerprint string, uri string, userAgent string, do fun
return nil, err
}
defer func() { _ = response.Body.Close() }()
defer logger.WarnOnError(response.Body.Close, "Failed to close response body")
defer close(doneCh)
if response.StatusCode != http.StatusOK {
@ -300,7 +301,7 @@ func incusDownloadImage(fingerprint string, uri string, userAgent string, do fun
return nil, errors.New("Invalid multipart image")
}
size, err := io.Copy(io.MultiWriter(req.MetaFile, hash256), part)
size, err := util.SafeCopy(io.MultiWriter(req.MetaFile, hash256), part)
if err != nil {
return nil, err
}
@ -318,7 +319,7 @@ func incusDownloadImage(fingerprint string, uri string, userAgent string, do fun
return nil, errors.New("Invalid multipart image")
}
size, err = io.Copy(io.MultiWriter(req.RootfsFile, hash256), part)
size, err = util.SafeCopy(io.MultiWriter(req.RootfsFile, hash256), part)
if err != nil {
return nil, err
}
@ -346,7 +347,7 @@ func incusDownloadImage(fingerprint string, uri string, userAgent string, do fun
return nil, errors.New("No filename in Content-Disposition header")
}
size, err := io.Copy(io.MultiWriter(req.MetaFile, hash256), body)
size, err := util.SafeCopy(io.MultiWriter(req.MetaFile, hash256), body)
if err != nil {
return nil, err
}
@ -491,7 +492,7 @@ func (r *ProtocolIncus) CreateImage(image api.ImagesPost, args *ImageCreateArgs)
return
}
_, ioErr = io.Copy(fw, args.MetaFile)
_, ioErr = util.SafeCopy(fw, args.MetaFile)
if ioErr != nil {
return
}
@ -507,7 +508,7 @@ func (r *ProtocolIncus) CreateImage(image api.ImagesPost, args *ImageCreateArgs)
return
}
_, ioErr = io.Copy(fw, args.RootfsFile)
_, ioErr = util.SafeCopy(fw, args.RootfsFile)
if ioErr != nil {
return
}
@ -607,7 +608,7 @@ func (r *ProtocolIncus) CreateImage(image api.ImagesPost, args *ImageCreateArgs)
return nil, err
}
defer func() { _ = resp.Body.Close() }()
defer logger.WarnOnError(resp.Body.Close, "Failed to close response body")
// Handle errors
response, _, err := incusParseResponse(resp)
@ -837,14 +838,14 @@ func (r *ProtocolIncus) CopyImage(source ImageServer, image api.Image, args *Ima
return nil, err
}
defer func() { _ = os.Remove(metaFile.Name()) }()
defer logger.WarnOnError(func() error { return os.Remove(metaFile.Name()) }, "Failed to remove temporary file")
rootfsFile, err := os.CreateTemp(r.tempPath, "incus_image_")
if err != nil {
return nil, err
}
defer func() { _ = os.Remove(rootfsFile.Name()) }()
defer logger.WarnOnError(func() error { return os.Remove(rootfsFile.Name()) }, "Failed to remove temporary file")
// Import image
req := ImageFileRequest{

View File

@ -2,6 +2,7 @@ package incus
import (
"bufio"
"bytes"
"context"
"encoding/json"
"errors"
@ -12,18 +13,21 @@ import (
"net/url"
"path/filepath"
"slices"
"strconv"
"strings"
"github.com/gorilla/websocket"
"github.com/pkg/sftp"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/cancel"
"github.com/lxc/incus/v6/shared/ioprogress"
"github.com/lxc/incus/v6/shared/tcp"
localtls "github.com/lxc/incus/v6/shared/tls"
"github.com/lxc/incus/v6/shared/units"
"github.com/lxc/incus/v6/shared/ws"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/cancel"
"github.com/lxc/incus/v7/shared/ioprogress"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/tcp"
localtls "github.com/lxc/incus/v7/shared/tls"
"github.com/lxc/incus/v7/shared/units"
"github.com/lxc/incus/v7/shared/util"
"github.com/lxc/incus/v7/shared/ws"
)
// Instance handling functions.
@ -581,7 +585,7 @@ func (r *ProtocolIncus) CreateInstanceFromBackup(args InstanceBackupArgs) (Opera
return nil, err
}
defer func() { _ = resp.Body.Close() }()
defer logger.WarnOnError(resp.Body.Close, "Failed to close response body")
// Handle errors
response, _, err := incusParseResponse(resp)
@ -876,6 +880,12 @@ func (r *ProtocolIncus) CopyInstance(source InstanceServer, instance api.Instanc
AllowInconsistent: req.Source.AllowInconsistent,
}
// When dependent volumes are supported, Devices are sent to the
// migration source to allow overriding the per-device pools.
if source.HasExtension("dependent") {
sourceReq.Devices = req.Devices
}
// Push mode migration
if args != nil && args.Mode == "push" {
// Get target server connection information
@ -997,6 +1007,13 @@ func (r *ProtocolIncus) UpdateInstance(name string, instance api.InstancePut, ET
return nil, err
}
if instance.DiskOnly {
err = r.CheckExtension("instance_snapshot_disk_only_restore")
if err != nil {
return nil, errors.New("The server is missing the required \"instance_snapshot_disk_only_restore\" API extension")
}
}
// Send the request
op, _, err := r.queryOperation("PUT", fmt.Sprintf("%s/%s", path, url.PathEscape(name)), instance, ETag)
if err != nil {
@ -1246,7 +1263,7 @@ func (r *ProtocolIncus) ExecInstance(instanceName string, exec api.InstanceExecP
if outputFiles["1"] != "" {
reader, _ := r.getInstanceExecOutputLogFile(instanceName, filepath.Base(outputFiles["1"]))
if args.Stdout != nil {
_, errCopy := io.Copy(args.Stdout, reader)
_, errCopy := util.SafeCopy(args.Stdout, reader)
// Regardless of errCopy value, we want to delete the file after a copy operation
errDelete := r.deleteInstanceExecOutputLogFile(instanceName, filepath.Base(outputFiles["1"]))
if errDelete != nil {
@ -1267,7 +1284,7 @@ func (r *ProtocolIncus) ExecInstance(instanceName string, exec api.InstanceExecP
if outputFiles["2"] != "" {
reader, _ := r.getInstanceExecOutputLogFile(instanceName, filepath.Base(outputFiles["2"]))
if args.Stderr != nil {
_, errCopy := io.Copy(args.Stderr, reader)
_, errCopy := util.SafeCopy(args.Stderr, reader)
errDelete := r.deleteInstanceExecOutputLogFile(instanceName, filepath.Base(outputFiles["1"]))
if errDelete != nil {
return nil, errDelete
@ -1442,7 +1459,8 @@ func (r *ProtocolIncus) GetInstanceFile(instanceName string, filePath string) (i
if r.IsAgent() {
requestURL, err = urlEncode(
fmt.Sprintf("%s/1.0/files", r.httpBaseURL.String()),
map[string]string{"path": filePath})
map[string]string{"path": filePath},
)
} else {
var path string
@ -1454,7 +1472,8 @@ func (r *ProtocolIncus) GetInstanceFile(instanceName string, filePath string) (i
// Prepare the HTTP request
requestURL, err = urlEncode(
fmt.Sprintf("%s/1.0%s/%s/files", r.httpBaseURL.String(), path, url.PathEscape(instanceName)),
map[string]string{"path": filePath})
map[string]string{"path": filePath},
)
}
if err != nil {
@ -1642,8 +1661,8 @@ func (r *ProtocolIncus) DeleteInstanceFile(instanceName string, filePath string)
return nil
}
// rawSFTPConn connects to the apiURL, upgrades to an SFTP raw connection and returns it.
func (r *ProtocolIncus) rawSFTPConn(apiURL *url.URL) (net.Conn, error) {
// rawConn connects to the apiURL, upgrades to the requested protocol and returns it.
func (r *ProtocolIncus) rawConn(method string, apiURL *url.URL, protocol string, data any) (net.Conn, error) {
// Get the HTTP transport.
httpTransport, err := r.getUnderlyingHTTPTransport()
if err != nil {
@ -1651,7 +1670,7 @@ func (r *ProtocolIncus) rawSFTPConn(apiURL *url.URL) (net.Conn, error) {
}
req := &http.Request{
Method: http.MethodGet,
Method: method,
URL: apiURL,
Proto: "HTTP/1.1",
ProtoMajor: 1,
@ -1660,18 +1679,36 @@ func (r *ProtocolIncus) rawSFTPConn(apiURL *url.URL) (net.Conn, error) {
Host: apiURL.Host,
}
req.Header["Upgrade"] = []string{"sftp"}
req.Header["Upgrade"] = []string{protocol}
req.Header["Connection"] = []string{"Upgrade"}
// Add the request body.
if data != nil {
body, err := json.Marshal(data)
if err != nil {
return nil, err
}
req.Body = io.NopCloser(bytes.NewReader(body))
req.ContentLength = int64(len(body))
req.Header.Set("Content-Type", "application/json")
}
r.addClientHeaders(req)
// Add the default port if missing as the raw dialers don't apply it.
addr := apiURL.Host
if apiURL.Port() == "" {
addr = net.JoinHostPort(apiURL.Hostname(), "443")
}
// Establish the connection.
var conn net.Conn
if httpTransport.TLSClientConfig != nil {
conn, err = httpTransport.DialTLSContext(context.Background(), "tcp", apiURL.Host)
conn, err = httpTransport.DialTLSContext(context.Background(), "tcp", addr)
} else {
conn, err = httpTransport.DialContext(context.Background(), "tcp", apiURL.Host)
conn, err = httpTransport.DialContext(context.Background(), "tcp", addr)
}
if err != nil {
@ -1703,11 +1740,47 @@ func (r *ProtocolIncus) rawSFTPConn(apiURL *url.URL) (net.Conn, error) {
}
}
if resp.Header.Get("Upgrade") != "sftp" {
if resp.Header.Get("Upgrade") != protocol {
return nil, errors.New("Missing or unexpected Upgrade header in response")
}
return conn, err
return conn, nil
}
// GetInstanceNBDConn returns a connection to the instance's NBD endpoint exposing all of its disks.
func (r *ProtocolIncus) GetInstanceNBDConn(instanceName string, args InstanceNBDArgs) (net.Conn, error) {
if !r.HasExtension("instance_nbd") {
return nil, errors.New(`The server is missing the required "instance_nbd" API extension`)
}
apiURL := api.NewURL()
apiURL.URL = r.httpBaseURL // Preload the URL with the client base URL.
apiURL.Path("1.0", "instances", instanceName, "nbd")
values := apiURL.Query()
if args.Reuse {
values.Set("reuse", "1")
}
apiURL.RawQuery = values.Encode()
r.setURLQueryAttributes(&apiURL.URL)
return r.rawConn(http.MethodGet, &apiURL.URL, "nbd", nil)
}
// GetInstancePortForwardConn returns a connection to the given address and TCP port inside of the instance.
func (r *ProtocolIncus) GetInstancePortForwardConn(instanceName string, forward api.InstancePortForwardPost) (net.Conn, error) {
if !r.HasExtension("instance_port_forward") {
return nil, errors.New(`The server is missing the required "instance_port_forward" API extension`)
}
apiURL := api.NewURL()
apiURL.URL = r.httpBaseURL // Preload the URL with the client base URL.
apiURL.Path("1.0", "instances", instanceName, "port-forward")
r.setURLQueryAttributes(&apiURL.URL)
return r.rawConn(http.MethodPost, &apiURL.URL, "tcp", forward)
}
// GetInstanceFileSFTPConn returns a connection to the instance's SFTP endpoint.
@ -1717,7 +1790,7 @@ func (r *ProtocolIncus) GetInstanceFileSFTPConn(instanceName string) (net.Conn,
apiURL.Path("1.0", "instances", instanceName, "sftp")
r.setURLQueryAttributes(&apiURL.URL)
return r.rawSFTPConn(&apiURL.URL)
return r.rawConn(http.MethodGet, &apiURL.URL, "sftp", nil)
}
// GetInstanceFileSFTP returns an SFTP connection to the instance.
@ -2963,7 +3036,7 @@ func (r *ProtocolIncus) GetInstanceBackupFile(instanceName string, name string,
return nil, err
}
defer func() { _ = response.Body.Close() }()
defer logger.WarnOnError(response.Body.Close, "Failed to close response body")
defer close(doneCh)
if response.StatusCode != http.StatusOK {
@ -2987,7 +3060,7 @@ func (r *ProtocolIncus) GetInstanceBackupFile(instanceName string, name string,
}
}
size, err := io.Copy(req.BackupFile, body)
size, err := util.SafeCopy(req.BackupFile, body)
if err != nil {
return nil, err
}
@ -2998,6 +3071,75 @@ func (r *ProtocolIncus) GetInstanceBackupFile(instanceName string, name string,
return &resp, nil
}
// CreateInstanceBackupStream requests that Incus creates and returns new direct backup for the
// instance.
func (r *ProtocolIncus) CreateInstanceBackupStream(instanceName string, backup api.InstanceBackupsPost, req *BackupFileRequest) error {
if !r.HasExtension("direct_backup") {
return errors.New("The server is missing the required \"direct_backup\" API extension")
}
path, _, err := r.instanceTypeToPath(api.InstanceTypeAny)
if err != nil {
return err
}
// Build the URL
uri := fmt.Sprintf("%s/1.0%s/%s/backups", r.httpBaseURL.String(), path, url.PathEscape(instanceName))
if r.project != "" {
uri += fmt.Sprintf("?project=%s", url.QueryEscape(r.project))
}
// Encode the backup data
buf := bytes.Buffer{}
err = json.NewEncoder(&buf).Encode(backup)
if err != nil {
return err
}
// Prepare the download request
request, err := http.NewRequest("POST", uri, bytes.NewReader(buf.Bytes()))
if err != nil {
return err
}
request.Header.Set("Accept", "application/octet-stream")
if r.httpUserAgent != "" {
request.Header.Set("User-Agent", r.httpUserAgent)
}
// Start the request
response, doneCh, err := cancel.CancelableDownload(req.Canceler, r.DoHTTP, request)
if err != nil {
return err
}
defer logger.WarnOnError(response.Body.Close, "Failed to close response body")
defer close(doneCh)
if response.StatusCode != http.StatusOK {
_, _, err = incusParseResponse(response)
if err != nil {
return err
}
}
// Handle the data
body := response.Body
if req.ProgressHandler != nil {
body = &ioprogress.ProgressReader{
ReadCloser: response.Body,
Tracker: &ioprogress.ProgressTracker{
Handler: func(received int64, speed int64) {
req.ProgressHandler(ioprogress.ProgressData{Text: fmt.Sprintf("%s (%s/s)", units.GetByteSizeString(received, 2), units.GetByteSizeString(speed, 2))})
},
},
}
}
_, err = util.SafeCopy(req.BackupFile, body)
return err
}
func (r *ProtocolIncus) proxyMigration(targetOp *operation, targetSecrets map[string]string, source InstanceServer, sourceOp *operation, sourceSecrets map[string]string) error {
// Quick checks.
for n := range targetSecrets {
@ -3121,3 +3263,252 @@ func (r *ProtocolIncus) GetInstanceDebugMemory(name string, format string) (io.R
return resp.Body, nil
}
// CreateInstanceBitmap requests that Incus creates a new bitmap for the instance.
func (r *ProtocolIncus) CreateInstanceBitmap(name string, bitmap api.StorageVolumeBitmapsPost) error {
if !r.HasExtension("storage_volume_nbd") {
return errors.New("The server is missing the required \"storage_volume_nbd\" API extension")
}
path, _, err := r.instanceTypeToPath(api.InstanceTypeAny)
if err != nil {
return err
}
// Send the request
_, _, err = r.query("POST", fmt.Sprintf("%s/%s/bitmaps", path, url.PathEscape(name)), bitmap, "")
if err != nil {
return err
}
return nil
}
// RepairInstance requests that Incus runs a low-level repair action on the instance.
func (r *ProtocolIncus) RepairInstance(name string, repair api.InstanceDebugRepairPost) error {
if !r.HasExtension("instances_debug_repair") {
return errors.New("The server is missing the required \"instances_debug_repair\" API extension")
}
path, _, err := r.instanceTypeToPath(api.InstanceTypeAny)
if err != nil {
return err
}
// Send the request
_, _, err = r.query("POST", fmt.Sprintf("%s/%s/debug/repair", path, url.PathEscape(name)), repair, "")
if err != nil {
return err
}
return nil
}
func (r *ProtocolIncus) getInstanceNVRAM(name string, guid string, varName string, accept string) (*http.Response, error) {
path, _, err := r.instanceTypeToPath(api.InstanceTypeVM)
if err != nil {
return nil, err
}
// Prepare the HTTP request
requestURL := fmt.Sprintf("%s/1.0%s/%s/nvram/%s/%s", r.httpBaseURL.String(), path, url.PathEscape(name), url.PathEscape(guid), url.PathEscape(varName))
requestURL, err = r.setQueryAttributes(requestURL)
if err != nil {
return nil, err
}
req, err := http.NewRequest("GET", requestURL, nil)
if err != nil {
return nil, err
}
req.Header.Set("Accept", accept)
// Send the request
resp, err := r.DoHTTP(req)
if err != nil {
return nil, err
}
// Check the return value for a cleaner error
if resp.StatusCode != http.StatusOK {
_, _, err := incusParseResponse(resp)
if err != nil {
return nil, err
}
}
return resp, nil
}
// GetInstanceNVRAM gets OVMF variables from an instance.
func (r *ProtocolIncus) GetInstanceNVRAM(name string) (map[string]map[string]*api.InstanceNVRAMVariable, error) {
if !r.HasExtension("instance_nvram") {
return nil, errors.New(`The server is missing the required "instance_nvram" API extension`)
}
vars := map[string]map[string]*api.InstanceNVRAMVariable{}
path, _, err := r.instanceTypeToPath(api.InstanceTypeVM)
if err != nil {
return nil, err
}
// Fetch the raw value.
_, err = r.queryStruct("GET", fmt.Sprintf("%s/%s/nvram?recursion=2", path, url.PathEscape(name)), nil, "", &vars)
if err != nil {
return nil, err
}
return vars, err
}
// GetInstanceNVRAMGUID gets namespaced OVMF variables from an instance.
func (r *ProtocolIncus) GetInstanceNVRAMGUID(name string, guid string) (map[string]*api.InstanceNVRAMVariable, error) {
if !r.HasExtension("instance_nvram") {
return nil, errors.New(`The server is missing the required "instance_nvram" API extension`)
}
vars := map[string]*api.InstanceNVRAMVariable{}
path, _, err := r.instanceTypeToPath(api.InstanceTypeVM)
if err != nil {
return nil, err
}
// Fetch the raw value.
_, err = r.queryStruct("GET", fmt.Sprintf("%s/%s/nvram/%s?recursion=1", path, url.PathEscape(name), url.PathEscape(guid)), nil, "", &vars)
if err != nil {
return nil, err
}
return vars, err
}
// GetRawInstanceNVRAMGUIDVar gets raw OVMF variables from an instance.
func (r *ProtocolIncus) GetRawInstanceNVRAMGUIDVar(name string, guid string, varName string) ([]byte, uint32, error) {
if !r.HasExtension("instance_nvram") {
return nil, 0, errors.New(`The server is missing the required "instance_nvram" API extension`)
}
resp, err := r.getInstanceNVRAM(name, guid, varName, "application/octet-stream")
if err != nil {
return nil, 0, err
}
attributes, err := strconv.ParseUint(resp.Header.Get("X-Incus-attributes"), 10, 32)
if err != nil {
return nil, 0, err
}
data, err := io.ReadAll(resp.Body)
if err != nil {
return nil, 0, err
}
return data, uint32(attributes), err
}
// GetInstanceNVRAMGUIDVar gets interpreted OVMF variables from an instance.
func (r *ProtocolIncus) GetInstanceNVRAMGUIDVar(name string, guid string, varName string) (*api.InstanceNVRAMVariable, string, error) {
if !r.HasExtension("instance_nvram") {
return nil, "", errors.New(`The server is missing the required "instance_nvram" API extension`)
}
var v *api.InstanceNVRAMVariable
path, _, err := r.instanceTypeToPath(api.InstanceTypeVM)
if err != nil {
return nil, "", err
}
// Fetch the raw value.
etag, err := r.queryStruct("GET", fmt.Sprintf("%s/%s/nvram/%s/%s?recursion=1", path, url.PathEscape(name), url.PathEscape(guid), url.PathEscape(varName)), nil, "", &v)
if err != nil {
return nil, "", err
}
return v, etag, err
}
// DeleteInstanceNVRAMGUIDVar sets interpreted OVMF variables on an instance.
func (r *ProtocolIncus) DeleteInstanceNVRAMGUIDVar(name string, guid string, varName string) error {
if !r.HasExtension("instance_nvram") {
return errors.New(`The server is missing the required "instance_nvram" API extension`)
}
path, _, err := r.instanceTypeToPath(api.InstanceTypeVM)
if err != nil {
return err
}
// Send the request
_, _, err = r.query("DELETE", fmt.Sprintf("%s/%s/nvram/%s/%s", path, url.PathEscape(name), url.PathEscape(guid), url.PathEscape(varName)), nil, "")
if err != nil {
return err
}
return nil
}
// UpdateRawInstanceNVRAMGUIDVar sets raw OVMF variables on an instance.
func (r *ProtocolIncus) UpdateRawInstanceNVRAMGUIDVar(name string, guid string, varName string, data []byte, attributes uint32, timestamp int64) error {
if !r.HasExtension("instance_nvram") {
return errors.New(`The server is missing the required "instance_nvram" API extension`)
}
path, _, err := r.instanceTypeToPath(api.InstanceTypeVM)
if err != nil {
return err
}
// Prepare the HTTP request
requestURL := fmt.Sprintf("%s/1.0%s/%s/nvram/%s/%s", r.httpBaseURL.String(), path, url.PathEscape(name), url.PathEscape(guid), url.PathEscape(varName))
requestURL, err = r.setQueryAttributes(requestURL)
if err != nil {
return err
}
req, err := http.NewRequest("PUT", requestURL, bytes.NewReader(data))
if err != nil {
return err
}
req.Header.Set("Content-Type", "application/octet-stream")
req.Header.Set("X-Incus-attributes", strconv.FormatUint(uint64(attributes), 10))
if timestamp != 0 {
req.Header.Set("X-Incus-timestamp", strconv.FormatInt(timestamp, 10))
}
// Send the request
resp, err := r.DoHTTP(req)
if err != nil {
return err
}
// Handle errors
_, _, err = incusParseResponse(resp)
if err != nil {
return err
}
return nil
}
// UpdateInstanceNVRAMGUIDVar sets interpreted OVMF variables on an instance.
func (r *ProtocolIncus) UpdateInstanceNVRAMGUIDVar(name string, guid string, varName string, data api.InstanceNVRAMVariablePut, ETag string) error {
if !r.HasExtension("instance_nvram") {
return errors.New(`The server is missing the required "instance_nvram" API extension`)
}
path, _, err := r.instanceTypeToPath(api.InstanceTypeVM)
if err != nil {
return err
}
// Send the request
_, _, err = r.query("PUT", fmt.Sprintf("%s/%s/nvram/%s/%s", path, url.PathEscape(name), url.PathEscape(guid), url.PathEscape(varName)), data, ETag)
if err != nil {
return err
}
return nil
}

View File

@ -3,7 +3,7 @@ package incus
import (
"errors"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// GetMetadataConfiguration returns a configuration metadata struct.

View File

@ -7,7 +7,7 @@ import (
"net/http"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// GetNetworkACLNames returns a list of network ACL names.

View File

@ -5,7 +5,7 @@ import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// GetNetworkAddressSetNames returns a list of network address set names.

View File

@ -1,7 +1,7 @@
package incus
import (
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// GetNetworkAllocations returns a list of Network allocations for a specific project.

View File

@ -5,7 +5,7 @@ import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// GetNetworkForwardAddresses returns a list of network forward listen addresses.

View File

@ -5,7 +5,7 @@ import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// GetNetworkIntegrationNames returns a list of network integration names.

View File

@ -1,7 +1,7 @@
package incus
import (
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// GetNetworkLoadBalancerAddresses returns a list of network load balancer listen addresses.

View File

@ -5,7 +5,7 @@ import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// GetNetworkPeerNames returns a list of network peer names.

View File

@ -5,7 +5,7 @@ import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// GetNetworkZoneNames returns a list of network zone names.

View File

@ -5,7 +5,7 @@ import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// GetNetworkNames returns a list of network names.

View File

@ -20,7 +20,7 @@ import (
"github.com/zitadel/oidc/v3/pkg/oidc"
"golang.org/x/oauth2"
"github.com/lxc/incus/v6/shared/util"
"github.com/lxc/incus/v7/shared/util"
)
// ErrOIDCExpired is returned when the token is expired and we can't retry the request ourselves.
@ -28,12 +28,13 @@ var ErrOIDCExpired = errors.New("OIDC token expired, please re-try the request")
// setupOIDCClient initializes the OIDC (OpenID Connect) client with given tokens if it hasn't been set up already.
// It also assigns the protocol's http client to the oidcClient's httpClient.
func (r *ProtocolIncus) setupOIDCClient(token *oidc.Tokens[*oidc.IDTokenClaims]) {
func (r *ProtocolIncus) setupOIDCClient(token *oidc.Tokens[*oidc.IDTokenClaims], skipAuthenticate bool) {
if r.oidcClient != nil {
return
}
r.oidcClient = newOIDCClient(token)
r.oidcClient.skipAuthenticate = skipAuthenticate
r.oidcClient.httpClient = r.http
}
@ -82,9 +83,10 @@ func (o *oidcTransport) RoundTrip(r *http.Request) (*http.Response, error) {
var errRefreshAccessToken = errors.New("Failed refreshing access token")
type oidcClient struct {
httpClient *http.Client
oidcTransport *oidcTransport
tokens *oidc.Tokens[*oidc.IDTokenClaims]
httpClient *http.Client
oidcTransport *oidcTransport
tokens *oidc.Tokens[*oidc.IDTokenClaims]
skipAuthenticate bool
}
// oidcClient is a structure encapsulating an HTTP client, OIDC transport, and a token for OpenID Connect (OIDC) operations.
@ -141,6 +143,10 @@ func (o *oidcClient) do(req *http.Request) (*http.Response, error) {
// Refresh the token.
err = o.refresh(issuer, clientID, scopes)
if err != nil {
if o.skipAuthenticate {
return nil, fmt.Errorf("Authentication not found or expired: %w", err)
}
err = o.authenticate(issuer, clientID, audience, scopes)
if err != nil {
return nil, err
@ -199,6 +205,10 @@ func (o *oidcClient) dial(dialer websocket.Dialer, uri string, req *http.Request
err = o.refresh(issuer, clientID, scopes)
if err != nil {
if o.skipAuthenticate {
return nil, resp, fmt.Errorf("Authentication not found or expired: %w", err)
}
err = o.authenticate(issuer, clientID, audience, scopes)
if err != nil {
return nil, resp, err

View File

@ -6,7 +6,7 @@ import (
"github.com/gorilla/websocket"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// GetOperationUUIDs returns a list of operation uuids.

View File

@ -5,7 +5,7 @@ import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// Profile handling functions

View File

@ -5,7 +5,7 @@ import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// Project handling functions

View File

@ -9,9 +9,10 @@ import (
"github.com/gorilla/websocket"
"github.com/lxc/incus/v6/shared/api"
localtls "github.com/lxc/incus/v6/shared/tls"
"github.com/lxc/incus/v6/shared/util"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/logger"
localtls "github.com/lxc/incus/v7/shared/tls"
"github.com/lxc/incus/v7/shared/util"
)
// Server handling functions
@ -177,7 +178,7 @@ func (r *ProtocolIncus) GetMetrics() (string, error) {
return "", err
}
defer func() { _ = resp.Body.Close() }()
defer logger.WarnOnError(resp.Body.Close, "Failed to close response body")
if resp.StatusCode != http.StatusOK {
return "", fmt.Errorf("Bad HTTP status: %d", resp.StatusCode)
@ -195,14 +196,14 @@ func (r *ProtocolIncus) GetMetrics() (string, error) {
// ApplyServerPreseed configures a target Incus server with the provided server and cluster configuration.
func (r *ProtocolIncus) ApplyServerPreseed(config api.InitPreseed) error {
// Apply server configuration.
if len(config.Server.Config) > 0 {
if len(config.Config) > 0 {
// Get current config.
server, etag, err := r.GetServer()
if err != nil {
return fmt.Errorf("Failed to retrieve current server configuration: %w", err)
}
for k, v := range config.Server.Config {
for k, v := range config.Config {
server.Config[k] = fmt.Sprintf("%v", v)
}
@ -214,7 +215,7 @@ func (r *ProtocolIncus) ApplyServerPreseed(config api.InitPreseed) error {
}
// Apply storage configuration.
if len(config.Server.StoragePools) > 0 {
if len(config.StoragePools) > 0 {
// Get the list of storagePools.
storagePoolNames, err := r.GetStoragePoolNames()
if err != nil {
@ -264,7 +265,7 @@ func (r *ProtocolIncus) ApplyServerPreseed(config api.InitPreseed) error {
return nil
}
for _, storagePool := range config.Server.StoragePools {
for _, storagePool := range config.StoragePools {
// New storagePool.
if !slices.Contains(storagePoolNames, storagePool.Name) {
err := createStoragePool(storagePool)
@ -315,25 +316,25 @@ func (r *ProtocolIncus) ApplyServerPreseed(config api.InitPreseed) error {
// Apply networks in the default project before other projects config applied (so that if the projects
// depend on a network in the default project they can have their config applied successfully).
for i := range config.Server.Networks {
for i := range config.Networks {
// Populate default project if not specified for backwards compatibility with earlier
// preseed dump files.
if config.Server.Networks[i].Project == "" {
config.Server.Networks[i].Project = api.ProjectDefaultName
if config.Networks[i].Project == "" {
config.Networks[i].Project = api.ProjectDefaultName
}
if config.Server.Networks[i].Project != api.ProjectDefaultName {
if config.Networks[i].Project != api.ProjectDefaultName {
continue
}
err := applyNetwork(config.Server.Networks[i])
err := applyNetwork(config.Networks[i])
if err != nil {
return err
}
}
// Apply project configuration.
if len(config.Server.Projects) > 0 {
if len(config.Projects) > 0 {
// Get the list of projects.
projectNames, err := r.GetProjectNames()
if err != nil {
@ -378,7 +379,7 @@ func (r *ProtocolIncus) ApplyServerPreseed(config api.InitPreseed) error {
return nil
}
for _, project := range config.Server.Projects {
for _, project := range config.Projects {
// New project.
if !slices.Contains(projectNames, project.Name) {
err := createProject(project)
@ -398,12 +399,12 @@ func (r *ProtocolIncus) ApplyServerPreseed(config api.InitPreseed) error {
}
// Apply networks in non-default projects after project config applied (so that their projects exist).
for i := range config.Server.Networks {
if config.Server.Networks[i].Project == api.ProjectDefaultName {
for i := range config.Networks {
if config.Networks[i].Project == api.ProjectDefaultName {
continue
}
err := applyNetwork(config.Server.Networks[i])
err := applyNetwork(config.Networks[i])
if err != nil {
return err
}
@ -454,25 +455,25 @@ func (r *ProtocolIncus) ApplyServerPreseed(config api.InitPreseed) error {
}
// Apply storage volumes in the default project before other projects config.
for i := range config.Server.StorageVolumes {
for i := range config.StorageVolumes {
// Populate default project if not specified.
if config.Server.StorageVolumes[i].Project == "" {
config.Server.StorageVolumes[i].Project = api.ProjectDefaultName
if config.StorageVolumes[i].Project == "" {
config.StorageVolumes[i].Project = api.ProjectDefaultName
}
// Populate default type if not specified.
if config.Server.StorageVolumes[i].Type == "" {
config.Server.StorageVolumes[i].Type = "custom"
if config.StorageVolumes[i].Type == "" {
config.StorageVolumes[i].Type = "custom"
}
err := applyStorageVolume(config.Server.StorageVolumes[i])
err := applyStorageVolume(config.StorageVolumes[i])
if err != nil {
return err
}
}
// Apply profile configuration.
if len(config.Server.Profiles) > 0 {
if len(config.Profiles) > 0 {
// Apply profile configuration.
applyProfile := func(profile api.InitProfileProjectPost) error {
// Get the current profile.
@ -528,7 +529,7 @@ func (r *ProtocolIncus) ApplyServerPreseed(config api.InitPreseed) error {
return nil
}
for _, profile := range config.Server.Profiles {
for _, profile := range config.Profiles {
if profile.Project == "" {
profile.Project = api.ProjectDefaultName
}
@ -541,8 +542,8 @@ func (r *ProtocolIncus) ApplyServerPreseed(config api.InitPreseed) error {
}
// Apply certificate configuration.
if len(config.Server.Certificates) > 0 {
for _, certificate := range config.Server.Certificates {
if len(config.Certificates) > 0 {
for _, certificate := range config.Certificates {
err := r.CreateCertificate(certificate)
if err != nil {
return fmt.Errorf("Failed to create certificate %q: %w", certificate.Name, err)
@ -574,8 +575,8 @@ func (r *ProtocolIncus) ApplyServerPreseed(config api.InitPreseed) error {
}
// Apply cluster group configurations.
if len(config.Server.ClusterGroups) > 0 {
for _, clusterGroup := range config.Server.ClusterGroups {
if len(config.ClusterGroups) > 0 {
for _, clusterGroup := range config.ClusterGroups {
// Check if it already exists.
existing, etag, err := r.GetClusterGroup(clusterGroup.Name)
if err == nil && existing != nil {

View File

@ -1,16 +1,19 @@
package incus
import (
"bytes"
"encoding/json"
"errors"
"fmt"
"io"
"net/http"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/cancel"
"github.com/lxc/incus/v6/shared/ioprogress"
"github.com/lxc/incus/v6/shared/units"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/cancel"
"github.com/lxc/incus/v7/shared/ioprogress"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/units"
"github.com/lxc/incus/v7/shared/util"
)
// GetStoragePoolBucketNames returns a list of storage bucket names.
@ -470,7 +473,7 @@ func (r *ProtocolIncus) GetStoragePoolBucketBackupFile(pool string, bucketName s
return nil, err
}
defer func() { _ = response.Body.Close() }()
defer logger.WarnOnError(response.Body.Close, "Failed to close response body")
defer close(doneCh)
if response.StatusCode != http.StatusOK {
@ -494,7 +497,7 @@ func (r *ProtocolIncus) GetStoragePoolBucketBackupFile(pool string, bucketName s
}
}
size, err := io.Copy(req.BackupFile, body)
size, err := util.SafeCopy(req.BackupFile, body)
if err != nil {
return nil, err
}
@ -505,6 +508,70 @@ func (r *ProtocolIncus) GetStoragePoolBucketBackupFile(pool string, bucketName s
return &resp, nil
}
// CreateStoragePoolBucketBackupStream requests that Incus creates and returns new direct backup
// for the storage bucket.
func (r *ProtocolIncus) CreateStoragePoolBucketBackupStream(poolName string, bucketName string, backup api.StorageBucketBackupsPost, req *BackupFileRequest) error {
if !r.HasExtension("direct_backup") {
return errors.New("The server is missing the required \"direct_backup\" API extension")
}
// Build the URL
uri := fmt.Sprintf("%s/1.0/storage-pools/%s/buckets/%s/backups", r.httpBaseURL.String(), url.PathEscape(poolName), url.PathEscape(bucketName))
if r.project != "" {
uri += fmt.Sprintf("?project=%s", url.QueryEscape(r.project))
}
// Encode the backup data
buf := bytes.Buffer{}
err := json.NewEncoder(&buf).Encode(backup)
if err != nil {
return err
}
// Prepare the download request
request, err := http.NewRequest("POST", uri, bytes.NewReader(buf.Bytes()))
if err != nil {
return err
}
request.Header.Set("Accept", "application/octet-stream")
if r.httpUserAgent != "" {
request.Header.Set("User-Agent", r.httpUserAgent)
}
// Start the request
response, doneCh, err := cancel.CancelableDownload(req.Canceler, r.DoHTTP, request)
if err != nil {
return err
}
defer logger.WarnOnError(response.Body.Close, "Failed to close response body")
defer close(doneCh)
if response.StatusCode != http.StatusOK {
_, _, err = incusParseResponse(response)
if err != nil {
return err
}
}
// Handle the data
body := response.Body
if req.ProgressHandler != nil {
body = &ioprogress.ProgressReader{
ReadCloser: response.Body,
Tracker: &ioprogress.ProgressTracker{
Handler: func(received int64, speed int64) {
req.ProgressHandler(ioprogress.ProgressData{Text: fmt.Sprintf("%s (%s/s)", units.GetByteSizeString(received, 2), units.GetByteSizeString(speed, 2))})
},
},
}
}
_, err = util.SafeCopy(req.BackupFile, body)
return err
}
// CreateStoragePoolBucketFromBackup creates a new storage bucket from a backup.
func (r *ProtocolIncus) CreateStoragePoolBucketFromBackup(pool string, args StoragePoolBucketBackupArgs) (Operation, error) {
if !r.HasExtension("storage_bucket_backup") {
@ -536,7 +603,7 @@ func (r *ProtocolIncus) CreateStoragePoolBucketFromBackup(pool string, args Stor
return nil, err
}
defer func() { _ = resp.Body.Close() }()
defer logger.WarnOnError(resp.Body.Close, "Failed to close response body")
// Handle errors.
response, _, err := incusParseResponse(resp)

View File

@ -5,7 +5,7 @@ import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// Storage pool handling functions

View File

@ -1,6 +1,7 @@
package incus
import (
"bytes"
"encoding/json"
"errors"
"fmt"
@ -12,11 +13,13 @@ import (
"github.com/pkg/sftp"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/cancel"
"github.com/lxc/incus/v6/shared/ioprogress"
localtls "github.com/lxc/incus/v6/shared/tls"
"github.com/lxc/incus/v6/shared/units"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/cancel"
"github.com/lxc/incus/v7/shared/ioprogress"
"github.com/lxc/incus/v7/shared/logger"
localtls "github.com/lxc/incus/v7/shared/tls"
"github.com/lxc/incus/v7/shared/units"
"github.com/lxc/incus/v7/shared/util"
)
// Storage volumes handling function
@ -430,7 +433,8 @@ func (r *ProtocolIncus) DeleteStoragePoolVolumeSnapshot(pool string, volumeType
// Send the request
path := fmt.Sprintf(
"/storage-pools/%s/volumes/%s/%s/snapshots/%s",
url.PathEscape(pool), url.PathEscape(volumeType), url.PathEscape(volumeName), url.PathEscape(snapshotName))
url.PathEscape(pool), url.PathEscape(volumeType), url.PathEscape(volumeName), url.PathEscape(snapshotName),
)
op, _, err := r.queryOperation("DELETE", path, nil, "")
if err != nil {
@ -916,6 +920,24 @@ func (r *ProtocolIncus) DeleteStoragePoolVolume(pool string, volType string, nam
return nil
}
// RebuildStoragePoolVolume rebuilds an existing custom storage volume as empty.
func (r *ProtocolIncus) RebuildStoragePoolVolume(pool string, volType string, name string, volume api.StorageVolumeRebuildPost) (Operation, error) {
err := r.CheckExtension("storage_volumes_rebuild")
if err != nil {
return nil, err
}
path := fmt.Sprintf("/storage-pools/%s/volumes/%s/%s/rebuild", url.PathEscape(pool), url.PathEscape(volType), url.PathEscape(name))
// Send the request.
op, _, err := r.queryOperation("POST", path, volume, "")
if err != nil {
return nil, err
}
return op, nil
}
// RenameStoragePoolVolume renames a storage volume.
func (r *ProtocolIncus) RenameStoragePoolVolume(pool string, volType string, name string, volume api.StorageVolumePost) error {
if !r.HasExtension("storage_api_volume_rename") {
@ -1060,7 +1082,7 @@ func (r *ProtocolIncus) GetStorageVolumeBackupFile(pool string, volName string,
return nil, err
}
defer func() { _ = response.Body.Close() }()
defer logger.WarnOnError(response.Body.Close, "Failed to close response body")
defer close(doneCh)
if response.StatusCode != http.StatusOK {
@ -1084,7 +1106,7 @@ func (r *ProtocolIncus) GetStorageVolumeBackupFile(pool string, volName string,
}
}
size, err := io.Copy(req.BackupFile, body)
size, err := util.SafeCopy(req.BackupFile, body)
if err != nil {
return nil, err
}
@ -1095,6 +1117,70 @@ func (r *ProtocolIncus) GetStorageVolumeBackupFile(pool string, volName string,
return &resp, nil
}
// CreateStorageVolumeBackupStream requests that Incus creates and returns new direct backup for
// the storage volume.
func (r *ProtocolIncus) CreateStorageVolumeBackupStream(pool string, volName string, backup api.StorageVolumeBackupsPost, req *BackupFileRequest) error {
if !r.HasExtension("direct_backup") {
return errors.New("The server is missing the required \"direct_backup\" API extension")
}
// Build the URL
uri := fmt.Sprintf("%s/1.0/storage-pools/%s/volumes/custom/%s/backups", r.httpBaseURL.String(), url.PathEscape(pool), url.PathEscape(volName))
if r.project != "" {
uri += fmt.Sprintf("?project=%s", url.QueryEscape(r.project))
}
// Encode the backup data
buf := bytes.Buffer{}
err := json.NewEncoder(&buf).Encode(backup)
if err != nil {
return err
}
// Prepare the download request
request, err := http.NewRequest("POST", uri, bytes.NewReader(buf.Bytes()))
if err != nil {
return err
}
request.Header.Set("Accept", "application/octet-stream")
if r.httpUserAgent != "" {
request.Header.Set("User-Agent", r.httpUserAgent)
}
// Start the request
response, doneCh, err := cancel.CancelableDownload(req.Canceler, r.DoHTTP, request)
if err != nil {
return err
}
defer logger.WarnOnError(response.Body.Close, "Failed to close response body")
defer close(doneCh)
if response.StatusCode != http.StatusOK {
_, _, err = incusParseResponse(response)
if err != nil {
return err
}
}
// Handle the data
body := response.Body
if req.ProgressHandler != nil {
body = &ioprogress.ProgressReader{
ReadCloser: response.Body,
Tracker: &ioprogress.ProgressTracker{
Handler: func(received int64, speed int64) {
req.ProgressHandler(ioprogress.ProgressData{Text: fmt.Sprintf("%s (%s/s)", units.GetByteSizeString(received, 2), units.GetByteSizeString(speed, 2))})
},
},
}
}
_, err = util.SafeCopy(req.BackupFile, body)
return err
}
// CreateStoragePoolVolumeFromMigration defines a new storage volume.
// In contrast to CreateStoragePoolVolume, it also returns an operation object.
func (r *ProtocolIncus) CreateStoragePoolVolumeFromMigration(pool string, volume api.StorageVolumesPost) (Operation, error) {
@ -1142,7 +1228,7 @@ func (r *ProtocolIncus) CreateStoragePoolVolumeFromISO(pool string, args Storage
return nil, err
}
defer func() { _ = resp.Body.Close() }()
defer logger.WarnOnError(resp.Body.Close, "Failed to close response body")
// Handle errors.
response, _, err := incusParseResponse(resp)
@ -1201,7 +1287,7 @@ func (r *ProtocolIncus) CreateStoragePoolVolumeFromBackup(pool string, args Stor
return nil, err
}
defer func() { _ = resp.Body.Close() }()
defer logger.WarnOnError(resp.Body.Close, "Failed to close response body")
// Handle errors.
response, _, err := incusParseResponse(resp)
@ -1225,6 +1311,28 @@ func (r *ProtocolIncus) CreateStoragePoolVolumeFromBackup(pool string, args Stor
return &op, nil
}
// GetStoragePoolVolumeBlockNBDConn returns a connection to the volume's NBD endpoint.
func (r *ProtocolIncus) GetStoragePoolVolumeBlockNBDConn(pool string, volType string, volName string, args StorageVolumeNBDPost) (net.Conn, error) {
if !r.HasExtension("storage_volume_nbd") {
return nil, errors.New(`The server is missing the required "storage_volume_nbd" API extension`)
}
u := api.NewURL()
u.URL = r.httpBaseURL // Preload the URL with the client base URL.
u.Path("1.0", "storage-pools", pool, "volumes", volType, volName, "nbd")
values := u.Query()
if args.Writable {
values.Set("writable", "1")
}
u.RawQuery = values.Encode()
r.setURLQueryAttributes(&u.URL)
return r.rawConn(http.MethodGet, &u.URL, "nbd", nil)
}
// GetStoragePoolVolumeFileSFTPConn returns a connection to the volume's SFTP endpoint.
func (r *ProtocolIncus) GetStoragePoolVolumeFileSFTPConn(pool string, volType string, volName string) (net.Conn, error) {
if !r.HasExtension("custom_volume_sftp") {
@ -1236,7 +1344,7 @@ func (r *ProtocolIncus) GetStoragePoolVolumeFileSFTPConn(pool string, volType st
u.Path("1.0", "storage-pools", pool, "volumes", volType, volName, "sftp")
r.setURLQueryAttributes(&u.URL)
return r.rawSFTPConn(&u.URL)
return r.rawConn(http.MethodGet, &u.URL, "sftp", nil)
}
// GetStoragePoolVolumeFileSFTP returns an SFTP connection to the volume.
@ -1416,3 +1524,103 @@ func (r *ProtocolIncus) DeleteStorageVolumeFile(pool string, volumeType string,
return nil
}
// GetStorageVolumeBitmapNames returns a list of volume bitmap names.
func (r *ProtocolIncus) GetStorageVolumeBitmapNames(pool string, volumeType string, volumeName string) ([]string, error) {
if !r.HasExtension("storage_volume_nbd") {
return nil, errors.New("The server is missing the required \"storage_volume_nbd\" API extension")
}
// Fetch the raw URL values.
urls := []string{}
baseURL := fmt.Sprintf(
"/storage-pools/%s/volumes/%s/%s/bitmaps",
url.PathEscape(pool), url.PathEscape(volumeType), url.PathEscape(volumeName),
)
_, err := r.queryStruct("GET", baseURL, nil, "", &urls)
if err != nil {
return nil, err
}
// Parse it.
return urlsToResourceNames(baseURL, urls...)
}
// GetStorageVolumeBitmaps returns a list of volume bitmaps.
func (r *ProtocolIncus) GetStorageVolumeBitmaps(pool string, volumeType string, volumeName string) ([]api.StorageVolumeBitmap, error) {
if !r.HasExtension("storage_volume_nbd") {
return nil, errors.New("The server is missing the required \"storage_volume_nbd\" API extension")
}
bitmaps := []api.StorageVolumeBitmap{}
path := fmt.Sprintf("/storage-pools/%s/volumes/%s/%s/bitmaps?recursion=1",
url.PathEscape(pool),
url.PathEscape(volumeType),
url.PathEscape(volumeName))
_, err := r.queryStruct("GET", path, nil, "", &bitmaps)
if err != nil {
return nil, err
}
return bitmaps, nil
}
// GetStorageVolumeBitmap returns information about a volume bitmap.
func (r *ProtocolIncus) GetStorageVolumeBitmap(pool string, volumeType string, volumeName string, bitmapName string) (*api.StorageVolumeBitmap, error) {
if !r.HasExtension("storage_volume_nbd") {
return nil, errors.New("The server is missing the required \"storage_volume_nbd\" API extension")
}
bitmap := api.StorageVolumeBitmap{}
path := fmt.Sprintf(
"/storage-pools/%s/volumes/%s/%s/bitmaps/%s",
url.PathEscape(pool), url.PathEscape(volumeType), url.PathEscape(volumeName), url.PathEscape(bitmapName),
)
_, err := r.queryStruct("GET", path, nil, "", &bitmap)
if err != nil {
return nil, err
}
return &bitmap, nil
}
// CreateStorageVolumeBitmap creates a new volume bitmap.
func (r *ProtocolIncus) CreateStorageVolumeBitmap(pool string, volumeType string, volumeName string, bitmap api.StorageVolumeBitmapsPost) error {
if !r.HasExtension("storage_volume_nbd") {
return errors.New("The server is missing the required \"storage_volume_nbd\" API extension")
}
path := fmt.Sprintf("/storage-pools/%s/volumes/%s/%s/bitmaps",
url.PathEscape(pool),
url.PathEscape(volumeType),
url.PathEscape(volumeName))
// Send the request
_, _, err := r.query("POST", path, bitmap, "")
if err != nil {
return err
}
return nil
}
// DeleteStorageVolumeBitmap deletes a volume bitmap.
func (r *ProtocolIncus) DeleteStorageVolumeBitmap(pool string, volumeType string, volumeName string, bitmapName string) error {
if !r.HasExtension("storage_volume_nbd") {
return errors.New("The server is missing the required \"storage_volume_nbd\" API extension")
}
path := fmt.Sprintf(
"/storage-pools/%s/volumes/%s/%s/bitmaps/%s",
url.PathEscape(pool), url.PathEscape(volumeType), url.PathEscape(volumeName), url.PathEscape(bitmapName),
)
_, _, err := r.query("DELETE", path, nil, "")
if err != nil {
return err
}
return nil
}

View File

@ -5,7 +5,7 @@ import (
"fmt"
"net/url"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// Warning handling functions

View File

@ -9,9 +9,9 @@ import (
"github.com/gorilla/websocket"
"github.com/pkg/sftp"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/cancel"
"github.com/lxc/incus/v6/shared/ioprogress"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/cancel"
"github.com/lxc/incus/v7/shared/ioprogress"
)
// The Operation type represents a currently running operation.
@ -124,6 +124,8 @@ type InstanceServer interface {
ConsoleInstance(instanceName string, console api.InstanceConsolePost, args *InstanceConsoleArgs) (op Operation, err error)
ConsoleInstanceDynamic(instanceName string, console api.InstanceConsolePost, args *InstanceConsoleArgs) (Operation, func(io.ReadWriteCloser) error, error)
CreateInstanceBitmap(name string, bitmap api.StorageVolumeBitmapsPost) error
GetInstanceConsoleLog(instanceName string, args *InstanceConsoleLogArgs) (content io.ReadCloser, err error)
DeleteInstanceConsoleLog(instanceName string, args *InstanceConsoleLogArgs) (err error)
@ -134,6 +136,10 @@ type InstanceServer interface {
GetInstanceFileSFTPConn(instanceName string) (net.Conn, error)
GetInstanceFileSFTP(instanceName string) (*sftp.Client, error)
GetInstanceNBDConn(instanceName string, args InstanceNBDArgs) (net.Conn, error)
GetInstancePortForwardConn(instanceName string, forward api.InstancePortForwardPost) (net.Conn, error)
GetInstanceSnapshotNames(instanceName string) (names []string, err error)
GetInstanceSnapshots(instanceName string) (snapshots []api.InstanceSnapshot, err error)
GetInstanceSnapshot(instanceName string, name string) (snapshot *api.InstanceSnapshot, ETag string, err error)
@ -151,6 +157,7 @@ type InstanceServer interface {
RenameInstanceBackup(instanceName string, name string, backup api.InstanceBackupPost) (op Operation, err error)
DeleteInstanceBackup(instanceName string, name string) (op Operation, err error)
GetInstanceBackupFile(instanceName string, name string, req *BackupFileRequest) (resp *BackupFileResponse, err error)
CreateInstanceBackupStream(instanceName string, backup api.InstanceBackupsPost, req *BackupFileRequest) (err error)
CreateInstanceFromBackup(args InstanceBackupArgs) (op Operation, err error)
GetInstanceState(name string) (state *api.InstanceState, ETag string, err error)
@ -171,6 +178,14 @@ type InstanceServer interface {
DeleteInstanceTemplateFile(name string, templateName string) (err error)
GetInstanceDebugMemory(name string, format string) (rc io.ReadCloser, err error)
RepairInstance(name string, repair api.InstanceDebugRepairPost) (err error)
GetInstanceNVRAM(name string) (vars map[string]map[string]*api.InstanceNVRAMVariable, err error)
GetInstanceNVRAMGUID(name string, guid string) (vars map[string]*api.InstanceNVRAMVariable, err error)
GetRawInstanceNVRAMGUIDVar(name string, guid string, varName string) (resp []byte, attributes uint32, err error)
GetInstanceNVRAMGUIDVar(name string, guid string, varName string) (resp *api.InstanceNVRAMVariable, ETag string, err error)
DeleteInstanceNVRAMGUIDVar(name string, guid string, varName string) error
UpdateRawInstanceNVRAMGUIDVar(name string, guid string, varName string, data []byte, attributes uint32, timestamp int64) error
UpdateInstanceNVRAMGUIDVar(name string, guid string, varName string, data api.InstanceNVRAMVariablePut, ETag string) error
// Event handling functions
GetEvents() (listener *EventListener, err error)
@ -354,6 +369,7 @@ type InstanceServer interface {
CreateStoragePoolBucketBackup(poolName string, bucketName string, backup api.StorageBucketBackupsPost) (op Operation, err error)
DeleteStoragePoolBucketBackup(pool string, bucketName string, name string) (op Operation, err error)
GetStoragePoolBucketBackupFile(pool string, bucketName string, name string, req *BackupFileRequest) (resp *BackupFileResponse, err error)
CreateStoragePoolBucketBackupStream(pool string, bucketName string, backup api.StorageBucketBackupsPost, req *BackupFileRequest) (err error)
CreateStoragePoolBucketFromBackup(pool string, args StoragePoolBucketBackupArgs) (op Operation, err error)
// Storage volume functions ("storage" API extension)
@ -378,6 +394,9 @@ type InstanceServer interface {
MoveStoragePoolVolume(pool string, source InstanceServer, sourcePool string, volume api.StorageVolume, args *StoragePoolVolumeMoveArgs) (op RemoteOperation, err error)
MigrateStoragePoolVolume(pool string, volume api.StorageVolumePost) (op Operation, err error)
// Storage volume rebuild ("storage_volumes_rebuild" API extension)
RebuildStoragePoolVolume(pool string, volType string, name string, volume api.StorageVolumeRebuildPost) (op Operation, err error)
// Storage volume snapshot functions ("storage_api_volume_snapshots" API extension)
CreateStoragePoolVolumeSnapshot(pool string, volumeType string, volumeName string, snapshot api.StorageVolumeSnapshotsPost) (op Operation, err error)
DeleteStoragePoolVolumeSnapshot(pool string, volumeType string, volumeName string, snapshotName string) (op Operation, err error)
@ -395,8 +414,16 @@ type InstanceServer interface {
RenameStorageVolumeBackup(pool string, volName string, name string, backup api.StorageVolumeBackupPost) (op Operation, err error)
DeleteStorageVolumeBackup(pool string, volName string, name string) (op Operation, err error)
GetStorageVolumeBackupFile(pool string, volName string, name string, req *BackupFileRequest) (resp *BackupFileResponse, err error)
CreateStorageVolumeBackupStream(pool string, volName string, backup api.StorageVolumeBackupsPost, req *BackupFileRequest) (err error)
CreateStoragePoolVolumeFromBackup(pool string, args StorageVolumeBackupArgs) (op Operation, err error)
// Storage volume bitmaps manipulations functions ("storage_volume_nbd" API extension)
GetStorageVolumeBitmapNames(pool string, volumeType string, volumeName string) ([]string, error)
GetStorageVolumeBitmaps(pool string, volumeType string, volumeName string) ([]api.StorageVolumeBitmap, error)
GetStorageVolumeBitmap(pool string, volumeType string, volumeName string, bitmapName string) (bitmap *api.StorageVolumeBitmap, err error)
CreateStorageVolumeBitmap(pool string, volumeType string, volumeName string, bitmap api.StorageVolumeBitmapsPost) error
DeleteStorageVolumeBitmap(pool string, volumeType string, volumeName string, bitmapName string) error
// Storage volume ISO import function ("custom_volume_iso" API extension)
CreateStoragePoolVolumeFromISO(pool string, args StorageVolumeBackupArgs) (op Operation, err error)
CreateStoragePoolVolumeFromMigration(pool string, volume api.StorageVolumesPost) (op Operation, err error)
@ -406,6 +433,9 @@ type InstanceServer interface {
CreateStorageVolumeFile(pool string, volumeType string, volumeName string, filePath string, args InstanceFileArgs) (err error)
DeleteStorageVolumeFile(pool string, volumeType string, volumeName string, filePath string) (err error)
// Storage volume NBD functions ("storage_volume_nbd" API extension)
GetStoragePoolVolumeBlockNBDConn(pool string, volType string, volName string, args StorageVolumeNBDPost) (net.Conn, error)
// Storage volume SFTP functions ("custom_volume_sftp" API extension)
GetStoragePoolVolumeFileSFTPConn(pool string, volType string, volName string) (net.Conn, error)
GetStoragePoolVolumeFileSFTP(pool string, volType string, volName string) (*sftp.Client, error)
@ -499,10 +529,10 @@ type ImageCreateArgs struct {
// The ImageFileRequest struct is used for an image download request.
type ImageFileRequest struct {
// Writer for the metadata file
MetaFile io.WriteSeeker
MetaFile io.ReadWriteSeeker
// Writer for the rootfs file
RootfsFile io.WriteSeeker
RootfsFile io.ReadWriteSeeker
// Progress handler (called whenever some progress is made)
ProgressHandler func(progress ioprogress.ProgressData)
@ -704,6 +734,13 @@ type InstanceFileArgs struct {
WriteMode string
}
// The InstanceNBDArgs struct is used when connecting to an instance's disks over NBD.
// API extension: instance_nbd.
type InstanceNBDArgs struct {
// Whether to connect to an already running NBD session
Reuse bool
}
// The InstanceFileResponse struct is used as part of the response for a instance file download.
type InstanceFileResponse struct {
// User id that owns the file
@ -731,3 +768,10 @@ type StoragePoolBucketBackupArgs struct {
// Name to import backup as
Name string
}
// The StorageVolumeNBDPost struct is used when connecting to a storage volume over NBD.
// API extension: storage_volume_nbd.
type StorageVolumeNBDPost struct {
// Writable
Writable bool
}

View File

@ -15,6 +15,9 @@ type ProtocolOCI struct {
// Cache for images.
cache map[string]ociInfo
// Error tracking for images.
errors map[string]error
tempPath string
}

View File

@ -1,7 +1,6 @@
package incus
import (
"compress/gzip"
"context"
"crypto/sha256"
"encoding/base64"
@ -17,12 +16,16 @@ import (
"strings"
"time"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/ioprogress"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v6/shared/osarch"
"github.com/lxc/incus/v6/shared/subprocess"
"github.com/lxc/incus/v6/shared/units"
"github.com/klauspost/pgzip"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/archive"
"github.com/lxc/incus/v7/shared/ioprogress"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/osarch"
"github.com/lxc/incus/v7/shared/subprocess"
"github.com/lxc/incus/v7/shared/units"
"github.com/lxc/incus/v7/shared/util"
)
type ociInfo struct {
@ -88,6 +91,11 @@ func (r *ProtocolOCI) GetImage(fingerprint string) (*api.Image, string, error) {
return nil, "", errors.New("OCI container handling requires \"skopeo\" be present on the system")
}
err, ok := r.errors[fingerprint]
if ok {
return nil, "", err
}
return nil, "", errors.New("Image not found")
}
@ -133,6 +141,11 @@ func (r *ProtocolOCI) GetImageFile(fingerprint string, req ImageFileRequest) (*I
return nil, errors.New("OCI container handling requires \"skopeo\" be present on the system")
}
err, ok := r.errors[fingerprint]
if ok {
return nil, err
}
return nil, errors.New("Image not found")
}
@ -151,7 +164,7 @@ func (r *ProtocolOCI) GetImageFile(fingerprint string, req ImageFileRequest) (*I
return nil, err
}
defer func() { _ = os.RemoveAll(ociPath) }()
defer logger.WarnOnError(func() error { return os.RemoveAll(ociPath) }, "Failed to remove temporary directory")
err = os.Mkdir(filepath.Join(ociPath, "oci"), 0o700)
if err != nil {
@ -173,7 +186,8 @@ func (r *ProtocolOCI) GetImageFile(fingerprint string, req ImageFileRequest) (*I
stdout, err := r.runSkopeo(
"copy", info.Alias,
"--remove-signatures",
fmt.Sprintf("oci:%s:%s", filepath.Join(ociPath, "oci"), imageTag))
fmt.Sprintf("oci:%s:%s", filepath.Join(ociPath, "oci"), imageTag),
)
if err != nil {
logger.Debug("Error copying remote image to local", logger.Ctx{"image": info.Alias, "stdout": stdout, "stderr": err})
return nil, err
@ -222,8 +236,8 @@ func (r *ProtocolOCI) GetImageFile(fingerprint string, req ImageFileRequest) (*I
// Push the metadata tarball.
pipeRead, pipeWrite = io.Pipe()
defer pipeRead.Close()
defer pipeWrite.Close()
defer logger.WarnOnError(pipeRead.Close, "Failed to close pipe reader")
defer logger.WarnOnError(pipeWrite.Close, "Failed to close pipe writer")
if req.ProgressHandler != nil {
pipeRead = &ioprogress.ProgressReader{
@ -236,7 +250,12 @@ func (r *ProtocolOCI) GetImageFile(fingerprint string, req ImageFileRequest) (*I
}
}
compressWrite := gzip.NewWriter(pipeWrite)
compressWrite := pgzip.NewWriter(pipeWrite)
err = compressWrite.SetConcurrency(1<<20, archive.CompressionThreads())
if err != nil {
return nil, err
}
metadataProcess := subprocess.NewProcessWithFds("tar", []string{"-cf", "-", "-C", filepath.Join(ociPath, "image"), "config.json", "metadata.yaml"}, nil, compressWrite, os.Stderr)
err = metadataProcess.Start(ctx)
if err != nil {
@ -245,11 +264,11 @@ func (r *ProtocolOCI) GetImageFile(fingerprint string, req ImageFileRequest) (*I
go func() {
_, _ = metadataProcess.Wait(ctx)
compressWrite.Close()
pipeWrite.Close()
_ = compressWrite.Close()
_ = pipeWrite.Close()
}()
size, err := io.Copy(req.MetaFile, pipeRead)
size, err := util.SafeCopy(req.MetaFile, pipeRead)
if err != nil {
return nil, err
}
@ -258,8 +277,8 @@ func (r *ProtocolOCI) GetImageFile(fingerprint string, req ImageFileRequest) (*I
// Push the rootfs tarball.
pipeRead, pipeWrite = io.Pipe()
defer pipeRead.Close()
defer pipeWrite.Close()
defer logger.WarnOnError(pipeRead.Close, "Failed to close pipe reader")
defer logger.WarnOnError(pipeWrite.Close, "Failed to close pipe writer")
if req.ProgressHandler != nil {
pipeRead = &ioprogress.ProgressReader{
@ -272,7 +291,12 @@ func (r *ProtocolOCI) GetImageFile(fingerprint string, req ImageFileRequest) (*I
}
}
compressWrite = gzip.NewWriter(pipeWrite)
compressWrite = pgzip.NewWriter(pipeWrite)
err = compressWrite.SetConcurrency(1<<20, archive.CompressionThreads())
if err != nil {
return nil, err
}
rootfsProcess := subprocess.NewProcessWithFds("tar", []string{"-cf", "-", "-C", filepath.Join(ociPath, "image", "rootfs"), "."}, nil, compressWrite, nil)
err = rootfsProcess.Start(ctx)
if err != nil {
@ -281,11 +305,11 @@ func (r *ProtocolOCI) GetImageFile(fingerprint string, req ImageFileRequest) (*I
go func() {
_, _ = rootfsProcess.Wait(ctx)
compressWrite.Close()
pipeWrite.Close()
_ = compressWrite.Close()
_ = pipeWrite.Close()
}()
size, err = io.Copy(req.RootfsFile, pipeRead)
size, err = util.SafeCopy(req.RootfsFile, pipeRead)
if err != nil {
return nil, err
}
@ -359,7 +383,7 @@ func (r *ProtocolOCI) runSkopeo(action string, image string, args ...string) (st
return "", err
}
defer authFile.Close()
defer logger.WarnOnError(authFile.Close, "Failed to close auth file")
defer os.Remove(authFile.Name())
err = authFile.Chmod(0o600)
@ -387,7 +411,8 @@ func (r *ProtocolOCI) runSkopeo(action string, image string, args ...string) (st
env,
nil,
"skopeo",
args...)
args...,
)
if err != nil {
return "", err
}
@ -405,9 +430,11 @@ func (r *ProtocolOCI) GetImageAlias(name string) (*api.ImageAliasesEntry, string
}
// Get the image information from skopeo.
stdout, err := r.runSkopeo("inspect", name)
stdout, err := r.runSkopeo("inspect", name, "--no-tags")
if err != nil {
logger.Debug("Error getting image alias", logger.Ctx{"name": name, "stdout": stdout, "stderr": err})
r.errors[name] = err
return nil, "", err
}
@ -415,6 +442,8 @@ func (r *ProtocolOCI) GetImageAlias(name string) (*api.ImageAliasesEntry, string
var info ociInfo
err = json.Unmarshal([]byte(stdout), &info)
if err != nil {
r.errors[name] = err
return nil, "", err
}
@ -423,11 +452,15 @@ func (r *ProtocolOCI) GetImageAlias(name string) (*api.ImageAliasesEntry, string
archID, err := osarch.ArchitectureID(info.Architecture)
if err != nil {
r.errors[name] = err
return nil, "", err
}
archName, err := osarch.ArchitectureName(archID)
if err != nil {
r.errors[name] = err
return nil, "", err
}

View File

@ -11,7 +11,7 @@ import (
"github.com/opencontainers/umoci/oci/casext"
"github.com/opencontainers/umoci/oci/layer"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v7/shared/logger"
)
func init() {
@ -58,7 +58,7 @@ func unpackOCIImage(imagePath string, imageTag string, bundlePath string) error
}
engineExt := casext.NewEngine(engine)
defer func() { _ = engine.Close() }()
defer logger.WarnOnError(engine.Close, "Failed to close CAS engine")
return umoci.Unpack(engineExt, imageTag, bundlePath, unpackOptions)
}

View File

@ -9,7 +9,7 @@ import (
"github.com/gorilla/websocket"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
// The Operation type represents an ongoing Incus operation (asynchronous processing).
@ -22,7 +22,15 @@ type operation struct {
handlerLock sync.Mutex
skipListener bool
chActive chan bool
chActive chan bool
chActiveOnce sync.Once
}
// closeChActive closes the chActive channel exactly once.
func (op *operation) closeChActive() {
op.chActiveOnce.Do(func() {
close(op.chActive)
})
}
// AddHandler adds a function to be called whenever an event is received.
@ -162,6 +170,18 @@ func (op *operation) WaitContext(ctx context.Context) error {
select {
case <-ctx.Done():
// Tear down the listener, cancel the server-side operation and unblock the monitor.
op.handlerLock.Lock()
if op.listener != nil {
op.listener.Disconnect()
op.listener = nil
}
op.handlerLock.Unlock()
_ = op.Cancel()
op.closeChActive()
return ctx.Err()
case <-op.chActive:
}
@ -231,14 +251,14 @@ func (op *operation) setupListener() error {
if op.StatusCode.IsFinal() {
op.listener.Disconnect()
op.listener = nil
close(op.chActive)
op.closeChActive()
return
}
})
if err != nil {
op.listener.Disconnect()
op.listener = nil
close(op.chActive)
op.closeChActive()
close(chReady)
return err
@ -266,7 +286,7 @@ func (op *operation) setupListener() error {
op.handlerLock.Lock()
if op.listener != nil {
op.Err = listener.err.Error()
close(op.chActive)
op.closeChActive()
}
op.handlerLock.Unlock()
@ -280,7 +300,7 @@ func (op *operation) setupListener() error {
if err != nil {
op.listener.Disconnect()
op.listener = nil
close(op.chActive)
op.closeChActive()
close(chReady)
return err
@ -290,7 +310,7 @@ func (op *operation) setupListener() error {
if op.StatusCode.IsFinal() {
op.listener.Disconnect()
op.listener = nil
close(op.chActive)
op.closeChActive()
close(chReady)
if op.Err != "" {

View File

@ -4,7 +4,7 @@ import (
"errors"
"net/http"
"github.com/lxc/incus/v6/shared/simplestreams"
"github.com/lxc/incus/v7/shared/simplestreams"
)
// ProtocolSimpleStreams implements a SimpleStreams API client.

View File

@ -13,11 +13,11 @@ import (
"strings"
"time"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v6/shared/simplestreams"
"github.com/lxc/incus/v6/shared/subprocess"
"github.com/lxc/incus/v6/shared/util"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/simplestreams"
"github.com/lxc/incus/v7/shared/subprocess"
"github.com/lxc/incus/v7/shared/util"
)
// Image handling functions
@ -97,6 +97,14 @@ func (r *ProtocolSimpleStreams) GetImageFile(fingerprint string, req ImageFileRe
httpTransport.ResponseHeaderTimeout = 30 * time.Second
httpClient.Transport = httpTransport
// Get the image and expand the fingerprint.
image, err := r.ssClient.GetImage(fingerprint)
if err != nil {
return nil, err
}
fingerprint = image.Fingerprint
// Get the file list
files, err := r.ssClient.GetFiles(fingerprint)
if err != nil {
@ -109,7 +117,7 @@ func (r *ProtocolSimpleStreams) GetImageFile(fingerprint string, req ImageFileRe
// Download function
download := func(path string, filename string, hash string, target io.WriteSeeker) (int64, error) {
// Try over http
uri, err := url.JoinPath(fmt.Sprintf("http://%s", strings.TrimPrefix(r.httpHost, "https://")), path)
uri, err := urlJoinPathAbsolute(fmt.Sprintf("http://%s", strings.TrimPrefix(r.httpHost, "https://")), path)
if err != nil {
return -1, err
}
@ -122,7 +130,7 @@ func (r *ProtocolSimpleStreams) GetImageFile(fingerprint string, req ImageFileRe
}
// Try over https
uri, err := url.JoinPath(r.httpHost, path)
uri, err := urlJoinPathAbsolute(r.httpHost, path)
if err != nil {
return -1, err
}
@ -168,9 +176,9 @@ func (r *ProtocolSimpleStreams) GetImageFile(fingerprint string, req ImageFileRe
return -1, err
}
defer func() { _ = deltaFile.Close() }()
defer logger.WarnOnError(deltaFile.Close, "Failed to close temporary file")
defer func() { _ = os.Remove(deltaFile.Name()) }()
defer logger.WarnOnError(func() error { return os.Remove(deltaFile.Name()) }, "Failed to remove temporary file")
// Download the delta
_, err = download(file.Path, "rootfs delta", file.Sha256, deltaFile)
@ -184,9 +192,9 @@ func (r *ProtocolSimpleStreams) GetImageFile(fingerprint string, req ImageFileRe
return -1, err
}
defer func() { _ = patchedFile.Close() }()
defer logger.WarnOnError(patchedFile.Close, "Failed to close temporary file")
defer func() { _ = os.Remove(patchedFile.Name()) }()
defer logger.WarnOnError(func() error { return os.Remove(patchedFile.Name()) }, "Failed to remove temporary file")
// Apply it
_, err = subprocess.RunCommand("xdelta3", "-f", "-d", "-s", srcPath, deltaFile.Name(), patchedFile.Name())
@ -195,7 +203,7 @@ func (r *ProtocolSimpleStreams) GetImageFile(fingerprint string, req ImageFileRe
}
// Copy to the target
size, err := io.Copy(req.RootfsFile, patchedFile)
size, err := util.SafeCopy(req.RootfsFile, patchedFile)
if err != nil {
return -1, err
}
@ -240,6 +248,44 @@ func (r *ProtocolSimpleStreams) GetImageFile(fingerprint string, req ImageFileRe
}
}
// Validate the full image hash.
//
// Normally we'd do that as we download the image to avoid having to
// re-read the data, but because the simplestreams allows retries (HTTP to HTTPS),
// we don't have a clean reader that can be used for that.
//
// Another situation where we couldn't do a streaming hash anyway is when processing delta images.
hash256 := sha256.New()
if resp.MetaSize > 0 && req.MetaFile != nil {
_, err = req.MetaFile.Seek(0, io.SeekStart)
if err != nil {
return nil, err
}
_, err := util.SafeCopy(hash256, req.MetaFile)
if err != nil {
return nil, err
}
}
if resp.RootfsSize > 0 && req.RootfsFile != nil {
_, err = req.RootfsFile.Seek(0, io.SeekStart)
if err != nil {
return nil, err
}
_, err := util.SafeCopy(hash256, req.RootfsFile)
if err != nil {
return nil, err
}
}
hash := fmt.Sprintf("%x", hash256.Sum(nil))
if hash != fingerprint {
return nil, fmt.Errorf("Image fingerprint doesn't match. Got %s expected %s", hash, fingerprint)
}
return &resp, nil
}
@ -328,3 +374,20 @@ func (r *ProtocolSimpleStreams) GetImageAliasArchitectures(imageType string, nam
func (r *ProtocolSimpleStreams) ExportImage(_ string, _ api.ImageExportPost) (Operation, error) {
return nil, errors.New("Exporting images is not supported by the simplestreams protocol")
}
func urlJoinPathAbsolute(baseHost string, path string) (result string, err error) {
if strings.HasPrefix("/", path) {
// absolute path
baseHostURL, err := url.ParseRequestURI(baseHost)
if err != nil {
return "", err
}
baseHostURL.Path = path
return baseHostURL.String(), nil
}
// relative path
return url.JoinPath(baseHost, path)
}

View File

@ -13,8 +13,8 @@ import (
"strings"
"time"
"github.com/lxc/incus/v6/shared/proxy"
localtls "github.com/lxc/incus/v6/shared/tls"
"github.com/lxc/incus/v7/shared/proxy"
localtls "github.com/lxc/incus/v7/shared/tls"
)
// tlsHTTPClient creates an HTTP client with a specified Transport Layer Security (TLS) configuration.
@ -57,7 +57,7 @@ func tlsHTTPClient(client *http.Client, tlsClientCert string, tlsClientKey strin
}
// Setup TLS
if resetName {
if resetName || config.ServerName == "" {
hostName, _, err := net.SplitHostPort(addr)
if err != nil {
hostName = addr
@ -118,8 +118,19 @@ func tlsHTTPClient(client *http.Client, tlsClientCert string, tlsClientKey strin
conn, err := tlsDial(network, addr, transport.TLSClientConfig, false)
if err != nil {
// We may have gotten redirected to a non-Incus machine
return tlsDial(network, addr, transport.TLSClientConfig, true)
// On certificate verification failure, we may have gotten redirected to a
// non-Incus machine, retry with the dialed address as the server name.
var certVerifyErr *tls.CertificateVerificationError
hostnameErr := x509.HostnameError{}
if errors.As(err, &certVerifyErr) || errors.As(err, &hostnameErr) {
conn, retryErr := tlsDial(network, addr, transport.TLSClientConfig, true)
if retryErr == nil {
return conn, nil
}
}
// Return the initial error as the retry error may be misleading.
return nil, err
}
return conn, nil

View File

@ -5,7 +5,7 @@ import (
"github.com/spf13/cobra"
"github.com/lxc/incus/v6/internal/version"
"github.com/lxc/incus/v7/internal/version"
)
type cmdGlobal struct {
@ -16,7 +16,7 @@ type cmdGlobal struct {
func main() {
// shift command (main)
shiftCmd := cmdShift{}
app := shiftCmd.Command()
app := shiftCmd.command()
app.SilenceUsage = true
app.CompletionOptions = cobra.CompletionOptions{DisableDefaultCmd: true}

View File

@ -7,7 +7,7 @@ import (
"github.com/spf13/cobra"
"github.com/lxc/incus/v6/shared/idmap"
"github.com/lxc/incus/v7/shared/idmap"
)
type cmdShift struct {
@ -17,7 +17,7 @@ type cmdShift struct {
flagTestMode bool
}
func (c *cmdShift) Command() *cobra.Command {
func (c *cmdShift) command() *cobra.Command {
cmd := &cobra.Command{}
cmd.Use = "fuidshift <directory> <range> [<range>...]"
cmd.Short = "UID/GID shifter"
@ -37,14 +37,14 @@ func (c *cmdShift) Command() *cobra.Command {
Where "u" means shift uid, "g" means shift gid and "b" means shift uid and gid.
`
cmd.Example = ` fuidshift my-dir/ b:0:100000:65536 u:10000:1000:1`
cmd.RunE = c.Run
cmd.RunE = c.run
cmd.Flags().BoolVarP(&c.flagTestMode, "test", "t", false, "Test mode (no change to files)")
cmd.Flags().BoolVarP(&c.flagReverse, "reverse", "r", false, "Perform a reverse mapping")
return cmd
}
func (c *cmdShift) Run(cmd *cobra.Command, args []string) error {
func (c *cmdShift) run(cmd *cobra.Command, args []string) error {
// Help and usage
if len(args) == 0 {
return cmd.Help()

View File

@ -118,6 +118,7 @@ Tag | Description
`leftjoin=<table.column>` | Applies a `LEFT JOIN` of the same form as a `JOIN`.
`joinon=<table>.<column>` | Overrides the default `JOIN ON` clause with the given table and column, replacing `<table>.<joinTable_id>` above.
`jointo=<column>` | Overrides the default target column `id` with the given column, replacing the `id` in `<joinTable.id>` above. This is intended for "loose" foreign keys, not using the ID column. Therefore, this is intended to be used in conjunction with `joinon` and `omit=create,update` to get the expected behavior.
`joinas=<alias>` | Sets an alias for the joined table name, in case it clashes with another table.
`primary=yes` | Assigns column associated with the field to be sufficient for returning a row from the table. Will default to `Name` if unspecified. Fields with this key will be included in the default 'ORDER BY' clause.
`omit=<Stmt Types>` | Omits a given field from consideration for the comma separated list of statement types (`create`, `objects-by-Name`, `update`).
`ignore` | Outright ignore the struct field as though it does not exist. `ignore` needs to be the only tag value in order to be recognized.
@ -195,6 +196,11 @@ including a comma separated list to `references=<OtherEntity>` in the code gener
A struct that contains a field named `ReferenceID` will be parsed this way.
`generate-database` will use this struct to generate more abstract SQL statements and functions of the form `<parent_table>_<this_table>`.
The associated `Filter` struct may include a `ReferenceID []int` field.
This generates an `IN` clause matching on the parent column, with the integer values inlined into the query to avoid query parameter count limits.
A nil slice leaves the filter unset while an empty (non-nil) slice matches nothing.
When the field is present, the generated per-parent helpers and nested reference fetches are automatically scoped to the relevant parent IDs rather than fetching the whole table.
Real world invocation of these statements and functions should be done through an `EntityTable` `method` call with the tag `references=<ThisStruct>`. This `EntityTable` will replace the `<parent_table>` above.
Example:

View File

@ -14,9 +14,9 @@ import (
"github.com/spf13/pflag"
"golang.org/x/tools/go/packages"
"github.com/lxc/incus/v6/cmd/generate-database/db"
"github.com/lxc/incus/v6/cmd/generate-database/file"
"github.com/lxc/incus/v6/cmd/generate-database/lex"
"github.com/lxc/incus/v7/cmd/generate-database/db"
"github.com/lxc/incus/v7/cmd/generate-database/file"
"github.com/lxc/incus/v7/cmd/generate-database/lex"
)
// Return a new db command.

View File

@ -9,4 +9,5 @@ var Imports = []string{
"fmt",
"strings",
"github.com/mattn/go-sqlite3",
"github.com/google/uuid",
}

View File

@ -4,8 +4,8 @@ import (
"fmt"
"strings"
"github.com/lxc/incus/v6/cmd/generate-database/lex"
"github.com/lxc/incus/v6/shared/util"
"github.com/lxc/incus/v7/cmd/generate-database/lex"
"github.com/lxc/incus/v7/shared/util"
)
// Return the table name for the given database entity.
@ -84,7 +84,7 @@ func activeCriteria(filter []string, ignoredFilter []string) string {
// selectObjects in order to scan a single row.
func destFunc(slice string, entity string, importType string, fields []*Field) string {
var builder strings.Builder
writeLine := func(line string) { builder.WriteString(fmt.Sprintf("%s\n", line)) }
writeLine := func(line string) { fmt.Fprintf(&builder, "%s\n", line) }
writeLine(`func(scan func(dest ...any) error) error {`)

View File

@ -8,8 +8,8 @@ import (
"slices"
"strings"
"github.com/lxc/incus/v6/cmd/generate-database/lex"
"github.com/lxc/incus/v6/shared/util"
"github.com/lxc/incus/v7/cmd/generate-database/lex"
"github.com/lxc/incus/v7/shared/util"
)
// Mapping holds information for mapping database tables to a Go structure.
@ -65,13 +65,19 @@ func (m *Mapping) NaturalKey() []*Field {
// Identifier returns the field that uniquely identifies this entity.
func (m *Mapping) Identifier() *Field {
var fallback *Field
for _, field := range m.NaturalKey() {
if field.Name == "Name" || field.Name == "Fingerprint" {
if field.Config.Get("primary") != "" {
return field
}
if field.Name == "Name" || field.Name == "Fingerprint" {
fallback = field
}
}
return nil
return fallback
}
// TableName determines the table associated to the struct.
@ -355,6 +361,11 @@ func (f *Field) SelectColumn(mapping *Mapping, primaryTable string) (string, err
var column string
join := f.joinConfig()
if join != "" {
joinAs := f.Config.Get("joinas")
if joinAs != "" {
join = joinAs + "." + strings.Split(join, ".")[1]
}
column = join
} else {
column = fmt.Sprintf("%s.%s", tableName, columnName)
@ -453,7 +464,14 @@ func (f *Field) JoinClause(mapping *Mapping, table string) (string, error) {
joinTo = f.Config.Get("jointo")
}
return fmt.Sprintf(joinTemplate, joinTable, joinOn, joinTable, joinTo), nil
joinAs := f.Config.Get("joinas")
if joinAs == "" {
joinAs = joinTable
} else {
joinTable = joinTable + " " + joinAs
}
return fmt.Sprintf(joinTemplate, joinTable, joinOn, joinAs, joinTo), nil
}
// InsertColumn returns a column name and parameter value suitable for an 'INSERT', 'UPDATE', or 'DELETE' statement.

View File

@ -5,13 +5,14 @@ package db
import (
"fmt"
"go/types"
"slices"
"strings"
"golang.org/x/tools/go/packages"
"github.com/lxc/incus/v6/cmd/generate-database/file"
"github.com/lxc/incus/v6/cmd/generate-database/lex"
"github.com/lxc/incus/v6/shared/util"
"github.com/lxc/incus/v7/cmd/generate-database/file"
"github.com/lxc/incus/v7/cmd/generate-database/lex"
"github.com/lxc/incus/v7/shared/util"
)
// Method generates a code snippet for a particular database query method.
@ -165,7 +166,7 @@ func (m *Method) getNames(buf *file.Buffer) error {
}
buf.L("%s %s {", branch, activeCriteria(filter, ignoredFilters[i]))
var args string
var args strings.Builder
for _, name := range filter {
for _, field := range mapping.Fields {
if name == field.Name && util.IsNeitherFalseNorEmpty(field.Config.Get("marshal")) {
@ -176,14 +177,14 @@ func (m *Method) getNames(buf *file.Buffer) error {
buf.L("marshaledFilter%s, err := %s(filter.%s)", name, marshalFunc, name)
m.ifErrNotNil(buf, true, "nil", "err")
args += fmt.Sprintf("marshaledFilter%s,", name)
fmt.Fprintf(&args, "marshaledFilter%s,", name)
} else if name == field.Name {
args += fmt.Sprintf("filter.%s,", name)
fmt.Fprintf(&args, "filter.%s,", name)
}
}
}
buf.L("args = append(args, []any{%s}...)", args)
buf.L("args = append(args, []any{%s}...)", args.String())
buf.L("if len(filters) == 1 {")
buf.L("sqlStmt, err = Stmt(db, %s)", stmtCodeVar(m.entity, "names", filter...))
@ -329,6 +330,29 @@ func (m *Method) getMany(buf *file.Buffer) error {
continue
}
if filter.Name == "ReferenceID" {
if filter.Type.Name != "[]int" {
return fmt.Errorf("ReferenceID filter for entity %q must be of type []int", m.entity)
}
// Filter on the parent column, inlining the integer values to avoid
// query parameter count limits. An empty (non-nil) list matches nothing.
buf.L("if filter.%s != nil {", filter.Name)
buf.L("values := make([]string, 0, len(filter.%s))", filter.Name)
buf.L("for _, v := range filter.%s {", filter.Name)
buf.L("values = append(values, fmt.Sprintf(\"%%d\", v))")
buf.L("}")
buf.N()
buf.L("if len(values) == 0 {")
buf.L("values = append(values, \"NULL\")")
buf.L("}")
buf.N()
buf.L("entries = append(entries, fmt.Sprintf(\"%%s_id IN (%%s)\", parentColumnPrefix, strings.Join(values, \",\")))")
buf.L("}")
buf.N()
continue
}
buf.L("if filter.%s != nil {", filter.Name)
buf.L("entries = append(entries, \"%s = ?\")", lex.SnakeCase(filter.Name))
buf.L("args = append(args, filter.%s)", filter.Name)
@ -374,7 +398,7 @@ func (m *Method) getMany(buf *file.Buffer) error {
}
buf.L("%s %s {", branch, activeCriteria(filter, ignoredFilters[i]))
var args string
var args strings.Builder
for _, name := range filter {
for _, field := range mapping.Fields {
if name == field.Name && util.IsNeitherFalseNorEmpty(field.Config.Get("marshal")) {
@ -385,14 +409,14 @@ func (m *Method) getMany(buf *file.Buffer) error {
buf.L("marshaledFilter%s, err := %s(filter.%s)", name, marshalFunc, name)
m.ifErrNotNil(buf, true, "nil", "err")
args += fmt.Sprintf("marshaledFilter%s,", name)
fmt.Fprintf(&args, "marshaledFilter%s,", name)
} else if name == field.Name {
args += fmt.Sprintf("filter.%s,", name)
fmt.Fprintf(&args, "filter.%s,", name)
}
}
}
buf.L("args = append(args, []any{%s}...)", args)
buf.L("args = append(args, []any{%s}...)", args.String())
buf.L("if len(filters) == 1 {")
buf.L("sqlStmt, err = Stmt(db, %s)", stmtCodeVar(m.entity, "objects", filter...))
@ -427,7 +451,8 @@ func (m *Method) getMany(buf *file.Buffer) error {
buf.N()
}
if mapping.Type == EntityTable {
switch mapping.Type {
case EntityTable:
buf.L("// Select.")
buf.L("if sqlStmt != nil {")
buf.L("objects, err = get%s(ctx, sqlStmt, args...)", lex.Plural(mapping.Name))
@ -437,11 +462,11 @@ func (m *Method) getMany(buf *file.Buffer) error {
buf.L("}")
buf.N()
m.ifErrNotNil(buf, true, "nil", fmt.Sprintf(`fmt.Errorf("Failed to fetch from \"%s\" table: %%w", err)`, entityTable(m.entity, m.config["table"])))
} else if mapping.Type == ReferenceTable || mapping.Type == MapTable {
case ReferenceTable, MapTable:
buf.L("// Select.")
buf.L("objects, err = get%sRaw(ctx, db, queryStr, parentTablePrefix, args...)", lex.Plural(mapping.Name))
m.ifErrNotNil(buf, true, "nil", fmt.Sprintf(`fmt.Errorf("Failed to fetch from \"%%s_%s\" table: %%w", parentTablePrefix, err)`, entityTable(m.entity, m.config["table"])))
} else {
default:
buf.N()
buf.L("// Select.")
buf.L("objects, err = get%s(ctx, sqlStmt, args...)", lex.Plural(mapping.Name))
@ -503,9 +528,10 @@ func (m *Method) getMany(buf *file.Buffer) error {
}
buf.L("for i := range objects {")
if field.Type.Code == TypeSlice {
switch field.Type.Code {
case TypeSlice:
buf.L("objects[i].%s = %s[objects[i].ID]", lex.Plural(refStruct), refSlice)
} else if field.Type.Code == TypeMap {
case TypeMap:
buf.L("objects[i].%s = map[string]%s{}", lex.Plural(refStruct), refStruct)
buf.L("for _, obj := range %s[objects[i].ID] {", refSlice)
buf.L("_, ok := objects[i].%s[obj.%s]", lex.Plural(refStruct), refMapping.NaturalKey()[0].Name)
@ -531,13 +557,46 @@ func (m *Method) getMany(buf *file.Buffer) error {
buf.L("}")
buf.L("}")
buf.N()
scopeByParent := slices.Contains(FieldNames(refMapping.Filters), "ReferenceID") && mapping.FieldByName("ID") != nil
if scopeByParent {
// Restrict the reference fetch to the retrieved objects when filtered.
buf.L("%s := map[int]map[string]string{}", refSlice)
buf.L("if len(objects) > 0 {")
buf.L("if len(filters) > 0 {")
buf.L("referenceIDs := make([]int, 0, len(objects))")
buf.L("for _, object := range objects {")
buf.L("referenceIDs = append(referenceIDs, object.ID)")
buf.L("}")
buf.N()
buf.L("if len(%sFilters) == 0 {", refVar)
buf.L("%sFilters = append(%sFilters, %s{})", refVar, refVar, entityFilter(refStruct))
buf.L("}")
buf.N()
buf.L("for i := range %sFilters {", refVar)
buf.L("%sFilters[i].ReferenceID = referenceIDs", refVar)
buf.L("}")
buf.L("}")
buf.N()
}
assign := ":="
if scopeByParent {
assign = "="
}
if mapping.Type == ReferenceTable {
// A reference table should let its child reference know about its parent.
buf.L("%s, err := Get%s(ctx, db, parentTablePrefix+\"_%s\", parentColumnPrefix+\"_%s\", %sFilters...)", refSlice, lex.Plural(refStruct), lex.Plural(m.entity), m.entity, refVar)
m.ifErrNotNil(buf, true, "nil", "err")
buf.L("%s, err %s Get%s(ctx, db, parentTablePrefix+\"_%s\", parentColumnPrefix+\"_%s\", %sFilters...)", refSlice, assign, lex.Plural(refStruct), lex.Plural(m.entity), m.entity, refVar)
m.ifErrNotNil(buf, !scopeByParent, "nil", "err")
} else {
buf.L("%s, err := Get%s(ctx, db, \"%s\", %sFilters...)", refSlice, lex.Plural(refStruct), m.entity, refVar)
m.ifErrNotNil(buf, true, "nil", "err")
buf.L("%s, err %s Get%s(ctx, db, \"%s\", %sFilters...)", refSlice, assign, lex.Plural(refStruct), m.entity, refVar)
m.ifErrNotNil(buf, !scopeByParent, "nil", "err")
}
if scopeByParent {
buf.L("}")
buf.N()
}
buf.L("for i := range objects {")
@ -563,7 +622,7 @@ func (m *Method) getMany(buf *file.Buffer) error {
buf.L("result := make([]%s, len(objects))", refMapping.ImportType())
buf.L("for i, object := range objects {")
buf.L("%s, err := Get%s(ctx, db, %sFilter{ID: &object.%sID})", lex.Minuscule(ref), lex.Plural(ref), ref, ref)
buf.L("%s, err := Get%s(ctx, db, %s{ID: &object.%sID})", lex.Minuscule(ref), lex.Plural(ref), refMapping.ImportFilterType(), ref)
m.ifErrNotNil(buf, true, "nil", "err")
buf.L("result[i] = %s[0]", lex.Minuscule(ref))
@ -619,6 +678,18 @@ func (m *Method) getRefs(buf *file.Buffer, parentTable string, refMapping *Mappi
refParent := lex.CamelCase(m.entity)
refParentList := refParent + lex.PascalCase(refList)
if slices.Contains(FieldNames(refMapping.Filters), "ReferenceID") {
// Restrict the fetch to the parent object.
buf.L("if len(filters) == 0 {")
buf.L("filters = append(filters, %s{})", entityFilter(refStruct))
buf.L("}")
buf.N()
buf.L("for i := range filters {")
buf.L("filters[i].ReferenceID = []int{%sID}", refParent)
buf.L("}")
buf.N()
}
switch refMapping.Type {
case ReferenceTable:
buf.L("%s, err := Get%s(ctx, db, \"%s\", \"%s\", filters...)", refParentList, lex.Plural(refStruct), parentTable, lex.SnakeCase(m.entity))
@ -848,25 +919,25 @@ func (m *Method) create(buf *file.Buffer, replace bool) error {
buf.L("}")
buf.N()
buf.L("queryStr := fmt.Sprintf(%s, fillParent...)", stmtLocal)
createParams := ""
var createParams strings.Builder
columnFields := mapping.ColumnFields("ID")
if mapping.Type == ReferenceTable {
buf.L("for _, object := range objects {")
}
for i, field := range columnFields {
createParams += fmt.Sprintf("object.%s", field.Name)
fmt.Fprintf(&createParams, "object.%s", field.Name)
if i < len(columnFields) {
createParams += ", "
createParams.WriteString(", ")
}
}
refFields := mapping.RefFields()
if len(refFields) == 0 {
buf.L("_, err := db.ExecContext(ctx, queryStr, %s)", createParams)
buf.L("_, err := db.ExecContext(ctx, queryStr, %s)", createParams.String())
m.ifErrNotNil(buf, true, fmt.Sprintf(`fmt.Errorf("Insert failed for \"%%s_%s\" table: %%w", parentTablePrefix, err)`, lex.Plural(m.entity)))
} else {
buf.L("result, err := db.ExecContext(ctx, queryStr, %s)", createParams)
buf.L("result, err := db.ExecContext(ctx, queryStr, %s)", createParams.String())
m.ifErrNotNil(buf, true, fmt.Sprintf(`fmt.Errorf("Insert failed for \"%%s_%s\" table: %%w", parentTablePrefix, err)`, lex.Plural(m.entity)))
buf.L("id, err := result.LastInsertId()")
m.ifErrNotNil(buf, true, "fmt.Errorf(\"Failed to fetch ID: %w\", err)")
@ -986,13 +1057,14 @@ func (m *Method) create(buf *file.Buffer, replace bool) error {
buf.L("}")
}
if mapping.Type == ReferenceTable || mapping.Type == AssociationTable {
switch mapping.Type {
case ReferenceTable, AssociationTable:
buf.L("}")
buf.N()
buf.L("return nil")
} else if mapping.Type == MapTable {
case MapTable:
buf.L("return nil")
} else {
default:
buf.L("return id, nil")
}
@ -1135,7 +1207,6 @@ func (m *Method) update(buf *file.Buffer) error {
}
}
}()
}
nk := mapping.NaturalKey()
@ -1160,12 +1231,12 @@ func (m *Method) update(buf *file.Buffer) error {
buf.L("err := Delete%s%s(ctx, db, %sID)", m.config["struct"], lex.Plural(ref), lex.Minuscule(m.config["struct"]))
m.ifErrNotNil(buf, true, "err")
buf.L("// Get new entry IDs.")
buf.L("%s := make([]%s, 0, len(%s%s))", refSlice, mapping.Name, lex.Minuscule(ref), lex.Plural(refMapping.Identifier().Name))
buf.L("%s := make([]%s, 0, len(%s%s))", refSlice, mapping.ImportType(), lex.Minuscule(ref), lex.Plural(refMapping.Identifier().Name))
buf.L("for _, entry := range %s%s {", lex.Minuscule(ref), lex.Plural(refMapping.Identifier().Name))
buf.L("refID, err := Get%sID(ctx, db, entry)", ref)
m.ifErrNotNil(buf, true, "err")
fields := fmt.Sprintf("%sID: %sID, %sID: int(refID)", m.config["struct"], lex.Minuscule(m.config["struct"]), ref)
buf.L("%s = append(%s, %s{%s})", refSlice, refSlice, mapping.Name, fields)
buf.L("%s = append(%s, %s{%s})", refSlice, refSlice, mapping.ImportType(), fields)
buf.L("}")
buf.N()
buf.L("err = Create%s%s(ctx, db, %s)", m.config["struct"], lex.Plural(ref), refSlice)
@ -1313,13 +1384,14 @@ func (m *Method) delete(buf *file.Buffer, deleteOne bool) error {
}
defer m.end(buf)
if mapping.Type == AssociationTable {
switch mapping.Type {
case AssociationTable:
buf.L("stmt, err := Stmt(db, %s)", stmtCodeVar(m.entity, "delete", m.config["struct"]+"ID"))
m.ifErrNotNil(buf, true, fmt.Sprintf(`fmt.Errorf("Failed to get \"%s\" prepared statement: %%w", err)`, stmtCodeVar(m.entity, "delete", m.config["struct"]+"ID")))
buf.L("result, err := stmt.Exec(int(%sID))", lex.Minuscule(m.config["struct"]))
m.ifErrNotNil(buf, true, fmt.Sprintf(`fmt.Errorf("Delete \"%s\" entry failed: %%w", err)`, entityTable(m.entity, m.config["table"])))
} else if mapping.Type == ReferenceTable || mapping.Type == MapTable {
case ReferenceTable, MapTable:
stmtVar := stmtCodeVar(m.entity, "delete")
stmtLocal := stmtVar + "Local"
buf.L("%s := strings.ReplaceAll(%s, \"%%s_id\", fmt.Sprintf(\"%%s_id\", parentColumnPrefix))", stmtLocal, stmtVar)
@ -1331,7 +1403,7 @@ func (m *Method) delete(buf *file.Buffer, deleteOne bool) error {
buf.L("queryStr := fmt.Sprintf(%s, fillParent...)", stmtLocal)
buf.L("result, err := db.ExecContext(ctx, queryStr, referenceID)")
m.ifErrNotNil(buf, true, fmt.Sprintf(`fmt.Errorf("Delete entry for \"%%s_%s\" failed: %%w", parentTablePrefix, err)`, m.entity))
} else {
default:
activeFilters := mapping.ActiveFilters(m.kind)
buf.L("stmt, err := Stmt(db, %s)", stmtCodeVar(m.entity, "delete", FieldNames(activeFilters)...))

View File

@ -15,8 +15,8 @@ import (
"golang.org/x/tools/go/packages"
"github.com/lxc/incus/v6/cmd/generate-database/lex"
"github.com/lxc/incus/v6/shared/util"
"github.com/lxc/incus/v7/cmd/generate-database/lex"
"github.com/lxc/incus/v7/shared/util"
)
// FiltersFromStmt parses all filtering statement defined for the given entity. It
@ -578,6 +578,7 @@ func validateFieldConfig(config url.Values) error {
"join",
"leftjoin",
"joinon",
"joinas",
"omit":
_, err := exactlyOneValue(tag, values)

View File

@ -9,7 +9,7 @@ import (
"github.com/stretchr/testify/require"
"golang.org/x/tools/go/packages"
"github.com/lxc/incus/v6/cmd/generate-database/db"
"github.com/lxc/incus/v7/cmd/generate-database/db"
)
type Person struct {

View File

@ -3,8 +3,8 @@ package db
import (
"fmt"
"github.com/lxc/incus/v6/internal/server/db/cluster"
"github.com/lxc/incus/v6/internal/server/db/node"
"github.com/lxc/incus/v7/internal/server/db/cluster"
"github.com/lxc/incus/v7/internal/server/db/node"
)
// UpdateSchema updates the schema.go file of the cluster and node databases.

View File

@ -12,8 +12,8 @@ import (
"golang.org/x/tools/go/packages"
"github.com/lxc/incus/v6/cmd/generate-database/file"
"github.com/lxc/incus/v6/cmd/generate-database/lex"
"github.com/lxc/incus/v7/cmd/generate-database/file"
"github.com/lxc/incus/v7/cmd/generate-database/lex"
)
// Stmt generates a particular database query statement.
@ -62,7 +62,7 @@ func NewStmt(localPath string, parsedPkgs []*packages.Package, entity, kind stri
// Generate plumbing and wiring code for the desired statement.
func (s *Stmt) Generate(buf *file.Buffer) error {
kind := strings.Split(s.kind, "-by-")[0]
kind, _, _ := strings.Cut(s.kind, "-by-")
switch kind {
case "objects":

View File

@ -19,8 +19,8 @@ func newBuffer() *Buffer {
}
// L accumulates a single line of source code.
func (b *Buffer) L(format string, a ...any) {
fmt.Fprintf(b.buf, format, a...)
func (b *Buffer) L(formatStr string, a ...any) {
fmt.Fprintf(b.buf, formatStr, a...)
b.N()
}

View File

@ -7,7 +7,8 @@ import (
"os"
"strings"
"github.com/lxc/incus/v6/cmd/generate-database/lex"
"github.com/lxc/incus/v7/cmd/generate-database/lex"
"github.com/lxc/incus/v7/shared/logger"
)
const codeGeneratedByLine = `// Code generated by generate-database from the incus project - DO NOT EDIT.`
@ -53,7 +54,8 @@ func Reset(path string, imports []string, buildComment string, iface bool) error
}
}
content := fmt.Sprintf(`%s%s
var content strings.Builder
fmt.Fprintf(&content, `%s%s
package %s
@ -61,19 +63,19 @@ import (
`, buildComment, codeGeneratedByLine, os.Getenv("GOPACKAGE"))
for _, uri := range imports {
content += fmt.Sprintf("\t%q\n", uri)
fmt.Fprintf(&content, "\t%q\n", uri)
}
content += ")\n\n"
content.WriteString(")\n\n")
bytes := []byte(content)
bytes := []byte(content.String())
var err error
if path == "-" {
_, err = os.Stdout.Write(bytes)
} else {
err = os.WriteFile(path, []byte(content), 0o644)
err = os.WriteFile(path, []byte(content.String()), 0o644)
}
if err != nil {
@ -122,7 +124,7 @@ func Append(entity string, path string, snippet Snippet, iface bool) error {
return fmt.Errorf("Open target source code file %q: %w", path, err)
}
defer func() { _ = file.Close() }()
defer logger.WarnOnError(file.Close, "Failed to close file")
}
bytes, err := buffer.code()
@ -167,7 +169,7 @@ func appendInterface(entity string, path string, snippet Snippet) error {
return fmt.Errorf("Open target source code file %q: %w", interfacePath, err)
}
defer func() { _ = file.Close() }()
defer logger.WarnOnError(file.Close, "Failed to close file")
err = snippet.GenerateSignature(buffer)
if err != nil {

View File

@ -1,6 +1,7 @@
package lex
import (
"slices"
"strings"
)
@ -16,7 +17,7 @@ func Plural(s string) string {
return s + "es"
}
if strings.HasSuffix(s, "y") {
if strings.HasSuffix(s, "y") && !slices.Contains([]string{"a", "e", "i", "o", "u"}, string(s[len(s)-2])) {
return s[:len(s)-1] + "ies"
}

View File

@ -3,7 +3,7 @@ package main
import (
"net/http"
"github.com/lxc/incus/v6/internal/server/response"
"github.com/lxc/incus/v7/internal/server/response"
)
// APIEndpoint represents a URL in our API.

View File

@ -9,14 +9,14 @@ import (
"os"
"path/filepath"
incus "github.com/lxc/incus/v6/client"
"github.com/lxc/incus/v6/internal/ports"
"github.com/lxc/incus/v6/internal/server/response"
localvsock "github.com/lxc/incus/v6/internal/server/vsock"
"github.com/lxc/incus/v6/internal/version"
"github.com/lxc/incus/v6/shared/api"
agentAPI "github.com/lxc/incus/v6/shared/api/agent"
localtls "github.com/lxc/incus/v6/shared/tls"
incus "github.com/lxc/incus/v7/client"
"github.com/lxc/incus/v7/internal/ports"
"github.com/lxc/incus/v7/internal/server/response"
localvsock "github.com/lxc/incus/v7/internal/server/vsock"
"github.com/lxc/incus/v7/internal/version"
"github.com/lxc/incus/v7/shared/api"
agentAPI "github.com/lxc/incus/v7/shared/api/agent"
localtls "github.com/lxc/incus/v7/shared/tls"
)
var api10Cmd = APIEndpoint{
@ -33,6 +33,7 @@ var api10 = []APIEndpoint{
operationCmd,
operationWebsocket,
operationWait,
portForwardCmd,
sftpCmd,
stateCmd,
}

View File

@ -5,7 +5,7 @@ import (
"io/fs"
"os"
"gopkg.in/yaml.v3"
"go.yaml.in/yaml/v4"
)
type agentConfig struct {
@ -23,7 +23,7 @@ func loadAgentConfig(d *Daemon) error {
}
cfg := agentConfig{}
err = yaml.Unmarshal(data, &cfg)
err = yaml.Load(data, &cfg)
if err != nil {
return err
}

View File

@ -3,7 +3,7 @@ package main
import (
"sync"
"github.com/lxc/incus/v6/internal/server/events"
"github.com/lxc/incus/v7/internal/server/events"
)
// A Daemon can respond to requests from a shared client.

View File

@ -9,20 +9,23 @@ import (
"strings"
"time"
incus "github.com/lxc/incus/v6/client"
"github.com/lxc/incus/v6/internal/server/daemon"
"github.com/lxc/incus/v6/internal/server/device/config"
localUtil "github.com/lxc/incus/v6/internal/server/util"
api "github.com/lxc/incus/v6/shared/api/guest"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v6/shared/util"
incus "github.com/lxc/incus/v7/client"
"github.com/lxc/incus/v7/internal/server/daemon"
"github.com/lxc/incus/v7/internal/server/device/config"
localUtil "github.com/lxc/incus/v7/internal/server/util"
api "github.com/lxc/incus/v7/shared/api/guest"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/util"
)
// DevIncusServer creates an http.Server capable of handling requests against the
// /dev/incus Unix socket endpoint created inside VMs.
func devIncusServer(d *Daemon) *http.Server {
return &http.Server{
Handler: devIncusAPI(d),
Handler: devIncusAPI(d),
IdleTimeout: 30 * time.Second,
ReadHeaderTimeout: 3 * time.Second,
ReadTimeout: 3 * time.Second,
}
}
@ -216,7 +219,7 @@ var DevIncusDevicesGet = devIncusHandler{"/1.0/devices", func(d *Daemon, w http.
}}
var handlers = []devIncusHandler{
{"/", func(d *Daemon, w http.ResponseWriter, r *http.Request) *devIncusResponse {
{"/{$}", func(d *Daemon, w http.ResponseWriter, r *http.Request) *devIncusResponse {
return okResponse([]string{"/1.0"}, "json")
}},
DevIncusAPIGet,

View File

@ -7,11 +7,11 @@ import (
"strings"
"time"
"github.com/lxc/incus/v6/internal/server/events"
"github.com/lxc/incus/v6/internal/server/response"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v6/shared/ws"
"github.com/lxc/incus/v7/internal/server/events"
"github.com/lxc/incus/v7/internal/server/response"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/ws"
)
var eventsCmd = APIEndpoint{
@ -56,7 +56,7 @@ func eventsSocket(d *Daemon, r *http.Request, w http.ResponseWriter) error {
return err
}
defer func() { _ = conn.Close() }() // Ensure listener below ends when this function ends.
defer logger.WarnOnError(conn.Close, "Failed to close connection") // Ensure listener below ends when this function ends.
listenerConnection = events.NewWebsocketListenerConnection(conn)
} else {
@ -70,7 +70,7 @@ func eventsSocket(d *Daemon, r *http.Request, w http.ResponseWriter) error {
return err
}
defer func() { _ = conn.Close() }() // Ensure listener below ends when this function ends.
defer logger.WarnOnError(conn.Close, "Failed to close connection") // Ensure listener below ends when this function ends.
listenerConnection, err = events.NewStreamListenerConnection(conn)
if err != nil {

View File

@ -17,14 +17,14 @@ import (
"github.com/gorilla/websocket"
"github.com/lxc/incus/v6/internal/jmap"
"github.com/lxc/incus/v6/internal/server/db/operationtype"
"github.com/lxc/incus/v6/internal/server/operations"
"github.com/lxc/incus/v6/internal/server/response"
internalUtil "github.com/lxc/incus/v6/internal/util"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v6/shared/ws"
"github.com/lxc/incus/v7/internal/jmap"
"github.com/lxc/incus/v7/internal/server/db/operationtype"
"github.com/lxc/incus/v7/internal/server/operations"
"github.com/lxc/incus/v7/internal/server/response"
internalUtil "github.com/lxc/incus/v7/internal/util"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/ws"
)
const (
@ -321,10 +321,7 @@ func (s *execWs) Do(op *operations.Operation) error {
l := logger.AddContext(logger.Ctx{"PID": cmd.Process.Pid, "interactive": s.interactive})
l.Debug("Instance process started")
wgEOF.Add(1)
go func() {
defer wgEOF.Done()
wgEOF.Go(func() {
l.Debug("Exec control handler started")
defer l.Debug("Exec control handler finished")
@ -372,13 +369,10 @@ func (s *execWs) Do(op *operations.Operation) error {
osHandleExecControl(control, s, ptys[0], cmd, l)
}
}()
})
if s.interactive {
wgEOF.Add(1)
go func() {
defer wgEOF.Done()
wgEOF.Go(func() {
l.Debug("Exec mirror websocket started", logger.Ctx{"number": 0})
defer l.Debug("Exec mirror websocket finished", logger.Ctx{"number": 0})
@ -391,7 +385,7 @@ func (s *execWs) Do(op *operations.Operation) error {
<-readDone
<-writeDone
_ = conn.Close()
}()
})
} else {
wgEOF.Add(len(ttys) - 1)
for i := range ttys {

View File

@ -1,3 +1,5 @@
//go:debug httpmuxgo121=0
package main
import (
@ -7,7 +9,7 @@ import (
"github.com/spf13/cobra"
"github.com/lxc/incus/v6/internal/version"
"github.com/lxc/incus/v7/internal/version"
)
type cmdGlobal struct {
@ -23,7 +25,7 @@ type cmdGlobal struct {
func main() {
// agent command (main)
agentCmd := cmdAgent{}
app := agentCmd.Command()
app := agentCmd.command()
app.SilenceUsage = true
app.CompletionOptions = cobra.CompletionOptions{DisableDefaultCmd: true}

View File

@ -4,20 +4,20 @@ import (
"context"
"encoding/json"
"fmt"
"io"
"net/http"
"os"
"os/signal"
"slices"
"strings"
"sync"
"time"
"github.com/spf13/cobra"
"github.com/lxc/incus/v6/internal/server/instance/instancetype"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v6/shared/subprocess"
"github.com/lxc/incus/v6/shared/util"
"github.com/lxc/incus/v7/internal/server/instance/instancetype"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/subprocess"
"github.com/lxc/incus/v7/shared/util"
)
var (
@ -29,7 +29,7 @@ type cmdAgent struct {
global *cmdGlobal
}
func (c *cmdAgent) Command() *cobra.Command {
func (c *cmdAgent) command() *cobra.Command {
cmd := &cobra.Command{}
cmd.Use = "incus-agent [--debug]"
cmd.Short = "Incus virtual machine agent"
@ -40,12 +40,12 @@ func (c *cmdAgent) Command() *cobra.Command {
It will normally be started through init scripts present or injected
into the virtual machine.
`
cmd.RunE = c.Run
cmd.RunE = c.run
return cmd
}
func (c *cmdAgent) Run(cmd *cobra.Command, args []string) error {
func (c *cmdAgent) run(cmd *cobra.Command, args []string) error {
if c.global.flagService {
return runService("Incus-Agent", c)
}
@ -79,7 +79,7 @@ func (c *cmdAgent) Run(cmd *cobra.Command, args []string) error {
}
// Copy the data.
_, err = io.Copy(dst, src)
_, err = util.SafeCopy(dst, src)
if err != nil {
return err
}
@ -90,6 +90,12 @@ func (c *cmdAgent) Run(cmd *cobra.Command, args []string) error {
if err != nil {
return err
}
} else if util.PathExists("/etc/rc.conf.d/hostname") && slices.Contains(files, "/etc/rc.conf.d/hostname") {
// Set the hostname.
_, err := subprocess.RunCommand("service", "hostname", "restart")
if err != nil {
return err
}
}
// Run cloud-init.
@ -117,9 +123,11 @@ func (c *cmdAgent) Run(cmd *cobra.Command, args []string) error {
// Load the kernel driver.
err = osLoadModules()
if err != nil {
return err
logger.Error("Failed to check for agent server compatibility", logger.Ctx{"error": err})
}
canStartServer := err == nil
d := newDaemon(c.global.flagLogDebug, c.global.flagLogVerbose, c.global.flagSecretsLocation)
// Load the agent configuration.
@ -133,33 +141,35 @@ func (c *cmdAgent) Run(cmd *cobra.Command, args []string) error {
c.mountHostShares()
}
// Start the server.
err = startHTTPServer(d, c.global.flagLogDebug)
if err != nil {
return fmt.Errorf("Failed to start HTTP server: %w", err)
}
// Check whether we should start the DevIncus server in the early setup. This way, /dev/incus/sock
// will be available for any systemd services starting after the agent.
if util.PathExists("agent.conf") {
f, err := os.Open("agent.conf")
if canStartServer {
// Start the server.
err = startHTTPServer(d, c.global.flagLogDebug)
if err != nil {
return err
return fmt.Errorf("Failed to start HTTP server: %w", err)
}
err = setConnectionInfo(d, f)
if err != nil {
_ = f.Close()
return err
}
_ = f.Close()
if d.DevIncusEnabled {
err = startDevIncusServer(d)
// Check whether we should start the DevIncus server in the early setup. This way, /dev/incus/sock
// will be available for any systemd services starting after the agent.
if util.PathExists("agent.conf") {
f, err := os.Open("agent.conf")
if err != nil {
return err
}
err = setConnectionInfo(d, f)
if err != nil {
_ = f.Close()
return err
}
_ = f.Close()
if d.DevIncusEnabled {
err = startDevIncusServer(d)
if err != nil {
return err
}
}
}
}
@ -204,8 +214,24 @@ func (c *cmdAgent) Run(cmd *cobra.Command, args []string) error {
// startStatusNotifier sends status of agent to vserial ring buffer every 10s or when context is done.
// Returns a function that can be used to update the running status to STOPPED in the ring buffer.
func (c *cmdAgent) startStatusNotifier(ctx context.Context, chConnected <-chan struct{}) context.CancelFunc {
msgWithState := func(status string) []string {
msg := []string{status}
// If there's no server running, send state data through the ring-buffer.
_, ok := servers["http"]
if !ok {
b, err := json.Marshal(renderState())
if err == nil {
logger.Error("Including VM state in status message")
msg = append(msg, string(b))
}
}
return msg
}
// Write initial started status.
_ = c.writeStatus("STARTED")
_ = c.writeStatus(msgWithState("STARTED")...)
wg := sync.WaitGroup{}
exitCtx, exit := context.WithCancel(ctx) // Allows manual synchronous cancellation via cancel function.
@ -214,10 +240,7 @@ func (c *cmdAgent) startStatusNotifier(ctx context.Context, chConnected <-chan s
wg.Wait() // Wait for the go routine to actually finish.
}
wg.Add(1)
go func() {
defer wg.Done() // Signal to cancel function that we are done.
wg.Go(func() {
ticker := time.NewTicker(time.Duration(time.Second) * 5)
defer ticker.Stop()
@ -226,28 +249,28 @@ func (c *cmdAgent) startStatusNotifier(ctx context.Context, chConnected <-chan s
case <-chConnected:
_ = c.writeStatus("CONNECTED") // Indicate we were able to connect.
case <-ticker.C:
_ = c.writeStatus("STARTED") // Re-populate status periodically in case the daemon restarts.
_ = c.writeStatus(msgWithState("STARTED")...) // Re-populate status periodically in case the daemon restarts.
case <-exitCtx.Done():
_ = c.writeStatus("STOPPED") // Indicate we are stopping and exit go routine.
return
}
}
}()
})
return cancel
}
// writeStatus writes a status code to the vserial ring buffer used to detect agent status on host.
func (c *cmdAgent) writeStatus(status string) error {
if util.PathExists("/dev/virtio-ports/org.linuxcontainers.incus") {
vSerial, err := os.OpenFile("/dev/virtio-ports/org.linuxcontainers.incus", os.O_RDWR, 0o600)
func (c *cmdAgent) writeStatus(status ...string) error {
if util.PathExists(osVioSerialPath) {
vSerial, err := os.OpenFile(osVioSerialPath, os.O_RDWR, 0o600)
if err != nil {
return err
}
defer vSerial.Close()
defer logger.WarnOnError(vSerial.Close, "Failed to close vserial device")
_, err = vSerial.Write(fmt.Appendf(nil, "%s\n", status))
_, err = vSerial.Write([]byte(strings.Join(status, "\n") + "\n"))
if err != nil {
return err
}

View File

@ -3,10 +3,13 @@ package main
import (
"errors"
"net/http"
"time"
"github.com/lxc/incus/v6/internal/server/metrics"
"github.com/lxc/incus/v6/internal/server/response"
"github.com/lxc/incus/v6/shared/logger"
"github.com/shirou/gopsutil/v4/host"
"github.com/lxc/incus/v7/internal/server/metrics"
"github.com/lxc/incus/v7/internal/server/response"
"github.com/lxc/incus/v7/shared/logger"
)
var metricsCmd = APIEndpoint{
@ -55,6 +58,8 @@ func metricsGet(d *Daemon, r *http.Request) response.Response {
}
out.ProcessesTotal = uint64(osGetProcessesState())
out.BootTimeSeconds = uint64(osGetBootTime())
out.TimeSeconds = uint64(time.Now().Unix())
cpuStats, err := osGetCPUMetrics(d)
if err != nil {
@ -88,3 +93,12 @@ func getNetworkMetrics(d *Daemon) ([]metrics.NetworkMetrics, error) {
return out, nil
}
func osGetBootTime() int64 {
bootTime, err := host.BootTime()
if err != nil {
return -1
}
return int64(bootTime)
}

View File

@ -5,8 +5,8 @@ import (
"net"
"sync"
"github.com/lxc/incus/v6/internal/server/util"
localtls "github.com/lxc/incus/v6/shared/tls"
"github.com/lxc/incus/v7/internal/server/util"
localtls "github.com/lxc/incus/v7/shared/tls"
)
// A variation of the standard tls.Listener that supports atomically swapping

View File

@ -9,11 +9,11 @@ import (
"strings"
"time"
"github.com/lxc/incus/v6/internal/jmap"
"github.com/lxc/incus/v6/internal/server/operations"
"github.com/lxc/incus/v6/internal/server/response"
localUtil "github.com/lxc/incus/v6/internal/server/util"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/internal/jmap"
"github.com/lxc/incus/v7/internal/server/operations"
"github.com/lxc/incus/v7/internal/server/response"
localUtil "github.com/lxc/incus/v7/internal/server/util"
"github.com/lxc/incus/v7/shared/api"
)
var operationCmd = APIEndpoint{

176
cmd/incus-agent/os_bsd.go Normal file
View File

@ -0,0 +1,176 @@
//go:build darwin || freebsd
package main
import (
"bytes"
"errors"
"fmt"
"io"
"net"
"os"
"os/exec"
"strconv"
"syscall"
"unsafe"
"golang.org/x/sys/unix"
"github.com/lxc/incus/v7/internal/version"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/logger"
)
var (
osBaseWorkingDirectory = "/"
osAgentConfigPath = "/usr/local/etc/incus-agent.yml"
osVioSerialPath = "/dev/virtio-ports/org.linuxcontainers.incus"
)
func runService(name string, agentCmd *cmdAgent) error {
return errors.New("Not implemented.")
}
func parseBytes(b []byte) string {
n := bytes.IndexByte(b, 0)
if n < 0 {
n = len(b)
}
return string(b[:n])
}
func osGetEnvironment() (*api.ServerEnvironment, error) {
uname := unix.Utsname{}
err := unix.Uname(&uname)
if err != nil {
return nil, err
}
env := &api.ServerEnvironment{
Kernel: parseBytes(uname.Sysname[:]),
KernelArchitecture: parseBytes(uname.Machine[:]),
KernelVersion: parseBytes(uname.Release[:]),
Server: "incus-agent",
ServerPid: os.Getpid(),
ServerVersion: version.Version,
ServerName: parseBytes(uname.Nodename[:]),
}
return env, nil
}
// setPtySize is the same as linux.SetPtySize for BSD-likes.
func setPtySize(fd int, width int, height int) (err error) {
var dimensions [4]uint16
dimensions[0] = uint16(height)
dimensions[1] = uint16(width)
_, _, errno := unix.Syscall6(unix.SYS_IOCTL, uintptr(fd), uintptr(unix.TIOCSWINSZ), uintptr(unsafe.Pointer(&dimensions)), 0, 0, 0)
if errno != 0 {
return errno
}
return nil
}
func osGetInteractiveConsole(s *execWs) (*os.File, *os.File, error) {
pty, tty, err := openPty(int64(s.uid), int64(s.gid))
if err != nil {
return nil, nil, err
}
if s.width > 0 && s.height > 0 {
_ = setPtySize(int(pty.Fd()), s.width, s.height)
}
return pty, tty, nil
}
func osPrepareExecCommand(s *execWs, cmd *exec.Cmd) {
cmd.SysProcAttr = &syscall.SysProcAttr{
Credential: &syscall.Credential{
Uid: s.uid,
Gid: s.gid,
},
// Creates a new session if the calling process is not a process group leader.
// The calling process is the leader of the new session, the process group leader of
// the new process group, and has no controlling terminal.
// This is important to allow remote shells to handle ctrl+c.
Setsid: true,
}
// Make the given terminal the controlling terminal of the calling process.
// The calling process must be a session leader and not have a controlling terminal already.
// This is important as allows ctrl+c to work as expected for non-shell programs.
if s.interactive {
cmd.SysProcAttr.Setctty = true
}
}
func osHandleExecControl(control api.InstanceExecControl, s *execWs, pty io.ReadWriteCloser, cmd *exec.Cmd, l logger.Logger) {
if control.Command == "window-resize" && s.interactive {
winchWidth, err := strconv.Atoi(control.Args["width"])
if err != nil {
l.Debug("Unable to extract window width", logger.Ctx{"err": err})
return
}
winchHeight, err := strconv.Atoi(control.Args["height"])
if err != nil {
l.Debug("Unable to extract window height", logger.Ctx{"err": err})
return
}
osFile, ok := pty.(*os.File)
if ok {
err = setPtySize(int(osFile.Fd()), winchWidth, winchHeight)
if err != nil {
l.Debug("Failed to set window size", logger.Ctx{"err": err, "width": winchWidth, "height": winchHeight})
return
}
}
} else if control.Command == "signal" {
err := unix.Kill(cmd.Process.Pid, unix.Signal(control.Signal))
if err != nil {
l.Debug("Failed forwarding signal", logger.Ctx{"err": err, "signal": control.Signal})
return
}
l.Info("Forwarded signal", logger.Ctx{"signal": control.Signal})
}
}
// osExitStatus is is the same as linux.ExitStatus for BSD-likes.
func osExitStatus(err error) (int, error) {
if err == nil {
return 0, err // No error exit status.
}
var exitErr *exec.ExitError
// Detect and extract ExitError to check the embedded exit status.
if errors.As(err, &exitErr) {
// If the process was signaled, extract the signal.
status, isWaitStatus := exitErr.Sys().(unix.WaitStatus)
if isWaitStatus && status.Signaled() {
return 128 + int(status.Signal()), nil // 128 + n == Fatal error signal "n"
}
// Otherwise capture the exit status from the command.
return exitErr.ExitCode(), nil
}
return -1, err // Not able to extract an exit status.
}
func osGetListener(port int64) (net.Listener, error) {
l, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
if err != nil {
return nil, fmt.Errorf("Failed to listen on TCP: %w", err)
}
logger.Info("Started TCP listener")
return l, nil
}

View File

@ -1,10 +1,9 @@
//go:build darwin || windows
//go:build darwin || freebsd || windows
package main
import (
"context"
"fmt"
"io"
"math"
"net"
@ -18,9 +17,8 @@ import (
psUtilNet "github.com/shirou/gopsutil/v4/net"
"github.com/shirou/gopsutil/v4/process"
"github.com/lxc/incus/v6/internal/server/metrics"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v7/internal/server/metrics"
"github.com/lxc/incus/v7/shared/api"
)
var (
@ -29,11 +27,6 @@ var (
osGuestAPISupport = false
)
func osLoadModules() error {
// No OS drivers to load by default.
return nil
}
func osGetCPUMetrics(d *Daemon) ([]metrics.CPUMetrics, error) {
cpuTimes, err := cpu.Times(true)
if err != nil {
@ -273,14 +266,3 @@ func osReconfigureNetworkInterfaces() {
func osExecWrapper(ctx context.Context, pty io.ReadWriteCloser) io.ReadWriteCloser {
return pty
}
func osGetListener(port int64) (net.Listener, error) {
l, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
if err != nil {
return nil, fmt.Errorf("Failed to listen on TCP: %w", err)
}
logger.Info("Started TCP listener")
return l, nil
}

View File

@ -3,13 +3,10 @@
package main
import (
"bytes"
"errors"
"fmt"
"io"
"io/fs"
"os"
"os/exec"
"sort"
"strconv"
"strings"
@ -19,50 +16,15 @@ import (
"github.com/shirou/gopsutil/v4/disk"
"golang.org/x/sys/unix"
"github.com/lxc/incus/v6/internal/server/metrics"
"github.com/lxc/incus/v6/internal/version"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v6/shared/revert"
"github.com/lxc/incus/v6/shared/subprocess"
"github.com/lxc/incus/v7/internal/server/metrics"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/revert"
"github.com/lxc/incus/v7/shared/subprocess"
)
var (
osBaseWorkingDirectory = "/"
osAgentConfigPath = "/usr/local/etc/incus-agent.yml"
)
func parseBytes(b []byte) string {
n := bytes.IndexByte(b, 0)
if n < 0 {
n = len(b)
}
return string(b[:n])
}
func runService(name string, agentCmd *cmdAgent) error {
return errors.New("Not implemented.")
}
func osGetEnvironment() (*api.ServerEnvironment, error) {
uname := unix.Utsname{}
err := unix.Uname(&uname)
if err != nil {
return nil, err
}
env := &api.ServerEnvironment{
Kernel: parseBytes(uname.Sysname[:]),
KernelArchitecture: parseBytes(uname.Machine[:]),
KernelVersion: parseBytes(uname.Release[:]),
Server: "incus-agent",
ServerPid: os.Getpid(),
ServerVersion: version.Version,
ServerName: parseBytes(uname.Nodename[:]),
}
return env, nil
func osLoadModules() error {
// No OS drivers to load by default.
return nil
}
func osMountShared(src string, dst string, fstype string, opts []string) error {
@ -378,110 +340,6 @@ func openPty(uid, gid int64) (*os.File, *os.File, error) {
return ptx, pty, nil
}
// setPtySize is the same as linux.SetPtySize for Darwin.
func setPtySize(fd int, width int, height int) (err error) {
var dimensions [4]uint16
dimensions[0] = uint16(height)
dimensions[1] = uint16(width)
_, _, errno := unix.Syscall6(unix.SYS_IOCTL, uintptr(fd), uintptr(unix.TIOCSWINSZ), uintptr(unsafe.Pointer(&dimensions)), 0, 0, 0)
if errno != 0 {
return errno
}
return nil
}
func osGetInteractiveConsole(s *execWs) (*os.File, *os.File, error) {
pty, tty, err := openPty(int64(s.uid), int64(s.gid))
if err != nil {
return nil, nil, err
}
if s.width > 0 && s.height > 0 {
_ = setPtySize(int(pty.Fd()), s.width, s.height)
}
return pty, tty, nil
}
func osPrepareExecCommand(s *execWs, cmd *exec.Cmd) {
cmd.SysProcAttr = &syscall.SysProcAttr{
Credential: &syscall.Credential{
Uid: s.uid,
Gid: s.gid,
},
// Creates a new session if the calling process is not a process group leader.
// The calling process is the leader of the new session, the process group leader of
// the new process group, and has no controlling terminal.
// This is important to allow remote shells to handle ctrl+c.
Setsid: true,
}
// Make the given terminal the controlling terminal of the calling process.
// The calling process must be a session leader and not have a controlling terminal already.
// This is important as allows ctrl+c to work as expected for non-shell programs.
if s.interactive {
cmd.SysProcAttr.Setctty = true
}
}
func osHandleExecControl(control api.InstanceExecControl, s *execWs, pty io.ReadWriteCloser, cmd *exec.Cmd, l logger.Logger) {
if control.Command == "window-resize" && s.interactive {
winchWidth, err := strconv.Atoi(control.Args["width"])
if err != nil {
l.Debug("Unable to extract window width", logger.Ctx{"err": err})
return
}
winchHeight, err := strconv.Atoi(control.Args["height"])
if err != nil {
l.Debug("Unable to extract window height", logger.Ctx{"err": err})
return
}
osFile, ok := pty.(*os.File)
if ok {
err = setPtySize(int(osFile.Fd()), winchWidth, winchHeight)
if err != nil {
l.Debug("Failed to set window size", logger.Ctx{"err": err, "width": winchWidth, "height": winchHeight})
return
}
}
} else if control.Command == "signal" {
err := unix.Kill(cmd.Process.Pid, unix.Signal(control.Signal))
if err != nil {
l.Debug("Failed forwarding signal", logger.Ctx{"err": err, "signal": control.Signal})
return
}
l.Info("Forwarded signal", logger.Ctx{"signal": control.Signal})
}
}
// osExitStatus is is the same as linux.ExitStatus for Darwin.
func osExitStatus(err error) (int, error) {
if err == nil {
return 0, err // No error exit status.
}
var exitErr *exec.ExitError
// Detect and extract ExitError to check the embedded exit status.
if errors.As(err, &exitErr) {
// If the process was signaled, extract the signal.
status, isWaitStatus := exitErr.Sys().(unix.WaitStatus)
if isWaitStatus && status.Signaled() {
return 128 + int(status.Signal()), nil // 128 + n == Fatal error signal "n"
}
// Otherwise capture the exit status from the command.
return exitErr.ExitCode(), nil
}
return -1, err // Not able to extract an exit status.
}
func osSetEnv(post *api.InstanceExecPost, env map[string]string) {
env["PATH"] = "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"

View File

@ -0,0 +1,271 @@
//go:build freebsd
package main
import (
"context"
"errors"
"fmt"
"net"
"os"
"sort"
"strings"
"syscall"
"time"
"unsafe"
"github.com/shirou/gopsutil/v4/disk"
"golang.org/x/sys/unix"
"github.com/lxc/incus/v7/internal/server/metrics"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/osarch"
"github.com/lxc/incus/v7/shared/revert"
"github.com/lxc/incus/v7/shared/subprocess"
"github.com/lxc/incus/v7/shared/util"
)
func osLoadModules() error {
// No OS drivers to load by default.
return nil
}
// isMountPoint returns true if path is a mount point.
func isMountPoint(path string) bool {
// Get the stat details.
stat, err := os.Stat(path)
if err != nil {
return false
}
rootStat, err := os.Lstat(path + "/..")
if err != nil {
return false
}
return stat.Sys().(*syscall.Stat_t).Dev != rootStat.Sys().(*syscall.Stat_t).Dev
}
func osMountShared(src string, dst string, fstype string, opts []string) error {
if fstype != "9p" {
return errors.New("Only 9p shares are supported on FreeBSD")
}
// Convert relative mounts to absolute from / otherwise dir creation fails or mount fails.
if !strings.HasPrefix(dst, "/") {
dst = fmt.Sprintf("/%s", dst)
}
// Check mount path.
if !util.PathExists(dst) {
// Create the mount path.
err := os.MkdirAll(dst, 0o755)
if err != nil {
return fmt.Errorf("Failed to create mount target %q", dst)
}
} else if isMountPoint(dst) {
// Already mounted.
return nil
}
args := []string{"-t", "p9fs", src, dst}
for _, opt := range opts {
args = append(args, "-o", opt)
}
_, err := subprocess.RunCommand("mount", args...)
return err
}
// osUmount is currently not used, but it is implemented just in case.
func osUmount(src string, dst string, fstype string) error {
if fstype != "9p" {
return errors.New("Only 9p shares are supported on FreeBSD")
}
_, err := subprocess.RunCommand("umount", src)
return err
}
func osGetFilesystemMetrics(d *Daemon) ([]metrics.FilesystemMetrics, error) {
partitions, err := disk.Partitions(true)
if err != nil {
return nil, err
}
sort.Slice(partitions, func(i, j int) bool {
return partitions[i].Mountpoint < partitions[j].Mountpoint
})
fsMetrics := make([]metrics.FilesystemMetrics, 0, len(partitions))
for _, partition := range partitions {
var stat syscall.Statfs_t
err = syscall.Statfs(partition.Mountpoint, &stat)
if err != nil {
continue
}
fsMetrics = append(fsMetrics, metrics.FilesystemMetrics{
Device: partition.Device,
Mountpoint: partition.Mountpoint,
FSType: partition.Fstype,
AvailableBytes: uint64(stat.Bavail) * stat.Bsize,
FreeBytes: stat.Bfree * stat.Bsize,
SizeBytes: stat.Blocks * stat.Bsize,
})
}
return fsMetrics, nil
}
func osGetOSState() *api.InstanceStateOSInfo {
osInfo := &api.InstanceStateOSInfo{}
// Get information about the OS.
lsbRelease, err := osarch.GetOSRelease()
if err == nil {
osInfo.OS = lsbRelease["NAME"]
osInfo.OSVersion = lsbRelease["VERSION_ID"]
}
// Get information about the kernel version.
uname := unix.Utsname{}
err = unix.Uname(&uname)
if err == nil {
osInfo.KernelVersion = parseBytes(uname.Release[:])
}
// Get the hostname.
hostname, err := os.Hostname()
if err == nil {
osInfo.Hostname = hostname
}
// Get the FQDN. To avoid needing to run `hostname -f`, do a reverse host lookup for 127.0.1.1, and if found, return the first hostname as the FQDN.
ctx, cancel := context.WithTimeout(context.TODO(), 100*time.Millisecond)
defer cancel()
var r net.Resolver
fqdn, err := r.LookupAddr(ctx, "127.0.0.1")
if err == nil && len(fqdn) > 0 {
// Take the first returned hostname and trim the trailing dot.
osInfo.FQDN = strings.TrimSuffix(fqdn[0], ".")
}
return osInfo
}
// openPty is is the same as linux.OpenPty for FreeBSD.
func openPty(uid, gid int64) (*os.File, *os.File, error) {
reverter := revert.New()
defer reverter.Fail()
fd, err := unix.Open("/dev/ptmx", unix.O_RDWR|unix.O_CLOEXEC|unix.O_NOCTTY, 0)
if err != nil {
return nil, nil, err
}
ptx := os.NewFile(uintptr(fd), "/dev/pts/ptmx")
reverter.Add(func() { _ = ptx.Close() })
// Get the pty side.
id := 0
_, _, errno := unix.Syscall(unix.SYS_IOCTL, uintptr(ptx.Fd()), unix.TIOCGPTN, uintptr(unsafe.Pointer(&id)))
if errno != 0 {
return nil, nil, unix.Errno(errno)
}
ptyPath := fmt.Sprintf("/dev/pts/%d", id)
ptyFd, err := unix.Open(ptyPath, unix.O_NOCTTY|unix.O_CLOEXEC|os.O_RDWR, 0)
if err != nil {
return nil, nil, err
}
pty := os.NewFile(uintptr(ptyFd), ptyPath)
reverter.Add(func() { _ = pty.Close() })
// Configure both sides
for _, entry := range []*os.File{ptx, pty} {
// Get termios.
t, err := unix.IoctlGetTermios(int(entry.Fd()), unix.TIOCGETA)
if err != nil {
return nil, nil, err
}
// Set flags.
t.Cflag |= unix.IMAXBEL
t.Cflag |= unix.BRKINT
t.Cflag |= unix.IXANY
t.Cflag |= unix.HUPCL
// Set termios.
err = unix.IoctlSetTermios(int(entry.Fd()), unix.TIOCSETA, t)
if err != nil {
return nil, nil, err
}
// Set the default window size.
sz := &unix.Winsize{
Col: 80,
Row: 25,
}
err = unix.IoctlSetWinsize(int(entry.Fd()), unix.TIOCSWINSZ, sz)
if err != nil {
return nil, nil, err
}
// Set CLOEXEC.
_, _, errno = unix.Syscall(unix.SYS_FCNTL, uintptr(entry.Fd()), unix.F_SETFD, unix.FD_CLOEXEC)
if errno != 0 {
return nil, nil, unix.Errno(errno)
}
}
// Fix the ownership of the pty side.
err = unix.Fchown(int(pty.Fd()), int(uid), int(gid))
if err != nil {
return nil, nil, err
}
reverter.Success()
return ptx, pty, nil
}
func osSetEnv(post *api.InstanceExecPost, env map[string]string) {
// Set default value for PATH.
_, ok := env["PATH"]
if !ok {
env["PATH"] = "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
}
// If running as root, set some env variables.
if post.User == 0 {
// Set default value for HOME.
_, ok = env["HOME"]
if !ok {
env["HOME"] = "/root"
}
// Set default value for USER.
_, ok = env["USER"]
if !ok {
env["USER"] = "root"
}
}
// Set default value for LANG.
_, ok = env["LANG"]
if !ok {
env["LANG"] = "C.UTF-8"
}
// Set the default working directory.
if post.Cwd == "" {
post.Cwd = env["HOME"]
if post.Cwd == "" {
post.Cwd = osBaseWorkingDirectory
}
}
}

View File

@ -23,20 +23,21 @@ import (
"time"
"github.com/mdlayher/vsock"
"github.com/shirou/gopsutil/v4/process"
"golang.org/x/sys/unix"
"github.com/lxc/incus/v6/internal/linux"
"github.com/lxc/incus/v6/internal/ports"
deviceConfig "github.com/lxc/incus/v6/internal/server/device/config"
"github.com/lxc/incus/v6/internal/server/ip"
"github.com/lxc/incus/v6/internal/server/metrics"
"github.com/lxc/incus/v6/internal/version"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v6/shared/osarch"
"github.com/lxc/incus/v6/shared/revert"
"github.com/lxc/incus/v6/shared/subprocess"
"github.com/lxc/incus/v6/shared/util"
"github.com/lxc/incus/v7/internal/linux"
"github.com/lxc/incus/v7/internal/ports"
deviceConfig "github.com/lxc/incus/v7/internal/server/device/config"
"github.com/lxc/incus/v7/internal/server/ip"
"github.com/lxc/incus/v7/internal/server/metrics"
"github.com/lxc/incus/v7/internal/version"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/osarch"
"github.com/lxc/incus/v7/shared/revert"
"github.com/lxc/incus/v7/shared/subprocess"
"github.com/lxc/incus/v7/shared/util"
)
var (
@ -51,6 +52,7 @@ var (
osMetricsSupported = true
osGuestAPISupport = true
osAgentConfigPath = "/etc/incus-agent.yml"
osVioSerialPath = "/dev/virtio-ports/org.linuxcontainers.incus"
)
func runService(name string, agentCmd *cmdAgent) error {
@ -130,11 +132,7 @@ func osMountShared(src string, dst string, fstype string, opts []string) error {
}
_, err := subprocess.RunCommand("mount", args...)
if err == nil {
return err
}
return nil
return err
}
func osUmount(src string, dst string, fstype string) error {
@ -582,24 +580,9 @@ func osGetNetworkState() map[string]api.InstanceStateNetwork {
}
func osGetProcessesState() int64 {
pids := []int64{1}
// Go through the pid list, adding new pids at the end so we go through them all.
for i := range pids {
fname := fmt.Sprintf("/proc/%d/task/%d/children", pids[i], pids[i])
fcont, err := os.ReadFile(fname)
if err != nil {
// The process terminated during execution of this loop.
continue
}
content := strings.Split(string(fcont), " ")
for j := range content {
pid, err := strconv.ParseInt(content[j], 10, 64)
if err == nil {
pids = append(pids, pid)
}
}
pids, err := process.Pids()
if err != nil {
return -1
}
return int64(len(pids))

View File

@ -3,9 +3,11 @@
package main
import (
"context"
"errors"
"fmt"
"io"
"net"
"os"
"os/exec"
"runtime"
@ -13,25 +15,102 @@ import (
"strings"
"time"
"github.com/FuturFusion/vsock"
"github.com/shirou/gopsutil/v4/disk"
"golang.org/x/sys/windows"
"golang.org/x/sys/windows/registry"
"golang.org/x/sys/windows/svc"
"golang.org/x/sys/windows/svc/debug"
"golang.org/x/sys/windows/svc/eventlog"
"golang.org/x/sys/windows/svc/mgr"
"github.com/lxc/incus/v6/internal/server/metrics"
"github.com/lxc/incus/v6/internal/version"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v7/internal/ports"
"github.com/lxc/incus/v7/internal/server/metrics"
"github.com/lxc/incus/v7/internal/version"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/logger"
)
var (
// https://dev.to/cosmic_predator/writing-a-windows-service-in-go-1d1m
osBaseWorkingDirectory = "C:\\"
osAgentConfigPath = "C:\\Program Files\\Incus-Agent\\incus-agent.yml"
osVioSerialPath = `\\.\org.linuxcontainers.incus`
)
// Check for the VirtioSocketWSP service for vsock support.
func osLoadModules() error {
m, err := mgr.Connect()
if err != nil {
return err
}
defer m.Disconnect()
viosockSvc := "VirtioSocketWSP"
s, err := m.OpenService(viosockSvc)
if err != nil {
return err
}
defer s.Close()
tryStart := func() (bool, error) {
status, err := s.Query()
if err != nil {
return false, err
}
if status.State == svc.Stopped {
err = s.Start()
if err != nil {
return false, err
}
}
return status.State == svc.Running, nil
}
ctx, cancel := context.WithTimeout(context.TODO(), time.Second*5)
defer cancel()
// Try for 5s to start the service.
for {
select {
case <-ctx.Done():
return fmt.Errorf("Unable to start viosock service: %w", ctx.Err())
default:
running, err := tryStart()
if err != nil {
return err
}
if running {
return nil
}
time.Sleep(time.Second)
}
}
}
func osGetListener(port int64) (net.Listener, error) {
const CIDAny uint32 = 4294967295 // Equivalent to VMADDR_CID_ANY.
// Setup the listener on wildcard CID for inbound connections from Incus.
// We use the VMADDR_CID_ANY CID so that if the VM's CID changes in the future the listener still works.
// A CID change can occur when restoring a stateful VM that was previously using one CID but is
// subsequently restored using a different one.
l, err := vsock.ListenContextID(CIDAny, ports.HTTPSDefaultPort, nil)
if err != nil {
return nil, fmt.Errorf("WINDOWS: Failed to listen on vsock: %w", err)
}
logger.Info("Started vsock listener")
return l, nil
}
// Start of Windows service code block
// Inspired of https://github.com/golang/sys/blob/master/windows/svc/example/service.go
var elog debug.Log
@ -50,14 +129,25 @@ func (m *incusAgentService) Execute(args []string, r <-chan svc.ChangeRequest, c
d := newDaemon(m.agentCmd.global.flagLogDebug, m.agentCmd.global.flagLogVerbose, m.agentCmd.global.flagSecretsLocation)
// Start the server.
err := startHTTPServer(d, m.agentCmd.global.flagLogDebug)
if err != nil {
changes <- svc.Status{State: svc.StopPending}
elog.Error(1, fmt.Sprintf("Failed to start HTTP server: %s", err))
return
err := osLoadModules()
if err == nil {
err := startHTTPServer(d, m.agentCmd.global.flagLogDebug)
if err != nil {
changes <- svc.Status{State: svc.StopPending}
elog.Error(1, fmt.Sprintf("Failed to start HTTP server: %s", err))
return
}
}
changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted}
ctx, cancelFunc := context.WithCancel(context.Background())
defer cancelFunc()
// Start status notifier in background.
cancelStatusNotifier := m.agentCmd.startStatusNotifier(ctx, d.chConnected)
defer cancelStatusNotifier()
loop:
for {
select {
@ -91,7 +181,7 @@ func runService(name string, agentCmd *cmdAgent) error {
}
}
defer elog.Close()
defer logger.WarnOnError(elog.Close, "Failed to close event log")
elog.Info(1, fmt.Sprintf("Starting %s service", name))
run := svc.Run
@ -174,7 +264,7 @@ func osGetOSState() *api.InstanceStateOSInfo {
return nil
}
defer k.Close()
defer logger.WarnOnError(k.Close, "Failed to close registry key")
// Get local hostname.
hostname, err := os.Hostname()
@ -242,11 +332,38 @@ func osExitStatus(err error) (int, error) {
func osSetEnv(post *api.InstanceExecPost, env map[string]string) {
// SystemRoot is already set by default
env["SystemDrive"] = "C:"
// Program Files directories
env["ProgramFiles"] = fmt.Sprintf("%s\\Program Files", env["SystemDrive"])
env["ProgramFiles(x86)"] = fmt.Sprintf("%s (x86)", env["ProgramFiles"])
env["ProgramW6432"] = fmt.Sprintf("%s", env["ProgramFiles"])
env["CommonProgramFiles"] = fmt.Sprintf("%s\\Common Files", env["ProgramFiles"])
env["CommonProgramFiles(x86)"] = fmt.Sprintf("%s (x86)\\Common Files", env["ProgramFiles"])
env["CommonProgramW6432"] = fmt.Sprintf("%s\\Common Files", env["ProgramFiles"])
// Windows directories
env["WINDIR"] = fmt.Sprintf("%s\\WINDOWS", env["SystemDrive"])
system32 := fmt.Sprintf("%s\\System32", env["WINDIR"])
env["TMP"] = fmt.Sprintf("%s\\Temp", env["WINDIR"])
env["TEMP"] = env["TMP"]
// System32 directories
system32 := fmt.Sprintf("%s\\System32", env["WINDIR"])
env["ComSpec"] = fmt.Sprintf("%s\\cmd.exe", system32)
env["DriverData"] = fmt.Sprintf("%s\\Drivers\\DriverData", system32)
// User profile directories
env["USERPROFILE"] = fmt.Sprintf("%s\\config\\systemprofile", system32)
env["LOCALAPPDATA"] = fmt.Sprintf("%s\\AppData\\Local", env["USERPROFILE"])
env["APPDATA"] = fmt.Sprintf("%s\\AppData\\Roaming", env["USERPROFILE"])
// Miscellaneous
env["COMPUTERNAME"] = ""
env["PATH"] = fmt.Sprintf("%s;%s;%s\\WindowsPowerShell\\v1.0", system32, env["WINDIR"], system32)
env["PATHEXT"] = "COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL"
env["ProgramData"] = fmt.Sprintf("%s\\ProgramData", env["SystemDrive"])
env["ALLUSERSPROFILE"] = env["ProgramData"]
env["PUBLIC"] = fmt.Sprintf("%s\\Users\\Public", env["SystemDrive"])
// Set the default working directory.
if post.Cwd == "" {

View File

@ -0,0 +1,54 @@
package main
import (
"encoding/json"
"errors"
"fmt"
"net"
"net/http"
"strconv"
"github.com/lxc/incus/v7/internal/server/response"
"github.com/lxc/incus/v7/shared/api"
)
var portForwardCmd = APIEndpoint{
Name: "port-forward",
Path: "port-forward",
Post: APIEndpointAction{Handler: portForwardHandler},
}
func portForwardHandler(d *Daemon, r *http.Request) response.Response {
if d.Features != nil && !d.Features["port-forward"] {
return response.Forbidden(errors.New("Port forwarding is disabled by configuration"))
}
if r.Header.Get("Upgrade") != "tcp" {
return response.BadRequest(errors.New("Missing or invalid upgrade header"))
}
// Parse the request.
req := api.InstancePortForwardPost{}
err := json.NewDecoder(r.Body).Decode(&req)
if err != nil {
return response.BadRequest(err)
}
if req.Address == "" {
req.Address = "127.0.0.1"
}
if req.Port <= 0 || req.Port > 65535 {
return response.BadRequest(fmt.Errorf("Invalid port %d", req.Port))
}
// Connect to the target.
conn, err := net.Dial("tcp", net.JoinHostPort(req.Address, strconv.Itoa(req.Port)))
if err != nil {
return response.InternalError(fmt.Errorf("Failed connecting to %q port %d: %w", req.Address, req.Port, err))
}
return response.UpgradeResponse(r, conn, "tcp", nil)
}

View File

@ -3,7 +3,7 @@ package main
import (
"net/http"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/shared/api"
)
type devIncusResponse struct {

View File

@ -8,17 +8,19 @@ import (
"fmt"
"io"
"net/http"
"time"
internalIO "github.com/lxc/incus/v6/internal/io"
"github.com/lxc/incus/v6/internal/server/response"
localUtil "github.com/lxc/incus/v6/internal/server/util"
"github.com/lxc/incus/v6/shared/logger"
internalIO "github.com/lxc/incus/v7/internal/io"
"github.com/lxc/incus/v7/internal/server/response"
localUtil "github.com/lxc/incus/v7/internal/server/util"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/util"
)
func restServer(tlsConfig *tls.Config, cert *x509.Certificate, debug bool, d *Daemon) *http.Server {
router := http.NewServeMux()
router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
router.HandleFunc("/{$}", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
_ = response.SyncResponse(true, []string{"/1.0"}).Render(w)
})
@ -27,7 +29,12 @@ func restServer(tlsConfig *tls.Config, cert *x509.Certificate, debug bool, d *Da
createCmd(router, "1.0", c, cert, debug, d)
}
return &http.Server{Handler: router, TLSConfig: tlsConfig}
return &http.Server{
Handler: router,
TLSConfig: tlsConfig,
IdleTimeout: 30 * time.Second,
ReadHeaderTimeout: 3 * time.Second,
}
}
func createCmd(restAPI *http.ServeMux, version string, c APIEndpoint, cert *x509.Certificate, debug bool, d *Daemon) {
@ -52,7 +59,7 @@ func createCmd(restAPI *http.ServeMux, version string, c APIEndpoint, cert *x509
newBody := &bytes.Buffer{}
captured := &bytes.Buffer{}
multiW := io.MultiWriter(newBody, captured)
_, err := io.Copy(multiW, r.Body)
_, err := util.SafeCopy(multiW, r.Body)
if err != nil {
_ = response.InternalError(err).Render(w)
return

View File

@ -7,7 +7,8 @@ import (
"github.com/pkg/sftp"
"github.com/lxc/incus/v6/internal/server/response"
"github.com/lxc/incus/v7/internal/server/response"
"github.com/lxc/incus/v7/shared/logger"
)
var sftpCmd = APIEndpoint{
@ -60,7 +61,7 @@ func (r *sftpServe) Render(w http.ResponseWriter) error {
return nil
}
defer func() { _ = conn.Close() }()
defer logger.WarnOnError(conn.Close, "Failed to close connection")
err = response.Upgrade(conn, "sftp")
if err != nil {
@ -70,7 +71,7 @@ func (r *sftpServe) Render(w http.ResponseWriter) error {
}
// Start sftp server.
server, err := sftp.NewServer(conn, sftp.WithAllocator(), sftp.WithServerWorkingDirectory(osBaseWorkingDirectory))
server, err := sftp.NewServer(conn, sftp.WithAllocator(), sftp.WithServerWorkingDirectory(osBaseWorkingDirectory), sftp.WithMaxTxPacket(128*1024))
if err != nil {
return nil
}

View File

@ -4,8 +4,8 @@ import (
"errors"
"net/http"
"github.com/lxc/incus/v6/internal/server/response"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v7/internal/server/response"
"github.com/lxc/incus/v7/shared/api"
)
var stateCmd = APIEndpoint{

View File

@ -2,16 +2,16 @@ package main
import (
"fmt"
"io"
"io/fs"
"os"
"path/filepath"
"strconv"
"gopkg.in/yaml.v2"
"go.yaml.in/yaml/v4"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/util"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/util"
)
func templatesApply(path string) ([]string, error) {
@ -27,7 +27,7 @@ func templatesApply(path string) ([]string, error) {
}
metadata := &api.ImageMetadata{}
err = yaml.Unmarshal(content, metadata)
err = yaml.Load(content, metadata)
if err != nil {
return nil, fmt.Errorf("Could not parse metadata.yaml: %w", err)
}
@ -115,7 +115,7 @@ func templatesApply(path string) ([]string, error) {
return err
}
}
defer func() { _ = w.Close() }()
defer logger.WarnOnError(w.Close, "Failed to close file")
// Do the copy.
src, err := os.Open(filePath)
@ -123,9 +123,9 @@ func templatesApply(path string) ([]string, error) {
return err
}
defer func() { _ = src.Close() }()
defer logger.WarnOnError(src.Close, "Failed to close source file")
_, err = io.Copy(w, src)
_, err = util.SafeCopy(w, src)
if err != nil {
return err
}

View File

@ -6,16 +6,16 @@ import (
"sync"
"time"
incus "github.com/lxc/incus/v6/client"
"github.com/lxc/incus/v6/internal/version"
"github.com/lxc/incus/v6/shared/api"
config "github.com/lxc/incus/v6/shared/cliconfig"
incus "github.com/lxc/incus/v7/client"
"github.com/lxc/incus/v7/internal/version"
"github.com/lxc/incus/v7/shared/api"
config "github.com/lxc/incus/v7/shared/cliconfig"
)
const userConfigKey = "user.incus-benchmark"
// PrintServerInfo prints out information about the server.
func PrintServerInfo(c incus.InstanceServer) error {
// printServerInfo prints out information about the server.
func printServerInfo(c incus.InstanceServer) error {
server, _, err := c.GetServer()
if err != nil {
return err
@ -36,8 +36,8 @@ func PrintServerInfo(c incus.InstanceServer) error {
return nil
}
// LaunchContainers launches a set of containers.
func LaunchContainers(c incus.InstanceServer, count int, parallel int, image string, privileged bool, start bool, freeze bool) (time.Duration, error) {
// launchContainers launches a set of containers.
func launchContainers(c incus.InstanceServer, count int, parallel int, image string, privileged bool, start bool, freeze bool) (time.Duration, error) {
var duration time.Duration
batchSize, err := getBatchSize(parallel)
@ -84,34 +84,8 @@ func LaunchContainers(c incus.InstanceServer, count int, parallel int, image str
return duration, nil
}
// CreateContainers create the specified number of containers.
func CreateContainers(c incus.InstanceServer, count int, parallel int, fingerprint string, privileged bool) (time.Duration, error) {
var duration time.Duration
batchSize, err := getBatchSize(parallel)
if err != nil {
return duration, err
}
batchCreate := func(index int, wg *sync.WaitGroup) {
defer wg.Done()
name := getContainerName(count, index)
err := createContainer(c, fingerprint, name, privileged)
if err != nil {
logf("Failed to launch container '%s': %s", name, err)
return
}
}
duration = processBatch(count, batchSize, batchCreate)
return duration, nil
}
// GetContainers returns containers created by the benchmark.
func GetContainers(c incus.InstanceServer) ([]api.Instance, error) {
// getContainers returns containers created by the benchmark.
func getContainers(c incus.InstanceServer) ([]api.Instance, error) {
containers := []api.Instance{}
allContainers, err := c.GetInstances(api.InstanceTypeContainer)
@ -128,8 +102,8 @@ func GetContainers(c incus.InstanceServer) ([]api.Instance, error) {
return containers, nil
}
// StartContainers starts containers created by the benchmark.
func StartContainers(c incus.InstanceServer, containers []api.Instance, parallel int) (time.Duration, error) {
// startContainers starts containers created by the benchmark.
func startContainers(c incus.InstanceServer, containers []api.Instance, parallel int) (time.Duration, error) {
var duration time.Duration
batchSize, err := getBatchSize(parallel)
@ -157,8 +131,8 @@ func StartContainers(c incus.InstanceServer, containers []api.Instance, parallel
return duration, nil
}
// StopContainers stops containers created by the benchmark.
func StopContainers(c incus.InstanceServer, containers []api.Instance, parallel int) (time.Duration, error) {
// stopContainers stops containers created by the benchmark.
func stopContainers(c incus.InstanceServer, containers []api.Instance, parallel int) (time.Duration, error) {
var duration time.Duration
batchSize, err := getBatchSize(parallel)
@ -186,8 +160,8 @@ func StopContainers(c incus.InstanceServer, containers []api.Instance, parallel
return duration, nil
}
// DeleteContainers removes containers created by the benchmark.
func DeleteContainers(c incus.InstanceServer, containers []api.Instance, parallel int) (time.Duration, error) {
// deleteContainers removes containers created by the benchmark.
func deleteContainers(c incus.InstanceServer, containers []api.Instance, parallel int) (time.Duration, error) {
var duration time.Duration
batchSize, err := getBatchSize(parallel)

View File

@ -1,8 +1,8 @@
package main
import (
incus "github.com/lxc/incus/v6/client"
"github.com/lxc/incus/v6/shared/api"
incus "github.com/lxc/incus/v7/client"
"github.com/lxc/incus/v7/shared/api"
)
func createContainer(c incus.InstanceServer, fingerprint string, name string, privileged bool) error {
@ -33,7 +33,8 @@ func createContainer(c incus.InstanceServer, fingerprint string, name string, pr
func startContainer(c incus.InstanceServer, name string) error {
op, err := c.UpdateInstanceState(
name, api.InstanceStatePut{Action: "start", Timeout: -1}, "")
name, api.InstanceStatePut{Action: "start", Timeout: -1}, "",
)
if err != nil {
return err
}
@ -43,7 +44,8 @@ func startContainer(c incus.InstanceServer, name string) error {
func stopContainer(c incus.InstanceServer, name string) error {
op, err := c.UpdateInstanceState(
name, api.InstanceStatePut{Action: "stop", Timeout: -1, Force: true}, "")
name, api.InstanceStatePut{Action: "stop", Timeout: -1, Force: true}, "",
)
if err != nil {
return err
}
@ -53,7 +55,8 @@ func stopContainer(c incus.InstanceServer, name string) error {
func freezeContainer(c incus.InstanceServer, name string) error {
op, err := c.UpdateInstanceState(
name, api.InstanceStatePut{Action: "freeze", Timeout: -1}, "")
name, api.InstanceStatePut{Action: "freeze", Timeout: -1}, "",
)
if err != nil {
return err
}

View File

@ -6,6 +6,8 @@ import (
"io"
"os"
"time"
"github.com/lxc/incus/v7/shared/logger"
)
// Subset of JMeter CSV log format that are required by Jenkins performance
@ -27,13 +29,13 @@ type CSVReport struct {
}
// Load reads current content of the filename and loads records.
func (r *CSVReport) Load() error {
func (r *CSVReport) load() error {
file, err := os.Open(r.Filename)
if err != nil {
return err
}
defer func() { _ = file.Close() }()
defer logger.WarnOnError(file.Close, "Failed to close file")
reader := csv.NewReader(file)
for line := 1; err != io.EOF; line++ {
@ -44,7 +46,7 @@ func (r *CSVReport) Load() error {
return err
}
err = r.addRecord(record)
err = r.appendRecord(record)
if err != nil {
return err
}
@ -54,13 +56,13 @@ func (r *CSVReport) Load() error {
}
// Write writes current records to file.
func (r *CSVReport) Write() error {
func (r *CSVReport) write() error {
file, err := os.OpenFile(r.Filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o640)
if err != nil {
return err
}
defer func() { _ = file.Close() }()
defer logger.WarnOnError(file.Close, "Failed to close file")
writer := csv.NewWriter(file)
err = writer.WriteAll(r.records)
@ -73,9 +75,9 @@ func (r *CSVReport) Write() error {
}
// AddRecord adds a record to the report.
func (r *CSVReport) AddRecord(label string, elapsed time.Duration) error {
func (r *CSVReport) addRecord(label string, elapsed time.Duration) error {
if len(r.records) == 0 {
err := r.addRecord(csvFields)
err := r.appendRecord(csvFields)
if err != nil {
return err
}
@ -89,10 +91,10 @@ func (r *CSVReport) AddRecord(label string, elapsed time.Duration) error {
"true", // success"
}
return r.addRecord(record)
return r.appendRecord(record)
}
func (r *CSVReport) addRecord(record []string) error {
func (r *CSVReport) appendRecord(record []string) error {
if len(record) != len(csvFields) {
return fmt.Errorf("Invalid number of fields : %q", record)
}

View File

@ -6,10 +6,10 @@ import (
"github.com/spf13/cobra"
incus "github.com/lxc/incus/v6/client"
"github.com/lxc/incus/v6/internal/version"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/util"
incus "github.com/lxc/incus/v7/client"
"github.com/lxc/incus/v7/internal/version"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/util"
)
type cmdGlobal struct {
@ -25,7 +25,7 @@ type cmdGlobal struct {
reportDuration time.Duration
}
func (c *cmdGlobal) Run(cmd *cobra.Command, args []string) error {
func (c *cmdGlobal) run(cmd *cobra.Command, args []string) error {
// Connect to the daemon
srv, err := incus.ConnectIncusUnix("", nil)
if err != nil {
@ -35,7 +35,7 @@ func (c *cmdGlobal) Run(cmd *cobra.Command, args []string) error {
c.srv = srv.UseProject(c.flagProject)
// Print the initial header
err = PrintServerInfo(srv)
err = printServerInfo(srv)
if err != nil {
return err
}
@ -44,7 +44,7 @@ func (c *cmdGlobal) Run(cmd *cobra.Command, args []string) error {
if c.flagReportFile != "" {
c.report = &CSVReport{Filename: c.flagReportFile}
if util.PathExists(c.flagReportFile) {
err := c.report.Load()
err := c.report.load()
if err != nil {
return err
}
@ -54,7 +54,7 @@ func (c *cmdGlobal) Run(cmd *cobra.Command, args []string) error {
return nil
}
func (c *cmdGlobal) Teardown(cmd *cobra.Command, args []string) error {
func (c *cmdGlobal) teardown(cmd *cobra.Command, args []string) error {
// Nothing to do with not reporting
if c.report == nil {
return nil
@ -65,12 +65,12 @@ func (c *cmdGlobal) Teardown(cmd *cobra.Command, args []string) error {
label = c.flagReportLabel
}
err := c.report.AddRecord(label, c.reportDuration)
err := c.report.addRecord(label, c.reportDuration)
if err != nil {
return err
}
err = c.report.Write()
err = c.report.write()
if err != nil {
return err
}
@ -106,8 +106,8 @@ func main() {
// Global flags
globalCmd := cmdGlobal{}
app.PersistentPreRunE = globalCmd.Run
app.PersistentPostRunE = globalCmd.Teardown
app.PersistentPreRunE = globalCmd.run
app.PersistentPostRunE = globalCmd.teardown
app.PersistentFlags().BoolVar(&globalCmd.flagVersion, "version", false, "Print version number")
app.PersistentFlags().BoolVarP(&globalCmd.flagHelp, "help", "h", false, "Print help")
app.PersistentFlags().IntVarP(&globalCmd.flagParallel, "parallel", "P", -1, "Number of threads to use"+"``")
@ -121,23 +121,23 @@ func main() {
// init sub-command
initCmd := cmdInit{global: &globalCmd}
app.AddCommand(initCmd.Command())
app.AddCommand(initCmd.command())
// launch sub-command
launchCmd := cmdLaunch{global: &globalCmd, init: &initCmd}
app.AddCommand(launchCmd.Command())
app.AddCommand(launchCmd.command())
// start sub-command
startCmd := cmdStart{global: &globalCmd}
app.AddCommand(startCmd.Command())
app.AddCommand(startCmd.command())
// stop sub-command
stopCmd := cmdStop{global: &globalCmd}
app.AddCommand(stopCmd.Command())
app.AddCommand(stopCmd.command())
// delete sub-command
deleteCmd := cmdDelete{global: &globalCmd}
app.AddCommand(deleteCmd.Command())
app.AddCommand(deleteCmd.command())
// Run the main command and handle errors
err := app.Execute()

View File

@ -8,24 +8,24 @@ type cmdDelete struct {
global *cmdGlobal
}
func (c *cmdDelete) Command() *cobra.Command {
func (c *cmdDelete) command() *cobra.Command {
cmd := &cobra.Command{}
cmd.Use = "delete"
cmd.Short = "Delete containers"
cmd.RunE = c.Run
cmd.RunE = c.run
return cmd
}
func (c *cmdDelete) Run(cmd *cobra.Command, args []string) error {
func (c *cmdDelete) run(cmd *cobra.Command, args []string) error {
// Get the containers
containers, err := GetContainers(c.global.srv)
containers, err := getContainers(c.global.srv)
if err != nil {
return err
}
// Run the test
duration, err := DeleteContainers(c.global.srv, containers, c.global.flagParallel)
duration, err := deleteContainers(c.global.srv, containers, c.global.flagParallel)
if err != nil {
return err
}

View File

@ -11,18 +11,18 @@ type cmdInit struct {
flagPrivileged bool
}
func (c *cmdInit) Command() *cobra.Command {
func (c *cmdInit) command() *cobra.Command {
cmd := &cobra.Command{}
cmd.Use = "init [[<remote>:]<image>]"
cmd.Short = "Create containers"
cmd.RunE = c.Run
cmd.RunE = c.run
cmd.Flags().IntVarP(&c.flagCount, "count", "C", 1, "Number of containers to create"+"``")
cmd.Flags().BoolVar(&c.flagPrivileged, "privileged", false, "Use privileged containers")
return cmd
}
func (c *cmdInit) Run(cmd *cobra.Command, args []string) error {
func (c *cmdInit) run(cmd *cobra.Command, args []string) error {
// Choose the image
image := "images:debian/12"
if len(args) > 0 {
@ -30,7 +30,7 @@ func (c *cmdInit) Run(cmd *cobra.Command, args []string) error {
}
// Run the test
duration, err := LaunchContainers(c.global.srv, c.flagCount, c.global.flagParallel, image, c.flagPrivileged, false, false)
duration, err := launchContainers(c.global.srv, c.flagCount, c.global.flagParallel, image, c.flagPrivileged, false, false)
if err != nil {
return err
}

Some files were not shown because too many files have changed in this diff Show More