mirror of
https://github.com/kairos-io/kairos-sdk.git
synced 2025-09-25 06:11:17 +00:00
59 lines
1.6 KiB
Go
59 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
|
|
}
|