mirror of
https://github.com/kairos-io/kairos-agent.git
synced 2025-09-17 15:27:58 +00:00
Take symlinks into account for partition size
Signed-off-by: Mauro Morales <mauro.morales@spectrocloud.com>
This commit is contained in:
@@ -19,6 +19,7 @@ package config
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -480,11 +481,40 @@ func GetSourceSize(config *Config, source *v1.ImageSource) (int64, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
info, err := d.Info()
|
if d.Type()&fs.ModeSymlink != 0 {
|
||||||
if err != nil {
|
// If it's a symlink, get its target and calculate its size.
|
||||||
return err
|
linkTarget, err := os.Readlink(path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !filepath.IsAbs(linkTarget) {
|
||||||
|
// If it's a relative path, join it with the base directory path.
|
||||||
|
linkTarget = filepath.Join(filepath.Dir(path), linkTarget)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = os.Stat(linkTarget)
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
size += 0
|
||||||
|
} else if err != nil {
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
linkInfo, err := os.Stat(linkTarget)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
size += linkInfo.Size()
|
||||||
|
}
|
||||||
|
} else if !d.IsDir() {
|
||||||
|
// If it's a regular file, add its size to the total.
|
||||||
|
fileInfo, err := d.Info()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
size += fileInfo.Size()
|
||||||
}
|
}
|
||||||
size += info.Size()
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user