mirror of
https://github.com/kairos-io/kairos-sdk.git
synced 2025-09-26 06:38:07 +00:00
58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
![]() |
package ghw
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/kairos-io/kairos-sdk/types"
|
||
|
)
|
||
|
|
||
|
type DiskPartitionHandler struct {
|
||
|
DiskName string
|
||
|
}
|
||
|
|
||
|
// Validate that DiskPartitionHandler implements PartitionHandler interface
|
||
|
var _ PartitionHandler = &DiskPartitionHandler{}
|
||
|
|
||
|
func NewDiskPartitionHandler(diskName string) *DiskPartitionHandler {
|
||
|
return &DiskPartitionHandler{DiskName: diskName}
|
||
|
}
|
||
|
|
||
|
func (d *DiskPartitionHandler) GetPartitions(paths *Paths, logger *types.KairosLogger) types.PartitionList {
|
||
|
out := make(types.PartitionList, 0)
|
||
|
path := filepath.Join(paths.SysBlock, d.DiskName)
|
||
|
logger.Logger.Debug().Str("file", path).Msg("Reading disk file")
|
||
|
files, err := os.ReadDir(path)
|
||
|
if err != nil {
|
||
|
logger.Logger.Error().Err(err).Msg("failed to read disk partitions")
|
||
|
return out
|
||
|
}
|
||
|
for _, file := range files {
|
||
|
fname := file.Name()
|
||
|
if !strings.HasPrefix(fname, d.DiskName) {
|
||
|
continue
|
||
|
}
|
||
|
logger.Logger.Debug().Str("file", fname).Msg("Reading partition file")
|
||
|
partitionPath := filepath.Join(d.DiskName, fname)
|
||
|
size := partitionSizeBytes(paths, partitionPath, logger)
|
||
|
mp, pt := partitionInfo(paths, fname, logger)
|
||
|
du := diskPartUUID(paths, partitionPath, logger)
|
||
|
if pt == "" {
|
||
|
pt = diskPartTypeUdev(paths, partitionPath, logger)
|
||
|
}
|
||
|
fsLabel := diskFSLabel(paths, partitionPath, logger)
|
||
|
p := &types.Partition{
|
||
|
Name: fname,
|
||
|
Size: uint(size / (1024 * 1024)),
|
||
|
MountPoint: mp,
|
||
|
UUID: du,
|
||
|
FilesystemLabel: fsLabel,
|
||
|
FS: pt,
|
||
|
Path: filepath.Join("/dev", fname),
|
||
|
Disk: filepath.Join("/dev", d.DiskName),
|
||
|
}
|
||
|
out = append(out, p)
|
||
|
}
|
||
|
return out
|
||
|
}
|