osbuild2: add new SgdiskStage for org.osbuild.sgdisk
New partitioning stage that uses `sgdisk(8)` via `org.osbuild.sgdisk`.
This commit is contained in:
parent
074973e03d
commit
4b4e8ca810
2 changed files with 84 additions and 0 deletions
46
internal/osbuild2/sgdisk_stage.go
Normal file
46
internal/osbuild2/sgdisk_stage.go
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
package osbuild2
|
||||
|
||||
// Partition a target using sgdisk(8)
|
||||
|
||||
import (
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type SgdiskStageOptions struct {
|
||||
// UUID for the disk image's partition table
|
||||
UUID uuid.UUID `json:"uuid"`
|
||||
|
||||
// Partition layout
|
||||
Partitions []SgdiskPartition `json:"partitions,omitempty"`
|
||||
}
|
||||
|
||||
func (SgdiskStageOptions) isStageOptions() {}
|
||||
|
||||
// Description of a partition
|
||||
type SgdiskPartition struct {
|
||||
// Mark the partition as bootable (dos)
|
||||
Bootable bool `json:"bootable,omitempty"`
|
||||
|
||||
// The partition name
|
||||
Name string `json:"name,omitempty"`
|
||||
|
||||
// The size of the partition (sectors)
|
||||
Size uint64 `json:"size,omitempty"`
|
||||
|
||||
// The start offset of the partition (sectors)
|
||||
Start uint64 `json:"start,omitempty"`
|
||||
|
||||
// The partition type
|
||||
Type string `json:"type,omitempty"`
|
||||
|
||||
// UUID of the partition
|
||||
UUID *uuid.UUID `json:"uuid,omitempty"`
|
||||
}
|
||||
|
||||
func NewSgdiskStage(options *SgdiskStageOptions, device *Device) *Stage {
|
||||
return &Stage{
|
||||
Type: "org.osbuild.sgdisk",
|
||||
Options: options,
|
||||
Devices: Devices{"device": *device},
|
||||
}
|
||||
}
|
||||
38
internal/osbuild2/sgdisk_stage_test.go
Normal file
38
internal/osbuild2/sgdisk_stage_test.go
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
package osbuild2
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestNewSgdiskStage(t *testing.T) {
|
||||
|
||||
uid := uuid.MustParse("68B2905B-DF3E-4FB3-80FA-49D1E773AA33")
|
||||
partition := SgdiskPartition{
|
||||
Bootable: true,
|
||||
Name: "root",
|
||||
Size: 2097152,
|
||||
Start: 0,
|
||||
Type: "C12A7328-F81F-11D2-BA4B-00A0C93EC93B",
|
||||
UUID: &uid,
|
||||
}
|
||||
|
||||
options := SgdiskStageOptions{
|
||||
UUID: uuid.MustParse("D209C89E-EA5E-4FBD-B161-B461CCE297E0"),
|
||||
Partitions: []SgdiskPartition{partition},
|
||||
}
|
||||
|
||||
device := NewLoopbackDevice(&LoopbackDeviceOptions{Filename: "disk.raw"})
|
||||
devices := Devices{"device": *device}
|
||||
|
||||
expectedStage := &Stage{
|
||||
Type: "org.osbuild.sgdisk",
|
||||
Options: &options,
|
||||
Devices: devices,
|
||||
}
|
||||
|
||||
actualStage := NewSgdiskStage(&options, device)
|
||||
assert.Equal(t, expectedStage, actualStage)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue