Merge pull request #2774 from stgraber/main

Various fixes for Incus 6.20
This commit is contained in:
Serge Hallyn 2025-12-19 09:22:42 -06:00 committed by GitHub
commit 7ce80205e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
32 changed files with 268 additions and 87 deletions

View File

@ -845,7 +845,7 @@ func (c *cmdFilePush) Run(cmd *cobra.Command, args []string) error {
} else {
file, err = os.Open(f)
if err != nil {
return err
return fmt.Errorf(i18n.G("Failed to open source file %q: %v"), f, err)
}
}

View File

@ -70,7 +70,7 @@ func sftpCreateFile(sftpConn *sftp.Client, targetPath string, args incus.Instanc
case "file":
file, err := sftpConn.OpenFile(targetPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC)
if err != nil {
return err
return fmt.Errorf(i18n.G("Failed to open target file %q: %w"), targetPath, err)
}
defer func() { _ = file.Close() }()
@ -296,7 +296,7 @@ func sftpRecursivePushFile(sftpConn *sftp.Client, source string, target string,
// File handling
f, err := os.Open(p)
if err != nil {
return err
return fmt.Errorf(i18n.G("Failed to open source file %q: %v"), p, err)
}
defer func() { _ = f.Close() }()

View File

@ -18,10 +18,12 @@ import (
clusterRequest "github.com/lxc/incus/v6/internal/server/cluster/request"
"github.com/lxc/incus/v6/internal/server/db"
"github.com/lxc/incus/v6/internal/server/instance"
"github.com/lxc/incus/v6/internal/server/project"
"github.com/lxc/incus/v6/internal/server/request"
"github.com/lxc/incus/v6/internal/server/response"
storagePools "github.com/lxc/incus/v6/internal/server/storage"
"github.com/lxc/incus/v6/internal/server/storage/s3"
"github.com/lxc/incus/v6/internal/server/storage/s3/miniod"
"github.com/lxc/incus/v6/shared/api"
"github.com/lxc/incus/v6/shared/logger"
"github.com/lxc/incus/v6/shared/util"
@ -264,20 +266,26 @@ func storageBucketsServer(d *Daemon) *http.Server {
return
}
pool, err := storagePools.LoadByName(s, bucket.PoolName)
if err != nil {
errResult := s3.Error{Code: s3.ErrorCodeInternalError, Message: err.Error()}
errResult.Response(w)
// Fast path.
minioProc, err := miniod.Get(project.StorageVolume(bucket.Project, bucket.Name))
if minioProc == nil || err != nil {
// Slow path.
logger.Errorf("auth slow")
pool, err := storagePools.LoadByName(s, bucket.PoolName)
if err != nil {
errResult := s3.Error{Code: s3.ErrorCodeInternalError, Message: err.Error()}
errResult.Response(w)
return
}
return
}
minioProc, err := pool.ActivateBucket(bucket.Project, bucket.Name, nil)
if err != nil {
errResult := s3.Error{Code: s3.ErrorCodeInternalError, Message: err.Error()}
errResult.Response(w)
minioProc, err = pool.ActivateBucket(bucket.Project, bucket.Name, nil)
if err != nil {
errResult := s3.Error{Code: s3.ErrorCodeInternalError, Message: err.Error()}
errResult.Response(w)
return
return
}
}
u := minioProc.URL()
@ -344,20 +352,26 @@ func storageBucketsServer(d *Daemon) *http.Server {
return
}
pool, err := storagePools.LoadByName(s, bucket.PoolName)
if err != nil {
errResult := s3.Error{Code: s3.ErrorCodeInternalError, Message: err.Error()}
errResult.Response(w)
// Fast path.
minioProc, err := miniod.Get(project.StorageVolume(bucket.Project, bucket.Name))
if minioProc == nil || err != nil {
// Slow path.
logger.Errorf("anon slow")
pool, err := storagePools.LoadByName(s, bucket.PoolName)
if err != nil {
errResult := s3.Error{Code: s3.ErrorCodeInternalError, Message: err.Error()}
errResult.Response(w)
return
}
return
}
minioProc, err := pool.ActivateBucket(bucket.Project, bucket.Name, nil)
if err != nil {
errResult := s3.Error{Code: s3.ErrorCodeInternalError, Message: err.Error()}
errResult.Response(w)
minioProc, err = pool.ActivateBucket(bucket.Project, bucket.Name, nil)
if err != nil {
errResult := s3.Error{Code: s3.ErrorCodeInternalError, Message: err.Error()}
errResult.Response(w)
return
return
}
}
u := minioProc.URL()

View File

@ -31,9 +31,11 @@ This authorization method is highly granular.
For example, it can be used to restrict user access to a single instance.
To use OpenFGA for authorization, you must configure and run an OpenFGA server yourself.
To enable this authorization method in Incus, set the [`openfga.*`](server-options-openfga) server configuration options.
Incus will connect to the OpenFGA server, write the {ref}`openfga-model`, and query this server for authorization for all subsequent requests.
To enable this authorization method in Incus, set the [`openfga.*`](server-options-openfga) server configuration options.
Both `openfga.api.url` and `openfga.api.token` must be set in order to enable OpenFGA. `openfga.store.id` is optional, Incus will generate a new store if not specified.
(openfga-model)=
### OpenFGA model

View File

@ -129,12 +129,6 @@ Enable IPv4 forwarding
Incus bridge networks enable this setting normally.
However, if Incus starts after Docker, then Docker will already have modified the global FORWARD policy.
```{warning}
Enabling IPv4 forwarding can cause your Docker container ports to be reachable from any machine on your local network.
Depending on your environment, this might be undesirable.
See [local network container access issue](https://github.com/moby/moby/issues/14041) for more information.
```
To enable IPv4 forwarding before Docker starts, ensure that the following `sysctl` setting is enabled:
net.ipv4.conf.all.forwarding=1

6
go.mod
View File

@ -28,7 +28,7 @@ require (
github.com/jochenvg/go-udev v0.0.0-20240801134859-b65ed646224b
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
github.com/lxc/go-lxc v0.0.0-20240606200241-27b3d116511f
github.com/lxc/incus-os/incus-osd v0.0.0-20251214161835-4ccb835533a9
github.com/lxc/incus-os/incus-osd v0.0.0-20251218211512-30e9f64eb91b
github.com/mattn/go-colorable v0.1.14
github.com/mattn/go-sqlite3 v1.14.32
github.com/mdlayher/arp v0.0.0-20220512170110-6706a2966875
@ -44,7 +44,7 @@ require (
github.com/openfga/go-sdk v0.7.3
github.com/osrg/gobgp/v3 v3.37.0
github.com/ovn-kubernetes/libovsdb v0.8.1
github.com/pierrec/lz4/v4 v4.1.22
github.com/pierrec/lz4/v4 v4.1.23
github.com/pkg/sftp v1.13.10
github.com/pkg/xattr v0.4.12
github.com/shirou/gopsutil/v4 v4.25.11
@ -65,7 +65,7 @@ require (
golang.org/x/tools v0.40.0
google.golang.org/protobuf v1.36.11
gopkg.in/yaml.v2 v2.4.0
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4
k8s.io/utils v0.0.0-20251218160917-61b37f7a4624
software.sslmate.com/src/go-pkcs12 v0.6.0
)

14
go.sum
View File

@ -359,8 +359,8 @@ github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3 h1:PwQumkgq4/acIi
github.com/lufia/plan9stats v0.0.0-20251013123823-9fd1530e3ec3/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
github.com/lxc/go-lxc v0.0.0-20240606200241-27b3d116511f h1:KnZqnn4R9Ae+jOK7DwacF1CnWEBMSwoXh44owa6j6k4=
github.com/lxc/go-lxc v0.0.0-20240606200241-27b3d116511f/go.mod h1:3UTWXVcHfgxE7JM4ZUnsy6bDA8L1vuzwJbJRF6dlB90=
github.com/lxc/incus-os/incus-osd v0.0.0-20251214161835-4ccb835533a9 h1:KqkDoboTSap+45qapJ79hBFl/Q+yEIC1Xmk2ec5xsvk=
github.com/lxc/incus-os/incus-osd v0.0.0-20251214161835-4ccb835533a9/go.mod h1:Qlo0FoofzFoBzsX13wkrm9Mf6Ri+gAl/mCtXrXFwcqU=
github.com/lxc/incus-os/incus-osd v0.0.0-20251218211512-30e9f64eb91b h1:C90OBrUIm0rF0/j5Pt1npAhniYzbU9mjT2qqH8MUbns=
github.com/lxc/incus-os/incus-osd v0.0.0-20251218211512-30e9f64eb91b/go.mod h1:3N+YX6pJCi+K8xkXc/9MW+NMvIkJ24JvTQIi28ctoGs=
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
@ -446,8 +446,6 @@ github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJw
github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
github.com/opencontainers/runtime-spec v1.3.0 h1:YZupQUdctfhpZy3TM39nN9Ika5CBWT5diQ8ibYCRkxg=
github.com/opencontainers/runtime-spec v1.3.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/umoci v0.6.0 h1:Dsm4beJpglN5y2E2EUSZZcNey4Ml4+nKepvwLQwgIec=
github.com/opencontainers/umoci v0.6.0/go.mod h1:2DS3cxVN9pRJGYaCK5mnmmwVKV5vd9r6HIYAV0IvdbI=
github.com/opencontainers/umoci v0.6.1-0.20251213054154-70fc5ee1f4df h1:9hvwN64VeuL1L0Jgp8bxTPmd5IZQoHmeXGWrVqsEhN0=
github.com/opencontainers/umoci v0.6.1-0.20251213054154-70fc5ee1f4df/go.mod h1:s6d/s4QJAZTF92hEU6ozuHjE0+VRc6kVe1QIWfvL7KY=
github.com/openfga/go-sdk v0.7.3 h1:BrYmJyIdicVeKzoycCFT0vzf0oz4luWrwoPIJdF6Wgo=
@ -464,8 +462,8 @@ github.com/peterh/liner v1.2.1/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf
github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM=
github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM=
github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU=
github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pierrec/lz4/v4 v4.1.23 h1:oJE7T90aYBGtFNrI8+KbETnPymobAhzRrR8Mu8n1yfU=
github.com/pierrec/lz4/v4 v4.1.23/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4=
github.com/pkg/diff v0.0.0-20200914180035-5b29258ca4f7/go.mod h1:zO8QMzTeZd5cpnIkz/Gn6iK0jDfGicM1nynOkkPIl28=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@ -1016,8 +1014,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 h1:SjGebBtkBqHFOli+05xYbK8YF1Dzkbzn+gDM4X9T4Ck=
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
k8s.io/utils v0.0.0-20251218160917-61b37f7a4624 h1:wadElzGW3vTZ1Et18CImPEErLaXvMSU5369b0to32+0=
k8s.io/utils v0.0.0-20251218160917-61b37f7a4624/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
moul.io/http2curl/v2 v2.3.0 h1:9r3JfDzWPcbIklMOs2TnIFzDYvfAZvjeavG6EzP7jYs=
moul.io/http2curl/v2 v2.3.0/go.mod h1:RW4hyBjTWSYDOxapodpNEtX0g5Eb16sxklBqmd2RHcE=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=

View File

@ -17,6 +17,7 @@ import (
"github.com/lxc/incus/v6/internal/iprange"
ovnNB "github.com/lxc/incus/v6/internal/server/network/ovn/schema/ovn-nb"
ovnSB "github.com/lxc/incus/v6/internal/server/network/ovn/schema/ovn-sb"
localUtil "github.com/lxc/incus/v6/internal/server/util"
"github.com/lxc/incus/v6/shared/util"
)
@ -2140,6 +2141,7 @@ func (o *NB) UpdateLogicalSwitchPortDNS(ctx context.Context, switchName OVNSwitc
}
dnsIPsStr.WriteString(dnsIP.String())
dnsRecord.Records[strings.TrimSuffix(localUtil.ReverseDNS(dnsIP), ".")] = strings.ToLower(dnsName)
}
dnsRecord.Records[strings.ToLower(dnsName)] = dnsIPsStr.String()

View File

@ -435,8 +435,8 @@ func (d *zone) Content() (*strings.Builder, error) {
includeV6 := includeNAT || util.IsFalseOrEmpty(netConfig["ipv6.nat"])
// Check if dealing with a reverse zone.
isReverse4 := strings.HasSuffix(d.info.Name, ip4Arpa)
isReverse6 := strings.HasSuffix(d.info.Name, ip6Arpa)
isReverse4 := strings.HasSuffix(d.info.Name, localUtil.IPv4Arpa)
isReverse6 := strings.HasSuffix(d.info.Name, localUtil.IPv6Arpa)
isReverse := isReverse4 || isReverse6
genRecord := func(name string, ip net.IP) map[string]string {
@ -473,7 +473,7 @@ func (d *zone) Content() (*strings.Builder, error) {
}
// Get the ARPA record.
reverseAddr := reverse(ip)
reverseAddr := localUtil.ReverseDNS(ip)
if reverseAddr == "" {
return nil
}

View File

@ -2702,6 +2702,10 @@ func (b *backend) BackupInstance(inst instance.Instance, tarWriter *instancewrit
return err
}
defer func() {
_ = b.UpdateInstanceBackupFile(inst, true, nil)
}()
var snapNames []string
if snapshots {
// Get snapshots in age order, oldest first, and pass names to storage driver.

View File

@ -418,22 +418,7 @@ func (d *linstor) CreateVolumeFromCopy(vol Volume, srcVol Volume, copySnapshots
}
if len(srcSnapshots) > 0 {
l.Debug("Snapshots copying required. Falling back to generic copy implementation")
// Ensure the mount path for ISO volumes is created when using the generic
// copy implementation. This is needed because genericVFSCopyVolume treats
// ISO volumes like filesystem volumes when performing the copy. This implies
// that the mount path for the volume must exist before the copying starts.
if srcVol.contentType == ContentTypeISO {
err := srcVol.EnsureMountPath(false)
if err != nil {
return err
}
rev.Add(func() { _ = os.Remove(vol.MountPath()) })
}
// TODO: support optimized copying with snapshots
return genericVFSCopyVolume(d, nil, vol, srcVol, srcSnapshots, false, allowInconsistent, op)
return errors.New("Linstor doesn't currently support copying volumes with their snapshots")
}
}

View File

@ -1,28 +1,31 @@
package zone
package util
import (
"net"
)
// Zone suffixes.
var (
ip4Arpa = ".in-addr.arpa"
ip6Arpa = ".ip6.arpa"
const (
// IPv4Arpa represents the IPv4 reverse DNS suffix.
IPv4Arpa = ".in-addr.arpa"
// IPv6Arpa represents the IPv6 reverse DNS suffix.
IPv6Arpa = ".ip6.arpa"
)
// reverse takes an IPv4 or IPv6 address and returns the matching ARPA record.
func reverse(ip net.IP) (arpa string) {
// ReverseDNS takes an IPv4 or IPv6 address and returns the matching ARPA record.
func ReverseDNS(ip net.IP) (arpa string) {
if ip == nil {
return ""
}
// Deal with IPv4.
if ip.To4() != nil {
return uitoa(uint(ip[15])) + "." + uitoa(uint(ip[14])) + "." + uitoa(uint(ip[13])) + "." + uitoa(uint(ip[12])) + ip4Arpa + "."
return uitoa(uint(ip[15])) + "." + uitoa(uint(ip[14])) + "." + uitoa(uint(ip[13])) + "." + uitoa(uint(ip[12])) + IPv4Arpa + "."
}
// Deal with IPv6.
buf := make([]byte, 0, len(ip)*4+len(ip6Arpa))
buf := make([]byte, 0, len(ip)*4+len(IPv6Arpa))
// Add it, in reverse, to the buffer.
for i := len(ip) - 1; i >= 0; i-- {
@ -34,7 +37,7 @@ func reverse(ip net.IP) (arpa string) {
}
// Add the suffix.
buf = append(buf, ip6Arpa[1:]+"."...)
buf = append(buf, IPv6Arpa[1:]+"."...)
return string(buf)
}

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: LXD\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-10-21 03:44+0000\n"
"Last-Translator: Dklfajsjfi49wefklsf32 "
"<nlincus@users.noreply.hosted.weblate.org>\n"
@ -3510,6 +3510,16 @@ msgstr "Akzeptiere Zertifikat"
msgid "Failed to load configuration: %s"
msgstr ""
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, fuzzy, c-format
msgid "Failed to open source file %q: %v"
msgstr "Akzeptiere Zertifikat"
#: cmd/incus/utils_sftp.go:73
#, fuzzy, c-format
msgid "Failed to open target file %q: %w"
msgstr "Akzeptiere Zertifikat"
#: cmd/incus/admin_sql.go:128
#, fuzzy, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-10-21 04:04+0000\n"
"Last-Translator: Jorge Teixeira <hey@teixe.es>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/incus/cli/es/>\n"
@ -3317,6 +3317,16 @@ msgstr "Acepta certificado"
msgid "Failed to load configuration: %s"
msgstr ""
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, fuzzy, c-format
msgid "Failed to open source file %q: %v"
msgstr "Acepta certificado"
#: cmd/incus/utils_sftp.go:73
#, fuzzy, c-format
msgid "Failed to open target file %q: %w"
msgstr "Acepta certificado"
#: cmd/incus/admin_sql.go:128
#, fuzzy, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: LXD\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-10-21 04:18+0000\n"
"Last-Translator: Varlorg <varlorg@gmail.com>\n"
"Language-Team: French <https://hosted.weblate.org/projects/incus/cli/fr/>\n"
@ -3538,6 +3538,16 @@ msgstr "Échec de la mise en écoute des demandes de connexion: %w"
msgid "Failed to load configuration: %s"
msgstr "Échec du chargement de la configuration: %s"
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, fuzzy, c-format
msgid "Failed to open source file %q: %v"
msgstr "Échec de la fermeture du fichier de certificat du serveur %q: %w"
#: cmd/incus/utils_sftp.go:73
#, fuzzy, c-format
msgid "Failed to open target file %q: %w"
msgstr "Échec de la fermeture du fichier de certificat du serveur %q: %w"
#: cmd/incus/admin_sql.go:128
#, fuzzy, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: incus\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-10-21 05:19+0000\n"
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/incus/cli/id/"
@ -2985,6 +2985,16 @@ msgstr ""
msgid "Failed to load configuration: %s"
msgstr ""
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, c-format
msgid "Failed to open source file %q: %v"
msgstr ""
#: cmd/incus/utils_sftp.go:73
#, c-format
msgid "Failed to open target file %q: %w"
msgstr ""
#: cmd/incus/admin_sql.go:128
#, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@
msgid ""
msgstr "Project-Id-Version: incus\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -2615,6 +2615,16 @@ msgstr ""
msgid "Failed to load configuration: %s"
msgstr ""
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, c-format
msgid "Failed to open source file %q: %v"
msgstr ""
#: cmd/incus/utils_sftp.go:73
#, c-format
msgid "Failed to open target file %q: %w"
msgstr ""
#: cmd/incus/admin_sql.go:128
#, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-10-21 04:26+0000\n"
"Last-Translator: Alberto Donato <alberto.donato@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/incus/cli/it/>\n"
@ -3308,6 +3308,16 @@ msgstr "Accetta certificato"
msgid "Failed to load configuration: %s"
msgstr ""
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, fuzzy, c-format
msgid "Failed to open source file %q: %v"
msgstr "Accetta certificato"
#: cmd/incus/utils_sftp.go:73
#, fuzzy, c-format
msgid "Failed to open target file %q: %w"
msgstr "Accetta certificato"
#: cmd/incus/admin_sql.go:128
#, fuzzy, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: LXD\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-12-14 16:01+0000\n"
"Last-Translator: KATOH Yasufumi <karma@jazz.email.ne.jp>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/incus/cli/ja/>\n"
@ -3359,6 +3359,16 @@ msgstr "コネクションのリッスンに失敗しました: %w"
msgid "Failed to load configuration: %s"
msgstr "設定のロードに失敗しました: %s"
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, fuzzy, c-format
msgid "Failed to open source file %q: %v"
msgstr "サーバー証明書ファイル %q のクローズに失敗しました: %w"
#: cmd/incus/utils_sftp.go:73
#, fuzzy, c-format
msgid "Failed to open target file %q: %w"
msgstr "サーバー証明書ファイル %q のクローズに失敗しました: %w"
#: cmd/incus/admin_sql.go:128
#, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: incus\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-10-21 05:18+0000\n"
"Last-Translator: Daniel Dybing <daniel.dybing@gmail.com>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/incus/"
@ -2979,6 +2979,16 @@ msgstr ""
msgid "Failed to load configuration: %s"
msgstr ""
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, c-format
msgid "Failed to open source file %q: %v"
msgstr ""
#: cmd/incus/utils_sftp.go:73
#, c-format
msgid "Failed to open target file %q: %w"
msgstr ""
#: cmd/incus/admin_sql.go:128
#, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-10-21 04:29+0000\n"
"Last-Translator: Dklfajsjfi49wefklsf32 "
"<nlincus@users.noreply.hosted.weblate.org>\n"
@ -3293,6 +3293,16 @@ msgstr ""
msgid "Failed to load configuration: %s"
msgstr ""
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, c-format
msgid "Failed to open source file %q: %v"
msgstr ""
#: cmd/incus/utils_sftp.go:73
#, c-format
msgid "Failed to open target file %q: %w"
msgstr ""
#: cmd/incus/admin_sql.go:128
#, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: incus\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-12-18 19:00+0000\n"
"Last-Translator: Américo Monteiro <a_monteiro@gmx.com>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/incus/cli/pt/"
@ -3418,6 +3418,16 @@ msgstr "Falhou ao escutar por ligação: %w"
msgid "Failed to load configuration: %s"
msgstr "Falhou ao carregar configuração: %s"
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, fuzzy, c-format
msgid "Failed to open source file %q: %v"
msgstr "Falhou ao fechar ficheiro de certificado de servidor %q: %w"
#: cmd/incus/utils_sftp.go:73
#, fuzzy, c-format
msgid "Failed to open target file %q: %w"
msgstr "Falhou ao fechar ficheiro de certificado de servidor %q: %w"
#: cmd/incus/admin_sql.go:128
#, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-10-21 04:53+0000\n"
"Last-Translator: Paulo Coghi <paulo@coghi.com.br>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
@ -3355,6 +3355,16 @@ msgstr "Aceitar certificado"
msgid "Failed to load configuration: %s"
msgstr ""
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, fuzzy, c-format
msgid "Failed to open source file %q: %v"
msgstr "Aceitar certificado"
#: cmd/incus/utils_sftp.go:73
#, fuzzy, c-format
msgid "Failed to open target file %q: %w"
msgstr "Aceitar certificado"
#: cmd/incus/admin_sql.go:128
#, fuzzy, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-10-21 05:14+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/incus/cli/ru/>\n"
@ -3352,6 +3352,16 @@ msgstr "Принять сертификат"
msgid "Failed to load configuration: %s"
msgstr ""
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, fuzzy, c-format
msgid "Failed to open source file %q: %v"
msgstr "Принять сертификат"
#: cmd/incus/utils_sftp.go:73
#, fuzzy, c-format
msgid "Failed to open target file %q: %w"
msgstr "Принять сертификат"
#: cmd/incus/admin_sql.go:128
#, fuzzy, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: incus\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-12-07 15:00+0000\n"
"Last-Translator: Daniel Nylander <daniel@danielnylander.se>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/incus/cli/sv/>\n"
@ -3373,6 +3373,16 @@ msgstr "Misslyckades med att lyssna efter anslutning: %w"
msgid "Failed to load configuration: %s"
msgstr "Konfigurationen kunde inte läsas in: %s"
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, fuzzy, c-format
msgid "Failed to open source file %q: %v"
msgstr "Det gick inte att stänga servercertifikatfilen %q: %w"
#: cmd/incus/utils_sftp.go:73
#, fuzzy, c-format
msgid "Failed to open target file %q: %w"
msgstr "Det gick inte att stänga servercertifikatfilen %q: %w"
#: cmd/incus/admin_sql.go:128
#, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: incus\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-10-21 05:21+0000\n"
"Last-Translator: Anonymous <noreply@weblate.org>\n"
"Language-Team: Tamil <https://hosted.weblate.org/projects/incus/cli/ta/>\n"
@ -2969,6 +2969,16 @@ msgstr ""
msgid "Failed to load configuration: %s"
msgstr ""
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, c-format
msgid "Failed to open source file %q: %v"
msgstr ""
#: cmd/incus/utils_sftp.go:73
#, c-format
msgid "Failed to open target file %q: %w"
msgstr ""
#: cmd/incus/admin_sql.go:128
#, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: lxd\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-12-11 16:00+0000\n"
"Last-Translator: yooadmin <yooadmin@163.com>\n"
"Language-Team: Chinese (Simplified Han script) <https://hosted.weblate.org/"
@ -3340,6 +3340,16 @@ msgstr "监听连接失败:%w"
msgid "Failed to load configuration: %s"
msgstr "加载配置失败:%s"
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, fuzzy, c-format
msgid "Failed to open source file %q: %v"
msgstr "关闭服务器证书文件 %q 失败:%w"
#: cmd/incus/utils_sftp.go:73
#, fuzzy, c-format
msgid "Failed to open target file %q: %w"
msgstr "关闭服务器证书文件 %q 失败:%w"
#: cmd/incus/admin_sql.go:128
#, c-format
msgid "Failed to parse dump response: %w"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: incus\n"
"Report-Msgid-Bugs-To: lxc-devel@lists.linuxcontainers.org\n"
"POT-Creation-Date: 2025-12-18 23:24-0500\n"
"POT-Creation-Date: 2025-12-19 03:30-0500\n"
"PO-Revision-Date: 2025-10-21 05:20+0000\n"
"Last-Translator: pesder <j_h_liau@yahoo.com.tw>\n"
"Language-Team: Chinese (Traditional Han script) <https://hosted.weblate.org/"
@ -2970,6 +2970,16 @@ msgstr ""
msgid "Failed to load configuration: %s"
msgstr ""
#: cmd/incus/file.go:848 cmd/incus/utils_sftp.go:299
#, c-format
msgid "Failed to open source file %q: %v"
msgstr ""
#: cmd/incus/utils_sftp.go:73
#, c-format
msgid "Failed to open target file %q: %w"
msgstr ""
#: cmd/incus/admin_sql.go:128
#, c-format
msgid "Failed to parse dump response: %w"

View File

@ -1,4 +1,7 @@
test_incremental_copy() {
# shellcheck disable=2153
[ "${INCUS_BACKEND}" = "linstor" ] && echo "==> SKIP: Linstor can't currently handle copies with snapshots" && return
ensure_import_testimage
ensure_has_localhost_remote "${INCUS_ADDR}"

View File

@ -1,4 +1,7 @@
test_migration() {
# shellcheck disable=2153
[ "${INCUS_BACKEND}" = "linstor" ] && echo "==> SKIP: Linstor can't currently handle copies with snapshots" && return
# setup a second Incus
# shellcheck disable=2039,3043
local INCUS2_DIR INCUS2_ADDR incus_backend

View File

@ -1,4 +1,7 @@
test_snapshots() {
# shellcheck disable=2153
[ "${INCUS_BACKEND}" = "linstor" ] && echo "==> SKIP: Linstor can't currently handle copies with snapshots" && return
snapshots
if [ "$(storage_backend "$INCUS_DIR")" = "lvm" ]; then
@ -97,6 +100,7 @@ snapshots() {
}
test_snap_restore() {
[ "${INCUS_BACKEND}" = "linstor" ] && echo "==> SKIP: Linstor can't currently handle copies with snapshots" && return
snap_restore
if [ "$(storage_backend "$INCUS_DIR")" = "lvm" ]; then
@ -315,6 +319,9 @@ restore_and_compare_fs() {
}
test_snap_expiry() {
# shellcheck disable=2153
[ "${INCUS_BACKEND}" = "linstor" ] && echo "==> SKIP: Linstor can't currently handle copies with snapshots" && return
# shellcheck disable=2039,3043
local incus_backend
incus_backend=$(storage_backend "$INCUS_DIR")
@ -341,6 +348,9 @@ test_snap_expiry() {
}
test_snap_schedule() {
# shellcheck disable=2153
[ "${INCUS_BACKEND}" = "linstor" ] && echo "==> SKIP: Linstor can't currently handle copies with snapshots" && return
# shellcheck disable=2039,3043
local incus_backend
incus_backend=$(storage_backend "$INCUS_DIR")

View File

@ -1,4 +1,7 @@
test_storage_local_volume_handling() {
# shellcheck disable=2153
[ "${INCUS_BACKEND}" = "linstor" ] && echo "==> SKIP: Linstor can't currently handle copies with snapshots" && return
ensure_import_testimage
# shellcheck disable=2039,3043