mirror of
https://github.com/kairos-io/kairos-sdk.git
synced 2025-09-26 06:38:07 +00:00
feat: support multipath in Kairos SDK
Signed-off-by: Aidan Leuck <aidan_leuck@selinc.com>
This commit is contained in:
committed by
Dimitris Karakasilis
parent
2fcb006782
commit
1cd4261f67
58
ghw/disk_partition_handler.go
Normal file
58
ghw/disk_partition_handler.go
Normal file
@@ -0,0 +1,58 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user