Compare commits

...

1822 Commits
v7.0.0 ... main

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
733 changed files with 81619 additions and 46841 deletions

View File

@ -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

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:

View File

@ -11,34 +11,117 @@ permissions:
attestations: write
jobs:
goreleaser:
name: Release
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@v6
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Install Go
uses: actions/setup-go@v6
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: Format version
id: version
run: |
raw="${GITHUB_REF_NAME#v}"
IFS='.' read -r major minor patch <<< "$raw"
if [ "${patch}" = "0" ]; then
echo "value=${major}.${minor}" >> $GITHUB_OUTPUT
else
echo "value=${major}.${minor}.${patch}" >> $GITHUB_OUTPUT
fi
- name: Download installers
uses: actions/download-artifact@v8
with:
pattern: installers-*
path: installers
merge-multiple: true
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v7
@ -48,9 +131,16 @@ jobs:
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
INCUS_VERSION: ${{ steps.version.outputs.value }}
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

View File

@ -26,13 +26,13 @@ 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
@ -55,13 +55,13 @@ jobs:
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'
@ -241,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'
@ -265,6 +271,8 @@ jobs:
if: matrix.go == 'tip'
- name: Install dependencies
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
set -x
@ -343,13 +351,21 @@ jobs:
# Reclaim some space
sudo apt-get clean
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
@ -498,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 }} env LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ./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
@ -516,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 }}
@ -563,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
@ -599,10 +607,10 @@ 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

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

@ -79,6 +79,10 @@ linters:
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$

View File

@ -66,19 +66,6 @@ archives:
{{- else if eq .Arch "arm64" }}aarch64
{{- else }}{{ .Arch }}{{ end }}
- id: lxd-to-incus
ids:
- lxd-to-incus
formats:
- binary
name_template: >-
bin.
{{- if eq .Os "darwin" }}macos
{{- else }}{{ .Os }}{{ end }}.lxd-to-incus.
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "arm64" }}aarch64
{{- else }}{{ .Arch }}{{ end }}
before:
hooks:
- go mod download
@ -152,16 +139,6 @@ builds:
- amd64
- arm64
- id: lxd-to-incus
main: ./cmd/lxd-to-incus
env:
- CGO_ENABLED=0
goos:
- linux
goarch:
- amd64
- arm64
changelog:
use: "github-native"
@ -185,6 +162,9 @@ release:
owner: lxc
name: incus
name_template: "Incus {{ .Env.INCUS_VERSION }}"
extra_files:
- glob: ./installers/*.msi
- glob: ./installers/*.pkg
sboms:
- id: archive
@ -195,7 +175,6 @@ sboms:
- incus-benchmark
- incus-migrate
- incus-simplestreams
- lxd-to-incus
- id: source
artifacts: source

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

View File

@ -142,7 +142,7 @@ ifneq "$(INCUS_OFFLINE)" ""
exit 1
endif
$(GO) get -t -v -u ./...
$(GO) mod tidy --go=1.25.6
$(GO) mod tidy --go=1.25.12
$(GO) get toolchain@none
@echo "Dependencies updated"
@ -233,7 +233,7 @@ doc-setup: client
# 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
@ -245,6 +245,11 @@ doc-serve:
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
@ -399,4 +404,4 @@ dist: doc
# 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! '{printf "%-20s%s\n", $$1, $$2}'
@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.

View File

@ -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

@ -17,6 +17,7 @@ import (
"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"
@ -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 {
@ -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

@ -13,6 +13,7 @@ import (
"net/url"
"path/filepath"
"slices"
"strconv"
"strings"
"github.com/gorilla/websocket"
@ -21,6 +22,7 @@ import (
"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"
@ -583,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,7 +878,12 @@ func (r *ProtocolIncus) CopyInstance(source InstanceServer, instance api.Instanc
Live: req.Source.Live,
InstanceOnly: req.Source.InstanceOnly,
AllowInconsistent: req.Source.AllowInconsistent,
Devices: req.Devices,
}
// 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
@ -1452,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
@ -1464,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 {
@ -1653,7 +1662,7 @@ func (r *ProtocolIncus) DeleteInstanceFile(instanceName string, filePath string)
}
// rawConn connects to the apiURL, upgrades to the requested protocol and returns it.
func (r *ProtocolIncus) rawConn(apiURL *url.URL, protocol string) (net.Conn, error) {
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 {
@ -1661,7 +1670,7 @@ func (r *ProtocolIncus) rawConn(apiURL *url.URL, protocol string) (net.Conn, err
}
req := &http.Request{
Method: http.MethodGet,
Method: method,
URL: apiURL,
Proto: "HTTP/1.1",
ProtoMajor: 1,
@ -1673,15 +1682,33 @@ func (r *ProtocolIncus) rawConn(apiURL *url.URL, protocol string) (net.Conn, err
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 {
@ -1720,6 +1747,42 @@ func (r *ProtocolIncus) rawConn(apiURL *url.URL, protocol string) (net.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.
func (r *ProtocolIncus) GetInstanceFileSFTPConn(instanceName string) (net.Conn, error) {
apiURL := api.NewURL()
@ -1727,7 +1790,7 @@ func (r *ProtocolIncus) GetInstanceFileSFTPConn(instanceName string) (net.Conn,
apiURL.Path("1.0", "instances", instanceName, "sftp")
r.setURLQueryAttributes(&apiURL.URL)
return r.rawConn(&apiURL.URL, "sftp")
return r.rawConn(http.MethodGet, &apiURL.URL, "sftp", nil)
}
// GetInstanceFileSFTP returns an SFTP connection to the instance.
@ -2973,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 {
@ -3050,7 +3113,7 @@ func (r *ProtocolIncus) CreateInstanceBackupStream(instanceName string, backup a
return 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 {
@ -3220,3 +3283,232 @@ func (r *ProtocolIncus) CreateInstanceBitmap(name string, bitmap api.StorageVolu
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

@ -10,6 +10,7 @@ import (
"github.com/gorilla/websocket"
"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"
)
@ -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)

View File

@ -11,6 +11,7 @@ import (
"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"
)
@ -472,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 {
@ -544,7 +545,7 @@ func (r *ProtocolIncus) CreateStoragePoolBucketBackupStream(poolName string, buc
return 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 {
@ -602,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

@ -16,6 +16,7 @@ import (
"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"
@ -432,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 {
@ -918,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") {
@ -1062,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 {
@ -1134,7 +1154,7 @@ func (r *ProtocolIncus) CreateStorageVolumeBackupStream(pool string, volName str
return 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 {
@ -1208,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)
@ -1267,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)
@ -1310,7 +1330,7 @@ func (r *ProtocolIncus) GetStoragePoolVolumeBlockNBDConn(pool string, volType st
r.setURLQueryAttributes(&u.URL)
return r.rawConn(&u.URL, "nbd")
return r.rawConn(http.MethodGet, &u.URL, "nbd", nil)
}
// GetStoragePoolVolumeFileSFTPConn returns a connection to the volume's SFTP endpoint.
@ -1324,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.rawConn(&u.URL, "sftp")
return r.rawConn(http.MethodGet, &u.URL, "sftp", nil)
}
// GetStoragePoolVolumeFileSFTP returns an SFTP connection to the volume.
@ -1515,7 +1535,8 @@ func (r *ProtocolIncus) GetStorageVolumeBitmapNames(pool string, volumeType stri
urls := []string{}
baseURL := fmt.Sprintf(
"/storage-pools/%s/volumes/%s/%s/bitmaps",
url.PathEscape(pool), url.PathEscape(volumeType), url.PathEscape(volumeName))
url.PathEscape(pool), url.PathEscape(volumeType), url.PathEscape(volumeName),
)
_, err := r.queryStruct("GET", baseURL, nil, "", &urls)
if err != nil {
return nil, err
@ -1545,6 +1566,26 @@ func (r *ProtocolIncus) GetStorageVolumeBitmaps(pool string, volumeType string,
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") {
@ -1573,7 +1614,8 @@ func (r *ProtocolIncus) DeleteStorageVolumeBitmap(pool string, volumeType string
path := fmt.Sprintf(
"/storage-pools/%s/volumes/%s/%s/bitmaps/%s",
url.PathEscape(pool), url.PathEscape(volumeType), url.PathEscape(volumeName), url.PathEscape(bitmapName))
url.PathEscape(pool), url.PathEscape(volumeType), url.PathEscape(volumeName), url.PathEscape(bitmapName),
)
_, _, err := r.query("DELETE", path, nil, "")
if err != nil {

View File

@ -136,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)
@ -174,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)
@ -382,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)
@ -405,6 +420,7 @@ type InstanceServer interface {
// 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
@ -718,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

View File

@ -1,7 +1,6 @@
package incus
import (
"compress/gzip"
"context"
"crypto/sha256"
"encoding/base64"
@ -17,7 +16,10 @@ import (
"strings"
"time"
"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"
@ -162,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 {
@ -184,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
@ -233,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{
@ -247,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 {
@ -256,8 +264,8 @@ func (r *ProtocolOCI) GetImageFile(fingerprint string, req ImageFileRequest) (*I
go func() {
_, _ = metadataProcess.Wait(ctx)
compressWrite.Close()
pipeWrite.Close()
_ = compressWrite.Close()
_ = pipeWrite.Close()
}()
size, err := util.SafeCopy(req.MetaFile, pipeRead)
@ -269,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{
@ -283,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 {
@ -292,8 +305,8 @@ func (r *ProtocolOCI) GetImageFile(fingerprint string, req ImageFileRequest) (*I
go func() {
_, _ = rootfsProcess.Wait(ctx)
compressWrite.Close()
pipeWrite.Close()
_ = compressWrite.Close()
_ = pipeWrite.Close()
}()
size, err = util.SafeCopy(req.RootfsFile, pipeRead)
@ -370,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)
@ -398,7 +411,8 @@ func (r *ProtocolOCI) runSkopeo(action string, image string, args ...string) (st
env,
nil,
"skopeo",
args...)
args...,
)
if err != nil {
return "", err
}
@ -416,7 +430,7 @@ 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

View File

@ -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

@ -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

@ -117,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
}
@ -130,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
}
@ -176,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)
@ -192,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())
@ -374,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

@ -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

@ -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

@ -9,4 +9,5 @@ var Imports = []string{
"fmt",
"strings",
"github.com/mattn/go-sqlite3",
"github.com/google/uuid",
}

View File

@ -361,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)
@ -459,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,6 +5,7 @@ package db
import (
"fmt"
"go/types"
"slices"
"strings"
"golang.org/x/tools/go/packages"
@ -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...))
@ -533,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 {")
@ -621,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))
@ -850,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)")

View File

@ -578,6 +578,7 @@ func validateFieldConfig(config url.Values) error {
"join",
"leftjoin",
"joinon",
"joinas",
"omit":
_, err := exactlyOneValue(tag, values)

View File

@ -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

@ -8,6 +8,7 @@ import (
"strings"
"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

@ -33,6 +33,7 @@ var api10 = []APIEndpoint{
operationCmd,
operationWebsocket,
operationWait,
portForwardCmd,
sftpCmd,
stateCmd,
}

View File

@ -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

@ -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

@ -8,6 +8,7 @@ import (
"os"
"os/signal"
"slices"
"strings"
"sync"
"time"
@ -122,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.
@ -138,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
}
}
}
}
@ -209,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.
@ -219,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()
@ -231,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 {
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

@ -27,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 {

View File

@ -22,6 +22,11 @@ import (
"github.com/lxc/incus/v7/shared/subprocess"
)
func osLoadModules() error {
// No OS drivers to load by default.
return nil
}
func osMountShared(src string, dst string, fstype string, opts []string) error {
if fstype != "9p" {
return errors.New("Only 9p shares are supported on Darwin")

View File

@ -25,6 +25,11 @@ import (
"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.

View File

@ -22,6 +22,7 @@ import (
"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/v7/internal/ports"
"github.com/lxc/incus/v7/internal/server/metrics"
@ -37,6 +38,62 @@ var (
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.
@ -72,11 +129,14 @@ 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}
@ -121,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
@ -204,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()

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

@ -8,6 +8,7 @@ import (
"github.com/pkg/sftp"
"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

@ -10,6 +10,7 @@ import (
"go.yaml.in/yaml/v4"
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/util"
)
@ -114,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)
@ -122,7 +123,7 @@ func templatesApply(path string) ([]string, error) {
return err
}
defer func() { _ = src.Close() }()
defer logger.WarnOnError(src.Close, "Failed to close source file")
_, err = util.SafeCopy(w, src)
if err != nil {

View File

@ -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
@ -33,7 +35,7 @@ func (r *CSVReport) load() error {
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++ {
@ -60,7 +62,7 @@ func (r *CSVReport) write() error {
return err
}
defer func() { _ = file.Close() }()
defer logger.WarnOnError(file.Close, "Failed to close file")
writer := csv.NewWriter(file)
err = writer.WriteAll(r.records)

View File

@ -24,6 +24,7 @@ import (
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/archive"
"github.com/lxc/incus/v7/shared/ask"
"github.com/lxc/incus/v7/shared/logger"
localtls "github.com/lxc/incus/v7/shared/tls"
"github.com/lxc/incus/v7/shared/util"
)
@ -247,7 +248,7 @@ func (m *Migration) askPath(question string) (string, error) {
return "", err
}
defer func() { _ = f.Close() }()
defer logger.WarnOnError(f.Close, "Failed to close file")
// Download the target.
resp, err := http.Get(path)
@ -255,7 +256,7 @@ func (m *Migration) askPath(question string) (string, error) {
return "", err
}
defer resp.Body.Close()
defer logger.WarnOnError(resp.Body.Close, "Failed to close response body")
fmt.Printf("Downloading %q\n", path)
@ -503,7 +504,7 @@ func (c *cmdMigrate) run(_ *cobra.Command, _ []string) error {
}()
if clientFingerprint != "" {
defer func() { _ = server.DeleteCertificate(clientFingerprint) }()
defer logger.WarnOnError(func() error { return server.DeleteCertificate(clientFingerprint) }, "Failed to delete certificate")
}
// Provide migration type

View File

@ -53,13 +53,11 @@ func (c *cmdNetcat) run(cmd *cobra.Command, args []string) error {
// We'll wait until we're done reading from the socket
wg := sync.WaitGroup{}
wg.Add(1)
go func() {
wg.Go(func() {
_, err = util.SafeCopy(eagain.Writer{Writer: os.Stdout}, eagain.Reader{Reader: conn})
_ = conn.Close()
wg.Done()
}()
})
go func() {
_, _ = util.SafeCopy(eagain.Writer{Writer: conn}, eagain.Reader{Reader: os.Stdin})

View File

@ -336,7 +336,7 @@ func (m *InstanceMigration) render() string {
data.Disks[k] = v
}
out, err := yaml.Dump(&data, yaml.V2)
out, err := yaml.Dump(&data, yaml.WithV2Defaults())
if err != nil {
return ""
}

View File

@ -16,6 +16,7 @@ import (
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/archive"
"github.com/lxc/incus/v7/shared/ask"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/util"
)
@ -226,7 +227,7 @@ func (m *OVAMigration) migrate() error {
return err
}
defer func() { _ = os.RemoveAll(outputPath) }()
defer logger.WarnOnError(func() error { return os.RemoveAll(outputPath) }, "Failed to remove temporary directory")
err = m.unpackOVA(outputPath)
if err != nil {
@ -269,7 +270,7 @@ func (m *OVAMigration) unpackOVA(outPath string) error {
return err
}
defer file.Close()
defer logger.WarnOnError(file.Close, "Failed to close file")
tarReader := tar.NewReader(file)
@ -278,7 +279,7 @@ func (m *OVAMigration) unpackOVA(outPath string) error {
return err
}
defer func() { _ = outPathRoot.Close() }()
defer logger.WarnOnError(outPathRoot.Close, "Failed to close directory")
for {
header, err := tarReader.Next()
@ -314,7 +315,7 @@ func (m *OVAMigration) readOVA() error {
return err
}
defer file.Close()
defer logger.WarnOnError(file.Close, "Failed to close file")
tarReader := tar.NewReader(file)

View File

@ -244,7 +244,7 @@ func (m *VolumeMigration) render() string {
m.sourceFormat,
}
out, err := yaml.Dump(&data, yaml.V2)
out, err := yaml.Dump(&data, yaml.WithV2Defaults())
if err != nil {
return ""
}

View File

@ -14,6 +14,7 @@ import (
"github.com/lxc/incus/v7/internal/linux"
"github.com/lxc/incus/v7/internal/migration"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/util"
"github.com/lxc/incus/v7/shared/ws"
)
@ -26,7 +27,7 @@ func rsyncSend(ctx context.Context, conn *websocket.Conn, path string, rsyncArgs
}
if dataSocket != nil {
defer func() { _ = dataSocket.Close() }()
defer logger.WarnOnError(dataSocket.Close, "Failed to close connection")
}
readDone, writeDone := ws.Mirror(conn, dataSocket)

View File

@ -22,6 +22,7 @@ import (
internalUtil "github.com/lxc/incus/v7/internal/util"
"github.com/lxc/incus/v7/internal/version"
"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"
"github.com/lxc/incus/v7/shared/ws"
@ -126,7 +127,7 @@ func transferRootfs(ctx context.Context, op incus.Operation, rootfs string, rsyn
return abort(err)
}
defer func() { _ = f.Close() }()
defer logger.WarnOnError(f.Close, "Failed to close file")
conn := ws.NewWrapper(wsFs)
@ -353,7 +354,7 @@ func blockDiskSizeBytes(blockDiskPath string) (int64, error) {
return -1, err
}
defer func() { _ = f.Close() }()
defer logger.WarnOnError(f.Close, "Failed to close file")
fd := int(f.Fd())
// Retrieve the block device size.

View File

@ -20,6 +20,7 @@ import (
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/archive"
cli "github.com/lxc/incus/v7/shared/cmd"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/osarch"
"github.com/lxc/incus/v7/shared/simplestreams"
"github.com/lxc/incus/v7/shared/util"
@ -101,6 +102,8 @@ func (c *cmdAdd) parseImage(metaFile *os.File, dataFile *os.File) (*dataItem, er
item.FileType = "squashfs"
case ".qcow2":
item.FileType = "disk-kvm.img"
case ".tar.xz":
item.FileType = "root.tar.xz"
default:
return nil, fmt.Errorf("Unsupported data type %q", item.Extension)
}
@ -169,7 +172,7 @@ func (c *cmdAdd) run(cmd *cobra.Command, args []string) error {
return err
}
defer metaFile.Close()
defer logger.WarnOnError(metaFile.Close, "Failed to close file")
// Read the header.
_, _, unpacker, err := archive.DetectCompressionFile(metaFile)
@ -266,6 +269,7 @@ func (c *cmdAdd) run(cmd *cobra.Command, args []string) error {
}
var data *dataItem
imageType := "container"
if !isUnifiedTarball {
// Open the data.
dataFile, err := os.Open(args[1])
@ -273,13 +277,47 @@ func (c *cmdAdd) run(cmd *cobra.Command, args []string) error {
return err
}
defer dataFile.Close()
defer logger.WarnOnError(dataFile.Close, "Failed to close file")
// Parse the content.
data, err = c.parseImage(metaFile, dataFile)
if err != nil {
return err
}
} else {
// Detect the image type by looking for a VM disk in the unified tarball.
_, err = metaFile.Seek(0, 0)
if err != nil {
return err
}
typeTar, typeTarCancel, err := archive.CompressedTarReader(context.Background(), metaFile, unpacker, "")
if err != nil {
return err
}
defer typeTarCancel()
for {
hdr, err = typeTar.Next()
if err != nil {
if err == io.EOF {
break
}
return err
}
if hdr.Name == "rootfs" || hdr.Name == "./rootfs" {
imageType = "container"
break
}
if hdr.Name == "rootfs.img" || hdr.Name == "./rootfs.img" {
imageType = "virtual-machine"
break
}
}
}
// Create the paths if missing.
@ -362,6 +400,19 @@ func (c *cmdAdd) run(cmd *cobra.Command, args []string) error {
metaTargetPath = fmt.Sprintf("images/%s.incus_combined.tar.gz", metaSha256)
}
// Prepare the metadata entry.
metaVersionItem := simplestreams.ProductVersionItem{
FileType: fileType,
HashSha256: metaSha256,
Size: metaSize,
Path: metaTargetPath,
}
if isUnifiedTarball {
// Set combined_type for unified images.
metaVersionItem.CombinedType = imageType
}
// Check if a version already exists.
versionName := time.Unix(metadata.CreationDate, 0).Format("200601021504")
version, ok := product.Versions[versionName]
@ -369,12 +420,7 @@ func (c *cmdAdd) run(cmd *cobra.Command, args []string) error {
// Create a new version.
version = simplestreams.ProductVersion{
Items: map[string]simplestreams.ProductVersionItem{
fileKey: {
FileType: fileType,
HashSha256: metaSha256,
Size: metaSize,
Path: metaTargetPath,
},
fileKey: metaVersionItem,
},
}
} else {
@ -382,12 +428,7 @@ func (c *cmdAdd) run(cmd *cobra.Command, args []string) error {
_, ok := version.Items[fileKey]
if !ok {
// No fileKey found, add it.
version.Items[fileKey] = simplestreams.ProductVersionItem{
FileType: fileType,
HashSha256: metaSha256,
Size: metaSize,
Path: metaTargetPath,
}
version.Items[fileKey] = metaVersionItem
}
}
@ -421,6 +462,8 @@ func (c *cmdAdd) run(cmd *cobra.Command, args []string) error {
metaItem.CombinedSha256SquashFs = data.combinedSha256
case "disk-kvm.img":
metaItem.CombinedSha256DiskKvmImg = data.combinedSha256
case "root.tar.xz":
metaItem.CombinedSha256RootXz = data.combinedSha256
}
version.Items["incus.tar.xz"] = metaItem

View File

@ -15,6 +15,7 @@ import (
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/ask"
cli "github.com/lxc/incus/v7/shared/cmd"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/osarch"
)
@ -59,7 +60,7 @@ func (c *cmdGenerateMetadata) run(cmd *cobra.Command, args []string) error {
return err
}
defer metaFile.Close()
defer logger.WarnOnError(metaFile.Close, "Failed to close file")
// Generate the metadata.
timestamp := time.Now().UTC()
@ -124,7 +125,7 @@ func (c *cmdGenerateMetadata) run(cmd *cobra.Command, args []string) error {
metadata.Properties["description"] = metaDescription
// Generate YAML.
body, err := yaml.Dump(&metadata, yaml.V2)
body, err := yaml.Dump(&metadata, yaml.WithV2Defaults())
if err != nil {
return err
}

View File

@ -155,8 +155,7 @@ func (c *cmdPrune) prune() error {
updatedVersions := map[string]simplestreams.ProductVersion{}
iteration := 0
for i := len(versionNames) - 1; i >= 0; i-- {
version := versionNames[i]
for _, version := range slices.Backward(versionNames) {
if iteration <= c.flagRetention {
updatedVersions[version] = product.Versions[version]
} else if c.flagVerbose {

View File

@ -96,7 +96,7 @@ func (c *cmdRemove) run(cmd *cobra.Command, args []string) error {
delete(version.Items, "disk-kvm.img")
metaEntry.CombinedSha256DiskKvmImg = ""
} else if metaEntry.CombinedSha256SquashFs == image.Fingerprint {
// Deleting a container image.
// Deleting a squashfs container image.
err = c.remove(version.Items["squashfs"].Path)
if err != nil && !errors.Is(err, fs.ErrNotExist) {
return err
@ -104,6 +104,15 @@ func (c *cmdRemove) run(cmd *cobra.Command, args []string) error {
delete(version.Items, "squashfs")
metaEntry.CombinedSha256SquashFs = ""
} else if metaEntry.CombinedSha256RootXz == image.Fingerprint {
// Deleting a tarball container image.
err = c.remove(version.Items["root.tar.xz"].Path)
if err != nil && !errors.Is(err, fs.ErrNotExist) {
return err
}
delete(version.Items, "root.tar.xz")
metaEntry.CombinedSha256RootXz = ""
} else {
continue
}

View File

@ -11,6 +11,7 @@ import (
"github.com/lxc/incus/v7/internal/linux"
internalUtil "github.com/lxc/incus/v7/internal/util"
incusLogger "github.com/lxc/incus/v7/shared/logger"
localtls "github.com/lxc/incus/v7/shared/tls"
"github.com/lxc/incus/v7/shared/util"
)
@ -103,7 +104,7 @@ func proxyConnection(conn *net.UnixConn, serverUnixPath string) {
return
}
defer func() { _ = client.Close() }()
defer incusLogger.WarnOnError(client.Close, "Failed to close connection")
// Get the TLS configuration
tlsConfig, err := tlsConfig(creds.Uid)

View File

@ -163,7 +163,7 @@ func (c *cmdAction) command(action string) *cobra.Command {
if slices.Contains([]string{"restart", "stop"}, action) {
cli.AddBoolFlag(cmd.Flags(), &c.flagForce, "force|f", i18n.G("Force the instance to stop"))
cli.AddIntFlag(cmd.Flags(), &c.flagTimeout, "timeout", -1, i18n.G("Time to wait for the instance to shutdown cleanly"))
cli.AddIntFlag(cmd.Flags(), &c.flagTimeout, "timeout", i18n.G("Time to wait for the instance to shutdown cleanly"), -1)
}
return cmd
@ -280,6 +280,7 @@ func (c *cmdAction) doAction(action string, conf *config.Config, p *u.Parsed) er
console := cmdConsole{}
console.global = c.global
console.flagType = c.flagConsole
console.withLog = c.flagConsole == "console"
return console.console(d, instanceName)
}
@ -312,6 +313,7 @@ func (c *cmdAction) doAction(action string, conf *config.Config, p *u.Parsed) er
console := cmdConsole{}
console.global = c.global
console.flagType = c.flagConsole
console.withLog = c.flagConsole == "console"
consoleErr := console.console(d, instanceName)
if consoleErr != nil {
@ -335,7 +337,7 @@ func (c *cmdAction) doAction(action string, conf *config.Config, p *u.Parsed) er
// It handles actions on instances (single or all) and manages error handling, console flag restrictions, and batch operations.
func (c *cmdAction) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdActionUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdActionUsage, cmd, args)
if err != nil {
return err
}

View File

@ -44,6 +44,10 @@ func (c *cmdAdmin) command() *cobra.Command {
sqlCmd := cmdAdminSQL{global: c.global}
cmd.AddCommand(sqlCmd.command())
// update-certificate sub-command
updateCertCmd := cmdAdminUpdateCertificate{global: c.global}
cmd.AddCommand(updateCertCmd.command())
// waitready sub-command
adminWaitreadyCmd := cmdAdminWaitready{global: c.global}
cmd.AddCommand(adminWaitreadyCmd.command())

View File

@ -24,7 +24,8 @@ func (c *cmdAdminCluster) command() *cobra.Command {
cmd.Use = cli.U("cluster")
cmd.Short = i18n.G("Low-level cluster administration commands")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Low level administration tools for inspecting and recovering clusters.`))
`Low level administration tools for inspecting and recovering clusters.`,
))
cmd.Run = c.run
return cmd

View File

@ -54,17 +54,17 @@ func (c *cmdAdminInit) command() *cobra.Command {
cli.AddBoolFlag(cmd.Flags(), &c.flagDump, "dump", i18n.G("Dump YAML config to stdout"))
cli.AddStringFlag(cmd.Flags(), &c.flagNetworkAddress, "network-address", "", "", i18n.G("Address to bind to (default: none)"))
cli.AddIntFlag(cmd.Flags(), &c.flagNetworkPort, "network-port", -1, fmt.Sprintf(i18n.G("Port to bind to (default: %d)"), ports.HTTPSDefaultPort))
cli.AddIntFlag(cmd.Flags(), &c.flagNetworkPort, "network-port", fmt.Sprintf(i18n.G("Port to bind to (default: %d)"), ports.HTTPSDefaultPort), -1)
cli.AddStringFlag(cmd.Flags(), &c.flagStorageBackend, "storage-backend", "", "", i18n.G("Storage backend to use (btrfs, dir, lvm or zfs, default: dir)"))
cli.AddStringFlag(cmd.Flags(), &c.flagStorageDevice, "storage-create-device", "", "", i18n.G("Setup device based storage using DEVICE"))
cli.AddIntFlag(cmd.Flags(), &c.flagStorageLoopSize, "storage-create-loop", -1, i18n.G("Setup loop based storage with SIZE in GiB"))
cli.AddIntFlag(cmd.Flags(), &c.flagStorageLoopSize, "storage-create-loop", i18n.G("Setup loop based storage with SIZE in GiB"), -1)
cli.AddStringFlag(cmd.Flags(), &c.flagStoragePool, "storage-pool", "", "", i18n.G("Storage pool to use or create"))
return cmd
}
func (c *cmdAdminInit) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdAdminInitUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdAdminInitUsage, cmd, args)
if err != nil {
return err
}

View File

@ -88,7 +88,7 @@ func (c *cmdAdminInit) runDump(d incus.InstanceServer) error {
config.Projects = append(config.Projects, projectsPost)
}
out, err := yaml.Dump(config, yaml.V2)
out, err := yaml.Dump(config, yaml.WithV2Defaults())
if err != nil {
return fmt.Errorf(i18n.G("Failed to retrieve current server configuration: %w"), err)
}

View File

@ -83,7 +83,7 @@ func (c *cmdAdminInit) runInteractive(_ *cobra.Command, d incus.InstanceServer,
object = *config
}
out, err := yaml.Dump(object, yaml.V2)
out, err := yaml.Dump(object, yaml.WithV2Defaults())
if err != nil {
return nil, fmt.Errorf(i18n.G("Failed to render the config: %w"), err)
}
@ -169,11 +169,11 @@ func (c *cmdAdminInit) askNetworking(config *api.InitPreseed, d incus.InstanceSe
// IPv4
network.Config["ipv4.address"], err = c.global.asker.AskString(i18n.G("What IPv4 address should be used?")+" (CIDR subnet notation, “auto” or “none”) [default=auto]: ", "auto", func(value string) error {
if slices.Contains([]string{"auto", "none"}, value) {
if slices.Contains([]string{"auto", "none", ""}, value) {
return nil
}
return validate.Optional(validate.IsNetworkAddressCIDRV4)(value)
return validate.IsNetworkAddressCIDRV4(value, false)
})
if err != nil {
return err
@ -190,11 +190,11 @@ func (c *cmdAdminInit) askNetworking(config *api.InitPreseed, d incus.InstanceSe
// IPv6
network.Config["ipv6.address"], err = c.global.asker.AskString(i18n.G("What IPv6 address should be used?")+" (CIDR subnet notation, “auto” or “none”) [default=auto]: ", "auto", func(value string) error {
if slices.Contains([]string{"auto", "none"}, value) {
if slices.Contains([]string{"auto", "none", ""}, value) {
return nil
}
return validate.Optional(validate.IsNetworkAddressCIDRV6)(value)
return validate.IsNetworkAddressCIDRV6(value, false)
})
if err != nil {
return err

View File

@ -19,7 +19,8 @@ func (c *cmdAdmin) command() *cobra.Command {
cmd.Use = cli.U("admin")
cmd.Short = i18n.G("Manage incus daemon")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Manage incus daemon`))
`Manage incus daemon`,
))
// os
adminOSCmd := cmdAdminOS{global: c.global}

View File

@ -39,7 +39,7 @@ func (c *cmdAdminRecover) command() *cobra.Command {
}
func (c *cmdAdminRecover) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdAdminRecoverUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdAdminRecoverUsage, cmd, args)
if err != nil {
return err
}

View File

@ -40,14 +40,14 @@ func (c *cmdAdminShutdown) command() *cobra.Command {
This can take quite a while as instances can take a long time to
shutdown, especially if a non-standard timeout was configured for them.`))
cmd.RunE = c.run
cli.AddIntFlag(cmd.Flags(), &c.flagTimeout, "timeout|t", 0, "Number of seconds to wait before giving up")
cli.AddIntFlag(cmd.Flags(), &c.flagTimeout, "timeout|t", "Number of seconds to wait before giving up", 0)
cli.AddBoolFlag(cmd.Flags(), &c.flagForce, "force|f", "Force shutdown instead of waiting for running operations to finish")
return cmd
}
func (c *cmdAdminShutdown) run(cmd *cobra.Command, args []string) error {
_, err := cmdAdminShutdownUsage.Parse(c.global.conf, cmd, args)
_, err := c.global.Parse(cmdAdminShutdownUsage, cmd, args)
if err != nil {
return err
}

View File

@ -64,7 +64,7 @@ func (c *cmdAdminSQL) command() *cobra.Command {
}
func (c *cmdAdminSQL) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdAdminSQLUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdAdminSQLUsage, cmd, args)
if err != nil {
return err
}

View File

@ -0,0 +1,110 @@
//go:build linux
package main
import (
"errors"
"fmt"
"os"
"github.com/spf13/cobra"
incus "github.com/lxc/incus/v7/client"
"github.com/lxc/incus/v7/cmd/incus/color"
u "github.com/lxc/incus/v7/cmd/incus/usage"
"github.com/lxc/incus/v7/internal/i18n"
cli "github.com/lxc/incus/v7/shared/cmd"
"github.com/lxc/incus/v7/shared/util"
)
type cmdAdminUpdateCertificate struct {
global *cmdGlobal
}
var cmdAdminUpdateCertificateUsage = u.Usage{u.Placeholder(i18n.G("cert.crt")), u.Placeholder(i18n.G("cert.key"))}
func (c *cmdAdminUpdateCertificate) command() *cobra.Command {
cmd := &cobra.Command{}
cmd.Use = cli.U("update-certificate", cmdAdminUpdateCertificateUsage...)
cmd.Aliases = []string{"update-cert"}
cmd.Short = i18n.G("Update the server certificate")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Update the server certificate
This is only for standalone systems, cluster users should use "incus cluster update-certificate" instead".`))
cmd.RunE = c.run
cmd.ValidArgsFunction = func(_ *cobra.Command, args []string, _ string) ([]string, cobra.ShellCompDirective) {
if len(args) < 2 {
return nil, cobra.ShellCompDirectiveDefault
}
return nil, cobra.ShellCompDirectiveNoFileComp
}
return cmd
}
func (c *cmdAdminUpdateCertificate) run(cmd *cobra.Command, args []string) error {
parsed, err := c.global.Parse(cmdAdminUpdateCertificateUsage, cmd, args)
if err != nil {
return err
}
certFile := parsed[0].String
keyFile := parsed[1].String
if !util.PathExists(certFile) {
return fmt.Errorf(i18n.G("Could not find certificate file path: %s"), certFile)
}
if !util.PathExists(keyFile) {
return fmt.Errorf(i18n.G("Could not find certificate key file path: %s"), keyFile)
}
cert, err := os.ReadFile(certFile)
if err != nil {
return fmt.Errorf(i18n.G("Could not read certificate file: %s with error: %v"), certFile, err)
}
key, err := os.ReadFile(keyFile)
if err != nil {
return fmt.Errorf(i18n.G("Could not read certificate key file: %s with error: %v"), keyFile, err)
}
connArgs := &incus.ConnectionArgs{
SkipGetServer: true,
}
d, err := incus.ConnectIncusUnix("", connArgs)
if err != nil {
return err
}
server, _, err := d.GetServer()
if err != nil {
return err
}
if server.Environment.ServerClustered {
return errors.New(i18n.G("This command is not supported on clusters, use \"incus cluster update-certificate\" instead"))
}
req := struct {
Certificate string `json:"certificate"`
Key string `json:"key"`
}{
Certificate: string(cert),
Key: string(key),
}
_, _, err = d.RawQuery("PUT", "/internal/server-certificate", req, "")
if err != nil {
return err
}
if !c.global.flagQuiet {
fmt.Println(i18n.G("Successfully updated server certificate"))
}
return nil
}

View File

@ -34,13 +34,13 @@ func (c *cmdAdminWaitready) command() *cobra.Command {
is done with early start tasks like re-starting previously started
containers.`))
cmd.RunE = c.run
cli.AddIntFlag(cmd.Flags(), &c.flagTimeout, "timeout|t", 0, "Number of seconds to wait before giving up")
cli.AddIntFlag(cmd.Flags(), &c.flagTimeout, "timeout|t", "Number of seconds to wait before giving up", 0)
return cmd
}
func (c *cmdAdminWaitready) run(cmd *cobra.Command, args []string) error {
_, err := cmdAdminWaitreadyUsage.Parse(c.global.conf, cmd, args)
_, err := c.global.Parse(cmdAdminWaitreadyUsage, cmd, args)
if err != nil {
return err
}

View File

@ -62,7 +62,14 @@ func (c *cmdAliasAdd) command() *cobra.Command {
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Add new aliases`))
cmd.Example = cli.FormatSection("", i18n.G(
`incus alias add list "list -c ns46S"
Overwrite the "list" command to pass -c ns46S.`))
Overwrite the "list" command to pass -c ns46S.
incus alias add volume "storage volume @ARGS@"
Create a short command for managing volumes
incus alias add cat "exec @ARG1@ -- cat @ARG2@"
Create a command for displaying file content of instances`,
))
cmd.RunE = c.run
@ -72,7 +79,7 @@ func (c *cmdAliasAdd) command() *cobra.Command {
func (c *cmdAliasAdd) run(cmd *cobra.Command, args []string) error {
conf := c.global.conf
parsed, err := cmdAliasAddUsage.Parse(conf, cmd, args)
parsed, err := c.global.Parse(cmdAliasAddUsage, cmd, args)
if err != nil {
return err
}
@ -123,7 +130,7 @@ func (c *cmdAliasList) run(cmd *cobra.Command, args []string) error {
conf := c.global.conf
// Quick checks.
_, err := cmdAliasListUsage.Parse(c.global.conf, cmd, args)
_, err := c.global.Parse(cmdAliasListUsage, cmd, args)
if err != nil {
return err
}
@ -168,7 +175,8 @@ func (c *cmdAliasRename) command() *cobra.Command {
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Rename aliases`))
cmd.Example = cli.FormatSection("", i18n.G(
`incus alias rename list my-list
Rename existing alias "list" to "my-list".`))
Rename existing alias "list" to "my-list".`,
))
cmd.RunE = c.run
@ -178,7 +186,7 @@ func (c *cmdAliasRename) command() *cobra.Command {
func (c *cmdAliasRename) run(cmd *cobra.Command, args []string) error {
conf := c.global.conf
parsed, err := cmdAliasRenameUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdAliasRenameUsage, cmd, args)
if err != nil {
return err
}
@ -222,7 +230,8 @@ func (c *cmdAliasRemove) command() *cobra.Command {
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Remove aliases`))
cmd.Example = cli.FormatSection("", i18n.G(
`incus alias remove my-list
Remove the "my-list" alias.`))
Remove the "my-list" alias.`,
))
cmd.RunE = c.run
@ -233,7 +242,7 @@ func (c *cmdAliasRemove) run(cmd *cobra.Command, args []string) error {
conf := c.global.conf
// Quick checks.
parsed, err := cmdAliasRemoveUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdAliasRemoveUsage, cmd, args)
if err != nil {
return err
}

View File

@ -9,6 +9,7 @@ import (
"maps"
"net"
"net/http"
"net/url"
"os"
"reflect"
"slices"
@ -165,7 +166,8 @@ func (c *cmdClusterList) command() *cobra.Command {
f - Failure Domain
d - Description
s - Status
m - Message`))
m - Message`,
))
cli.AddStringFlag(cmd.Flags(), &c.flagColumns, "columns|c", defaultClusterColumns, "", i18n.G("Columns"))
cli.AddStringFlag(cmd.Flags(), &c.flagFormat, "format|f", c.global.defaultListFormat(), "", i18n.G(`Format (csv|json|table|yaml|compact|markdown), use suffix ",noheader" to disable headers and ",header" to enable it if missing, e.g. csv,header`))
@ -263,7 +265,7 @@ func (c *cmdClusterList) messageColumnData(cluster api.ClusterMember) string {
}
func (c *cmdClusterList) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterListUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterListUsage, cmd, args)
if err != nil {
return err
}
@ -347,7 +349,7 @@ func (c *cmdClusterShow) command() *cobra.Command {
}
func (c *cmdClusterShow) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterShowUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterShowUsage, cmd, args)
if err != nil {
return err
}
@ -362,7 +364,7 @@ func (c *cmdClusterShow) run(cmd *cobra.Command, args []string) error {
}
// Render as YAML
data, err := yaml.Dump(&member, yaml.V2)
data, err := yaml.Dump(&member, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -384,7 +386,8 @@ func (c *cmdClusterInfo) command() *cobra.Command {
cmd.Use = cli.U("info", cmdClusterInfoUsage...)
cmd.Short = i18n.G("Show useful information about a cluster member")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Show useful information about a cluster member`))
`Show useful information about a cluster member`,
))
cmd.RunE = c.run
@ -400,7 +403,7 @@ func (c *cmdClusterInfo) command() *cobra.Command {
}
func (c *cmdClusterInfo) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterInfoUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterInfoUsage, cmd, args)
if err != nil {
return err
}
@ -415,7 +418,7 @@ func (c *cmdClusterInfo) run(cmd *cobra.Command, args []string) error {
}
// Render as YAML.
data, err := yaml.Dump(&member, yaml.V2)
data, err := yaml.Dump(&member, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -459,7 +462,7 @@ func (c *cmdClusterGet) command() *cobra.Command {
}
func (c *cmdClusterGet) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGetUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGetUsage, cmd, args)
if err != nil {
return err
}
@ -564,7 +567,7 @@ func (c *cmdClusterSet) set(cmd *cobra.Command, parsed []*u.Parsed) error {
}
func (c *cmdClusterSet) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterSetUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterSetUsage, cmd, args)
if err != nil {
return err
}
@ -581,7 +584,7 @@ type cmdClusterUnset struct {
flagIsProperty bool
}
var cmdClusterUnsetUsage = u.Usage{u.Member.Remote(), u.Key}
var cmdClusterUnsetUsage = u.Usage{u.Member.Remote(), u.Key.List(1)}
func (c *cmdClusterUnset) command() *cobra.Command {
cmd := &cobra.Command{}
@ -589,7 +592,7 @@ func (c *cmdClusterUnset) command() *cobra.Command {
cmd.Short = i18n.G("Unset a cluster member's configuration keys")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, cmd.Short)
cli.AddBoolFlag(cmd.Flags(), &c.flagIsProperty, "property|p", i18n.G("Unset the key as a cluster property"))
cli.AddBoolFlag(cmd.Flags(), &c.flagIsProperty, "property|p", i18n.G("Unset the keys as cluster properties"))
cmd.RunE = c.run
cmd.ValidArgsFunction = func(_ *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
@ -608,7 +611,7 @@ func (c *cmdClusterUnset) command() *cobra.Command {
}
func (c *cmdClusterUnset) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterUnsetUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterUnsetUsage, cmd, args)
if err != nil {
return err
}
@ -646,7 +649,7 @@ func (c *cmdClusterRename) command() *cobra.Command {
}
func (c *cmdClusterRename) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterRenameUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterRenameUsage, cmd, args)
if err != nil {
return err
}
@ -729,7 +732,7 @@ Are you really sure you want to force removing %s? (yes/no): `), formatRemote(c.
}
func (c *cmdClusterRemove) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterRemoveUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterRemoveUsage, cmd, args)
if err != nil {
return err
}
@ -778,7 +781,8 @@ func (c *cmdClusterEnable) command() *cobra.Command {
It's required that the server is already available on the network. You can check
that by running 'incus config get core.https_address', and possibly set a value
for the address if not yet set.`))
for the address if not yet set.`,
))
cmd.RunE = c.run
@ -794,7 +798,7 @@ func (c *cmdClusterEnable) command() *cobra.Command {
}
func (c *cmdClusterEnable) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterEnableUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterEnableUsage, cmd, args)
if err != nil {
return err
}
@ -853,10 +857,12 @@ func (c *cmdClusterEdit) command() *cobra.Command {
cmd.Use = cli.U("edit", cmdClusterEditUsage...)
cmd.Short = i18n.G("Edit cluster member configurations as YAML")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Edit cluster member configurations as YAML`))
`Edit cluster member configurations as YAML`,
))
cmd.Example = cli.FormatSection("", i18n.G(
`incus cluster edit <cluster member> < member.yaml
Update a cluster member using the content of member.yaml`))
Update a cluster member using the content of member.yaml`,
))
cmd.RunE = c.run
@ -874,11 +880,12 @@ func (c *cmdClusterEdit) command() *cobra.Command {
func (c *cmdClusterEdit) helpTemplate() string {
return i18n.G(
`### This is a YAML representation of the cluster member.
### Any line starting with a '# will be ignored.`)
### Any line starting with a '# will be ignored.`,
)
}
func (c *cmdClusterEdit) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterEditUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterEditUsage, cmd, args)
if err != nil {
return err
}
@ -910,7 +917,7 @@ func (c *cmdClusterEdit) run(cmd *cobra.Command, args []string) error {
memberWritable := member.Writable()
data, err := yaml.Dump(&memberWritable, yaml.V2)
data, err := yaml.Dump(&memberWritable, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -981,7 +988,7 @@ func (c *cmdClusterJoin) command() *cobra.Command {
}
func (c *cmdClusterJoin) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterJoinUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterJoinUsage, cmd, args)
if err != nil {
return err
}
@ -1046,7 +1053,7 @@ func (c *cmdClusterAdd) command() *cobra.Command {
}
func (c *cmdClusterAdd) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterAddUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterAddUsage, cmd, args)
if err != nil {
return err
}
@ -1106,7 +1113,7 @@ Default column layout: ntE
== Columns ==
The -c option takes a comma separated list of arguments that control
which network zone attributes to output when displaying in table or csv
which join tokens attributes to output when displaying in table or csv
format.
Column arguments are either pre-defined shorthand chars (see below),
@ -1117,7 +1124,8 @@ Commas between consecutive shorthand chars are optional.
Pre-defined column shorthand chars:
n - Name
t - Token
E - Expires At`))
E - Expires At`,
))
cli.AddStringFlag(cmd.Flags(), &c.flagFormat, "format|f", c.global.defaultListFormat(), "", i18n.G(`Format (csv|json|table|yaml|compact|markdown), use suffix ",noheader" to disable headers and ",header" to enable if demanded, e.g. csv,header`))
cli.AddStringFlag(cmd.Flags(), &c.flagColumns, "columns|c", defaultclusterTokensColumns, "", i18n.G("Columns"))
@ -1177,7 +1185,7 @@ func (c *cmdClusterListTokens) expiresAtColumnData(token *api.ClusterMemberJoinT
}
func (c *cmdClusterListTokens) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterListTokensUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterListTokensUsage, cmd, args)
if err != nil {
return err
}
@ -1270,7 +1278,7 @@ func (c *cmdClusterRevokeToken) command() *cobra.Command {
}
func (c *cmdClusterRevokeToken) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterRevokeTokenUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterRevokeTokenUsage, cmd, args)
if err != nil {
return err
}
@ -1365,7 +1373,7 @@ func (c *cmdClusterUpdateCertificate) command() *cobra.Command {
}
func (c *cmdClusterUpdateCertificate) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterUpdateCertificateUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterUpdateCertificateUsage, cmd, args)
if err != nil {
return err
}
@ -1452,7 +1460,9 @@ func (c *cmdClusterEvacuate) command() *cobra.Command {
cmd.Aliases = []string{"evac"}
cmd.Use = cli.U("evacuate", cmdClusterEvacuateRestoreUsage...)
cmd.Short = i18n.G("Evacuate cluster member")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Evacuate cluster member`))
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Evacuate cluster member
The action flag allows overriding the default server-side action ("cluster.evacuate" instance configuration option)`))
cli.AddStringFlag(cmd.Flags(), &c.action.flagAction, "action", "", "", i18n.G(`Force a particular evacuation action`))
@ -1481,7 +1491,10 @@ func (c *cmdClusterRestore) command() *cobra.Command {
cmd := c.action.command()
cmd.Use = cli.U("restore", cmdClusterEvacuateRestoreUsage...)
cmd.Short = i18n.G("Restore cluster member")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Restore cluster member`))
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Restore cluster member
The action flag allows overriding the default behavior of moving and starting back all instances.
The only supported value at the moment is "skip" which brings the cluster member online without relocating any instances.`))
cli.AddStringFlag(cmd.Flags(), &c.action.flagAction, "action", "", "", i18n.G(`Force a particular restoration action`))
@ -1505,7 +1518,7 @@ func (c *cmdClusterEvacuateAction) command() *cobra.Command {
}
func (c *cmdClusterEvacuateAction) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterEvacuateRestoreUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterEvacuateRestoreUsage, cmd, args)
if err != nil {
return err
}
@ -1769,8 +1782,12 @@ func askClustering(asker ask.Asker, config *api.InitPreseed, cluster incus.Insta
return err
}
// Set the token.
config.Cluster.ClusterAddress = connectInfo.URL
clusterURL, err := url.Parse(connectInfo.URL)
if err != nil {
return err
}
config.Cluster.ClusterAddress = clusterURL.Host
config.Cluster.ClusterCertificate = connectInfo.Certificate
config.Cluster.ClusterToken = joinToken.String()
}

View File

@ -94,7 +94,7 @@ type cmdClusterGroupAssign struct {
cluster *cmdCluster
}
var cmdClusterGroupAssignUsage = u.Usage{u.Member.Remote(), u.Group.List(1, ",")}
var cmdClusterGroupAssignUsage = u.Usage{u.Member.Remote(), u.Group.List(1)}
func (c *cmdClusterGroupAssign) command() *cobra.Command {
cmd := &cobra.Command{}
@ -102,13 +102,15 @@ func (c *cmdClusterGroupAssign) command() *cobra.Command {
cmd.Aliases = []string{"apply"}
cmd.Short = i18n.G("Assign sets of groups to cluster members")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Assign sets of groups to cluster members`))
`Assign sets of groups to cluster members`,
))
cmd.Example = cli.FormatSection("", i18n.G(
`incus cluster group assign foo default,bar
`incus cluster group assign foo default bar
Set the groups for "foo" to "default" and "bar".
incus cluster group assign foo default
Reset "foo" to only using the "default" cluster group.`))
Reset "foo" to only using the "default" cluster group.`,
))
cmd.RunE = c.run
@ -128,7 +130,7 @@ incus cluster group assign foo default
}
func (c *cmdClusterGroupAssign) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGroupAssignUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGroupAssignUsage, cmd, args)
if err != nil {
return err
}
@ -193,7 +195,7 @@ incus cluster group create g1 < config.yaml
}
func (c *cmdClusterGroupCreate) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGroupCreateUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGroupCreateUsage, cmd, args)
if err != nil {
return err
}
@ -262,7 +264,7 @@ func (c *cmdClusterGroupDelete) command() *cobra.Command {
}
func (c *cmdClusterGroupDelete) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGroupDeleteUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGroupDeleteUsage, cmd, args)
if err != nil {
return err
}
@ -318,7 +320,7 @@ func (c *cmdClusterGroupEdit) command() *cobra.Command {
}
func (c *cmdClusterGroupEdit) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGroupEditUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGroupEditUsage, cmd, args)
if err != nil {
return err
}
@ -349,7 +351,7 @@ func (c *cmdClusterGroupEdit) run(cmd *cobra.Command, args []string) error {
return err
}
data, err := yaml.Dump(group, yaml.V2)
data, err := yaml.Dump(group, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -397,7 +399,8 @@ func (c *cmdClusterGroupEdit) run(cmd *cobra.Command, args []string) error {
func (c *cmdClusterGroupEdit) helpTemplate() string {
return i18n.G(
`### This is a YAML representation of the cluster group.
### Any line starting with a '# will be ignored.`)
### Any line starting with a '# will be ignored.`,
)
}
// List.
@ -423,8 +426,8 @@ Default column layout: ndm
== Columns ==
The -c option takes a comma separated list of arguments that control
which instance attributes to output when displaying in table or csv
format.
which cluster groups attributes to output when displaying in table
or csv format.
Column arguments are either pre-defined shorthand chars (see below),
or (extended) config keys.
@ -434,7 +437,8 @@ Commas between consecutive shorthand chars are optional.
Pre-defined column shorthand chars:
n - Name
d - Description
m - Member`))
m - Member`,
))
cli.AddStringFlag(cmd.Flags(), &c.flagColumns, "columns|c", defaultClusterGroupColumns, "", i18n.G("Columns"))
cli.AddStringFlag(cmd.Flags(), &c.flagFormat, "format|f", c.global.defaultListFormat(), "", i18n.G(`Format (csv|json|table|yaml|compact|markdown), use suffix ",noheader" to disable headers and ",header" to enable it if missing, e.g. csv,header`))
@ -499,7 +503,7 @@ func (c *cmdClusterGroupList) membersColumnData(group api.ClusterGroup) string {
}
func (c *cmdClusterGroupList) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGroupListUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGroupListUsage, cmd, args)
if err != nil {
return err
}
@ -561,7 +565,8 @@ func (c *cmdClusterGroupRemove) command() *cobra.Command {
cmd.Use = cli.U("remove", cmdClusterGroupRemoveUsage...)
cmd.Short = i18n.G("Remove member from group")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Remove a cluster member from a cluster group`))
`Remove a cluster member from a cluster group`,
))
cmd.RunE = c.run
@ -581,7 +586,7 @@ func (c *cmdClusterGroupRemove) command() *cobra.Command {
}
func (c *cmdClusterGroupRemove) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGroupRemoveUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGroupRemoveUsage, cmd, args)
if err != nil {
return err
}
@ -652,7 +657,7 @@ func (c *cmdClusterGroupRename) command() *cobra.Command {
}
func (c *cmdClusterGroupRename) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGroupRenameUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGroupRenameUsage, cmd, args)
if err != nil {
return err
}
@ -702,7 +707,7 @@ func (c *cmdClusterGroupShow) command() *cobra.Command {
}
func (c *cmdClusterGroupShow) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGroupShowUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGroupShowUsage, cmd, args)
if err != nil {
return err
}
@ -716,7 +721,7 @@ func (c *cmdClusterGroupShow) run(cmd *cobra.Command, args []string) error {
return err
}
data, err := yaml.Dump(&group, yaml.V2)
data, err := yaml.Dump(&group, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -738,7 +743,8 @@ func (c *cmdClusterGroupAdd) command() *cobra.Command {
cmd.Use = cli.U("add", cmdClusterGroupAddUsage...)
cmd.Short = i18n.G("Add member to group")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Add a cluster member to a cluster group`))
`Add a cluster member to a cluster group`,
))
cmd.RunE = c.run
@ -758,7 +764,7 @@ func (c *cmdClusterGroupAdd) command() *cobra.Command {
}
func (c *cmdClusterGroupAdd) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGroupAddUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGroupAddUsage, cmd, args)
if err != nil {
return err
}
@ -826,7 +832,7 @@ func (c *cmdClusterGroupGet) command() *cobra.Command {
}
func (c *cmdClusterGroupGet) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGroupGetUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGroupGetUsage, cmd, args)
if err != nil {
return err
}
@ -931,7 +937,7 @@ func (c *cmdClusterGroupSet) set(cmd *cobra.Command, parsed []*u.Parsed) error {
}
func (c *cmdClusterGroupSet) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGroupSetUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGroupSetUsage, cmd, args)
if err != nil {
return err
}
@ -948,7 +954,7 @@ type cmdClusterGroupUnset struct {
flagIsProperty bool
}
var cmdClusterGroupUnsetUsage = u.Usage{u.Group.Remote(), u.Key}
var cmdClusterGroupUnsetUsage = u.Usage{u.Group.Remote(), u.Key.List(1)}
func (c *cmdClusterGroupUnset) command() *cobra.Command {
cmd := &cobra.Command{}
@ -956,7 +962,7 @@ func (c *cmdClusterGroupUnset) command() *cobra.Command {
cmd.Short = i18n.G("Unset a cluster group's configuration keys")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, cmd.Short)
cli.AddBoolFlag(cmd.Flags(), &c.flagIsProperty, "property|p", i18n.G("Unset the key as a cluster group property"))
cli.AddBoolFlag(cmd.Flags(), &c.flagIsProperty, "property|p", i18n.G("Unset the keys as cluster group properties"))
cmd.RunE = c.run
cmd.ValidArgsFunction = func(_ *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
@ -975,7 +981,7 @@ func (c *cmdClusterGroupUnset) command() *cobra.Command {
}
func (c *cmdClusterGroupUnset) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterGroupUnsetUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterGroupUnsetUsage, cmd, args)
if err != nil {
return err
}

View File

@ -66,7 +66,7 @@ func (c *cmdClusterRoleAdd) command() *cobra.Command {
}
func (c *cmdClusterRoleAdd) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterRoleAddUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterRoleAddUsage, cmd, args)
if err != nil {
return err
}
@ -107,7 +107,8 @@ func (c *cmdClusterRoleRemove) command() *cobra.Command {
cmd.Aliases = []string{"delete", "rm"}
cmd.Short = i18n.G("Remove roles from a cluster member")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Remove roles from a cluster member`))
`Remove roles from a cluster member`,
))
cmd.RunE = c.run
@ -127,7 +128,7 @@ func (c *cmdClusterRoleRemove) command() *cobra.Command {
}
func (c *cmdClusterRoleRemove) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdClusterRoleRemoteUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdClusterRoleRemoteUsage, cmd, args)
if err != nil {
return err
}

View File

@ -391,7 +391,7 @@ func (g *cmdGlobal) cmpInstancesAndSnapshots(toComplete string) ([]string, cobra
resource := resources[0]
if strings.Contains(resource.name, instance.SnapshotDelimiter) {
instName := strings.SplitN(resource.name, instance.SnapshotDelimiter, 2)[0]
instName, _, _ := strings.Cut(resource.name, instance.SnapshotDelimiter)
snapshots, _ := resource.server.GetInstanceSnapshotNames(instName)
for _, snapshot := range snapshots {
results = append(results, fmt.Sprintf("%s/%s", instName, snapshot))
@ -1123,7 +1123,7 @@ func (g *cmdGlobal) cmpStoragePoolWithVolume(toComplete string) ([]string, cobra
return results, cobra.ShellCompDirectiveNoSpace
}
pool := strings.Split(toComplete, "/")[0]
pool, _, _ := strings.Cut(toComplete, "/")
volumes, compdir := g.cmpStoragePoolVolumes(pool)
if compdir == cobra.ShellCompDirectiveError {
return nil, compdir
@ -1268,6 +1268,31 @@ func (g *cmdGlobal) cmpStoragePoolVolumeProfiles(poolName string, volumeName str
return results, cobra.ShellCompDirectiveNoFileComp
}
func (g *cmdGlobal) cmpStoragePoolVolumeBitmaps(poolName string, volumeName string) ([]string, cobra.ShellCompDirective) {
// Parse remote
resources, err := g.parseServers(poolName)
if err != nil || len(resources) == 0 {
return nil, cobra.ShellCompDirectiveError
}
resource := resources[0]
client := resource.server
pool := poolName
if strings.Contains(poolName, ":") {
pool = strings.Split(poolName, ":")[1]
}
volName, volType := parseVolume("custom", volumeName)
bitmaps, err := client.GetStorageVolumeBitmapNames(pool, volType, volName)
if err != nil {
return nil, cobra.ShellCompDirectiveError
}
return bitmaps, cobra.ShellCompDirectiveNoFileComp
}
func (g *cmdGlobal) cmpStoragePoolVolumeSnapshots(poolName string, volumeName string) ([]string, cobra.ShellCompDirective) {
// Parse remote
resources, err := g.parseServers(poolName)

View File

@ -30,7 +30,8 @@ func (c *cmdConfig) command() *cobra.Command {
cmd.Use = cli.U("config")
cmd.Short = i18n.G("Manage instance and server configuration options")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Manage instance and server configuration options`))
`Manage instance and server configuration options`,
))
// Device
configDeviceCmd := cmdConfigDevice{global: c.global, config: c}
@ -94,10 +95,12 @@ func (c *cmdConfigEdit) command() *cobra.Command {
cmd.Use = cli.U("edit", cmdConfigEditUsage...)
cmd.Short = i18n.G("Edit instance or server configurations as YAML")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Edit instance or server configurations as YAML`))
`Edit instance or server configurations as YAML`,
))
cmd.Example = cli.FormatSection("", i18n.G(
`incus config edit <instance> < instance.yaml
Update the instance configuration from config.yaml.`))
Update the instance configuration from instance.yaml.`,
))
cli.AddStringFlag(cmd.Flags(), &c.config.flagTarget, "target", "", "", i18n.G("Cluster member name"))
cmd.RunE = c.run
@ -132,11 +135,12 @@ func (c *cmdConfigEdit) helpTemplate() string {
### type: disk
### ephemeral: false
###
### Note that the name is shown but cannot be changed`)
### Note that the name is shown but cannot be changed`,
)
}
func (c *cmdConfigEdit) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigEditUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigEditUsage, cmd, args)
if err != nil {
return err
}
@ -207,7 +211,7 @@ func (c *cmdConfigEdit) run(cmd *cobra.Command, args []string) error {
inst.ExpandedConfig = nil
inst.ExpandedDevices = nil
data, err = yaml.Dump(&inst, yaml.V2)
data, err = yaml.Dump(&inst, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -223,7 +227,7 @@ func (c *cmdConfigEdit) run(cmd *cobra.Command, args []string) error {
inst.ExpandedConfig = nil
inst.ExpandedDevices = nil
data, err = yaml.Dump(&inst, yaml.V2)
data, err = yaml.Dump(&inst, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -316,7 +320,7 @@ func (c *cmdConfigEdit) run(cmd *cobra.Command, args []string) error {
}
brief := server.Writable()
data, err := yaml.Dump(&brief, yaml.V2)
data, err := yaml.Dump(&brief, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -375,7 +379,8 @@ func (c *cmdConfigGet) command() *cobra.Command {
cmd.Use = cli.U("get", cmdConfigGetUsage...)
cmd.Short = i18n.G("Get values for instance or server configuration keys")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Get values for instance or server configuration keys`))
`Get values for instance or server configuration keys`,
))
cli.AddBoolFlag(cmd.Flags(), &c.flagExpanded, "expanded|e", i18n.G("Access the expanded configuration"))
cli.AddBoolFlag(cmd.Flags(), &c.flagIsProperty, "property|p", i18n.G("Get the key as an instance property"))
@ -400,7 +405,7 @@ func (c *cmdConfigGet) command() *cobra.Command {
func (c *cmdConfigGet) run(cmd *cobra.Command, args []string) error {
// Do NOT blindly copy the following parsing line; it performs right-to-left parsing, which in
// most cases is NOT what you want.
parsed, err := cmdConfigGetUsage.Parse(c.global.conf, cmd, args, true)
parsed, err := c.global.Parse(cmdConfigGetUsage, cmd, args, true)
if err != nil {
return err
}
@ -508,7 +513,8 @@ func (c *cmdConfigSet) command() *cobra.Command {
`Set instance or server configuration keys
For backward compatibility, a single configuration key may still be set with:
incus config set [<remote>:][<instance>] <key> <value>`))
incus config set [<remote>:][<instance>] <key> <value>`,
))
cmd.Example = cli.FormatSection("", i18n.G(
`incus config set [<remote>:]<instance> limits.cpu=2
Will set a CPU limit of "2" for the instance.
@ -517,7 +523,8 @@ incus config set my-instance cloud-init.user-data - < cloud-init.yaml
Sets the cloud-init user-data for instance "my-instance" by reading "cloud-init.yaml" through stdin.
incus config set core.https_address=[::]:8443
Will have the server listen on IPv4 and IPv6 port 8443.`))
Will have the server listen on IPv4 and IPv6 port 8443.`,
))
cli.AddStringFlag(cmd.Flags(), &c.config.flagTarget, "target", "", "", i18n.G("Cluster member name"))
cli.AddBoolFlag(cmd.Flags(), &c.flagIsProperty, "property|p", i18n.G("Set the key as an instance property"))
@ -587,7 +594,7 @@ func (c *cmdConfigSet) set(cmd *cobra.Command, parsed []*u.Parsed) error {
return op.Wait()
}
return errors.New(i18n.G("The is no config key to set on an instance snapshot."))
return errors.New(i18n.G("There is no config key to set on an instance snapshot."))
}
inst, etag, err := d.GetInstance(parsedPath.String)
@ -660,7 +667,7 @@ func (c *cmdConfigSet) set(cmd *cobra.Command, parsed []*u.Parsed) error {
func (c *cmdConfigSet) run(cmd *cobra.Command, args []string) error {
// Do NOT blindly copy the following parsing line; it performs right-to-left parsing, which in
// most cases is NOT what you want.
parsed, err := cmdConfigSetUsage.Parse(c.global.conf, cmd, args, true)
parsed, err := c.global.Parse(cmdConfigSetUsage, cmd, args, true)
if err != nil {
return err
}
@ -683,7 +690,8 @@ func (c *cmdConfigShow) command() *cobra.Command {
cmd.Use = cli.U("show", cmdConfigShowUsage...)
cmd.Short = i18n.G("Show instance or server configurations")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Show instance or server configurations`))
`Show instance or server configurations`,
))
cli.AddBoolFlag(cmd.Flags(), &c.flagExpanded, "expanded|e", i18n.G("Show the expanded configuration"))
cli.AddStringFlag(cmd.Flags(), &c.config.flagTarget, "target", "", "", i18n.G("Cluster member name"))
@ -701,7 +709,7 @@ func (c *cmdConfigShow) command() *cobra.Command {
}
func (c *cmdConfigShow) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigShowUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigShowUsage, cmd, args)
if err != nil {
return err
}
@ -734,7 +742,7 @@ func (c *cmdConfigShow) run(cmd *cobra.Command, args []string) error {
}
brief := server.Writable()
data, err = yaml.Dump(&brief, yaml.V2)
data, err = yaml.Dump(&brief, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -777,7 +785,7 @@ func (c *cmdConfigShow) run(cmd *cobra.Command, args []string) error {
}
}
data, err = yaml.Dump(&brief, yaml.V2)
data, err = yaml.Dump(&brief, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -797,17 +805,21 @@ type cmdConfigUnset struct {
flagIsProperty bool
}
var cmdConfigUnsetUsage = u.Usage{u.MakePath(u.Instance, u.Snapshot.Optional()).Optional().Remote(), u.Key}
var cmdConfigUnsetUsage = u.Usage{u.MakePath(u.Instance, u.Snapshot.Optional()).Optional().Remote(), u.Key.List(1)}
func (c *cmdConfigUnset) command() *cobra.Command {
cmd := &cobra.Command{}
cmd.Use = cli.U("unset", cmdConfigUnsetUsage...)
cmd.Short = i18n.G("Unset instance or server configuration keys")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Unset instance or server configuration keys`))
`Unset instance or server configuration keys
Unsetting several keys in one go is only supported for instance configuration.
`,
))
cli.AddStringFlag(cmd.Flags(), &c.config.flagTarget, "target", "", "", i18n.G("Cluster member name"))
cli.AddBoolFlag(cmd.Flags(), &c.flagIsProperty, "property|p", i18n.G("Unset the key as an instance property"))
cli.AddBoolFlag(cmd.Flags(), &c.flagIsProperty, "property|p", i18n.G("Unset the keys as instance properties"))
cmd.RunE = c.run
cmd.ValidArgsFunction = func(_ *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
@ -826,9 +838,8 @@ func (c *cmdConfigUnset) command() *cobra.Command {
}
func (c *cmdConfigUnset) run(cmd *cobra.Command, args []string) error {
// Do NOT blindly copy the following parsing line; it performs right-to-left parsing, which in
// most cases is NOT what you want.
parsed, err := cmdConfigUnsetUsage.Parse(c.global.conf, cmd, args, true)
// Do NOT blindly copy the following parsing line; it is a dirty hack to disambiguate the parser.
parsed, err := c.global.Parse(cmdConfigUnsetUsage, cmd, args, len(args) == 1)
if err != nil {
return err
}

View File

@ -97,14 +97,16 @@ func (c *cmdConfigDeviceAdd) command() *cobra.Command {
Will mount the host's /share/c1 onto /opt in the instance.
incus config device add [<remote>:]instance1 <device-name> disk pool=some-pool source=some-volume path=/opt
Will mount the some-volume volume on some-pool onto /opt in the instance.`))
Will mount the some-volume volume on some-pool onto /opt in the instance.`,
))
} else if c.profile != nil {
cmd.Example = cli.FormatSection("", i18n.G(
`incus profile device add [<remote>:]profile1 <device-name> disk source=/share/c1 path=/opt
Will mount the host's /share/c1 onto /opt in the instance.
incus profile device add [<remote>:]profile1 <device-name> disk pool=some-pool source=some-volume path=/opt
Will mount the some-volume volume on some-pool onto /opt in the instance.`))
Will mount the some-volume volume on some-pool onto /opt in the instance.`,
))
}
cmd.RunE = c.run
@ -125,7 +127,7 @@ incus profile device add [<remote>:]profile1 <device-name> disk pool=some-pool s
}
func (c *cmdConfigDeviceAdd) run(cmd *cobra.Command, args []string) error {
parsed, err := c.configDevice.formatUsage(cmdConfigDeviceAddUsage).Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(c.configDevice.formatUsage(cmdConfigDeviceAddUsage), cmd, args)
if err != nil {
return err
}
@ -209,7 +211,8 @@ func (c *cmdConfigDeviceGet) command() *cobra.Command {
cmd.Use = cli.U("get", c.configDevice.formatUsage(cmdConfigDeviceGetUsage)...)
cmd.Short = i18n.G("Get values for device configuration keys")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Get values for device configuration keys`))
`Get values for device configuration keys`,
))
cmd.RunE = c.run
@ -237,7 +240,7 @@ func (c *cmdConfigDeviceGet) command() *cobra.Command {
}
func (c *cmdConfigDeviceGet) run(cmd *cobra.Command, args []string) error {
parsed, err := c.configDevice.formatUsage(cmdConfigDeviceGetUsage).Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(c.configDevice.formatUsage(cmdConfigDeviceGetUsage), cmd, args)
if err != nil {
return err
}
@ -316,7 +319,7 @@ func (c *cmdConfigDeviceList) command() *cobra.Command {
}
func (c *cmdConfigDeviceList) run(cmd *cobra.Command, args []string) error {
parsed, err := c.configDevice.formatUsage(cmdConfigDeviceListUsage).Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(c.configDevice.formatUsage(cmdConfigDeviceListUsage), cmd, args)
if err != nil {
return err
}
@ -364,7 +367,8 @@ func (c *cmdConfigDeviceOverride) command() *cobra.Command {
cmd.Use = cli.U("override", cmdConfigDeviceOverrideUsage...)
cmd.Short = i18n.G("Copy profile inherited devices and override configuration keys")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Copy profile inherited devices and override configuration keys`))
`Copy profile inherited devices and override configuration keys`,
))
cmd.RunE = c.run
@ -380,7 +384,7 @@ func (c *cmdConfigDeviceOverride) command() *cobra.Command {
}
func (c *cmdConfigDeviceOverride) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigDeviceOverrideUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigDeviceOverrideUsage, cmd, args)
if err != nil {
return err
}
@ -471,7 +475,7 @@ func (c *cmdConfigDeviceRemove) command() *cobra.Command {
}
func (c *cmdConfigDeviceRemove) run(cmd *cobra.Command, args []string) error {
parsed, err := c.configDevice.formatUsage(cmdConfigDeviceRemoveUsage).Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(c.configDevice.formatUsage(cmdConfigDeviceRemoveUsage), cmd, args)
if err != nil {
return err
}
@ -568,13 +572,15 @@ func (c *cmdConfigDeviceSet) command() *cobra.Command {
`Set device configuration keys
For backward compatibility, a single configuration key may still be set with:
incus config device set [<remote>:]<instance> <device> <key> <value>`))
incus config device set [<remote>:]<instance> <device> <key> <value>`,
))
} else if c.profile != nil {
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Set device configuration keys
For backward compatibility, a single configuration key may still be set with:
incus profile device set [<remote>:]<profile> <device> <key> <value>`))
incus profile device set [<remote>:]<profile> <device> <key> <value>`,
))
}
cmd.RunE = c.run
@ -664,7 +670,7 @@ func (c *cmdConfigDeviceSet) set(cmd *cobra.Command, parsed []*u.Parsed) error {
}
func (c *cmdConfigDeviceSet) run(cmd *cobra.Command, args []string) error {
parsed, err := c.configDevice.formatUsage(cmdConfigDeviceSetUsage).Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(c.configDevice.formatUsage(cmdConfigDeviceSetUsage), cmd, args)
if err != nil {
return err
}
@ -706,7 +712,7 @@ func (c *cmdConfigDeviceShow) command() *cobra.Command {
}
func (c *cmdConfigDeviceShow) run(cmd *cobra.Command, args []string) error {
parsed, err := c.configDevice.formatUsage(cmdConfigDeviceShowUsage).Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(c.configDevice.formatUsage(cmdConfigDeviceShowUsage), cmd, args)
if err != nil {
return err
}
@ -732,7 +738,7 @@ func (c *cmdConfigDeviceShow) run(cmd *cobra.Command, args []string) error {
devices = inst.Devices
}
data, err := yaml.Dump(&devices, yaml.V2)
data, err := yaml.Dump(&devices, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -751,7 +757,7 @@ type cmdConfigDeviceUnset struct {
profile *cmdProfile
}
var cmdConfigDeviceUnsetUsage = u.Usage{u.Device, u.Key}
var cmdConfigDeviceUnsetUsage = u.Usage{u.Device, u.Key.List(1)}
func (c *cmdConfigDeviceUnset) command() *cobra.Command {
cmd := &cobra.Command{}
@ -785,7 +791,7 @@ func (c *cmdConfigDeviceUnset) command() *cobra.Command {
}
func (c *cmdConfigDeviceUnset) run(cmd *cobra.Command, args []string) error {
parsed, err := c.configDevice.formatUsage(cmdConfigDeviceUnsetUsage).Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(c.configDevice.formatUsage(cmdConfigDeviceUnsetUsage), cmd, args)
if err != nil {
return err
}

View File

@ -91,11 +91,12 @@ func (c *cmdConfigMetadataEdit) helpTemplate() string {
### - ""
### create_only: false
### template: template.tpl
### properties: {}`)
### properties: {}`,
)
}
func (c *cmdConfigMetadataEdit) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigMetadataEditUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigMetadataEditUsage, cmd, args)
if err != nil {
return err
}
@ -124,7 +125,7 @@ func (c *cmdConfigMetadataEdit) run(cmd *cobra.Command, args []string) error {
return err
}
origContent, err := yaml.Dump(metadata, yaml.V2)
origContent, err := yaml.Dump(metadata, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -195,7 +196,7 @@ func (c *cmdConfigMetadataShow) command() *cobra.Command {
}
func (c *cmdConfigMetadataShow) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigMetadataShowUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigMetadataShowUsage, cmd, args)
if err != nil {
return err
}
@ -209,7 +210,7 @@ func (c *cmdConfigMetadataShow) run(cmd *cobra.Command, args []string) error {
return err
}
content, err := yaml.Dump(metadata, yaml.V2)
content, err := yaml.Dump(metadata, yaml.WithV2Defaults())
if err != nil {
return err
}

View File

@ -68,7 +68,8 @@ func (c *cmdConfigTemplateCreate) command() *cobra.Command {
cmd.Aliases = []string{"add"}
cmd.Short = i18n.G("Create new instance file templates")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Create new instance file templates`))
`Create new instance file templates`,
))
cmd.Example = cli.FormatSection("", i18n.G(`incus config template create u1 t1
Create template t1 for instance u1
@ -89,7 +90,7 @@ incus config template create u1 t1 < config.tpl
}
func (c *cmdConfigTemplateCreate) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTemplateCreateUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTemplateCreateUsage, cmd, args)
if err != nil {
return err
}
@ -148,7 +149,7 @@ func (c *cmdConfigTemplateDelete) command() *cobra.Command {
}
func (c *cmdConfigTemplateDelete) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTemplateDeleteUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTemplateDeleteUsage, cmd, args)
if err != nil {
return err
}
@ -194,7 +195,7 @@ func (c *cmdConfigTemplateEdit) command() *cobra.Command {
}
func (c *cmdConfigTemplateEdit) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTemplateEditUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTemplateEditUsage, cmd, args)
if err != nil {
return err
}
@ -288,7 +289,7 @@ func (c *cmdConfigTemplateList) command() *cobra.Command {
}
func (c *cmdConfigTemplateList) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTemplateListUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTemplateListUsage, cmd, args)
if err != nil {
return err
}
@ -331,7 +332,8 @@ func (c *cmdConfigTemplateShow) command() *cobra.Command {
cmd.Use = cli.U("show", cmdConfigTemplateShowUsage...)
cmd.Short = i18n.G("Show content of instance file templates")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Show content of instance file templates`))
`Show content of instance file templates`,
))
cmd.RunE = c.run
@ -351,7 +353,7 @@ func (c *cmdConfigTemplateShow) command() *cobra.Command {
}
func (c *cmdConfigTemplateShow) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTemplateShowUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTemplateShowUsage, cmd, args)
if err != nil {
return err
}

View File

@ -95,7 +95,8 @@ func (c *cmdConfigTrustAdd) command() *cobra.Command {
`Add new trusted client
This will issue a trust token to be used by the client to add itself to the trust store.
`))
`,
))
cli.AddBoolFlag(cmd.Flags(), &c.flagRestricted, "restricted", i18n.G("Restrict the certificate to one or more projects"))
cli.AddStringFlag(cmd.Flags(), &c.flagProjects, "projects", "", "", i18n.G("List of projects to restrict the certificate to"))
@ -106,7 +107,7 @@ This will issue a trust token to be used by the client to add itself to the trus
}
func (c *cmdConfigTrustAdd) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTrustAddUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTrustAddUsage, cmd, args)
if err != nil {
return err
}
@ -171,7 +172,8 @@ func (c *cmdConfigTrustAddCertificate) command() *cobra.Command {
The following certificate types are supported:
- client (default)
- metrics
`))
`,
))
cli.AddBoolFlag(cmd.Flags(), &c.flagRestricted, "restricted", i18n.G("Restrict the certificate to one or more projects"))
cli.AddStringFlag(cmd.Flags(), &c.flagProjects, "projects", "", "", i18n.G("List of projects to restrict the certificate to"))
@ -185,7 +187,7 @@ The following certificate types are supported:
}
func (c *cmdConfigTrustAddCertificate) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTrustAddCertificateUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTrustAddCertificateUsage, cmd, args)
if err != nil {
return err
}
@ -271,11 +273,12 @@ func (c *cmdConfigTrustEdit) helpTemplate() string {
`### This is a YAML representation of the certificate.
### Any line starting with a '# will be ignored.
###
### Note that the fingerprint is shown but cannot be changed`)
### Note that the fingerprint is shown but cannot be changed`,
)
}
func (c *cmdConfigTrustEdit) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTrustEditUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTrustEditUsage, cmd, args)
if err != nil {
return err
}
@ -305,7 +308,7 @@ func (c *cmdConfigTrustEdit) run(cmd *cobra.Command, args []string) error {
return err
}
data, err := yaml.Dump(&cert, yaml.V2)
data, err := yaml.Dump(&cert, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -385,7 +388,6 @@ or csv format.
Default column layout is: ntdfe
Column shorthand chars:
n - Name
t - Type
c - Common Name
@ -394,7 +396,8 @@ Column shorthand chars:
i - Issue date
e - Expiry date
r - Whether certificate is restricted
p - Newline-separated list of projects`))
p - Newline-separated list of projects`,
))
cli.AddStringFlag(cmd.Flags(), &c.flagColumns, "columns|c", "ntdfe", "", i18n.G("Columns"))
cli.AddStringFlag(cmd.Flags(), &c.flagFormat, "format|f", c.global.defaultListFormat(), "", i18n.G(`Format (csv|json|table|yaml|compact|markdown), use suffix ",noheader" to disable headers and ",header" to enable it if missing, e.g. csv,header`))
@ -487,7 +490,7 @@ func (c *cmdConfigTrustList) projectColumnData(rowData rowData) string {
}
func (c *cmdConfigTrustList) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTrustListUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTrustListUsage, cmd, args)
if err != nil {
return err
}
@ -569,8 +572,8 @@ Default column layout: ntE
== Columns ==
The -c option takes a comma separated list of arguments that control
which network zone attributes to output when displaying in table or csv
format.
which certificate add tokens attributes to output when displaying in
table or csv format.
Column arguments are either pre-defined shorthand chars (see below),
or (extended) config keys.
@ -580,7 +583,8 @@ Commas between consecutive shorthand chars are optional.
Pre-defined column shorthand chars:
n - Name
t - Token
E - Expires At`))
E - Expires At`,
))
cli.AddStringFlag(cmd.Flags(), &c.flagFormat, "format|f", c.global.defaultListFormat(), "", i18n.G(`Format (csv|json|table|yaml|compact|markdown), use suffix ",noheader" to disable headers and ",header" to enable it if missing, e.g. csv,header`))
cli.AddStringFlag(cmd.Flags(), &c.flagColumns, "columns|c", defaultConfigTrustListTokenColumns, "", i18n.G("Columns"))
@ -640,7 +644,7 @@ func (c *cmdConfigTrustListTokens) expiresAtColumnData(token *api.CertificateAdd
}
func (c *cmdConfigTrustListTokens) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTrustListTokensUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTrustListTokensUsage, cmd, args)
if err != nil {
return err
}
@ -717,7 +721,7 @@ func (c *cmdConfigTrustRemove) command() *cobra.Command {
}
func (c *cmdConfigTrustRemove) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTrustRemoveUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTrustRemoveUsage, cmd, args)
if err != nil {
return err
}
@ -750,7 +754,7 @@ func (c *cmdConfigTrustRevokeToken) command() *cobra.Command {
}
func (c *cmdConfigTrustRevokeToken) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTrustRevokeTokenUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTrustRevokeTokenUsage, cmd, args)
if err != nil {
return err
}
@ -818,7 +822,7 @@ func (c *cmdConfigTrustShow) command() *cobra.Command {
}
func (c *cmdConfigTrustShow) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConfigTrustShowUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConfigTrustShowUsage, cmd, args)
if err != nil {
return err
}
@ -832,7 +836,7 @@ func (c *cmdConfigTrustShow) run(cmd *cobra.Command, args []string) error {
return err
}
data, err := yaml.Dump(&cert, yaml.V2)
data, err := yaml.Dump(&cert, yaml.WithV2Defaults())
if err != nil {
return err
}

View File

@ -4,7 +4,9 @@ import (
"errors"
"fmt"
"io"
"io/fs"
"net"
"net/url"
"os"
"os/exec"
"runtime"
@ -34,6 +36,8 @@ type cmdConsole struct {
flagForce bool
flagShowLog bool
flagType string
withLog bool
}
var cmdConsoleUsage = u.Usage{u.Instance.Remote()}
@ -46,7 +50,8 @@ func (c *cmdConsole) command() *cobra.Command {
`Attach to instance consoles
This command allows you to interact with the boot console of an instance
as well as retrieve past log entries from it.`))
as well as retrieve past log entries from it.`,
))
cmd.RunE = c.run
cli.AddBoolFlag(cmd.Flags(), &c.flagForce, "force|f", i18n.G("Forces a connection to the console, even if there is already an active session"))
@ -109,7 +114,7 @@ func (er stdinMirror) Read(p []byte) (int, error) {
}
func (c *cmdConsole) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdConsoleUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdConsoleUsage, cmd, args)
if err != nil {
return err
}
@ -171,7 +176,7 @@ func (c *cmdConsole) text(d incus.InstanceServer, name string) error {
return err
}
defer func() { _ = termios.Restore(cfd, oldTTYstate) }()
defer logger.WarnOnError(func() error { return termios.Restore(cfd, oldTTYstate) }, "Failed to restore terminal")
handler := c.controlSocketHandler
@ -195,11 +200,20 @@ func (c *cmdConsole) text(d incus.InstanceServer, name string) error {
sendDisconnect := make(chan struct{})
defer close(sendDisconnect)
// Buffer websocket output so it doesn't interleave with the log
// content printed below.
var terminalOut io.WriteCloser = os.Stdout
var buffered *bufferedWriter
if c.withLog {
buffered = &bufferedWriter{out: os.Stdout}
terminalOut = buffered
}
consoleArgs := incus.InstanceConsoleArgs{
Terminal: &readWriteCloser{stdinMirror{
os.Stdin,
manualDisconnect, new(bool),
}, os.Stdout},
}, terminalOut},
Control: handler,
ConsoleDisconnect: consoleDisconnect,
}
@ -224,6 +238,33 @@ func (c *cmdConsole) text(d incus.InstanceServer, name string) error {
fmt.Print(i18n.G("To detach from the console, press: <ctrl>+a q") + "\n\r")
// With the websocket attached, fetch the existing console log,
// print it, then release any buffered websocket output. A small
// overlap is preferable to losing output produced before the attach.
if c.withLog {
logArgs := &incus.InstanceConsoleLogArgs{}
log, err := d.GetInstanceConsoleLog(name, logArgs)
if err != nil {
return err
}
content, err := io.ReadAll(log)
if err != nil {
return err
}
// In raw mode the terminal doesn't translate \n to \r\n, so
// normalize line endings before printing the log.
text := strings.ReplaceAll(string(content), "\r\n", "\n")
text = strings.ReplaceAll(text, "\n", "\r\n")
fmt.Print(text)
err = buffered.Flush()
if err != nil {
return err
}
}
// Wait for the operation to complete
err = op.Wait()
if err != nil {
@ -290,9 +331,22 @@ func (c *cmdConsole) vga(d incus.InstanceServer, name string) error {
return err
}
defer func() { _ = os.Remove(path.Name()) }()
// The socket file is usually already removed by listener.Close(), so ignore not-exist errors.
defer logger.WarnOnError(func() error {
err := os.Remove(path.Name())
if errors.Is(err, fs.ErrNotExist) {
return nil
}
socket = fmt.Sprintf("spice+unix://%s", path.Name())
return err
}, "Failed to remove temporary file")
spiceURL := &url.URL{
Scheme: "spice+unix",
Path: path.Name(),
}
socket = spiceURL.String()
} else {
listener, err = net.Listen("tcp", "127.0.0.1:0")
if err != nil {

View File

@ -15,6 +15,7 @@ import (
"github.com/lxc/incus/v7/internal/instance"
"github.com/lxc/incus/v7/shared/api"
cli "github.com/lxc/incus/v7/shared/cmd"
"github.com/lxc/incus/v7/shared/util"
)
type cmdCopy struct {
@ -52,7 +53,8 @@ Transfer modes (--mode):
- relay: The CLI connects to both source and server and proxies the data (both source and target must listen on network)
The pull transfer mode is the default as it is compatible with all server versions.
`))
`,
))
cmd.RunE = c.run
cli.AddStringArrayFlag(cmd.Flags(), &c.flagConfig, "config|c", i18n.G("Config key/value to apply to the new instance"))
@ -85,6 +87,43 @@ The pull transfer mode is the default as it is compatible with all server versio
return cmd
}
// applyStoragePool sets the storage pool on the root disk and any dependent
// disk device, unless their pool was explicitly overridden via --device.
func applyStoragePool(devices map[string]map[string]string, deviceOverrides map[string]map[string]string, pool string) {
if pool == "" {
return
}
rootDiskDeviceKey, _, _ := instance.GetRootDiskDevice(devices)
for devName, dev := range devices {
if dev["type"] != "disk" {
continue
}
// Only override the root disk and dependent disk devices.
if devName != rootDiskDeviceKey && util.IsFalseOrEmpty(dev["dependent"]) {
continue
}
// Don't override devices with an explicit pool override.
if deviceOverrides[devName]["pool"] != "" {
continue
}
dev["pool"] = pool
}
// Create a root disk device if the instance doesn't have one.
if rootDiskDeviceKey == "" {
devices["root"] = map[string]string{
"type": "disk",
"path": "/",
"pool": pool,
}
}
}
// copyOrMove runs the post-parsing command logic.
func (c *cmdCopy) copyOrMove(cmd *cobra.Command, src *u.Parsed, dst *u.Parsed, keepVolatile bool, ephemeral int, stateful bool, instanceOnly bool, mode string, pool string, move bool) error {
srcServer := src.RemoteServer
@ -205,17 +244,7 @@ func (c *cmdCopy) copyOrMove(cmd *cobra.Command, src *u.Parsed, dst *u.Parsed, k
entry.Ephemeral = false
}
rootDiskDeviceKey, _, _ := instance.GetRootDiskDevice(entry.Devices)
if rootDiskDeviceKey != "" && pool != "" {
entry.Devices[rootDiskDeviceKey]["pool"] = pool
} else if pool != "" {
entry.Devices["root"] = map[string]string{
"type": "disk",
"path": "/",
"pool": pool,
}
}
applyStoragePool(entry.Devices, deviceMap, pool)
if entry.Config != nil {
// Strip the last_state.power key in all cases
@ -297,16 +326,7 @@ func (c *cmdCopy) copyOrMove(cmd *cobra.Command, src *u.Parsed, dst *u.Parsed, k
entry.Ephemeral = false
}
rootDiskDeviceKey, _, _ := instance.GetRootDiskDevice(entry.Devices)
if rootDiskDeviceKey != "" && pool != "" {
entry.Devices[rootDiskDeviceKey]["pool"] = pool
} else if pool != "" {
entry.Devices["root"] = map[string]string{
"type": "disk",
"path": "/",
"pool": pool,
}
}
applyStoragePool(entry.Devices, deviceMap, pool)
// Strip the volatile keys if requested
if !keepVolatile {
@ -422,7 +442,7 @@ func (c *cmdCopy) copyOrMove(cmd *cobra.Command, src *u.Parsed, dst *u.Parsed, k
}
func (c *cmdCopy) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdCopyUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdCopyUsage, cmd, args)
if err != nil {
return err
}

View File

@ -85,7 +85,7 @@ incus launch images:debian/12 v2 --vm -d root,size=50GiB -d root,io.bus=nvme
}
func (c *cmdCreate) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdCreateUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdCreateUsage, cmd, args)
if err != nil {
return err
}

View File

@ -1,85 +0,0 @@
package main
import (
"fmt"
"os"
"github.com/spf13/cobra"
"github.com/lxc/incus/v7/cmd/incus/color"
u "github.com/lxc/incus/v7/cmd/incus/usage"
"github.com/lxc/incus/v7/internal/i18n"
cli "github.com/lxc/incus/v7/shared/cmd"
"github.com/lxc/incus/v7/shared/util"
)
type cmdDebug struct {
global *cmdGlobal
}
func (c *cmdDebug) command() *cobra.Command {
cmd := &cobra.Command{}
cmd.Hidden = true
cmd.Use = cli.U("debug")
cmd.Short = i18n.G("Debug commands")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Debug commands for instances`))
debugAttachCmd := cmdDebugMemory{global: c.global, debug: c}
cmd.AddCommand(debugAttachCmd.command())
return cmd
}
type cmdDebugMemory struct {
global *cmdGlobal
debug *cmdDebug
flagFormat string
}
var cmdDebugMemoryUsage = u.Usage{u.Instance.Remote(), u.Target(u.File)}
func (c *cmdDebugMemory) command() *cobra.Command {
cmd := &cobra.Command{}
cmd.Use = cli.U("dump-memory", cmdDebugMemoryUsage...)
cmd.Short = i18n.G("Export a virtual machine's memory state")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Export the current memory state of a running virtual machine into a dump file.
This can be useful for debugging or analysis purposes.`))
cmd.Example = cli.FormatSection("", i18n.G(
`incus debug dump-memory vm1 memory-dump.elf --format=elf
Creates an ELF format memory dump of the vm1 instance.`))
cmd.RunE = c.run
cli.AddStringFlag(cmd.Flags(), &c.flagFormat, "format|f", "elf", "", i18n.G("Format of memory dump (e.g. elf, win-dmp, kdump-zlib, kdump-raw-zlib, ...)"))
return cmd
}
func (c *cmdDebugMemory) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdDebugMemoryUsage.Parse(c.global.conf, cmd, args)
if err != nil {
return err
}
d := parsed[0].RemoteServer
instanceName := parsed[0].RemoteObject.String
path := parsed[1].String
target, err := os.Create(path)
if err != nil {
return err
}
rc, err := d.GetInstanceDebugMemory(instanceName, c.flagFormat)
if err != nil {
return fmt.Errorf(i18n.G("Failed to dump instance memory: %w"), err)
}
_, err = util.SafeCopy(target, rc)
if err != nil {
return err
}
return nil
}

217
cmd/incus/default.go Normal file
View File

@ -0,0 +1,217 @@
package main
import (
"errors"
"fmt"
"strconv"
"github.com/spf13/cobra"
"go.yaml.in/yaml/v4"
"github.com/lxc/incus/v7/cmd/incus/color"
u "github.com/lxc/incus/v7/cmd/incus/usage"
"github.com/lxc/incus/v7/internal/i18n"
cli "github.com/lxc/incus/v7/shared/cmd"
)
type cmdDefault struct {
global *cmdGlobal
}
func (c *cmdDefault) command() *cobra.Command {
cmd := &cobra.Command{}
cmd.Use = cli.U("default")
cmd.Short = i18n.G("Manage client defaults")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Manage client defaults`))
cmd.Hidden = true
// Set
defaultSetCmd := cmdDefaultSet{global: c.global, def: c}
cmd.AddCommand(defaultSetCmd.command())
// Show
defaultShowCmd := cmdDefaultShow{global: c.global, def: c}
cmd.AddCommand(defaultShowCmd.command())
// Unset
defaultUnsetCmd := cmdDefaultUnset{global: c.global, def: c, defaultSet: &defaultSetCmd}
cmd.AddCommand(defaultUnsetCmd.command())
// Workaround for subcommand usage errors. See: https://github.com/spf13/cobra/issues/706
cmd.Args = cobra.NoArgs
cmd.Run = func(cmd *cobra.Command, _ []string) { _ = cmd.Usage() }
return cmd
}
// Set.
type cmdDefaultSet struct {
global *cmdGlobal
def *cmdDefault
}
var cmdDefaultSetUsage = u.Usage{u.KV.List(1)}
func (c *cmdDefaultSet) command() *cobra.Command {
cmd := &cobra.Command{}
cmd.Use = cli.U("set", cmdDefaultSetUsage...)
cmd.Short = i18n.G("Set client defaults")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Set client defaults`))
cmd.RunE = c.run
return cmd
}
// set runs the post-parsing command logic.
func (c *cmdDefaultSet) set(cmd *cobra.Command, parsed []*u.Parsed) error {
conf := c.global.conf
keys, err := kvToMap(parsed[0])
if err != nil {
return err
}
for k, v := range keys {
switch k {
case "list_format":
err = c.setListFormat(v)
case "console_type":
err = c.setConsoleType(v)
case "console_spice_command":
err = c.setConsoleSpiceCommand(v)
case "no_color":
err = c.setNoColor(v)
default:
err = fmt.Errorf(i18n.G("Invalid default %q"), k)
}
if err != nil {
return err
}
}
return conf.SaveConfig(c.global.confPath)
}
func (c *cmdDefaultSet) run(cmd *cobra.Command, args []string) error {
parsed, err := c.global.Parse(cmdDefaultSetUsage, cmd, args)
if err != nil {
return err
}
return c.set(cmd, parsed)
}
func (c *cmdDefaultSet) setListFormat(listFormat string) error {
// Validate list format
switch listFormat {
case cli.TableFormatCSV, cli.TableFormatJSON, cli.TableFormatTable, cli.TableFormatYAML, cli.TableFormatCompact, cli.TableFormatMarkdown, "":
default:
return fmt.Errorf(i18n.G("Invalid value %q for list_format"), listFormat)
}
c.global.conf.Defaults.ListFormat = listFormat
return nil
}
func (c *cmdDefaultSet) setConsoleType(consoleType string) error {
// Validate console type
switch consoleType {
case "console", "vga", "":
default:
return fmt.Errorf(i18n.G("Invalid value %q for console_type"), consoleType)
}
c.global.conf.Defaults.ConsoleType = consoleType
return nil
}
func (c *cmdDefaultSet) setConsoleSpiceCommand(consoleSpiceCommand string) error {
c.global.conf.Defaults.ConsoleSpiceCommand = consoleSpiceCommand
return nil
}
func (c *cmdDefaultSet) setNoColor(noColorStr string) error {
// Treat an empty value as unsetting the key
if noColorStr == "" {
noColorStr = "false"
}
// Validate no color input
noColor, err := strconv.ParseBool(noColorStr)
if err != nil {
return errors.New(i18n.G("no_color must be boolean"))
}
c.global.conf.Defaults.NoColor = noColor
return nil
}
// Show.
type cmdDefaultShow struct {
global *cmdGlobal
def *cmdDefault
}
var cmdDefaultShowUsage = u.Usage{}
func (c *cmdDefaultShow) command() *cobra.Command {
cmd := &cobra.Command{}
cmd.Use = cli.U("show", cmdDefaultShowUsage...)
cmd.Short = i18n.G("Show client defaults")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Show client defaults`))
cmd.RunE = c.run
return cmd
}
func (c *cmdDefaultShow) run(cmd *cobra.Command, args []string) error {
conf := c.global.conf
// Get Defaults
defaults := conf.Defaults
// Display defaults
data, err := yaml.Dump(&defaults, yaml.WithV2Defaults())
if err != nil {
return err
}
fmt.Printf("%s", data)
return nil
}
// Unset.
type cmdDefaultUnset struct {
global *cmdGlobal
def *cmdDefault
defaultSet *cmdDefaultSet
}
var cmdDefaultUnsetUsage = u.Usage{u.Default.List(1)}
func (c *cmdDefaultUnset) command() *cobra.Command {
cmd := &cobra.Command{}
cmd.Use = cli.U("unset", cmdDefaultUnsetUsage...)
cmd.Short = i18n.G("Unset client defaults")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(`Unset client defaults`))
cmd.RunE = c.run
return cmd
}
func (c *cmdDefaultUnset) run(cmd *cobra.Command, args []string) error {
parsed, err := c.global.Parse(cmdDefaultUnsetUsage, cmd, args)
if err != nil {
return err
}
return unsetKey(c.defaultSet, cmd, parsed)
}

View File

@ -146,7 +146,7 @@ func (c *cmdDelete) deleteOne(p *u.Parsed) error {
}
func (c *cmdDelete) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdDeleteUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdDeleteUsage, cmd, args)
if err != nil {
return err
}

View File

@ -52,7 +52,8 @@ executable, passing the shell commands as arguments, for example:
incus exec <instance> -- sh -c "cd /tmp && pwd"
Mode defaults to non-interactive, interactive mode is selected if both stdin AND stdout are terminals (stderr is ignored).`))
Mode defaults to non-interactive, interactive mode is selected if both stdin AND stdout are terminals (stderr is ignored).`,
))
cmd.Example = cli.FormatSection("", i18n.G(`incus exec c1 bash
Run the "bash" command in instance "c1"
@ -98,8 +99,7 @@ func (c *cmdExec) sendTermSize(control *websocket.Conn) error {
}
func (c *cmdExec) run(cmd *cobra.Command, args []string) error {
conf := c.global.conf
parsed, err := cmdExecUsage.Parse(conf, cmd, args)
parsed, err := c.global.Parse(cmdExecUsage, cmd, args)
if err != nil {
return err
}
@ -159,7 +159,7 @@ func (c *cmdExec) run(cmd *cobra.Command, args []string) error {
return err
}
defer func() { _ = termios.Restore(stdinFd, oldttystate) }()
defer logger.WarnOnError(func() error { return termios.Restore(stdinFd, oldttystate) }, "Failed to restore terminal")
}
// Setup interactive console handler

View File

@ -35,7 +35,7 @@ func (c *cmdExec) controlSocketHandler(control *websocket.Conn) {
unix.SIGCONT)
closeMsg := websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")
defer func() { _ = control.WriteMessage(websocket.CloseMessage, closeMsg) }()
defer logger.WarnOnError(func() error { return control.WriteMessage(websocket.CloseMessage, closeMsg) }, "Failed to write close message")
for {
sig := <-ch

View File

@ -17,6 +17,7 @@ import (
"github.com/lxc/incus/v7/shared/api"
"github.com/lxc/incus/v7/shared/archive"
cli "github.com/lxc/incus/v7/shared/cmd"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/util"
)
@ -37,13 +38,15 @@ func (c *cmdExport) command() *cobra.Command {
cmd.Use = cli.U("export", cmdExportUsage...)
cmd.Short = i18n.G("Export instance backups")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Export instances as backup tarballs.`))
`Export instances as backup tarballs.`,
))
cmd.Example = cli.FormatSection("", i18n.G(
`incus export u1 backup0.tar.gz
Download a backup tarball of the u1 instance.
incus export u1 -
Download a backup tarball with it written to the standard output.`))
Download a backup tarball with it written to the standard output.`,
))
cmd.RunE = c.run
cli.AddBoolFlag(cmd.Flags(), &c.flagInstanceOnly, "instance-only", i18n.G("Whether or not to only backup the instance (without snapshots)"))
@ -56,7 +59,7 @@ incus export u1 -
}
func (c *cmdExport) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdExportUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdExportUsage, cmd, args)
if err != nil {
return err
}
@ -159,7 +162,7 @@ func (c *cmdExport) run(cmd *cobra.Command, args []string) error {
return err
}
defer func() { _ = target.Close() }()
defer logger.WarnOnErrorExcept(target.Close, []error{os.ErrClosed}, "Failed to close target file")
}
// Prepare the download request.

View File

@ -7,6 +7,7 @@ import (
"io/fs"
"net"
"os"
"path"
"path/filepath"
"slices"
"strconv"
@ -97,18 +98,20 @@ func (c *cmdFileCreate) command() *cobra.Command {
cmd.Use = cli.U("create", cmdFileCreateUsage...)
cmd.Short = i18n.G("Create files and directories in instances")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Create files and directories in instances`))
`Create files and directories in instances`,
))
cmd.Example = cli.FormatSection("", i18n.G(
`incus file create foo/bar
To create a file /bar in the foo instance.
incus file create --type=symlink foo/bar baz
To create a symlink /bar in instance foo whose target is baz.`))
To create a symlink /bar in instance foo whose target is baz.`,
))
cli.AddBoolFlag(cmd.Flags(), &c.file.flagMkdir, "create-dirs|p", i18n.G("Create any directories necessary"))
cli.AddBoolFlag(cmd.Flags(), &c.flagForce, "force|f", i18n.G("Force creating files or directories"))
cli.AddIntFlag(cmd.Flags(), &c.file.flagGID, "gid", -1, i18n.G("Set the file's gid on create"))
cli.AddIntFlag(cmd.Flags(), &c.file.flagUID, "uid", -1, i18n.G("Set the file's uid on create"))
cli.AddIntFlag(cmd.Flags(), &c.file.flagGID, "gid", i18n.G("Set the file's gid on create"), -1)
cli.AddIntFlag(cmd.Flags(), &c.file.flagUID, "uid", i18n.G("Set the file's uid on create"), -1)
cli.AddStringFlag(cmd.Flags(), &c.file.flagMode, "mode", "", "", i18n.G("Set the file's perms on create"))
cli.AddStringFlag(cmd.Flags(), &c.flagType, "type|t", "file", "", i18n.G("The type to create (file, symlink, or directory)"))
@ -126,7 +129,7 @@ incus file create --type=symlink foo/bar baz
}
func (c *cmdFileCreate) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdFileCreateUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdFileCreateUsage, cmd, args)
if err != nil {
return err
}
@ -146,7 +149,7 @@ func (c *cmdFileCreate) run(cmd *cobra.Command, args []string) error {
return errors.New(i18n.G(`Symlink target path can only be used for type "symlink"`))
}
symlinkTargetPath = filepath.Clean(symlinkTargetPath)
symlinkTargetPath = path.Clean(symlinkTargetPath)
}
if isDir {
@ -159,7 +162,7 @@ func (c *cmdFileCreate) run(cmd *cobra.Command, args []string) error {
return err
}
defer func() { _ = sftpConn.Close() }()
defer logger.WarnOnError(sftpConn.Close, "Failed to close SFTP connection")
// Determine the target uid
uid := max(c.file.flagUID, 0)
@ -192,7 +195,7 @@ func (c *cmdFileCreate) run(cmd *cobra.Command, args []string) error {
// Create needed paths if requested
if c.file.flagMkdir {
err = sftpRecursiveMkdir(sftpConn, filepath.Dir(targetPath), nil, int64(uid), int64(gid))
err = sftpRecursiveMkdir(sftpConn, path.Dir(targetPath), nil, int64(uid), int64(gid))
if err != nil {
return err
}
@ -285,7 +288,7 @@ func (c *cmdFileDelete) command() *cobra.Command {
}
func (c *cmdFileDelete) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdFileDeleteUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdFileDeleteUsage, cmd, args)
if err != nil {
return err
}
@ -305,7 +308,7 @@ func (c *cmdFileDelete) run(cmd *cobra.Command, args []string) error {
err := func() error {
d := p.RemoteServer
instanceName := p.RemoteObject.List[0].String
path, _ := normalizePath(p.RemoteObject.List[1].String)
filePath, _ := normalizePath(p.RemoteObject.List[1].String)
instanceID := p.RemoteName + ":" + instanceName
sftpConn, ok := sftpClients[instanceID]
@ -319,7 +322,7 @@ func (c *cmdFileDelete) run(cmd *cobra.Command, args []string) error {
}
if c.flagForce {
err = sftpConn.RemoveAll(path)
err = sftpConn.RemoveAll(filePath)
if err != nil {
return err
}
@ -327,7 +330,7 @@ func (c *cmdFileDelete) run(cmd *cobra.Command, args []string) error {
return nil
}
return sftpConn.Remove(path)
return sftpConn.Remove(filePath)
}()
if err != nil {
errs = append(errs, err)
@ -371,7 +374,7 @@ func (c *cmdFileEdit) command() *cobra.Command {
}
func (c *cmdFileEdit) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdFileEditUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdFileEditUsage, cmd, args)
if err != nil {
return err
}
@ -385,7 +388,7 @@ func (c *cmdFileEdit) run(cmd *cobra.Command, args []string) error {
}
// Create temp file
f, err := os.CreateTemp("", fmt.Sprintf("incus_file_edit_*%s", filepath.Ext(fileName)))
f, err := os.CreateTemp("", fmt.Sprintf("incus_file_edit_*%s", path.Ext(fileName)))
if err != nil {
return fmt.Errorf(i18n.G("Unable to create a temporary file: %v"), err)
}
@ -399,7 +402,7 @@ func (c *cmdFileEdit) run(cmd *cobra.Command, args []string) error {
c.filePush.edit = true
// Extract current value
defer func() { _ = os.Remove(fname) }()
defer logger.WarnOnError(func() error { return os.Remove(fname) }, "Failed to remove temporary file")
err = c.filePull.pull(parsed, fname)
if err != nil {
return err
@ -441,7 +444,8 @@ func (c *cmdFilePull) command() *cobra.Command {
To pull /etc/hosts from the instance and write it to the current directory.
incus file pull foo/etc/hosts -
To pull /etc/hosts from the instance and write its output to standard output.`))
To pull /etc/hosts from the instance and write its output to standard output.`,
))
cli.AddBoolFlag(cmd.Flags(), &c.file.flagMkdir, "create-dirs|p", i18n.G("Create any directories necessary"))
cli.AddBoolFlag(cmd.Flags(), &c.puller.flagRecursive, "recursive|r", i18n.G("Recursively transfer files"))
@ -521,7 +525,7 @@ func (c *cmdFilePull) pull(parsedFiles []*u.Parsed, target string) error {
err := func() error {
d := p.RemoteServer
instanceName := p.RemoteObject.List[0].String
path := p.RemoteObject.List[1].String
filePath := p.RemoteObject.List[1].String
instanceID := p.RemoteName + ":" + instanceName
sftpConn, ok := sftpClients[instanceID]
@ -534,20 +538,20 @@ func (c *cmdFilePull) pull(parsedFiles []*u.Parsed, target string) error {
sftpClients[instanceID] = sftpConn
}
srcInfo, normalizedPath, err := c.puller.statFile(sftpConn, path)
srcInfo, normalizedPath, err := c.puller.statFile(sftpConn, filePath)
if err != nil {
return err
}
// Recursively copy directories.
if srcInfo.IsDir() {
return sftpRecursivePullFile(sftpConn, srcInfo, path, normalizedPath, target, c.global.flagQuiet, c.puller.flagDereference, len(parsedFiles) > 1 || util.PathExists(target))
return sftpRecursivePullFile(sftpConn, srcInfo, filePath, normalizedPath, target, c.global.flagQuiet, c.puller.flagDereference, len(parsedFiles) > 1 || util.PathExists(target))
}
// Determine the target path.
var targetPath string
if targetIsDir {
targetPath = filepath.Join(target, filepath.Base(normalizedPath))
targetPath = filepath.Join(target, path.Base(normalizedPath))
} else {
targetPath = target
}
@ -570,7 +574,7 @@ func (c *cmdFilePull) pull(parsedFiles []*u.Parsed, target string) error {
return err
}
defer func() { _ = f.Close() }() // nolint:revive
defer logger.WarnOnError(f.Close, "Failed to close file") // nolint:revive
err = os.Chmod(targetPath, os.FileMode(srcInfo.Mode()))
if err != nil {
@ -612,7 +616,7 @@ func (c *cmdFilePull) pull(parsedFiles []*u.Parsed, target string) error {
return err
}
defer func() { _ = src.Close() }()
defer logger.WarnOnError(src.Close, "Failed to close source file")
_, err = util.SafeCopy(writer, src)
if err != nil {
@ -639,7 +643,7 @@ func (c *cmdFilePull) pull(parsedFiles []*u.Parsed, target string) error {
func (c *cmdFilePull) run(cmd *cobra.Command, args []string) error {
// Do NOT blindly copy the following parsing line; it performs right-to-left parsing, which in
// most cases is NOT what you want.
parsed, err := cmdFilePullUsage.Parse(c.global.conf, cmd, args, true)
parsed, err := c.global.Parse(cmdFilePullUsage, cmd, args, true)
if err != nil {
return err
}
@ -669,12 +673,13 @@ func (c *cmdFilePush) command() *cobra.Command {
To push /etc/hosts into the instance "foo".
echo "Hello world" | incus file push - foo/root/test
To read "Hello world" from standard input and write it into /root/test in instance "foo".`))
To read "Hello world" from standard input and write it into /root/test in instance "foo".`,
))
cli.AddBoolFlag(cmd.Flags(), &c.file.flagMkdir, "create-dirs|p", i18n.G("Create any directories necessary"))
cli.AddIntFlag(cmd.Flags(), &c.file.flagUID, "uid", -1, i18n.G("Set the files' UIDs on push (in recursive mode, only sets the target directory's UID if it doesn't exist and -p is used)"))
cli.AddIntFlag(cmd.Flags(), &c.file.flagGID, "gid", -1, i18n.G("Set the files' GIDs on push (in recursive mode, only sets the target directory's GID if it doesn't exist and -p is used)"))
cli.AddStringFlag(cmd.Flags(), &c.file.flagMode, "mode", "", "", i18n.G("Set the file's perms on push (in recursive mode, sets the target directory's permissions if it doesn't exist)"))
cli.AddIntFlag(cmd.Flags(), &c.file.flagUID, "uid", i18n.G("Set the files' UIDs on push"), -1)
cli.AddIntFlag(cmd.Flags(), &c.file.flagGID, "gid", i18n.G("Set the files' GIDs on push"), -1)
cli.AddStringFlag(cmd.Flags(), &c.file.flagMode, "mode", "", "", i18n.G("Set the file's perms on push (in recursive mode, only sets the target directory's permissions)"))
cli.AddBoolFlag(cmd.Flags(), &c.pusher.flagRecursive, "recursive|r", i18n.G("Recursively transfer files"))
cli.AddBoolFlag(cmd.Flags(), &c.pusher.flagNoDereference, "no-dereference|P", i18n.G("Never follow symbolic links in source path"))
cli.AddBoolFlag(cmd.Flags(), &c.pusher.flagFollow, "follow|H", i18n.G("Follow command-line symbolic links in source path"))
@ -711,7 +716,7 @@ func (c *cmdFilePush) push(srcFiles []string, parsedTarget *u.Parsed) error {
return err
}
defer func() { _ = sftpConn.Close() }()
defer logger.WarnOnError(sftpConn.Close, "Failed to close SFTP connection")
targetInfo, err := sftpConn.Stat(target)
if err == nil {
@ -727,7 +732,7 @@ func (c *cmdFilePush) push(srcFiles []string, parsedTarget *u.Parsed) error {
return errors.New(i18n.G("Missing target directory"))
}
var mode os.FileMode
mode := -1
if c.file.flagMode != "" {
if len(c.file.flagMode) == 3 {
c.file.flagMode = "0" + c.file.flagMode
@ -738,22 +743,26 @@ func (c *cmdFilePush) push(srcFiles []string, parsedTarget *u.Parsed) error {
return err
}
mode = os.FileMode(m)
mode = int(os.FileMode(m).Perm())
}
var errs []error
canProcessStdin := len(srcFiles) == 1
usePercentage := true
// Push the files
for _, path := range srcFiles {
for _, srcPath := range srcFiles {
err := func() error {
var f *os.File
var linkTarget string
var size int64
m := mode
uid := max(c.file.flagUID, 0)
gid := max(c.file.flagGID, 0)
if isStdin(path) {
args := incus.InstanceFileArgs{
UID: int64(c.file.flagUID),
GID: int64(c.file.flagGID),
Mode: mode,
}
if isStdin(srcPath) {
if !canProcessStdin {
return errors.New(i18n.G("stdin can only be used once, with no other source arguments"))
}
@ -763,54 +772,53 @@ func (c *cmdFilePush) push(srcFiles []string, parsedTarget *u.Parsed) error {
}
canProcessStdin = false
usePercentage = false
f = os.Stdin
} else {
srcInfo, wPath, err := c.pusher.statFile(path)
srcInfo, wPath, err := c.pusher.statFile(srcPath)
if err != nil {
return err
}
// Recursively copy directories.
if srcInfo.IsDir() {
return sftpRecursivePushFile(sftpConn, wPath, path, target, c.global.flagQuiet, c.pusher.flagDereference, len(srcFiles) > 1 || targetExists)
return sftpRecursivePushFile(sftpConn, wPath, srcPath, target, args, c.global.flagQuiet, c.pusher.flagDereference, len(srcFiles) > 1 || targetExists)
}
if srcInfo.Mode()&os.ModeSymlink != 0 {
linkTarget, err = os.Readlink(path)
linkTarget, err = os.Readlink(srcPath)
if err != nil {
return err
}
} else {
f, err = os.Open(path)
f, err = os.Open(srcPath)
if err != nil {
return fmt.Errorf(i18n.G("Failed to open source file %q: %v"), f, err)
}
size = srcInfo.Size()
defer func() { _ = f.Close() }()
defer logger.WarnOnError(f.Close, "Failed to close file")
}
if c.file.flagUID == -1 || c.file.flagGID == -1 {
dMode, dUID, dGID := internalIO.GetOwnerMode(srcInfo)
dMode, dUID, dGID := internalIO.GetOwnerMode(srcInfo)
if c.file.flagMode == "" {
m = dMode
}
if args.Mode == -1 {
args.Mode = int(dMode)
}
if c.file.flagUID == -1 {
uid = dUID
}
if args.UID == -1 {
args.UID = int64(dUID)
}
if c.file.flagGID == -1 {
gid = dGID
}
if args.GID == -1 {
args.GID = int64(dGID)
}
}
// Determine the target path.
var targetPath string
if targetIsDir {
targetPath = filepath.Join(target, filepath.Base(path))
targetPath = path.Join(target, filepath.Base(srcPath))
} else {
targetPath = target
}
@ -818,39 +826,23 @@ func (c *cmdFilePush) push(srcFiles []string, parsedTarget *u.Parsed) error {
// Create needed paths if requested
if c.file.flagMkdir {
mode := os.FileMode(DirMode)
err = sftpRecursiveMkdir(sftpConn, filepath.Dir(targetPath), &mode, int64(uid), int64(gid))
err = sftpRecursiveMkdir(sftpConn, path.Dir(targetPath), &mode, int64(args.UID), int64(args.GID))
if err != nil {
return err
}
}
// Transfer the files.
args := incus.InstanceFileArgs{
UID: -1,
GID: -1,
Mode: -1,
}
// Check if the path already exists.
_, err := sftpConn.Stat(targetPath)
fileExists := err == nil
if !c.noModeChange {
if !fileExists || c.file.flagUID != -1 {
args.UID = int64(uid)
}
if !fileExists || c.file.flagGID != -1 {
args.GID = int64(gid)
}
if !fileExists || c.file.flagMode != "" {
args.Mode = int(m.Perm())
}
if err == nil && c.noModeChange {
args.UID = -1
args.GID = -1
args.Mode = -1
}
// Transfer the files.
progress := cli.ProgressRenderer{
Format: fmt.Sprintf(i18n.G("Pushing %s to %s: %%s"), path, targetPath),
Format: fmt.Sprintf(i18n.G("Pushing %s to %s: %%s"), srcPath, targetPath),
Quiet: c.global.flagQuiet,
}
@ -863,16 +855,18 @@ func (c *cmdFilePush) push(srcFiles []string, parsedTarget *u.Parsed) error {
ReadCloser: f,
Tracker: &ioprogress.ProgressTracker{
Length: size,
Handler: func(percent int64, speed int64) {
progress.UpdateProgress(ioprogress.ProgressData{
Text: fmt.Sprintf("%d%% (%s/s)", percent, units.GetByteSizeString(speed, 2)),
})
Handler: func(v int64, speed int64) {
if usePercentage {
progress.UpdateProgress(ioprogress.ProgressData{Text: fmt.Sprintf("%d%% (%s/s)", v, units.GetByteSizeString(speed, 2))})
} else {
progress.UpdateProgress(ioprogress.ProgressData{Text: fmt.Sprintf("%s (%s/s)", units.GetByteSizeString(v, 2), units.GetByteSizeString(speed, 2))})
}
},
},
}, f)
}
logger.Infof("Pushing %s to %s (%s)", path, targetPath, args.Type)
logger.Infof("Pushing %s to %s (%s)", srcPath, targetPath, args.Type)
err = sftpCreateFile(sftpConn, targetPath, args, true)
progress.Done("")
return err
@ -892,7 +886,7 @@ func (c *cmdFilePush) push(srcFiles []string, parsedTarget *u.Parsed) error {
func (c *cmdFilePush) run(cmd *cobra.Command, args []string) error {
// Do NOT blindly copy the following parsing line; it performs right-to-left parsing, which in
// most cases is NOT what you want.
parsed, err := cmdFilePushUsage.Parse(c.global.conf, cmd, args, true)
parsed, err := c.global.Parse(cmdFilePushUsage, cmd, args, true)
if err != nil {
return err
}
@ -918,13 +912,15 @@ func (c *cmdFileMount) command() *cobra.Command {
cmd.Short = i18n.G("Mount files from instances")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Mount files from instances.
If no target path is provided, start an SSH SFTP listener instead.`))
If no target path is provided, start an SSH SFTP listener instead.`,
))
cmd.Example = cli.FormatSection("", i18n.G(
`incus file mount foo/root fooroot
To mount /root from the instance foo onto the local fooroot directory.
incus file mount foo
To start an SSH SFTP listener for the root filesystem of instance foo.`))
To start an SSH SFTP listener for the root filesystem of instance foo.`,
))
cli.AddStringFlag(cmd.Flags(), &c.flagListen, "listen", "", "", i18n.G("Setup SSH SFTP listener on address:port instead of mounting"))
cli.AddBoolFlag(cmd.Flags(), &c.flagAuthNone, "no-auth", i18n.G("Disable authentication when using SSH SFTP listener"))
@ -948,7 +944,7 @@ incus file mount foo
}
func (c *cmdFileMount) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdFileMountUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdFileMountUsage, cmd, args)
if err != nil {
return err
}
@ -1000,7 +996,7 @@ func (c *cmdFileMount) run(cmd *cobra.Command, args []string) error {
return fmt.Errorf(i18n.G("Failed connecting to instance SFTP: %w"), err)
}
defer func() { _ = sftpConn.Close() }()
defer logger.WarnOnError(sftpConn.Close, "Failed to close SFTP connection")
return sshfsMount(cmd.Context(), sftpConn, instanceName, instancePath, targetPath)
}

View File

@ -30,6 +30,7 @@ import (
"github.com/lxc/incus/v7/shared/archive"
"github.com/lxc/incus/v7/shared/ask"
cli "github.com/lxc/incus/v7/shared/cmd"
"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/termios"
@ -64,7 +65,8 @@ as a compressed tarball (or for split images, the concatenation of the
metadata and rootfs tarballs).
Images can be referenced by their full hash, shortest unique partial
hash or alias name (if one is set).`))
hash or alias name (if one is set).`,
))
// Alias
imageAliasCmd := cmdImageAlias{global: c.global, image: c}
@ -168,7 +170,8 @@ func (c *cmdImageCopy) command() *cobra.Command {
`Copy images between servers
The auto-update flag instructs the server to keep this image up to date.
It requires the source to be an alias and for it to be public.`))
It requires the source to be an alias and for it to be public.`,
))
cli.AddBoolFlag(cmd.Flags(), &c.flagPublic, "public", i18n.G("Make image public"))
cli.AddBoolFlag(cmd.Flags(), &c.flagCopyAliases, "copy-aliases", i18n.G("Copy aliases from source"))
@ -176,7 +179,7 @@ It requires the source to be an alias and for it to be public.`))
cli.AddBoolFlag(cmd.Flags(), &c.flagAutoUpdate, "auto-update", i18n.G("Keep the image up to date after initial copy"))
cli.AddStringArrayFlag(cmd.Flags(), &c.flagAliases, "alias", i18n.G("New aliases to add to the image"))
cli.AddBoolFlag(cmd.Flags(), &c.flagVM, "vm", i18n.G("Copy virtual machine images"))
cli.AddStringFlag(cmd.Flags(), &c.flagMode, "mode", "pull", "", i18n.G("Transfer mode. One of pull (default), push or relay"))
cli.AddStringFlag(cmd.Flags(), &c.flagMode, "mode", "pull", "", i18n.G("Transfer mode. One of pull, push or relay"))
cli.AddStringFlag(cmd.Flags(), &c.flagTargetProject, "target-project", "", "", i18n.G("Copy to a project different from the source"))
cli.AddStringArrayFlag(cmd.Flags(), &c.flagProfile, "profile|p", i18n.G("Profile to apply to the new image"))
cmd.RunE = c.run
@ -198,7 +201,7 @@ It requires the source to be an alias and for it to be public.`))
func (c *cmdImageCopy) run(cmd *cobra.Command, args []string) error {
conf := c.global.conf
parsed, err := cmdImageCopyUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageCopyUsage, cmd, args)
if err != nil {
return err
}
@ -346,7 +349,7 @@ func (c *cmdImageDelete) command() *cobra.Command {
}
func (c *cmdImageDelete) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageDeleteUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageDeleteUsage, cmd, args)
if err != nil {
return err
}
@ -395,7 +398,8 @@ func (c *cmdImageEdit) command() *cobra.Command {
Launch a text editor to edit the properties
incus image edit <image> < image.yaml
Load the image properties from a YAML file`))
Load the image properties from a YAML file`,
))
cmd.RunE = c.run
@ -417,11 +421,12 @@ func (c *cmdImageEdit) helpTemplate() string {
###
### Each property is represented by a single line:
### An example would be:
### description: My custom image`)
### description: My custom image`,
)
}
func (c *cmdImageEdit) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageEditUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageEditUsage, cmd, args)
if err != nil {
return err
}
@ -458,7 +463,7 @@ func (c *cmdImageEdit) run(cmd *cobra.Command, args []string) error {
}
brief := imgInfo.Writable()
data, err := yaml.Dump(&brief, yaml.V2)
data, err := yaml.Dump(&brief, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -518,7 +523,8 @@ func (c *cmdImageExport) command() *cobra.Command {
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Export and download images
The output target is optional and defaults to the working directory.`))
The output target is optional and defaults to the working directory.`,
))
cli.AddBoolFlag(cmd.Flags(), &c.flagVM, "vm", i18n.G("Query virtual machine images"))
cmd.RunE = c.run
@ -535,7 +541,7 @@ The output target is optional and defaults to the working directory.`))
}
func (c *cmdImageExport) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageExportUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageExportUsage, cmd, args)
if err != nil {
return err
}
@ -575,14 +581,14 @@ func (c *cmdImageExport) run(cmd *cobra.Command, args []string) error {
return err
}
defer func() { _ = dest.Close() }()
defer logger.WarnOnError(dest.Close, "Failed to close file")
destRootfs, err := os.Create(targetRootfs)
if err != nil {
return err
}
defer func() { _ = destRootfs.Close() }()
defer logger.WarnOnError(destRootfs.Close, "Failed to close file")
// Prepare the download request
progress := cli.ProgressRenderer{
@ -690,7 +696,8 @@ func (c *cmdImageImport) command() *cobra.Command {
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Import image into the image store
Directory import is only available on Linux and must be performed as root.`))
Directory import is only available on Linux and must be performed as root.`,
))
cli.AddBoolFlag(cmd.Flags(), &c.flagPublic, "public", i18n.G("Make image public"))
cli.AddBoolFlag(cmd.Flags(), &c.flagReuse, "reuse", i18n.G("If the image alias already exists, delete and create a new one"))
@ -725,7 +732,7 @@ func (c *cmdImageImport) packImageDir(path string) (string, error) {
return "", err
}
defer func() { _ = outFile.Close() }()
defer logger.WarnOnError(outFile.Close, "Failed to close file")
outFileName := outFile.Name()
_, err = subprocess.RunCommand("tar", "-C", path, "--numeric-owner", "--restrict", "--force-local", "--xattrs", "-cJf", outFileName, "rootfs", "templates", "metadata.yaml")
@ -739,7 +746,7 @@ func (c *cmdImageImport) packImageDir(path string) (string, error) {
func (c *cmdImageImport) run(cmd *cobra.Command, args []string) error {
// Do NOT blindly copy the following parsing line; it performs right-to-left parsing, which in
// most cases is NOT what you want.
parsed, err := cmdImageImportUsage.Parse(c.global.conf, cmd, args, true)
parsed, err := c.global.Parse(cmdImageImportUsage, cmd, args, true)
if err != nil {
return err
}
@ -788,7 +795,7 @@ func (c *cmdImageImport) run(cmd *cobra.Command, args []string) error {
return err
}
// remove temp file
defer func() { _ = os.Remove(imageFile) }()
defer logger.WarnOnError(func() error { return os.Remove(imageFile) }, "Failed to remove temporary file")
}
meta, err = os.Open(imageFile)
@ -796,7 +803,7 @@ func (c *cmdImageImport) run(cmd *cobra.Command, args []string) error {
return err
}
defer func() { _ = meta.Close() }()
defer logger.WarnOnError(meta.Close, "Failed to close file")
// Open rootfs
if hasRootfsFile {
@ -805,7 +812,7 @@ func (c *cmdImageImport) run(cmd *cobra.Command, args []string) error {
return err
}
defer func() { _ = rootfs.Close() }()
defer logger.WarnOnError(rootfs.Close, "Failed to close file")
_, ext, _, err := archive.DetectCompressionFile(rootfs)
if err != nil {
@ -900,7 +907,8 @@ func (c *cmdImageInfo) command() *cobra.Command {
cmd.Use = cli.U("info", cmdImageInfoUsage...)
cmd.Short = i18n.G("Show useful information about images")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Show useful information about images`))
`Show useful information about images`,
))
cli.AddBoolFlag(cmd.Flags(), &c.flagVM, "vm", i18n.G("Query virtual machine images"))
cmd.RunE = c.run
@ -917,7 +925,7 @@ func (c *cmdImageInfo) command() *cobra.Command {
}
func (c *cmdImageInfo) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageInfoUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageInfoUsage, cmd, args)
if err != nil {
return err
}
@ -1053,7 +1061,6 @@ or csv format.
Default column layout is: lfpdasu
Column shorthand chars:
l - Shortest image alias (and optionally number of other aliases)
L - Newline-separated list of all image aliases
f - Fingerprint (short)
@ -1064,7 +1071,8 @@ Column shorthand chars:
a - Architecture
s - Size
u - Upload date
t - Type`))
t - Type`,
))
cli.AddStringFlag(cmd.Flags(), &c.flagColumns, "columns|c", defaultImagesColumns, "", i18n.G("Columns"))
cli.AddStringFlag(cmd.Flags(), &c.flagFormat, "format|f", c.global.defaultListFormat(), "", i18n.G(`Format (csv|json|table|yaml|compact|markdown), use suffix ",noheader" to disable headers and ",header" to enable it if missing, e.g. csv,header`))
@ -1284,7 +1292,7 @@ func (c *cmdImageList) imageShouldShow(filters []string, state *api.Image) bool
}
func (c *cmdImageList) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageListUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageListUsage, cmd, args)
if err != nil {
return err
}
@ -1393,7 +1401,7 @@ func (c *cmdImageRefresh) command() *cobra.Command {
}
func (c *cmdImageRefresh) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageRefreshUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageRefreshUsage, cmd, args)
if err != nil {
return err
}
@ -1475,7 +1483,7 @@ func (c *cmdImageShow) command() *cobra.Command {
}
func (c *cmdImageShow) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageShowUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageShowUsage, cmd, args)
if err != nil {
return err
}
@ -1501,7 +1509,7 @@ func (c *cmdImageShow) run(cmd *cobra.Command, args []string) error {
}
properties := info.Writable()
data, err := yaml.Dump(&properties, yaml.V2)
data, err := yaml.Dump(&properties, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -1543,7 +1551,7 @@ func (c *cmdImageGetProp) command() *cobra.Command {
}
func (c *cmdImageGetProp) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageGetPropUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageGetPropUsage, cmd, args)
if err != nil {
return err
}
@ -1629,7 +1637,7 @@ func (c *cmdImageSetProp) set(cmd *cobra.Command, parsed []*u.Parsed) error {
}
func (c *cmdImageSetProp) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageSetPropUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageSetPropUsage, cmd, args)
if err != nil {
return err
}
@ -1665,7 +1673,7 @@ func (c *cmdImageUnsetProp) command() *cobra.Command {
}
func (c *cmdImageUnsetProp) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageUnsetPropUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageUnsetPropUsage, cmd, args)
if err != nil {
return err
}
@ -1745,7 +1753,7 @@ This command will prompt for all of the metadata tarball fields:
}
func (c *cmdImageGenerateMetadata) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageGenerateMetadataUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageGenerateMetadataUsage, cmd, args)
if err != nil {
return err
}
@ -1761,7 +1769,7 @@ func (c *cmdImageGenerateMetadata) run(cmd *cobra.Command, args []string) error
return err
}
defer metaFile.Close()
defer logger.WarnOnError(metaFile.Close, "Failed to close file")
// Generate the metadata.
timestamp := time.Now().UTC()
@ -1826,7 +1834,7 @@ func (c *cmdImageGenerateMetadata) run(cmd *cobra.Command, args []string) error
metadata.Properties["description"] = metaDescription
// Generate YAML.
body, err := yaml.Dump(&metadata, yaml.V2)
body, err := yaml.Dump(&metadata, yaml.WithV2Defaults())
if err != nil {
return err
}

View File

@ -71,7 +71,8 @@ func (c *cmdImageAliasCreate) command() *cobra.Command {
cmd.Aliases = []string{"add"}
cmd.Short = i18n.G("Create aliases for existing images")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Create aliases for existing images`))
`Create aliases for existing images`,
))
cli.AddStringFlag(cmd.Flags(), &c.flagDescription, "description", "", "", i18n.G("Image alias description"))
@ -98,7 +99,7 @@ func (c *cmdImageAliasCreate) command() *cobra.Command {
}
func (c *cmdImageAliasCreate) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageAliasCreateUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageAliasCreateUsage, cmd, args)
if err != nil {
return err
}
@ -142,7 +143,7 @@ func (c *cmdImageAliasDelete) command() *cobra.Command {
}
func (c *cmdImageAliasDelete) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageAliasDeleteUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageAliasDeleteUsage, cmd, args)
if err != nil {
return err
}
@ -204,7 +205,8 @@ Pre-defined column shorthand chars:
a - Alias
f - Fingerprint
t - Type
d - Description`))
d - Description`,
))
cli.AddStringFlag(cmd.Flags(), &c.flagFormat, "format|f", c.global.defaultListFormat(), "", i18n.G(`Format (csv|json|table|yaml|compact|markdown), use suffix ",noheader" to disable headers and ",header" to enable it if missing, e.g. csv,header`))
cli.AddStringFlag(cmd.Flags(), &c.flagColumns, "columns|c", defaultImageAliasColumns, "", i18n.G("Columns"))
@ -288,7 +290,7 @@ func (c *cmdImageAliasList) descriptionColumntData(imageAlias api.ImageAliasesEn
}
func (c *cmdImageAliasList) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageAliasListUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageAliasListUsage, cmd, args)
if err != nil {
return err
}
@ -375,7 +377,7 @@ func (c *cmdImageAliasRename) command() *cobra.Command {
}
func (c *cmdImageAliasRename) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImageAliasRenameUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImageAliasRenameUsage, cmd, args)
if err != nil {
return err
}

View File

@ -12,6 +12,7 @@ import (
"github.com/lxc/incus/v7/internal/i18n"
cli "github.com/lxc/incus/v7/shared/cmd"
"github.com/lxc/incus/v7/shared/ioprogress"
"github.com/lxc/incus/v7/shared/logger"
"github.com/lxc/incus/v7/shared/units"
)
@ -30,10 +31,12 @@ func (c *cmdImport) command() *cobra.Command {
cmd.Use = cli.U("import", cmdImportUsage...)
cmd.Short = i18n.G("Import instance backups")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Import backups of instances including their snapshots.`))
`Import backups of instances including their snapshots.`,
))
cmd.Example = cli.FormatSection("", i18n.G(
`incus import backup0.tar.gz
Create a new instance using backup0.tar.gz as the source.`))
Create a new instance using backup0.tar.gz as the source.`,
))
cmd.RunE = c.run
cli.AddStringFlag(cmd.Flags(), &c.flagStorage, "storage|s", "", "", i18n.G("Storage pool name"))
@ -44,7 +47,7 @@ func (c *cmdImport) command() *cobra.Command {
}
func (c *cmdImport) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdImportUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdImportUsage, cmd, args)
if err != nil {
return err
}
@ -54,15 +57,18 @@ func (c *cmdImport) run(cmd *cobra.Command, args []string) error {
instanceName := parsed[2].String
var file *os.File
usePercentage := true
if isStdin(backupFile) {
file = os.Stdin
usePercentage = false
} else {
file, err = os.Open(backupFile)
if err != nil {
return err
}
defer func() { _ = file.Close() }()
// The HTTP transport closes the request body, so only warn on unexpected errors.
defer logger.WarnOnErrorExcept(file.Close, []error{os.ErrClosed}, "Failed to close file")
}
fstat, err := file.Stat()
@ -80,8 +86,12 @@ func (c *cmdImport) run(cmd *cobra.Command, args []string) error {
ReadCloser: file,
Tracker: &ioprogress.ProgressTracker{
Length: fstat.Size(),
Handler: func(percent int64, speed int64) {
progress.UpdateProgress(ioprogress.ProgressData{Text: fmt.Sprintf("%d%% (%s/s)", percent, units.GetByteSizeString(speed, 2))})
Handler: func(v int64, speed int64) {
if usePercentage {
progress.UpdateProgress(ioprogress.ProgressData{Text: fmt.Sprintf("%d%% (%s/s)", v, units.GetByteSizeString(speed, 2))})
} else {
progress.UpdateProgress(ioprogress.ProgressData{Text: fmt.Sprintf("%s (%s/s)", units.GetByteSizeString(v, 2), units.GetByteSizeString(speed, 2))})
}
},
},
},

View File

@ -25,10 +25,11 @@ import (
type cmdInfo struct {
global *cmdGlobal
flagShowAccess bool
flagShowLog string
flagResources bool
flagTarget string
flagShowAccess bool
flagShowLog string
flagResources bool
flagShowSensitive bool
flagTarget string
}
var cmdInfoUsage = u.Usage{u.Instance.Optional().Remote()}
@ -38,18 +39,21 @@ func (c *cmdInfo) command() *cobra.Command {
cmd.Use = cli.U("info", cmdInfoUsage...)
cmd.Short = i18n.G("Show instance or server information")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Show instance or server information`))
`Show instance or server information`,
))
cmd.Example = cli.FormatSection("", i18n.G(
`incus info [<remote>:]<instance> [--show-log]
For instance information.
incus info [<remote>:] [--resources]
For server information.`))
For server information.`,
))
cmd.RunE = c.run
cli.AddBoolFlag(cmd.Flags(), &c.flagShowAccess, "show-access", i18n.G("Show the instance's access list"))
cli.AddStringFlag(cmd.Flags(), &c.flagShowLog, "show-log", "", "default", i18n.G("Show the instance's recent log entries"))
cli.AddBoolFlag(cmd.Flags(), &c.flagResources, "resources", i18n.G("Show the resources available to the server"))
cli.AddBoolFlag(cmd.Flags(), &c.flagShowSensitive, "show-sensitive", i18n.G("Show the server's sensitive information (full certificates, private keys and the API extension list)"))
cli.AddStringFlag(cmd.Flags(), &c.flagTarget, "target", "", "", i18n.G("Cluster member name"))
cmd.ValidArgsFunction = func(_ *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
@ -64,7 +68,7 @@ incus info [<remote>:] [--resources]
}
func (c *cmdInfo) run(cmd *cobra.Command, args []string) error {
parsed, err := cmdInfoUsage.Parse(c.global.conf, cmd, args)
parsed, err := c.global.Parse(cmdInfoUsage, cmd, args)
if err != nil {
return err
}
@ -83,7 +87,7 @@ func (c *cmdInfo) run(cmd *cobra.Command, args []string) error {
return err
}
data, err := yaml.Dump(access, yaml.V2)
data, err := yaml.Dump(access, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -324,13 +328,29 @@ func (c *cmdInfo) renderCPU(cpu api.ResourcesCPUSocket, prefix string) {
}
}
fmt.Print(prefix + i18n.G("Cores:") + "\n")
// Only mention clusters when there is more than one.
clusters := map[uint64]bool{}
for _, core := range cpu.Cores {
fmt.Printf(prefix+" - "+i18n.G("Core %d")+"\n", core.Core)
fmt.Printf(prefix+" "+i18n.G("Frequency: %vMhz")+"\n", core.Frequency)
fmt.Print(prefix + " " + i18n.G("Threads:") + "\n")
clusters[core.Cluster] = true
}
// Group the cores per cluster when relevant.
coreIndent := ""
if len(clusters) > 1 {
coreIndent = " "
}
fmt.Print(prefix + i18n.G("Cores:") + "\n")
for i, core := range cpu.Cores {
if len(clusters) > 1 && (i == 0 || core.Cluster != cpu.Cores[i-1].Cluster) {
fmt.Printf(prefix+" - "+i18n.G("Cluster %d")+"\n", core.Cluster)
}
fmt.Printf(prefix+coreIndent+" - "+i18n.G("Core %d")+"\n", core.Core)
fmt.Printf(prefix+coreIndent+" "+i18n.G("Frequency: %vMhz")+"\n", core.Frequency)
fmt.Print(prefix + coreIndent + " " + i18n.G("Threads:") + "\n")
for _, thread := range core.Threads {
fmt.Printf(prefix+" - "+i18n.G("%d (id: %d, online: %v, NUMA node: %v)")+"\n", thread.Thread, thread.ID, thread.Online, thread.NUMANode)
fmt.Printf(prefix+coreIndent+" - "+i18n.G("%d (id: %d, online: %v, NUMA node: %v)")+"\n", thread.Thread, thread.ID, thread.Online, thread.NUMANode)
}
}
@ -619,7 +639,13 @@ func (c *cmdInfo) remoteInfo(d incus.InstanceServer) error {
return err
}
data, err := yaml.Dump(&serverStatus, yaml.V2)
// Show the filtered output unless --show-sensitive is passed by the user.
var out any = &serverStatus
if !c.flagShowSensitive {
out = serverStatus.Filtered()
}
data, err := yaml.Dump(out, yaml.WithV2Defaults())
if err != nil {
return err
}
@ -699,18 +725,18 @@ func (c *cmdInfo) instanceInfo(d incus.InstanceServer, name string, showLog stri
fmt.Printf(" "+i18n.G("Processes: %d")+"\n", inst.State.Processes)
// Disk usage
diskInfo := ""
var diskInfo strings.Builder
if inst.State.Disk != nil {
for entry, disk := range inst.State.Disk {
if disk.Usage != 0 {
diskInfo += fmt.Sprintf(" %s: %s\n", entry, units.GetByteSizeStringIEC(disk.Usage, 2))
if disk.Usage > 0 {
fmt.Fprintf(&diskInfo, " %s: %s\n", entry, units.GetByteSizeStringIEC(disk.Usage, 2))
}
}
}
if diskInfo != "" {
if diskInfo.String() != "" {
fmt.Printf(" %s\n", i18n.G("Disk usage:"))
fmt.Print(diskInfo)
fmt.Print(diskInfo.String())
}
// CPU usage
@ -748,7 +774,7 @@ func (c *cmdInfo) instanceInfo(d incus.InstanceServer, name string, showLog stri
}
// Network usage and IP info
networkInfo := ""
var networkInfo strings.Builder
if inst.State.Network != nil {
network := inst.State.Network
@ -760,41 +786,41 @@ func (c *cmdInfo) instanceInfo(d incus.InstanceServer, name string, showLog stri
sort.Strings(netNames)
for _, netName := range netNames {
networkInfo += fmt.Sprintf(" %s:\n", netName)
networkInfo += fmt.Sprintf(" %s: %s\n", i18n.G("Type"), network[netName].Type)
networkInfo += fmt.Sprintf(" %s: %s\n", i18n.G("State"), strings.ToUpper(network[netName].State))
fmt.Fprintf(&networkInfo, " %s:\n", netName)
fmt.Fprintf(&networkInfo, " %s: %s\n", i18n.G("Type"), network[netName].Type)
fmt.Fprintf(&networkInfo, " %s: %s\n", i18n.G("State"), strings.ToUpper(network[netName].State))
if network[netName].HostName != "" {
networkInfo += fmt.Sprintf(" %s: %s\n", i18n.G("Host interface"), network[netName].HostName)
fmt.Fprintf(&networkInfo, " %s: %s\n", i18n.G("Host interface"), network[netName].HostName)
}
if network[netName].Hwaddr != "" {
networkInfo += fmt.Sprintf(" %s: %s\n", i18n.G("MAC address"), network[netName].Hwaddr)
fmt.Fprintf(&networkInfo, " %s: %s\n", i18n.G("MAC address"), network[netName].Hwaddr)
}
if network[netName].Mtu != 0 {
networkInfo += fmt.Sprintf(" %s: %d\n", i18n.G("MTU"), network[netName].Mtu)
fmt.Fprintf(&networkInfo, " %s: %d\n", i18n.G("MTU"), network[netName].Mtu)
}
networkInfo += fmt.Sprintf(" %s: %s\n", i18n.G("Bytes received"), units.GetByteSizeString(network[netName].Counters.BytesReceived, 2))
networkInfo += fmt.Sprintf(" %s: %s\n", i18n.G("Bytes sent"), units.GetByteSizeString(network[netName].Counters.BytesSent, 2))
networkInfo += fmt.Sprintf(" %s: %d\n", i18n.G("Packets received"), network[netName].Counters.PacketsReceived)
networkInfo += fmt.Sprintf(" %s: %d\n", i18n.G("Packets sent"), network[netName].Counters.PacketsSent)
fmt.Fprintf(&networkInfo, " %s: %s\n", i18n.G("Bytes received"), units.GetByteSizeString(network[netName].Counters.BytesReceived, 2))
fmt.Fprintf(&networkInfo, " %s: %s\n", i18n.G("Bytes sent"), units.GetByteSizeString(network[netName].Counters.BytesSent, 2))
fmt.Fprintf(&networkInfo, " %s: %d\n", i18n.G("Packets received"), network[netName].Counters.PacketsReceived)
fmt.Fprintf(&networkInfo, " %s: %d\n", i18n.G("Packets sent"), network[netName].Counters.PacketsSent)
networkInfo += fmt.Sprintf(" %s:\n", i18n.G("IP addresses"))
fmt.Fprintf(&networkInfo, " %s:\n", i18n.G("IP addresses"))
for _, addr := range network[netName].Addresses {
if addr.Family == "inet" {
networkInfo += fmt.Sprintf(" %s: %s/%s (%s)\n", addr.Family, addr.Address, addr.Netmask, addr.Scope)
fmt.Fprintf(&networkInfo, " %s: %s/%s (%s)\n", addr.Family, addr.Address, addr.Netmask, addr.Scope)
} else {
networkInfo += fmt.Sprintf(" %s: %s/%s (%s)\n", addr.Family, addr.Address, addr.Netmask, addr.Scope)
fmt.Fprintf(&networkInfo, " %s: %s/%s (%s)\n", addr.Family, addr.Address, addr.Netmask, addr.Scope)
}
}
}
}
if networkInfo != "" {
if networkInfo.String() != "" {
fmt.Printf(" %s\n", i18n.G("Network usage:"))
fmt.Print(networkInfo)
fmt.Print(networkInfo.String())
}
}

View File

@ -23,22 +23,25 @@ func (c *cmdLaunch) command() *cobra.Command {
cmd.Use = cli.U("launch", cmdCreateUsage...)
cmd.Short = i18n.G("Create and start instances from images")
cmd.Long = cli.FormatSection(color.DescriptionPrefix, i18n.G(
`Create and start instances from images`))
`Create and start instances from images`,
))
cmd.Example = cli.FormatSection("", i18n.G(
`incus launch images:debian/12 u1
Create and start a container named u1
`incus launch images:debian/12 c1
Create and start a container named "c1"
incus launch images:debian/12 u1 < config.yaml
Create and start a container with configuration from config.yaml
incus launch images:debian/12 c2 < config.yaml
Create and start a container named "c2" with configuration from config.yaml
incus launch images:debian/12 u2 -t aws:t2.micro
Create and start a container using the same size as an AWS t2.micro (1 vCPU, 1GiB of RAM)
incus launch images:debian/12 c3 -t aws:t2.micro
Create and start a container named "c3" using the same size as an AWS t2.micro (1 vCPU, 1GiB of RAM)
Find the list of supported instance types here: https://images.linuxcontainers.org/meta/instance-types/
incus launch images:debian/12 v1 --vm -c limits.cpu=4 -c limits.memory=4GiB
Create and start a virtual machine with 4 vCPUs and 4GiB of RAM
Create and start a virtual machine named "v1" with 4 vCPUs and 4GiB of RAM
incus launch images:debian/12 v2 --vm -d root,size=50GiB -d root,io.bus=nvme
Create and start a virtual machine, overriding the disk size and bus`))
Create and start a virtual machine named "v2", overriding the disk size and bus`,
))
cmd.Hidden = false
cmd.RunE = c.run
@ -58,7 +61,7 @@ incus launch images:debian/12 v2 --vm -d root,size=50GiB -d root,io.bus=nvme
func (c *cmdLaunch) run(cmd *cobra.Command, args []string) error {
conf := c.global.conf
parsed, err := cmdCreateUsage.Parse(conf, cmd, args)
parsed, err := c.global.Parse(cmdCreateUsage, cmd, args)
if err != nil {
return err
}
@ -79,6 +82,7 @@ func (c *cmdLaunch) run(cmd *cobra.Command, args []string) error {
console := cmdConsole{}
console.global = c.global
console.flagType = c.flagConsole
console.withLog = c.flagConsole == "console"
consoleErr := console.console(d, instanceName)
if consoleErr != nil {
@ -145,6 +149,7 @@ func (c *cmdLaunch) run(cmd *cobra.Command, args []string) error {
console := cmdConsole{}
console.global = c.global
console.flagType = c.flagConsole
console.withLog = c.flagConsole == "console"
consoleErr := console.console(d, instanceName)
if consoleErr != nil {

Some files were not shown because too many files have changed in this diff Show More