disk: add function for finding entity path for a dir
New function that returns the Entity path for the Mountpoint that contains a given directory path.
This commit is contained in:
parent
75a0a74064
commit
ce5a28c113
2 changed files with 118 additions and 0 deletions
|
|
@ -471,3 +471,105 @@ func TestClone(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestFindDirectoryPartition(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
usr := Partition{
|
||||
Type: FilesystemDataGUID,
|
||||
UUID: RootPartitionUUID,
|
||||
Payload: &Filesystem{
|
||||
Type: "xfs",
|
||||
Label: "root",
|
||||
Mountpoint: "/usr",
|
||||
FSTabOptions: "defaults",
|
||||
FSTabFreq: 0,
|
||||
FSTabPassNo: 0,
|
||||
},
|
||||
}
|
||||
|
||||
{
|
||||
pt := testPartitionTables["plain"]
|
||||
assert.Equal("/", pt.findDirectoryEntityPath("/opt")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/boot/efi", pt.findDirectoryEntityPath("/boot/efi/Linux")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/boot", pt.findDirectoryEntityPath("/boot/loader")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/boot", pt.findDirectoryEntityPath("/boot")[0].(Mountable).GetMountpoint())
|
||||
|
||||
ptMod := pt.Clone().(*PartitionTable)
|
||||
ptMod.Partitions = append(ptMod.Partitions, usr)
|
||||
assert.Equal("/", ptMod.findDirectoryEntityPath("/opt")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/usr", ptMod.findDirectoryEntityPath("/usr")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/usr", ptMod.findDirectoryEntityPath("/usr/bin")[0].(Mountable).GetMountpoint())
|
||||
|
||||
// invalid dir should return nil
|
||||
assert.Nil(pt.findDirectoryEntityPath("invalid"))
|
||||
}
|
||||
|
||||
{
|
||||
pt := testPartitionTables["plain-noboot"]
|
||||
assert.Equal("/", pt.findDirectoryEntityPath("/opt")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/", pt.findDirectoryEntityPath("/boot")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/", pt.findDirectoryEntityPath("/boot/loader")[0].(Mountable).GetMountpoint())
|
||||
|
||||
ptMod := pt.Clone().(*PartitionTable)
|
||||
ptMod.Partitions = append(ptMod.Partitions, usr)
|
||||
assert.Equal("/", ptMod.findDirectoryEntityPath("/opt")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/usr", ptMod.findDirectoryEntityPath("/usr")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/usr", ptMod.findDirectoryEntityPath("/usr/bin")[0].(Mountable).GetMountpoint())
|
||||
|
||||
// invalid dir should return nil
|
||||
assert.Nil(pt.findDirectoryEntityPath("invalid"))
|
||||
}
|
||||
|
||||
{
|
||||
pt := testPartitionTables["luks"]
|
||||
assert.Equal("/", pt.findDirectoryEntityPath("/opt")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/boot", pt.findDirectoryEntityPath("/boot")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/boot", pt.findDirectoryEntityPath("/boot/loader")[0].(Mountable).GetMountpoint())
|
||||
|
||||
ptMod := pt.Clone().(*PartitionTable)
|
||||
ptMod.Partitions = append(ptMod.Partitions, usr)
|
||||
assert.Equal("/", ptMod.findDirectoryEntityPath("/opt")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/usr", ptMod.findDirectoryEntityPath("/usr")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/usr", ptMod.findDirectoryEntityPath("/usr/bin")[0].(Mountable).GetMountpoint())
|
||||
|
||||
// invalid dir should return nil
|
||||
assert.Nil(pt.findDirectoryEntityPath("invalid"))
|
||||
}
|
||||
|
||||
{
|
||||
pt := testPartitionTables["luks+lvm"]
|
||||
assert.Equal("/", pt.findDirectoryEntityPath("/opt")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/boot", pt.findDirectoryEntityPath("/boot")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/boot", pt.findDirectoryEntityPath("/boot/loader")[0].(Mountable).GetMountpoint())
|
||||
|
||||
ptMod := pt.Clone().(*PartitionTable)
|
||||
ptMod.Partitions = append(ptMod.Partitions, usr)
|
||||
assert.Equal("/", ptMod.findDirectoryEntityPath("/opt")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/usr", ptMod.findDirectoryEntityPath("/usr")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/usr", ptMod.findDirectoryEntityPath("/usr/bin")[0].(Mountable).GetMountpoint())
|
||||
|
||||
// invalid dir should return nil
|
||||
assert.Nil(pt.findDirectoryEntityPath("invalid"))
|
||||
}
|
||||
|
||||
{
|
||||
pt := testPartitionTables["btrfs"]
|
||||
assert.Equal("/", pt.findDirectoryEntityPath("/opt")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/boot", pt.findDirectoryEntityPath("/boot")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/boot", pt.findDirectoryEntityPath("/boot/loader")[0].(Mountable).GetMountpoint())
|
||||
|
||||
ptMod := pt.Clone().(*PartitionTable)
|
||||
ptMod.Partitions = append(ptMod.Partitions, usr)
|
||||
assert.Equal("/", ptMod.findDirectoryEntityPath("/opt")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/usr", ptMod.findDirectoryEntityPath("/usr")[0].(Mountable).GetMountpoint())
|
||||
assert.Equal("/usr", ptMod.findDirectoryEntityPath("/usr/bin")[0].(Mountable).GetMountpoint())
|
||||
|
||||
// invalid dir should return nil
|
||||
assert.Nil(pt.findDirectoryEntityPath("invalid"))
|
||||
}
|
||||
|
||||
{
|
||||
pt := PartitionTable{} // pt with no root should return nil
|
||||
assert.Nil(pt.findDirectoryEntityPath("/var"))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package disk
|
|||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
||||
|
|
@ -161,6 +162,21 @@ func (pt *PartitionTable) EnsureSize(s uint64) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func (pt *PartitionTable) findDirectoryEntityPath(dir string) []Entity {
|
||||
if path := entityPath(pt, dir); path != nil {
|
||||
return path
|
||||
}
|
||||
|
||||
parent := filepath.Dir(dir)
|
||||
if dir == parent {
|
||||
// invalid dir or pt has no root
|
||||
return nil
|
||||
}
|
||||
|
||||
// move up the directory path and check again
|
||||
return pt.findDirectoryEntityPath(parent)
|
||||
}
|
||||
|
||||
func (pt *PartitionTable) CreateMountpoint(mountpoint string, size uint64) (Entity, error) {
|
||||
filesystem := Filesystem{
|
||||
Type: "xfs",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue