From b95add40b06da031fc5e63d0eac2ba4c8b58bcf6 Mon Sep 17 00:00:00 2001 From: Steven Presti Date: Thu, 4 Aug 2022 15:13:45 -0400 Subject: [PATCH] fcos translate.go: add warn on small or constrained root partition --- config/common/errors.go | 2 + config/fcos/v1_5_exp/translate.go | 31 +- config/fcos/v1_5_exp/translate_test.go | 3031 +++++++++++++----------- docs/release-notes.md | 3 +- 4 files changed, 1689 insertions(+), 1378 deletions(-) diff --git a/config/common/errors.go b/config/common/errors.go index 1961f007..05e2a5c0 100644 --- a/config/common/errors.go +++ b/config/common/errors.go @@ -37,6 +37,8 @@ var ( ErrNodeExists = errors.New("matching filesystem node has existing contents or different type") ErrNoFilesDir = errors.New("local file paths are relative to a files directory that must be specified with -d/--files-dir") ErrTreeNotDirectory = errors.New("root of tree must be a directory") + ErrRootTooSmall = errors.New("root should have 8GiB of space assigned") + ErrRootConstrained = errors.New("root is configured too small, and has no room to expand") ErrTreeNoLocal = errors.New("local is required") // filesystem nodes diff --git a/config/fcos/v1_5_exp/translate.go b/config/fcos/v1_5_exp/translate.go index f2eec2fd..fa43cc3a 100644 --- a/config/fcos/v1_5_exp/translate.go +++ b/config/fcos/v1_5_exp/translate.go @@ -68,17 +68,34 @@ func (c Config) ToIgn3_4Unvalidated(options common.TranslateOptions) (types.Conf return types.Config{}, translate.TranslationSet{}, r } r.Merge(c.processBootDevice(&ret, &ts, options)) + for i, disk := range ret.Storage.Disks { - // In the boot_device.mirror case, nothing specifies partition numbers - // so match existing partitions only when `wipeTable` is false - if !util.IsTrue(disk.WipeTable) { - for j, partition := range disk.Partitions { - // check for reserved partlabels - if partition.Label != nil { + for p, partition := range disk.Partitions { + //if the partition is not nil and is root + if partition.Label != nil { + if *partition.Label == "root" { + if partition.SizeMiB == nil || *partition.SizeMiB == 0 { + for _, ap := range disk.Partitions { + if ap.Number == partition.Number+1 { + if ap.StartMiB == nil || *ap.StartMiB == 0 { + r.AddOnWarn(path.New("json", "storage", "disks", i, "partitions", p, "number"), common.ErrRootConstrained) + } + } + } + } else if *partition.SizeMiB < 8192 { + r.AddOnWarn(path.New("json", "storage", "disks", i, "partitions", p, "size_mib"), common.ErrRootTooSmall) + } + } + + // In the boot_device.mirror case, nothing specifies partition numbers + // so match existing partitions only when `wipeTable` is false + if !util.IsTrue(disk.WipeTable) { + // check for reseved partlabels if (*partition.Label == "BIOS-BOOT" && partition.Number != 1) || (*partition.Label == "PowerPC-PReP-boot" && partition.Number != 1) || (*partition.Label == "EFI-SYSTEM" && partition.Number != 2) || (*partition.Label == "boot" && partition.Number != 3) || (*partition.Label == "root" && partition.Number != 4) { - r.AddOnWarn(path.New("json", "storage", "disks", i, "partitions", j, "label"), common.ErrWrongPartitionNumber) + r.AddOnWarn(path.New("json", "storage", "disks", i, "partitions", p, "label"), common.ErrWrongPartitionNumber) } } + } } } diff --git a/config/fcos/v1_5_exp/translate_test.go b/config/fcos/v1_5_exp/translate_test.go index fbb3f479..7a47c1da 100644 --- a/config/fcos/v1_5_exp/translate_test.go +++ b/config/fcos/v1_5_exp/translate_test.go @@ -15,7 +15,6 @@ package v1_5_exp import ( - "fmt" "testing" baseutil "github.com/coreos/butane/base/util" @@ -31,1467 +30,1799 @@ import ( ) // Most of this is covered by the Ignition translator generic tests, so just test the custom bits +type translateTestData struct { + in Config + out types.Config + exceptions []translate.Translation + report report.Report +} + +func TranslateTest(t *testing.T, data translateTestData) { + // The partition sizes of existing layouts must never change, but + // we use the constants in tests for clarity. Ensure no one has + // changed them. + assert.Equal(t, reservedV1SizeMiB, 1) + assert.Equal(t, biosV1SizeMiB, 1) + assert.Equal(t, prepV1SizeMiB, 4) + assert.Equal(t, espV1SizeMiB, 127) + assert.Equal(t, bootV1SizeMiB, 384) + + actual, translations, r := data.in.ToIgn3_4Unvalidated(common.TranslateOptions{}) + assert.Equal(t, data.out, actual, "translation mismatch") + assert.Equal(t, data.report, r, "report mismatch") + baseutil.VerifyTranslations(t, translations, data.exceptions) + assert.NoError(t, translations.DebugVerifyCoverage(actual), "incomplete TranslationSet coverage") + +} +func TestEmptyConfig(t *testing.T) { + var test translateTestData + // empty config + test.in = Config{} + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + } + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + } + test.report = report.Report{} + + TranslateTest(t, test) + +} -// TestTranslateBootDevice tests translating the Butane config boot_device section. -func TestTranslateBootDevice(t *testing.T) { - tests := []struct { - in Config - out types.Config - exceptions []translate.Translation - report report.Report - }{ - // empty config - { - Config{}, - types.Config{ - Ignition: types.Ignition{ - Version: "3.4.0-experimental", +func TestIncorrectPartitionNumberRoot(t *testing.T) { + var test translateTestData + test.in = Config{ + Config: base.Config{ + Storage: base.Storage{ + Disks: []base.Disk{ + { + Device: "/dev/vda", + Partitions: []base.Partition{ + { + Label: util.StrToPtr("root"), + SizeMiB: util.IntToPtr(12000), + Resize: util.BoolToPtr(true), + }, + { + Label: util.StrToPtr("var-home"), + SizeMiB: util.IntToPtr(10240), + }, + }, + }, + }, + Filesystems: []base.Filesystem{ + { + Device: "/dev/disk/by-partlabel/var-home", + Format: util.StrToPtr("xfs"), + Path: util.StrToPtr("/var/home"), + Label: util.StrToPtr("var-home"), + WipeFilesystem: util.BoolToPtr(false), + }, + }, + }, + }, + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Disks: []types.Disk{ + { + Device: "/dev/vda", + Partitions: []types.Partition{ + { + Label: util.StrToPtr("root"), + SizeMiB: util.IntToPtr(12000), + Resize: util.BoolToPtr(true), + }, + { + Label: util.StrToPtr("var-home"), + SizeMiB: util.IntToPtr(10240), + }, + }, + }, + }, + Filesystems: []types.Filesystem{ + { + Device: "/dev/disk/by-partlabel/var-home", + Format: util.StrToPtr("xfs"), + Path: util.StrToPtr("/var/home"), + Label: util.StrToPtr("var-home"), + WipeFilesystem: util.BoolToPtr(false), }, }, - []translate.Translation{ - {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + }, + } + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "label"), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "size_mib"), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "resize"), path.New("json", "storage", "disks", 0, "partitions", 0, "resize")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 1, "label"), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 1, "size_mib"), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, + {path.New("yaml", "storage", "disks", 0), path.New("json", "storage", "disks", 0)}, + {path.New("yaml", "storage", "filesystems", 0, "device"), path.New("json", "storage", "filesystems", 0, "device")}, + {path.New("yaml", "storage", "filesystems", 0, "format"), path.New("json", "storage", "filesystems", 0, "format")}, + {path.New("yaml", "storage", "filesystems", 0, "path"), path.New("json", "storage", "filesystems", 0, "path")}, + {path.New("yaml", "storage", "filesystems", 0, "label"), path.New("json", "storage", "filesystems", 0, "label")}, + {path.New("yaml", "storage", "filesystems", 0, "wipe_filesystem"), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, + {path.New("yaml", "storage", "filesystems", 0), path.New("json", "storage", "filesystems", 0)}, + {path.New("yaml", "storage", "filesystems"), path.New("json", "storage", "filesystems")}, + {path.New("yaml", "storage"), path.New("json", "storage")}, + } + test.report = report.Report{ + Entries: []report.Entry{ + { + Kind: report.Warn, + Message: common.ErrWrongPartitionNumber.Error(), + Context: path.New("json", "storage", "disks", 0, "partitions", 0, "label"), }, - report.Report{}, }, - // partition number for the `root` label is incorrect - { - Config{ - Config: base.Config{ - Storage: base.Storage{ - Disks: []base.Disk{ + } + TranslateTest(t, test) +} + +func TestRootPartitionTooSmall(t *testing.T) { + var test translateTestData + + test.in = Config{ + Config: base.Config{ + Storage: base.Storage{ + Disks: []base.Disk{ + { + Device: "/dev/vda", + Partitions: []base.Partition{ { - Device: "/dev/vda", - Partitions: []base.Partition{ - { - Label: util.StrToPtr("root"), - SizeMiB: util.IntToPtr(12000), - Resize: util.BoolToPtr(true), - }, - { - Label: util.StrToPtr("var-home"), - SizeMiB: util.IntToPtr(10240), - }, - }, + Label: util.StrToPtr("root"), + SizeMiB: util.IntToPtr(500), + Resize: util.BoolToPtr(true), + Number: 4, }, - }, - Filesystems: []base.Filesystem{ { - Device: "/dev/disk/by-partlabel/var-home", - Format: util.StrToPtr("xfs"), - Path: util.StrToPtr("/var/home"), - Label: util.StrToPtr("var-home"), - WipeFilesystem: util.BoolToPtr(false), + Label: util.StrToPtr("var-home"), + SizeMiB: util.IntToPtr(10240), }, }, }, }, - }, - types.Config{ - Ignition: types.Ignition{ - Version: "3.4.0-experimental", + Filesystems: []base.Filesystem{ + { + Device: "/dev/disk/by-partlabel/var-home", + Format: util.StrToPtr("xfs"), + Path: util.StrToPtr("/var/home"), + Label: util.StrToPtr("var-home"), + WipeFilesystem: util.BoolToPtr(false), + }, }, - Storage: types.Storage{ - Disks: []types.Disk{ + }, + }, + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Disks: []types.Disk{ + { + Device: "/dev/vda", + Partitions: []types.Partition{ { - Device: "/dev/vda", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("root"), - SizeMiB: util.IntToPtr(12000), - Resize: util.BoolToPtr(true), - }, - { - Label: util.StrToPtr("var-home"), - SizeMiB: util.IntToPtr(10240), - }, - }, + Label: util.StrToPtr("root"), + SizeMiB: util.IntToPtr(500), + Resize: util.BoolToPtr(true), + Number: 4, }, - }, - Filesystems: []types.Filesystem{ { - Device: "/dev/disk/by-partlabel/var-home", - Format: util.StrToPtr("xfs"), - Path: util.StrToPtr("/var/home"), - Label: util.StrToPtr("var-home"), - WipeFilesystem: util.BoolToPtr(false), + Label: util.StrToPtr("var-home"), + SizeMiB: util.IntToPtr(10240), }, }, }, }, - []translate.Translation{ - {path.New("yaml", "version"), path.New("json", "ignition", "version")}, - {path.New("yaml", "storage", "disks", 0, "partitions", 0, "label"), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, - {path.New("yaml", "storage", "disks", 0, "partitions", 0, "size_mib"), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "storage", "disks", 0, "partitions", 0, "resize"), path.New("json", "storage", "disks", 0, "partitions", 0, "resize")}, - {path.New("yaml", "storage", "disks", 0, "partitions", 1, "label"), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, - {path.New("yaml", "storage", "disks", 0, "partitions", 1, "size_mib"), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "storage", "disks", 0, "partitions", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, - {path.New("yaml", "storage", "disks", 0), path.New("json", "storage", "disks", 0)}, - {path.New("yaml", "storage", "filesystems", 0, "device"), path.New("json", "storage", "filesystems", 0, "device")}, - {path.New("yaml", "storage", "filesystems", 0, "format"), path.New("json", "storage", "filesystems", 0, "format")}, - {path.New("yaml", "storage", "filesystems", 0, "path"), path.New("json", "storage", "filesystems", 0, "path")}, - {path.New("yaml", "storage", "filesystems", 0, "label"), path.New("json", "storage", "filesystems", 0, "label")}, - {path.New("yaml", "storage", "filesystems", 0, "wipe_filesystem"), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, - {path.New("yaml", "storage", "filesystems", 0), path.New("json", "storage", "filesystems", 0)}, - {path.New("yaml", "storage", "filesystems"), path.New("json", "storage", "filesystems")}, - {path.New("yaml", "storage"), path.New("json", "storage")}, + Filesystems: []types.Filesystem{ + { + Device: "/dev/disk/by-partlabel/var-home", + Format: util.StrToPtr("xfs"), + Path: util.StrToPtr("/var/home"), + Label: util.StrToPtr("var-home"), + WipeFilesystem: util.BoolToPtr(false), + }, + }, + }, + } + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "label"), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "size_mib"), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "resize"), path.New("json", "storage", "disks", 0, "partitions", 0, "resize")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 1, "label"), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 1, "size_mib"), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, + {path.New("yaml", "storage", "disks", 0), path.New("json", "storage", "disks", 0)}, + {path.New("yaml", "storage", "filesystems", 0, "device"), path.New("json", "storage", "filesystems", 0, "device")}, + {path.New("yaml", "storage", "filesystems", 0, "format"), path.New("json", "storage", "filesystems", 0, "format")}, + {path.New("yaml", "storage", "filesystems", 0, "path"), path.New("json", "storage", "filesystems", 0, "path")}, + {path.New("yaml", "storage", "filesystems", 0, "label"), path.New("json", "storage", "filesystems", 0, "label")}, + {path.New("yaml", "storage", "filesystems", 0, "wipe_filesystem"), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, + {path.New("yaml", "storage", "filesystems", 0), path.New("json", "storage", "filesystems", 0)}, + {path.New("yaml", "storage", "filesystems"), path.New("json", "storage", "filesystems")}, + {path.New("yaml", "storage"), path.New("json", "storage")}, + } + test.report = report.Report{ + Entries: []report.Entry{ + { + Kind: report.Warn, + Message: common.ErrRootTooSmall.Error(), + Context: path.New("json", "storage", "disks", 0, "partitions", 0, "size_mib"), }, - report.Report{ - Entries: []report.Entry{ + }, + } + + TranslateTest(t, test) +} + +func TestRootPartitonConstrainedNoValues(t *testing.T) { + var test translateTestData + test.in = Config{ + Config: base.Config{ + Storage: base.Storage{ + Disks: []base.Disk{ + { + Device: "/dev/vda", + Partitions: []base.Partition{ + { + Label: util.StrToPtr("root"), + Resize: util.BoolToPtr(true), + Number: 4, + }, + { + Label: util.StrToPtr("var-home"), + Number: 5, + }, + }, + }, + }, + Filesystems: []base.Filesystem{ { - Kind: report.Warn, - Message: common.ErrWrongPartitionNumber.Error(), - Context: path.New("json", "storage", "disks", 0, "partitions", 0, "label"), + Device: "/dev/disk/by-partlabel/var-home", + Format: util.StrToPtr("xfs"), + Path: util.StrToPtr("/var/home"), + Label: util.StrToPtr("var-home"), + WipeFilesystem: util.BoolToPtr(false), }, }, }, }, - // LUKS, x86_64 - { - Config{ - BootDevice: BootDevice{ - Luks: BootDeviceLuks{ - Tang: []base.Tang{{ - URL: "https://example.com/", - Thumbprint: util.StrToPtr("z"), - }}, - Threshold: util.IntToPtr(2), - Tpm2: util.BoolToPtr(true), + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Disks: []types.Disk{ + { + Device: "/dev/vda", + Partitions: []types.Partition{ + { + Label: util.StrToPtr("root"), + Resize: util.BoolToPtr(true), + Number: 4, + }, + { + Label: util.StrToPtr("var-home"), + Number: 5, + }, }, }, }, - types.Config{ - Ignition: types.Ignition{ - Version: "3.4.0-experimental", + Filesystems: []types.Filesystem{ + { + Device: "/dev/disk/by-partlabel/var-home", + Format: util.StrToPtr("xfs"), + Path: util.StrToPtr("/var/home"), + Label: util.StrToPtr("var-home"), + WipeFilesystem: util.BoolToPtr(false), }, - Storage: types.Storage{ - Luks: []types.Luks{ - { - Clevis: types.Clevis{ - Tang: []types.Tang{{ - URL: "https://example.com/", - Thumbprint: util.StrToPtr("z"), - }}, - Threshold: util.IntToPtr(2), - Tpm2: util.BoolToPtr(true), + }, + }, + } + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "label"), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "resize"), path.New("json", "storage", "disks", 0, "partitions", 0, "resize")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 1, "label"), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, + {path.New("yaml", "storage", "disks", 0), path.New("json", "storage", "disks", 0)}, + {path.New("yaml", "storage", "filesystems", 0, "device"), path.New("json", "storage", "filesystems", 0, "device")}, + {path.New("yaml", "storage", "filesystems", 0, "format"), path.New("json", "storage", "filesystems", 0, "format")}, + {path.New("yaml", "storage", "filesystems", 0, "path"), path.New("json", "storage", "filesystems", 0, "path")}, + {path.New("yaml", "storage", "filesystems", 0, "label"), path.New("json", "storage", "filesystems", 0, "label")}, + {path.New("yaml", "storage", "filesystems", 0, "wipe_filesystem"), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, + {path.New("yaml", "storage", "filesystems", 0), path.New("json", "storage", "filesystems", 0)}, + {path.New("yaml", "storage", "filesystems"), path.New("json", "storage", "filesystems")}, + {path.New("yaml", "storage"), path.New("json", "storage")}, + } + test.report = report.Report{ + Entries: []report.Entry{ + { + Kind: report.Warn, + Message: common.ErrRootConstrained.Error(), + Context: path.New("json", "storage", "disks", 0, "partitions", 0, "number"), + }, + }, + } + TranslateTest(t, test) +} + +func TestRootPartitionContsrainedSpecified(t *testing.T) { + var test translateTestData + test.in = Config{ + Config: base.Config{ + Storage: base.Storage{ + Disks: []base.Disk{ + { + Device: "/dev/vda", + Partitions: []base.Partition{ + { + Label: util.StrToPtr("root"), + SizeMiB: util.IntToPtr(0), + Resize: util.BoolToPtr(true), + Number: 4, + }, + { + Label: util.StrToPtr("var-home"), + SizeMiB: util.IntToPtr(10240), + StartMiB: util.IntToPtr(0), + Number: 5, }, - Device: util.StrToPtr("/dev/disk/by-partlabel/root"), - Label: util.StrToPtr("luks-root"), - Name: "root", - WipeVolume: util.BoolToPtr(true), }, }, - Filesystems: []types.Filesystem{ + }, + Filesystems: []base.Filesystem{ + { + Device: "/dev/disk/by-partlabel/var-home", + Format: util.StrToPtr("xfs"), + Path: util.StrToPtr("/var/home"), + Label: util.StrToPtr("var-home"), + WipeFilesystem: util.BoolToPtr(false), + }, + }, + }, + }, + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Disks: []types.Disk{ + { + Device: "/dev/vda", + Partitions: []types.Partition{ { - Device: "/dev/mapper/root", - Format: util.StrToPtr("xfs"), - Label: util.StrToPtr("root"), - WipeFilesystem: util.BoolToPtr(true), + Label: util.StrToPtr("root"), + SizeMiB: util.IntToPtr(0), + Resize: util.BoolToPtr(true), + Number: 4, + }, + { + Label: util.StrToPtr("var-home"), + SizeMiB: util.IntToPtr(10240), + StartMiB: util.IntToPtr(0), + Number: 5, }, }, }, }, - []translate.Translation{ - {path.New("yaml", "version"), path.New("json", "ignition", "version")}, - {path.New("yaml", "boot_device", "luks", "tang", 0, "url"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "url")}, - {path.New("yaml", "boot_device", "luks", "tang", 0, "thumbprint"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "thumbprint")}, - {path.New("yaml", "boot_device", "luks", "tang", 0), path.New("json", "storage", "luks", 0, "clevis", "tang", 0)}, - {path.New("yaml", "boot_device", "luks", "tang"), path.New("json", "storage", "luks", 0, "clevis", "tang")}, - {path.New("yaml", "boot_device", "luks", "threshold"), path.New("json", "storage", "luks", 0, "clevis", "threshold")}, - {path.New("yaml", "boot_device", "luks", "tpm2"), path.New("json", "storage", "luks", 0, "clevis", "tpm2")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "clevis")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "device")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "label")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "name")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "wipeVolume")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0)}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 0, "device")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 0, "format")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 0, "label")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 0)}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems")}, - {path.New("yaml", "boot_device"), path.New("json", "storage")}, + Filesystems: []types.Filesystem{ + { + Device: "/dev/disk/by-partlabel/var-home", + Format: util.StrToPtr("xfs"), + Path: util.StrToPtr("/var/home"), + Label: util.StrToPtr("var-home"), + WipeFilesystem: util.BoolToPtr(false), + }, + }, + }, + } + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "label"), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "size_mib"), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "resize"), path.New("json", "storage", "disks", 0, "partitions", 0, "resize")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 1, "label"), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 1, "size_mib"), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 1, "start_mib"), path.New("json", "storage", "disks", 0, "partitions", 1, "startMiB")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, + {path.New("yaml", "storage", "disks", 0), path.New("json", "storage", "disks", 0)}, + {path.New("yaml", "storage", "filesystems", 0, "device"), path.New("json", "storage", "filesystems", 0, "device")}, + {path.New("yaml", "storage", "filesystems", 0, "format"), path.New("json", "storage", "filesystems", 0, "format")}, + {path.New("yaml", "storage", "filesystems", 0, "path"), path.New("json", "storage", "filesystems", 0, "path")}, + {path.New("yaml", "storage", "filesystems", 0, "label"), path.New("json", "storage", "filesystems", 0, "label")}, + {path.New("yaml", "storage", "filesystems", 0, "wipe_filesystem"), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, + {path.New("yaml", "storage", "filesystems", 0), path.New("json", "storage", "filesystems", 0)}, + {path.New("yaml", "storage", "filesystems"), path.New("json", "storage", "filesystems")}, + {path.New("yaml", "storage"), path.New("json", "storage")}, + } + test.report = report.Report{ + Entries: []report.Entry{ + { + Kind: report.Warn, + Message: common.ErrRootConstrained.Error(), + Context: path.New("json", "storage", "disks", 0, "partitions", 0, "number"), }, - report.Report{}, }, - // 3-disk mirror, x86_64 - { - Config{ - BootDevice: BootDevice{ - Mirror: BootDeviceMirror{ - Devices: []string{"/dev/vda", "/dev/vdb", "/dev/vdc"}, + } + + TranslateTest(t, test) +} + +func TestLUKSx86_64(t *testing.T) { + var test translateTestData + test.in = Config{ + BootDevice: BootDevice{ + Luks: BootDeviceLuks{ + Tang: []base.Tang{{ + URL: "https://example.com/", + Thumbprint: util.StrToPtr("z"), + }}, + Threshold: util.IntToPtr(2), + Tpm2: util.BoolToPtr(true), + }, + }, + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Luks: []types.Luks{ + { + Clevis: types.Clevis{ + Tang: []types.Tang{{ + URL: "https://example.com/", + Thumbprint: util.StrToPtr("z"), + }}, + Threshold: util.IntToPtr(2), + Tpm2: util.BoolToPtr(true), }, + Device: util.StrToPtr("/dev/disk/by-partlabel/root"), + Label: util.StrToPtr("luks-root"), + Name: "root", + WipeVolume: util.BoolToPtr(true), }, }, - types.Config{ - Ignition: types.Ignition{ - Version: "3.4.0-experimental", + Filesystems: []types.Filesystem{ + { + Device: "/dev/mapper/root", + Format: util.StrToPtr("xfs"), + Label: util.StrToPtr("root"), + WipeFilesystem: util.BoolToPtr(true), }, - Storage: types.Storage{ - Disks: []types.Disk{ + }, + }, + } + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + {path.New("yaml", "boot_device", "luks", "tang", 0, "url"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "url")}, + {path.New("yaml", "boot_device", "luks", "tang", 0, "thumbprint"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "thumbprint")}, + {path.New("yaml", "boot_device", "luks", "tang", 0), path.New("json", "storage", "luks", 0, "clevis", "tang", 0)}, + {path.New("yaml", "boot_device", "luks", "tang"), path.New("json", "storage", "luks", 0, "clevis", "tang")}, + {path.New("yaml", "boot_device", "luks", "threshold"), path.New("json", "storage", "luks", 0, "clevis", "threshold")}, + {path.New("yaml", "boot_device", "luks", "tpm2"), path.New("json", "storage", "luks", 0, "clevis", "tpm2")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "clevis")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "device")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "label")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "name")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "wipeVolume")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0)}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 0, "device")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 0, "format")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 0, "label")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 0)}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems")}, + {path.New("yaml", "boot_device"), path.New("json", "storage")}, + } + test.report = report.Report{} + + TranslateTest(t, test) +} +func Test3DiskMirror_x86_64(t *testing.T) { + var test translateTestData + // 3-disk mirror, x86_64 + + test.in = Config{ + BootDevice: BootDevice{ + Mirror: BootDeviceMirror{ + Devices: []string{"/dev/vda", "/dev/vdb", "/dev/vdc"}, + }, + }, + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Disks: []types.Disk{ + { + Device: "/dev/vda", + Partitions: []types.Partition{ { - Device: "/dev/vda", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("bios-1"), - SizeMiB: util.IntToPtr(biosV1SizeMiB), - TypeGUID: util.StrToPtr(biosTypeGuid), - }, - { - Label: util.StrToPtr("esp-1"), - SizeMiB: util.IntToPtr(espV1SizeMiB), - TypeGUID: util.StrToPtr(espTypeGuid), - }, - { - Label: util.StrToPtr("boot-1"), - SizeMiB: util.IntToPtr(bootV1SizeMiB), - }, - { - Label: util.StrToPtr("root-1"), - }, - }, - WipeTable: util.BoolToPtr(true), + Label: util.StrToPtr("bios-1"), + SizeMiB: util.IntToPtr(biosV1SizeMiB), + TypeGUID: util.StrToPtr(biosTypeGuid), }, { - Device: "/dev/vdb", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("bios-2"), - SizeMiB: util.IntToPtr(biosV1SizeMiB), - TypeGUID: util.StrToPtr(biosTypeGuid), - }, - { - Label: util.StrToPtr("esp-2"), - SizeMiB: util.IntToPtr(espV1SizeMiB), - TypeGUID: util.StrToPtr(espTypeGuid), - }, - { - Label: util.StrToPtr("boot-2"), - SizeMiB: util.IntToPtr(bootV1SizeMiB), - }, - { - Label: util.StrToPtr("root-2"), - }, - }, - WipeTable: util.BoolToPtr(true), + Label: util.StrToPtr("esp-1"), + SizeMiB: util.IntToPtr(espV1SizeMiB), + TypeGUID: util.StrToPtr(espTypeGuid), }, { - Device: "/dev/vdc", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("bios-3"), - SizeMiB: util.IntToPtr(biosV1SizeMiB), - TypeGUID: util.StrToPtr(biosTypeGuid), - }, - { - Label: util.StrToPtr("esp-3"), - SizeMiB: util.IntToPtr(espV1SizeMiB), - TypeGUID: util.StrToPtr(espTypeGuid), - }, - { - Label: util.StrToPtr("boot-3"), - SizeMiB: util.IntToPtr(bootV1SizeMiB), - }, - { - Label: util.StrToPtr("root-3"), - }, - }, - WipeTable: util.BoolToPtr(true), + Label: util.StrToPtr("boot-1"), + SizeMiB: util.IntToPtr(bootV1SizeMiB), + }, + { + Label: util.StrToPtr("root-1"), }, }, - Raid: []types.Raid{ + WipeTable: util.BoolToPtr(true), + }, + { + Device: "/dev/vdb", + Partitions: []types.Partition{ { - Devices: []types.Device{ - "/dev/disk/by-partlabel/boot-1", - "/dev/disk/by-partlabel/boot-2", - "/dev/disk/by-partlabel/boot-3", - }, - Level: util.StrToPtr("raid1"), - Name: "md-boot", - Options: []types.RaidOption{"--metadata=1.0"}, + Label: util.StrToPtr("bios-2"), + SizeMiB: util.IntToPtr(biosV1SizeMiB), + TypeGUID: util.StrToPtr(biosTypeGuid), }, { - Devices: []types.Device{ - "/dev/disk/by-partlabel/root-1", - "/dev/disk/by-partlabel/root-2", - "/dev/disk/by-partlabel/root-3", - }, - Level: util.StrToPtr("raid1"), - Name: "md-root", + Label: util.StrToPtr("esp-2"), + SizeMiB: util.IntToPtr(espV1SizeMiB), + TypeGUID: util.StrToPtr(espTypeGuid), + }, + { + Label: util.StrToPtr("boot-2"), + SizeMiB: util.IntToPtr(bootV1SizeMiB), + }, + { + Label: util.StrToPtr("root-2"), }, }, - Filesystems: []types.Filesystem{ + WipeTable: util.BoolToPtr(true), + }, + { + Device: "/dev/vdc", + Partitions: []types.Partition{ { - Device: "/dev/disk/by-partlabel/esp-1", - Format: util.StrToPtr("vfat"), - Label: util.StrToPtr("esp-1"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/disk/by-partlabel/esp-2", - Format: util.StrToPtr("vfat"), - Label: util.StrToPtr("esp-2"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/disk/by-partlabel/esp-3", - Format: util.StrToPtr("vfat"), - Label: util.StrToPtr("esp-3"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/md/md-boot", - Format: util.StrToPtr("ext4"), - Label: util.StrToPtr("boot"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/md/md-root", - Format: util.StrToPtr("xfs"), - Label: util.StrToPtr("root"), - WipeFilesystem: util.BoolToPtr(true), + Label: util.StrToPtr("bios-3"), + SizeMiB: util.IntToPtr(biosV1SizeMiB), + TypeGUID: util.StrToPtr(biosTypeGuid), + }, + { + Label: util.StrToPtr("esp-3"), + SizeMiB: util.IntToPtr(espV1SizeMiB), + TypeGUID: util.StrToPtr(espTypeGuid), + }, + { + Label: util.StrToPtr("boot-3"), + SizeMiB: util.IntToPtr(bootV1SizeMiB), + }, + { + Label: util.StrToPtr("root-3"), }, }, + WipeTable: util.BoolToPtr(true), }, }, - []translate.Translation{ - {path.New("yaml", "version"), path.New("json", "ignition", "version")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "wipeTable")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "format")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "wipeTable")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "format")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 2, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 3, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 3)}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "wipeTable")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "format")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices"), path.New("json", "storage", "disks")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 2)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "level")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "name")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 2)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "level")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "name")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "device")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "format")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "label")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3)}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "device")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "format")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "label")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "wipeFilesystem")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4)}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems")}, - {path.New("yaml", "boot_device"), path.New("json", "storage")}, - }, - report.Report{}, - }, - // 3-disk mirror + LUKS, x86_64 - { - Config{ - BootDevice: BootDevice{ - Luks: BootDeviceLuks{ - Tang: []base.Tang{{ - URL: "https://example.com/", - Thumbprint: util.StrToPtr("z"), - }}, - Threshold: util.IntToPtr(2), - Tpm2: util.BoolToPtr(true), + Raid: []types.Raid{ + { + Devices: []types.Device{ + "/dev/disk/by-partlabel/boot-1", + "/dev/disk/by-partlabel/boot-2", + "/dev/disk/by-partlabel/boot-3", }, - Mirror: BootDeviceMirror{ - Devices: []string{"/dev/vda", "/dev/vdb", "/dev/vdc"}, + Level: util.StrToPtr("raid1"), + Name: "md-boot", + Options: []types.RaidOption{"--metadata=1.0"}, + }, + { + Devices: []types.Device{ + "/dev/disk/by-partlabel/root-1", + "/dev/disk/by-partlabel/root-2", + "/dev/disk/by-partlabel/root-3", }, + Level: util.StrToPtr("raid1"), + Name: "md-root", }, }, - types.Config{ - Ignition: types.Ignition{ - Version: "3.4.0-experimental", + Filesystems: []types.Filesystem{ + { + Device: "/dev/disk/by-partlabel/esp-1", + Format: util.StrToPtr("vfat"), + Label: util.StrToPtr("esp-1"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/disk/by-partlabel/esp-2", + Format: util.StrToPtr("vfat"), + Label: util.StrToPtr("esp-2"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/disk/by-partlabel/esp-3", + Format: util.StrToPtr("vfat"), + Label: util.StrToPtr("esp-3"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/md/md-boot", + Format: util.StrToPtr("ext4"), + Label: util.StrToPtr("boot"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/md/md-root", + Format: util.StrToPtr("xfs"), + Label: util.StrToPtr("root"), + WipeFilesystem: util.BoolToPtr(true), }, - Storage: types.Storage{ - Disks: []types.Disk{ + }, + }, + } + + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "wipeTable")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "format")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "wipeTable")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "format")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 2, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 3, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 3)}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "wipeTable")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "format")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices"), path.New("json", "storage", "disks")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 2)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "level")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "name")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 2)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "level")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "name")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "device")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "format")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "label")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3)}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "device")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "format")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "label")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "wipeFilesystem")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4)}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems")}, + {path.New("yaml", "boot_device"), path.New("json", "storage")}, + } + test.report = report.Report{} + TranslateTest(t, test) +} + +func Test3DiskMirrorLUKS_x86_64(t *testing.T) { + var test translateTestData + // 3-disk mirror + LUKS, x86_64 + test.in = Config{ + BootDevice: BootDevice{ + Luks: BootDeviceLuks{ + Tang: []base.Tang{{ + URL: "https://example.com/", + Thumbprint: util.StrToPtr("z"), + }}, + Threshold: util.IntToPtr(2), + Tpm2: util.BoolToPtr(true), + }, + Mirror: BootDeviceMirror{ + Devices: []string{"/dev/vda", "/dev/vdb", "/dev/vdc"}, + }, + }, + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Disks: []types.Disk{ + { + Device: "/dev/vda", + Partitions: []types.Partition{ { - Device: "/dev/vda", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("bios-1"), - SizeMiB: util.IntToPtr(biosV1SizeMiB), - TypeGUID: util.StrToPtr(biosTypeGuid), - }, - { - Label: util.StrToPtr("esp-1"), - SizeMiB: util.IntToPtr(espV1SizeMiB), - TypeGUID: util.StrToPtr(espTypeGuid), - }, - { - Label: util.StrToPtr("boot-1"), - SizeMiB: util.IntToPtr(bootV1SizeMiB), - }, - { - Label: util.StrToPtr("root-1"), - }, - }, - WipeTable: util.BoolToPtr(true), + Label: util.StrToPtr("bios-1"), + SizeMiB: util.IntToPtr(biosV1SizeMiB), + TypeGUID: util.StrToPtr(biosTypeGuid), }, { - Device: "/dev/vdb", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("bios-2"), - SizeMiB: util.IntToPtr(biosV1SizeMiB), - TypeGUID: util.StrToPtr(biosTypeGuid), - }, - { - Label: util.StrToPtr("esp-2"), - SizeMiB: util.IntToPtr(espV1SizeMiB), - TypeGUID: util.StrToPtr(espTypeGuid), - }, - { - Label: util.StrToPtr("boot-2"), - SizeMiB: util.IntToPtr(bootV1SizeMiB), - }, - { - Label: util.StrToPtr("root-2"), - }, - }, - WipeTable: util.BoolToPtr(true), + Label: util.StrToPtr("esp-1"), + SizeMiB: util.IntToPtr(espV1SizeMiB), + TypeGUID: util.StrToPtr(espTypeGuid), }, { - Device: "/dev/vdc", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("bios-3"), - SizeMiB: util.IntToPtr(biosV1SizeMiB), - TypeGUID: util.StrToPtr(biosTypeGuid), - }, - { - Label: util.StrToPtr("esp-3"), - SizeMiB: util.IntToPtr(espV1SizeMiB), - TypeGUID: util.StrToPtr(espTypeGuid), - }, - { - Label: util.StrToPtr("boot-3"), - SizeMiB: util.IntToPtr(bootV1SizeMiB), - }, - { - Label: util.StrToPtr("root-3"), - }, - }, - WipeTable: util.BoolToPtr(true), + Label: util.StrToPtr("boot-1"), + SizeMiB: util.IntToPtr(bootV1SizeMiB), + }, + { + Label: util.StrToPtr("root-1"), }, }, - Raid: []types.Raid{ + WipeTable: util.BoolToPtr(true), + }, + { + Device: "/dev/vdb", + Partitions: []types.Partition{ { - Devices: []types.Device{ - "/dev/disk/by-partlabel/boot-1", - "/dev/disk/by-partlabel/boot-2", - "/dev/disk/by-partlabel/boot-3", - }, - Level: util.StrToPtr("raid1"), - Name: "md-boot", - Options: []types.RaidOption{"--metadata=1.0"}, + Label: util.StrToPtr("bios-2"), + SizeMiB: util.IntToPtr(biosV1SizeMiB), + TypeGUID: util.StrToPtr(biosTypeGuid), }, { - Devices: []types.Device{ - "/dev/disk/by-partlabel/root-1", - "/dev/disk/by-partlabel/root-2", - "/dev/disk/by-partlabel/root-3", - }, - Level: util.StrToPtr("raid1"), - Name: "md-root", + Label: util.StrToPtr("esp-2"), + SizeMiB: util.IntToPtr(espV1SizeMiB), + TypeGUID: util.StrToPtr(espTypeGuid), }, - }, - Luks: []types.Luks{ { - Clevis: types.Clevis{ - Tang: []types.Tang{{ - URL: "https://example.com/", - Thumbprint: util.StrToPtr("z"), - }}, - Threshold: util.IntToPtr(2), - Tpm2: util.BoolToPtr(true), - }, - Device: util.StrToPtr("/dev/md/md-root"), - Label: util.StrToPtr("luks-root"), - Name: "root", - WipeVolume: util.BoolToPtr(true), + Label: util.StrToPtr("boot-2"), + SizeMiB: util.IntToPtr(bootV1SizeMiB), + }, + { + Label: util.StrToPtr("root-2"), }, }, - Filesystems: []types.Filesystem{ + WipeTable: util.BoolToPtr(true), + }, + { + Device: "/dev/vdc", + Partitions: []types.Partition{ + { + Label: util.StrToPtr("bios-3"), + SizeMiB: util.IntToPtr(biosV1SizeMiB), + TypeGUID: util.StrToPtr(biosTypeGuid), + }, { - Device: "/dev/disk/by-partlabel/esp-1", - Format: util.StrToPtr("vfat"), - Label: util.StrToPtr("esp-1"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/disk/by-partlabel/esp-2", - Format: util.StrToPtr("vfat"), - Label: util.StrToPtr("esp-2"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/disk/by-partlabel/esp-3", - Format: util.StrToPtr("vfat"), - Label: util.StrToPtr("esp-3"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/md/md-boot", - Format: util.StrToPtr("ext4"), - Label: util.StrToPtr("boot"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/mapper/root", - Format: util.StrToPtr("xfs"), - Label: util.StrToPtr("root"), - WipeFilesystem: util.BoolToPtr(true), + Label: util.StrToPtr("esp-3"), + SizeMiB: util.IntToPtr(espV1SizeMiB), + TypeGUID: util.StrToPtr(espTypeGuid), + }, + { + Label: util.StrToPtr("boot-3"), + SizeMiB: util.IntToPtr(bootV1SizeMiB), + }, + { + Label: util.StrToPtr("root-3"), }, }, + WipeTable: util.BoolToPtr(true), }, }, - []translate.Translation{ - {path.New("yaml", "version"), path.New("json", "ignition", "version")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "wipeTable")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "format")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "wipeTable")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "format")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 2, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 3, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 3)}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "wipeTable")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "format")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices"), path.New("json", "storage", "disks")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 2)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "level")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "name")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 2)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "level")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "name")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid")}, - {path.New("yaml", "boot_device", "luks", "tang", 0, "url"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "url")}, - {path.New("yaml", "boot_device", "luks", "tang", 0, "thumbprint"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "thumbprint")}, - {path.New("yaml", "boot_device", "luks", "tang", 0), path.New("json", "storage", "luks", 0, "clevis", "tang", 0)}, - {path.New("yaml", "boot_device", "luks", "tang"), path.New("json", "storage", "luks", 0, "clevis", "tang")}, - {path.New("yaml", "boot_device", "luks", "threshold"), path.New("json", "storage", "luks", 0, "clevis", "threshold")}, - {path.New("yaml", "boot_device", "luks", "tpm2"), path.New("json", "storage", "luks", 0, "clevis", "tpm2")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "clevis")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "device")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "label")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "name")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "wipeVolume")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0)}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "device")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "format")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "label")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3)}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "device")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "format")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "label")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "wipeFilesystem")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4)}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems")}, - {path.New("yaml", "boot_device"), path.New("json", "storage")}, + Raid: []types.Raid{ + { + Devices: []types.Device{ + "/dev/disk/by-partlabel/boot-1", + "/dev/disk/by-partlabel/boot-2", + "/dev/disk/by-partlabel/boot-3", + }, + Level: util.StrToPtr("raid1"), + Name: "md-boot", + Options: []types.RaidOption{"--metadata=1.0"}, + }, + { + Devices: []types.Device{ + "/dev/disk/by-partlabel/root-1", + "/dev/disk/by-partlabel/root-2", + "/dev/disk/by-partlabel/root-3", + }, + Level: util.StrToPtr("raid1"), + Name: "md-root", + }, }, - report.Report{}, - }, - // 2-disk mirror + LUKS, aarch64 - { - Config{ - BootDevice: BootDevice{ - Layout: util.StrToPtr("aarch64"), - Luks: BootDeviceLuks{ - Tang: []base.Tang{{ + Luks: []types.Luks{ + { + Clevis: types.Clevis{ + Tang: []types.Tang{{ URL: "https://example.com/", Thumbprint: util.StrToPtr("z"), }}, Threshold: util.IntToPtr(2), Tpm2: util.BoolToPtr(true), }, - Mirror: BootDeviceMirror{ - Devices: []string{"/dev/vda", "/dev/vdb"}, - }, + Device: util.StrToPtr("/dev/md/md-root"), + Label: util.StrToPtr("luks-root"), + Name: "root", + WipeVolume: util.BoolToPtr(true), }, }, - types.Config{ - Ignition: types.Ignition{ - Version: "3.4.0-experimental", + Filesystems: []types.Filesystem{ + { + Device: "/dev/disk/by-partlabel/esp-1", + Format: util.StrToPtr("vfat"), + Label: util.StrToPtr("esp-1"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/disk/by-partlabel/esp-2", + Format: util.StrToPtr("vfat"), + Label: util.StrToPtr("esp-2"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/disk/by-partlabel/esp-3", + Format: util.StrToPtr("vfat"), + Label: util.StrToPtr("esp-3"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/md/md-boot", + Format: util.StrToPtr("ext4"), + Label: util.StrToPtr("boot"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/mapper/root", + Format: util.StrToPtr("xfs"), + Label: util.StrToPtr("root"), + WipeFilesystem: util.BoolToPtr(true), }, - Storage: types.Storage{ - Disks: []types.Disk{ + }, + }, + } + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "wipeTable")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "format")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "wipeTable")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "format")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 2, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 3, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions", 3)}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "partitions")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2, "wipeTable")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "disks", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "format")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror", "devices", 2), path.New("json", "storage", "filesystems", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices"), path.New("json", "storage", "disks")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 2)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "level")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "name")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 2)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "level")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "name")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid")}, + {path.New("yaml", "boot_device", "luks", "tang", 0, "url"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "url")}, + {path.New("yaml", "boot_device", "luks", "tang", 0, "thumbprint"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "thumbprint")}, + {path.New("yaml", "boot_device", "luks", "tang", 0), path.New("json", "storage", "luks", 0, "clevis", "tang", 0)}, + {path.New("yaml", "boot_device", "luks", "tang"), path.New("json", "storage", "luks", 0, "clevis", "tang")}, + {path.New("yaml", "boot_device", "luks", "threshold"), path.New("json", "storage", "luks", 0, "clevis", "threshold")}, + {path.New("yaml", "boot_device", "luks", "tpm2"), path.New("json", "storage", "luks", 0, "clevis", "tpm2")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "clevis")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "device")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "label")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "name")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "wipeVolume")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0)}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "device")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "format")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "label")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 3)}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "device")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "format")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "label")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4, "wipeFilesystem")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 4)}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems")}, + {path.New("yaml", "boot_device"), path.New("json", "storage")}, + } + test.report = report.Report{} + TranslateTest(t, test) +} +func Test2DiskMirrorLUKS_aarch64(t *testing.T) { + var test translateTestData + test.in = Config{ + BootDevice: BootDevice{ + Layout: util.StrToPtr("aarch64"), + Luks: BootDeviceLuks{ + Tang: []base.Tang{{ + URL: "https://example.com/", + Thumbprint: util.StrToPtr("z"), + }}, + Threshold: util.IntToPtr(2), + Tpm2: util.BoolToPtr(true), + }, + Mirror: BootDeviceMirror{ + Devices: []string{"/dev/vda", "/dev/vdb"}, + }, + }, + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Disks: []types.Disk{ + { + Device: "/dev/vda", + Partitions: []types.Partition{ { - Device: "/dev/vda", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("reserved-1"), - SizeMiB: util.IntToPtr(reservedV1SizeMiB), - TypeGUID: util.StrToPtr(reservedTypeGuid), - }, - { - Label: util.StrToPtr("esp-1"), - SizeMiB: util.IntToPtr(espV1SizeMiB), - TypeGUID: util.StrToPtr(espTypeGuid), - }, - { - Label: util.StrToPtr("boot-1"), - SizeMiB: util.IntToPtr(bootV1SizeMiB), - }, - { - Label: util.StrToPtr("root-1"), - }, - }, - WipeTable: util.BoolToPtr(true), + Label: util.StrToPtr("reserved-1"), + SizeMiB: util.IntToPtr(reservedV1SizeMiB), + TypeGUID: util.StrToPtr(reservedTypeGuid), }, { - Device: "/dev/vdb", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("reserved-2"), - SizeMiB: util.IntToPtr(reservedV1SizeMiB), - TypeGUID: util.StrToPtr(reservedTypeGuid), - }, - { - Label: util.StrToPtr("esp-2"), - SizeMiB: util.IntToPtr(espV1SizeMiB), - TypeGUID: util.StrToPtr(espTypeGuid), - }, - { - Label: util.StrToPtr("boot-2"), - SizeMiB: util.IntToPtr(bootV1SizeMiB), - }, - { - Label: util.StrToPtr("root-2"), - }, - }, - WipeTable: util.BoolToPtr(true), + Label: util.StrToPtr("esp-1"), + SizeMiB: util.IntToPtr(espV1SizeMiB), + TypeGUID: util.StrToPtr(espTypeGuid), }, - }, - Raid: []types.Raid{ { - Devices: []types.Device{ - "/dev/disk/by-partlabel/boot-1", - "/dev/disk/by-partlabel/boot-2", - }, - Level: util.StrToPtr("raid1"), - Name: "md-boot", - Options: []types.RaidOption{"--metadata=1.0"}, + Label: util.StrToPtr("boot-1"), + SizeMiB: util.IntToPtr(bootV1SizeMiB), }, { - Devices: []types.Device{ - "/dev/disk/by-partlabel/root-1", - "/dev/disk/by-partlabel/root-2", - }, - Level: util.StrToPtr("raid1"), - Name: "md-root", + Label: util.StrToPtr("root-1"), }, }, - Luks: []types.Luks{ + WipeTable: util.BoolToPtr(true), + }, + { + Device: "/dev/vdb", + Partitions: []types.Partition{ { - Clevis: types.Clevis{ - Tang: []types.Tang{{ - URL: "https://example.com/", - Thumbprint: util.StrToPtr("z"), - }}, - Threshold: util.IntToPtr(2), - Tpm2: util.BoolToPtr(true), - }, - Device: util.StrToPtr("/dev/md/md-root"), - Label: util.StrToPtr("luks-root"), - Name: "root", - WipeVolume: util.BoolToPtr(true), + Label: util.StrToPtr("reserved-2"), + SizeMiB: util.IntToPtr(reservedV1SizeMiB), + TypeGUID: util.StrToPtr(reservedTypeGuid), + }, + { + Label: util.StrToPtr("esp-2"), + SizeMiB: util.IntToPtr(espV1SizeMiB), + TypeGUID: util.StrToPtr(espTypeGuid), + }, + { + Label: util.StrToPtr("boot-2"), + SizeMiB: util.IntToPtr(bootV1SizeMiB), }, - }, - Filesystems: []types.Filesystem{ { - Device: "/dev/disk/by-partlabel/esp-1", - Format: util.StrToPtr("vfat"), - Label: util.StrToPtr("esp-1"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/disk/by-partlabel/esp-2", - Format: util.StrToPtr("vfat"), - Label: util.StrToPtr("esp-2"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/md/md-boot", - Format: util.StrToPtr("ext4"), - Label: util.StrToPtr("boot"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/mapper/root", - Format: util.StrToPtr("xfs"), - Label: util.StrToPtr("root"), - WipeFilesystem: util.BoolToPtr(true), + Label: util.StrToPtr("root-2"), }, }, + WipeTable: util.BoolToPtr(true), }, }, - []translate.Translation{ - {path.New("yaml", "version"), path.New("json", "ignition", "version")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "wipeTable")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "format")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "wipeTable")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "format")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices"), path.New("json", "storage", "disks")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "level")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "name")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "level")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "name")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid")}, - {path.New("yaml", "boot_device", "luks", "tang", 0, "url"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "url")}, - {path.New("yaml", "boot_device", "luks", "tang", 0, "thumbprint"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "thumbprint")}, - {path.New("yaml", "boot_device", "luks", "tang", 0), path.New("json", "storage", "luks", 0, "clevis", "tang", 0)}, - {path.New("yaml", "boot_device", "luks", "tang"), path.New("json", "storage", "luks", 0, "clevis", "tang")}, - {path.New("yaml", "boot_device", "luks", "threshold"), path.New("json", "storage", "luks", 0, "clevis", "threshold")}, - {path.New("yaml", "boot_device", "luks", "tpm2"), path.New("json", "storage", "luks", 0, "clevis", "tpm2")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "clevis")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "device")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "label")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "name")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "wipeVolume")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0)}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "device")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "format")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "label")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2)}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3, "device")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3, "format")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3, "label")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3, "wipeFilesystem")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3)}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems")}, - {path.New("yaml", "boot_device"), path.New("json", "storage")}, + Raid: []types.Raid{ + { + Devices: []types.Device{ + "/dev/disk/by-partlabel/boot-1", + "/dev/disk/by-partlabel/boot-2", + }, + Level: util.StrToPtr("raid1"), + Name: "md-boot", + Options: []types.RaidOption{"--metadata=1.0"}, + }, + { + Devices: []types.Device{ + "/dev/disk/by-partlabel/root-1", + "/dev/disk/by-partlabel/root-2", + }, + Level: util.StrToPtr("raid1"), + Name: "md-root", + }, }, - report.Report{}, - }, - // 2-disk mirror + LUKS, ppc64le - { - Config{ - BootDevice: BootDevice{ - Layout: util.StrToPtr("ppc64le"), - Luks: BootDeviceLuks{ - Tang: []base.Tang{{ + Luks: []types.Luks{ + { + Clevis: types.Clevis{ + Tang: []types.Tang{{ URL: "https://example.com/", Thumbprint: util.StrToPtr("z"), }}, Threshold: util.IntToPtr(2), Tpm2: util.BoolToPtr(true), }, - Mirror: BootDeviceMirror{ - Devices: []string{"/dev/vda", "/dev/vdb"}, - }, + Device: util.StrToPtr("/dev/md/md-root"), + Label: util.StrToPtr("luks-root"), + Name: "root", + WipeVolume: util.BoolToPtr(true), }, }, - types.Config{ - Ignition: types.Ignition{ - Version: "3.4.0-experimental", + Filesystems: []types.Filesystem{ + { + Device: "/dev/disk/by-partlabel/esp-1", + Format: util.StrToPtr("vfat"), + Label: util.StrToPtr("esp-1"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/disk/by-partlabel/esp-2", + Format: util.StrToPtr("vfat"), + Label: util.StrToPtr("esp-2"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/md/md-boot", + Format: util.StrToPtr("ext4"), + Label: util.StrToPtr("boot"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/mapper/root", + Format: util.StrToPtr("xfs"), + Label: util.StrToPtr("root"), + WipeFilesystem: util.BoolToPtr(true), }, - Storage: types.Storage{ - Disks: []types.Disk{ + }, + }, + } + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "wipeTable")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "format")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "wipeTable")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "format")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices"), path.New("json", "storage", "disks")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "level")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "name")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "level")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "name")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid")}, + {path.New("yaml", "boot_device", "luks", "tang", 0, "url"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "url")}, + {path.New("yaml", "boot_device", "luks", "tang", 0, "thumbprint"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "thumbprint")}, + {path.New("yaml", "boot_device", "luks", "tang", 0), path.New("json", "storage", "luks", 0, "clevis", "tang", 0)}, + {path.New("yaml", "boot_device", "luks", "tang"), path.New("json", "storage", "luks", 0, "clevis", "tang")}, + {path.New("yaml", "boot_device", "luks", "threshold"), path.New("json", "storage", "luks", 0, "clevis", "threshold")}, + {path.New("yaml", "boot_device", "luks", "tpm2"), path.New("json", "storage", "luks", 0, "clevis", "tpm2")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "clevis")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "device")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "label")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "name")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "wipeVolume")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0)}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "device")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "format")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "label")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2)}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3, "device")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3, "format")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3, "label")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3, "wipeFilesystem")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3)}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems")}, + {path.New("yaml", "boot_device"), path.New("json", "storage")}, + } + test.report = report.Report{} + TranslateTest(t, test) +} +func Test2DiskMirrorLUKS_ppc64le(t *testing.T) { + var test translateTestData + + test.in = Config{ + BootDevice: BootDevice{ + Layout: util.StrToPtr("ppc64le"), + Luks: BootDeviceLuks{ + Tang: []base.Tang{{ + URL: "https://example.com/", + Thumbprint: util.StrToPtr("z"), + }}, + Threshold: util.IntToPtr(2), + Tpm2: util.BoolToPtr(true), + }, + Mirror: BootDeviceMirror{ + Devices: []string{"/dev/vda", "/dev/vdb"}, + }, + }, + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Disks: []types.Disk{ + { + Device: "/dev/vda", + Partitions: []types.Partition{ { - Device: "/dev/vda", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("prep-1"), - SizeMiB: util.IntToPtr(prepV1SizeMiB), - TypeGUID: util.StrToPtr(prepTypeGuid), - }, - { - Label: util.StrToPtr("reserved-1"), - SizeMiB: util.IntToPtr(reservedV1SizeMiB), - TypeGUID: util.StrToPtr(reservedTypeGuid), - }, - { - Label: util.StrToPtr("boot-1"), - SizeMiB: util.IntToPtr(bootV1SizeMiB), - }, - { - Label: util.StrToPtr("root-1"), - }, - }, - WipeTable: util.BoolToPtr(true), + Label: util.StrToPtr("prep-1"), + SizeMiB: util.IntToPtr(prepV1SizeMiB), + TypeGUID: util.StrToPtr(prepTypeGuid), }, { - Device: "/dev/vdb", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("prep-2"), - SizeMiB: util.IntToPtr(prepV1SizeMiB), - TypeGUID: util.StrToPtr(prepTypeGuid), - }, - { - Label: util.StrToPtr("reserved-2"), - SizeMiB: util.IntToPtr(reservedV1SizeMiB), - TypeGUID: util.StrToPtr(reservedTypeGuid), - }, - { - Label: util.StrToPtr("boot-2"), - SizeMiB: util.IntToPtr(bootV1SizeMiB), - }, - { - Label: util.StrToPtr("root-2"), - }, - }, - WipeTable: util.BoolToPtr(true), + Label: util.StrToPtr("reserved-1"), + SizeMiB: util.IntToPtr(reservedV1SizeMiB), + TypeGUID: util.StrToPtr(reservedTypeGuid), }, - }, - Raid: []types.Raid{ { - Devices: []types.Device{ - "/dev/disk/by-partlabel/boot-1", - "/dev/disk/by-partlabel/boot-2", - }, - Level: util.StrToPtr("raid1"), - Name: "md-boot", - Options: []types.RaidOption{"--metadata=1.0"}, + Label: util.StrToPtr("boot-1"), + SizeMiB: util.IntToPtr(bootV1SizeMiB), }, { - Devices: []types.Device{ - "/dev/disk/by-partlabel/root-1", - "/dev/disk/by-partlabel/root-2", - }, - Level: util.StrToPtr("raid1"), - Name: "md-root", + Label: util.StrToPtr("root-1"), }, }, - Luks: []types.Luks{ + WipeTable: util.BoolToPtr(true), + }, + { + Device: "/dev/vdb", + Partitions: []types.Partition{ { - Clevis: types.Clevis{ - Tang: []types.Tang{{ - URL: "https://example.com/", - Thumbprint: util.StrToPtr("z"), - }}, - Threshold: util.IntToPtr(2), - Tpm2: util.BoolToPtr(true), - }, - Device: util.StrToPtr("/dev/md/md-root"), - Label: util.StrToPtr("luks-root"), - Name: "root", - WipeVolume: util.BoolToPtr(true), + Label: util.StrToPtr("prep-2"), + SizeMiB: util.IntToPtr(prepV1SizeMiB), + TypeGUID: util.StrToPtr(prepTypeGuid), + }, + { + Label: util.StrToPtr("reserved-2"), + SizeMiB: util.IntToPtr(reservedV1SizeMiB), + TypeGUID: util.StrToPtr(reservedTypeGuid), }, - }, - Filesystems: []types.Filesystem{ { - Device: "/dev/md/md-boot", - Format: util.StrToPtr("ext4"), - Label: util.StrToPtr("boot"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/mapper/root", - Format: util.StrToPtr("xfs"), - Label: util.StrToPtr("root"), - WipeFilesystem: util.BoolToPtr(true), + Label: util.StrToPtr("boot-2"), + SizeMiB: util.IntToPtr(bootV1SizeMiB), }, + { + Label: util.StrToPtr("root-2"), + }, + }, + WipeTable: util.BoolToPtr(true), + }, + }, + Raid: []types.Raid{ + { + Devices: []types.Device{ + "/dev/disk/by-partlabel/boot-1", + "/dev/disk/by-partlabel/boot-2", + }, + Level: util.StrToPtr("raid1"), + Name: "md-boot", + Options: []types.RaidOption{"--metadata=1.0"}, + }, + { + Devices: []types.Device{ + "/dev/disk/by-partlabel/root-1", + "/dev/disk/by-partlabel/root-2", + }, + Level: util.StrToPtr("raid1"), + Name: "md-root", + }, + }, + Luks: []types.Luks{ + { + Clevis: types.Clevis{ + Tang: []types.Tang{{ + URL: "https://example.com/", + Thumbprint: util.StrToPtr("z"), + }}, + Threshold: util.IntToPtr(2), + Tpm2: util.BoolToPtr(true), }, + Device: util.StrToPtr("/dev/md/md-root"), + Label: util.StrToPtr("luks-root"), + Name: "root", + WipeVolume: util.BoolToPtr(true), }, }, - []translate.Translation{ - {path.New("yaml", "version"), path.New("json", "ignition", "version")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "wipeTable")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "wipeTable")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices"), path.New("json", "storage", "disks")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "level")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "name")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "level")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "name")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid")}, - {path.New("yaml", "boot_device", "luks", "tang", 0, "url"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "url")}, - {path.New("yaml", "boot_device", "luks", "tang", 0, "thumbprint"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "thumbprint")}, - {path.New("yaml", "boot_device", "luks", "tang", 0), path.New("json", "storage", "luks", 0, "clevis", "tang", 0)}, - {path.New("yaml", "boot_device", "luks", "tang"), path.New("json", "storage", "luks", 0, "clevis", "tang")}, - {path.New("yaml", "boot_device", "luks", "threshold"), path.New("json", "storage", "luks", 0, "clevis", "threshold")}, - {path.New("yaml", "boot_device", "luks", "tpm2"), path.New("json", "storage", "luks", 0, "clevis", "tpm2")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "clevis")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "device")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "label")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "name")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "wipeVolume")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0)}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 0, "device")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 0, "format")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 0, "label")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 0)}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 1, "device")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 1, "format")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 1, "label")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 1, "wipeFilesystem")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 1)}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems")}, - {path.New("yaml", "boot_device"), path.New("json", "storage")}, + Filesystems: []types.Filesystem{ + { + Device: "/dev/md/md-boot", + Format: util.StrToPtr("ext4"), + Label: util.StrToPtr("boot"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/mapper/root", + Format: util.StrToPtr("xfs"), + Label: util.StrToPtr("root"), + WipeFilesystem: util.BoolToPtr(true), + }, }, - report.Report{}, }, - // 2-disk mirror + LUKS with overridden root partition size - // and filesystem type, x86_64 - { - Config{ - Config: base.Config{ - Storage: base.Storage{ - Disks: []base.Disk{ - { - Device: "/dev/vda", - Partitions: []base.Partition{ - { - Label: util.StrToPtr("root-1"), - SizeMiB: util.IntToPtr(8192), - }, - }, - }, + } + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 3)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "wipeTable")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 3)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "wipeTable")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices"), path.New("json", "storage", "disks")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "level")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "name")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "level")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "name")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid")}, + {path.New("yaml", "boot_device", "luks", "tang", 0, "url"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "url")}, + {path.New("yaml", "boot_device", "luks", "tang", 0, "thumbprint"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "thumbprint")}, + {path.New("yaml", "boot_device", "luks", "tang", 0), path.New("json", "storage", "luks", 0, "clevis", "tang", 0)}, + {path.New("yaml", "boot_device", "luks", "tang"), path.New("json", "storage", "luks", 0, "clevis", "tang")}, + {path.New("yaml", "boot_device", "luks", "threshold"), path.New("json", "storage", "luks", 0, "clevis", "threshold")}, + {path.New("yaml", "boot_device", "luks", "tpm2"), path.New("json", "storage", "luks", 0, "clevis", "tpm2")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "clevis")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "device")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "label")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "name")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "wipeVolume")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0)}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 0, "device")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 0, "format")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 0, "label")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 0)}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 1, "device")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 1, "format")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 1, "label")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 1, "wipeFilesystem")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 1)}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems")}, + {path.New("yaml", "boot_device"), path.New("json", "storage")}, + } + test.report = report.Report{} + TranslateTest(t, test) +} +func Test2DiskMirrorLUKSOverideFS_x86(t *testing.T) { + var test translateTestData + // 2-disk mirror + LUKS with overridden root partition size + // and filesystem type, x86_64 + test.in = Config{ + Config: base.Config{ + Storage: base.Storage{ + Disks: []base.Disk{ + { + Device: "/dev/vda", + Partitions: []base.Partition{ { - Device: "/dev/vdb", - Partitions: []base.Partition{ - { - Label: util.StrToPtr("root-2"), - SizeMiB: util.IntToPtr(8192), - }, - }, + Label: util.StrToPtr("root-1"), + SizeMiB: util.IntToPtr(8192), }, }, - Filesystems: []base.Filesystem{ + }, + { + Device: "/dev/vdb", + Partitions: []base.Partition{ { - Device: "/dev/mapper/root", - Format: util.StrToPtr("ext4"), + Label: util.StrToPtr("root-2"), + SizeMiB: util.IntToPtr(8192), }, }, }, }, - BootDevice: BootDevice{ - Luks: BootDeviceLuks{ - Tang: []base.Tang{{ - URL: "https://example.com/", - Thumbprint: util.StrToPtr("z"), - }}, - Threshold: util.IntToPtr(2), - Tpm2: util.BoolToPtr(true), - }, - Mirror: BootDeviceMirror{ - Devices: []string{"/dev/vda", "/dev/vdb"}, + Filesystems: []base.Filesystem{ + { + Device: "/dev/mapper/root", + Format: util.StrToPtr("ext4"), }, }, }, - types.Config{ - Ignition: types.Ignition{ - Version: "3.4.0-experimental", - }, - Storage: types.Storage{ - Disks: []types.Disk{ + }, + BootDevice: BootDevice{ + Luks: BootDeviceLuks{ + Tang: []base.Tang{{ + URL: "https://example.com/", + Thumbprint: util.StrToPtr("z"), + }}, + Threshold: util.IntToPtr(2), + Tpm2: util.BoolToPtr(true), + }, + Mirror: BootDeviceMirror{ + Devices: []string{"/dev/vda", "/dev/vdb"}, + }, + }, + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Disks: []types.Disk{ + { + Device: "/dev/vda", + Partitions: []types.Partition{ { - Device: "/dev/vda", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("bios-1"), - SizeMiB: util.IntToPtr(biosV1SizeMiB), - TypeGUID: util.StrToPtr(biosTypeGuid), - }, - { - Label: util.StrToPtr("esp-1"), - SizeMiB: util.IntToPtr(espV1SizeMiB), - TypeGUID: util.StrToPtr(espTypeGuid), - }, - { - Label: util.StrToPtr("boot-1"), - SizeMiB: util.IntToPtr(bootV1SizeMiB), - }, - { - Label: util.StrToPtr("root-1"), - SizeMiB: util.IntToPtr(8192), - }, - }, - WipeTable: util.BoolToPtr(true), + Label: util.StrToPtr("bios-1"), + SizeMiB: util.IntToPtr(biosV1SizeMiB), + TypeGUID: util.StrToPtr(biosTypeGuid), }, { - Device: "/dev/vdb", - Partitions: []types.Partition{ - { - Label: util.StrToPtr("bios-2"), - SizeMiB: util.IntToPtr(biosV1SizeMiB), - TypeGUID: util.StrToPtr(biosTypeGuid), - }, - { - Label: util.StrToPtr("esp-2"), - SizeMiB: util.IntToPtr(espV1SizeMiB), - TypeGUID: util.StrToPtr(espTypeGuid), - }, - { - Label: util.StrToPtr("boot-2"), - SizeMiB: util.IntToPtr(bootV1SizeMiB), - }, - { - Label: util.StrToPtr("root-2"), - SizeMiB: util.IntToPtr(8192), - }, - }, - WipeTable: util.BoolToPtr(true), + Label: util.StrToPtr("esp-1"), + SizeMiB: util.IntToPtr(espV1SizeMiB), + TypeGUID: util.StrToPtr(espTypeGuid), }, - }, - Raid: []types.Raid{ { - Devices: []types.Device{ - "/dev/disk/by-partlabel/boot-1", - "/dev/disk/by-partlabel/boot-2", - }, - Level: util.StrToPtr("raid1"), - Name: "md-boot", - Options: []types.RaidOption{"--metadata=1.0"}, + Label: util.StrToPtr("boot-1"), + SizeMiB: util.IntToPtr(bootV1SizeMiB), }, { - Devices: []types.Device{ - "/dev/disk/by-partlabel/root-1", - "/dev/disk/by-partlabel/root-2", - }, - Level: util.StrToPtr("raid1"), - Name: "md-root", + Label: util.StrToPtr("root-1"), + SizeMiB: util.IntToPtr(8192), }, }, - Luks: []types.Luks{ + WipeTable: util.BoolToPtr(true), + }, + { + Device: "/dev/vdb", + Partitions: []types.Partition{ { - Clevis: types.Clevis{ - Tang: []types.Tang{{ - URL: "https://example.com/", - Thumbprint: util.StrToPtr("z"), - }}, - Threshold: util.IntToPtr(2), - Tpm2: util.BoolToPtr(true), - }, - Device: util.StrToPtr("/dev/md/md-root"), - Label: util.StrToPtr("luks-root"), - Name: "root", - WipeVolume: util.BoolToPtr(true), + Label: util.StrToPtr("bios-2"), + SizeMiB: util.IntToPtr(biosV1SizeMiB), + TypeGUID: util.StrToPtr(biosTypeGuid), + }, + { + Label: util.StrToPtr("esp-2"), + SizeMiB: util.IntToPtr(espV1SizeMiB), + TypeGUID: util.StrToPtr(espTypeGuid), }, - }, - Filesystems: []types.Filesystem{ { - Device: "/dev/disk/by-partlabel/esp-1", - Format: util.StrToPtr("vfat"), - Label: util.StrToPtr("esp-1"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/disk/by-partlabel/esp-2", - Format: util.StrToPtr("vfat"), - Label: util.StrToPtr("esp-2"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/md/md-boot", - Format: util.StrToPtr("ext4"), - Label: util.StrToPtr("boot"), - WipeFilesystem: util.BoolToPtr(true), - }, { - Device: "/dev/mapper/root", - Format: util.StrToPtr("ext4"), - Label: util.StrToPtr("root"), - WipeFilesystem: util.BoolToPtr(true), + Label: util.StrToPtr("boot-2"), + SizeMiB: util.IntToPtr(bootV1SizeMiB), }, + { + Label: util.StrToPtr("root-2"), + SizeMiB: util.IntToPtr(8192), + }, + }, + WipeTable: util.BoolToPtr(true), + }, + }, + Raid: []types.Raid{ + { + Devices: []types.Device{ + "/dev/disk/by-partlabel/boot-1", + "/dev/disk/by-partlabel/boot-2", + }, + Level: util.StrToPtr("raid1"), + Name: "md-boot", + Options: []types.RaidOption{"--metadata=1.0"}, + }, + { + Devices: []types.Device{ + "/dev/disk/by-partlabel/root-1", + "/dev/disk/by-partlabel/root-2", + }, + Level: util.StrToPtr("raid1"), + Name: "md-root", + }, + }, + Luks: []types.Luks{ + { + Clevis: types.Clevis{ + Tang: []types.Tang{{ + URL: "https://example.com/", + Thumbprint: util.StrToPtr("z"), + }}, + Threshold: util.IntToPtr(2), + Tpm2: util.BoolToPtr(true), }, + Device: util.StrToPtr("/dev/md/md-root"), + Label: util.StrToPtr("luks-root"), + Name: "root", + WipeVolume: util.BoolToPtr(true), }, }, - []translate.Translation{ - {path.New("yaml", "version"), path.New("json", "ignition", "version")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2)}, - {path.New("yaml", "storage", "disks", 0, "partitions", 0, "label"), path.New("json", "storage", "disks", 0, "partitions", 3, "label")}, - {path.New("yaml", "storage", "disks", 0, "partitions", 0, "size_mib"), path.New("json", "storage", "disks", 0, "partitions", 3, "sizeMiB")}, - {path.New("yaml", "storage", "disks", 0, "partitions", 0), path.New("json", "storage", "disks", 0, "partitions", 3)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "wipeTable")}, - {path.New("yaml", "storage", "disks", 0), path.New("json", "storage", "disks", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "format")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "typeGuid")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "sizeMiB")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2)}, - {path.New("yaml", "storage", "disks", 1, "partitions", 0, "label"), path.New("json", "storage", "disks", 1, "partitions", 3, "label")}, - {path.New("yaml", "storage", "disks", 1, "partitions", 0, "size_mib"), path.New("json", "storage", "disks", 1, "partitions", 3, "sizeMiB")}, - {path.New("yaml", "storage", "disks", 1, "partitions", 0), path.New("json", "storage", "disks", 1, "partitions", 3)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "wipeTable")}, - {path.New("yaml", "storage", "disks", 1), path.New("json", "storage", "disks", 1)}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "device")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "format")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "label")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "level")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "name")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 0)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "level")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "name")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1)}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid")}, - {path.New("yaml", "boot_device", "luks", "tang", 0, "url"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "url")}, - {path.New("yaml", "boot_device", "luks", "tang", 0, "thumbprint"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "thumbprint")}, - {path.New("yaml", "boot_device", "luks", "tang", 0), path.New("json", "storage", "luks", 0, "clevis", "tang", 0)}, - {path.New("yaml", "boot_device", "luks", "tang"), path.New("json", "storage", "luks", 0, "clevis", "tang")}, - {path.New("yaml", "boot_device", "luks", "threshold"), path.New("json", "storage", "luks", 0, "clevis", "threshold")}, - {path.New("yaml", "boot_device", "luks", "tpm2"), path.New("json", "storage", "luks", 0, "clevis", "tpm2")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "clevis")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "device")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "label")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "name")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "wipeVolume")}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0)}, - {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "device")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "format")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "label")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "wipeFilesystem")}, - {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2)}, - {path.New("yaml", "storage", "filesystems", 0, "device"), path.New("json", "storage", "filesystems", 3, "device")}, - {path.New("yaml", "storage", "filesystems", 0, "format"), path.New("json", "storage", "filesystems", 3, "format")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3, "label")}, - {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3, "wipeFilesystem")}, - {path.New("yaml", "storage", "filesystems", 0), path.New("json", "storage", "filesystems", 3)}, - {path.New("yaml", "storage", "filesystems"), path.New("json", "storage", "filesystems")}, - {path.New("yaml", "storage"), path.New("json", "storage")}, + Filesystems: []types.Filesystem{ + { + Device: "/dev/disk/by-partlabel/esp-1", + Format: util.StrToPtr("vfat"), + Label: util.StrToPtr("esp-1"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/disk/by-partlabel/esp-2", + Format: util.StrToPtr("vfat"), + Label: util.StrToPtr("esp-2"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/md/md-boot", + Format: util.StrToPtr("ext4"), + Label: util.StrToPtr("boot"), + WipeFilesystem: util.BoolToPtr(true), + }, { + Device: "/dev/mapper/root", + Format: util.StrToPtr("ext4"), + Label: util.StrToPtr("root"), + WipeFilesystem: util.BoolToPtr(true), + }, }, - report.Report{}, }, } - - // The partition sizes of existing layouts must never change, but - // we use the constants in tests for clarity. Ensure no one has - // changed them. - assert.Equal(t, reservedV1SizeMiB, 1) - assert.Equal(t, biosV1SizeMiB, 1) - assert.Equal(t, prepV1SizeMiB, 4) - assert.Equal(t, espV1SizeMiB, 127) - assert.Equal(t, bootV1SizeMiB, 384) - - for i, test := range tests { - t.Run(fmt.Sprintf("translate %d", i), func(t *testing.T) { - actual, translations, r := test.in.ToIgn3_4Unvalidated(common.TranslateOptions{}) - assert.Equal(t, test.out, actual, "translation mismatch") - assert.Equal(t, test.report, r, "report mismatch") - baseutil.VerifyTranslations(t, translations, test.exceptions) - assert.NoError(t, translations.DebugVerifyCoverage(actual), "incomplete TranslationSet coverage") - }) + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "partitions", 2)}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "label"), path.New("json", "storage", "disks", 0, "partitions", 3, "label")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0, "size_mib"), path.New("json", "storage", "disks", 0, "partitions", 3, "sizeMiB")}, + {path.New("yaml", "storage", "disks", 0, "partitions", 0), path.New("json", "storage", "disks", 0, "partitions", 3)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "disks", 0, "wipeTable")}, + {path.New("yaml", "storage", "disks", 0), path.New("json", "storage", "disks", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "format")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror", "devices", 0), path.New("json", "storage", "filesystems", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 0)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1, "typeGuid")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2, "sizeMiB")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "partitions", 2)}, + {path.New("yaml", "storage", "disks", 1, "partitions", 0, "label"), path.New("json", "storage", "disks", 1, "partitions", 3, "label")}, + {path.New("yaml", "storage", "disks", 1, "partitions", 0, "size_mib"), path.New("json", "storage", "disks", 1, "partitions", 3, "sizeMiB")}, + {path.New("yaml", "storage", "disks", 1, "partitions", 0), path.New("json", "storage", "disks", 1, "partitions", 3)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "disks", 1, "wipeTable")}, + {path.New("yaml", "storage", "disks", 1), path.New("json", "storage", "disks", 1)}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "device")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "format")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "label")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror", "devices", 1), path.New("json", "storage", "filesystems", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "devices")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "level")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "name")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0, "options")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 0)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "devices")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "level")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1, "name")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid", 1)}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "raid")}, + {path.New("yaml", "boot_device", "luks", "tang", 0, "url"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "url")}, + {path.New("yaml", "boot_device", "luks", "tang", 0, "thumbprint"), path.New("json", "storage", "luks", 0, "clevis", "tang", 0, "thumbprint")}, + {path.New("yaml", "boot_device", "luks", "tang", 0), path.New("json", "storage", "luks", 0, "clevis", "tang", 0)}, + {path.New("yaml", "boot_device", "luks", "tang"), path.New("json", "storage", "luks", 0, "clevis", "tang")}, + {path.New("yaml", "boot_device", "luks", "threshold"), path.New("json", "storage", "luks", 0, "clevis", "threshold")}, + {path.New("yaml", "boot_device", "luks", "tpm2"), path.New("json", "storage", "luks", 0, "clevis", "tpm2")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "clevis")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "device")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "label")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "name")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0, "wipeVolume")}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks", 0)}, + {path.New("yaml", "boot_device", "luks"), path.New("json", "storage", "luks")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "device")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "format")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "label")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2, "wipeFilesystem")}, + {path.New("yaml", "boot_device", "mirror"), path.New("json", "storage", "filesystems", 2)}, + {path.New("yaml", "storage", "filesystems", 0, "device"), path.New("json", "storage", "filesystems", 3, "device")}, + {path.New("yaml", "storage", "filesystems", 0, "format"), path.New("json", "storage", "filesystems", 3, "format")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3, "label")}, + {path.New("yaml", "boot_device"), path.New("json", "storage", "filesystems", 3, "wipeFilesystem")}, + {path.New("yaml", "storage", "filesystems", 0), path.New("json", "storage", "filesystems", 3)}, + {path.New("yaml", "storage", "filesystems"), path.New("json", "storage", "filesystems")}, + {path.New("yaml", "storage"), path.New("json", "storage")}, } + test.report = report.Report{} + TranslateTest(t, test) } // TestTranslateExtensions tests translating the Butane config extensions section. func TestTranslateExtensions(t *testing.T) { - tests := []struct { - in Config - out types.Config - exceptions []translate.Translation - report report.Report - }{ - // config with two extensions/packages - { - Config{ - Extensions: []Extension{ - { - Name: "strace", + var test translateTestData + // config with two extensions/packages + test.in = Config{ + Extensions: []Extension{ + { + Name: "strace", + }, + { + Name: "zsh", + }, + }, + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Files: []types.File{ + { + Node: types.Node{ + Path: "/etc/rpm-ostree/origin.d/extensions-e2ecf66.yaml", }, - { - Name: "zsh", + FileEmbedded1: types.FileEmbedded1{ + Contents: types.Resource{ + Source: util.StrToPtr("data:;base64,IyBHZW5lcmF0ZWQgYnkgQnV0YW5lCgpwYWNrYWdlczoKICAgIC0gc3RyYWNlCiAgICAtIHpzaAo="), + Compression: util.StrToPtr(""), + }, + Mode: util.IntToPtr(420), }, }, }, - types.Config{ - Ignition: types.Ignition{ - Version: "3.4.0-experimental", + }, + } + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + {path.New("yaml", "extensions"), path.New("json", "storage")}, + {path.New("yaml", "extensions"), path.New("json", "storage", "files")}, + {path.New("yaml", "extensions"), path.New("json", "storage", "files", 0)}, + {path.New("yaml", "extensions"), path.New("json", "storage", "files", 0, "path")}, + {path.New("yaml", "extensions"), path.New("json", "storage", "files", 0, "mode")}, + {path.New("yaml", "extensions"), path.New("json", "storage", "files", 0, "contents")}, + {path.New("yaml", "extensions"), path.New("json", "storage", "files", 0, "contents", "source")}, + {path.New("yaml", "extensions"), path.New("json", "storage", "files", 0, "contents", "compression")}, + } + test.report = report.Report{} + TranslateTest(t, test) +} + +// TestTranslateGrub tests translating the Butane config Grub section. +func TestGrub1User(t *testing.T) { + var test translateTestData + test.in = Config{ + Grub: Grub{ + Users: []GrubUser{ + { + Name: "root", + PasswordHash: util.StrToPtr("grub.pbkdf2.sha512.10000.874A958E526409..."), + }, + }, + }, + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Filesystems: []types.Filesystem{ + { + Device: "/dev/disk/by-label/boot", + Format: util.StrToPtr("ext4"), + Path: util.StrToPtr("/boot"), }, - Storage: types.Storage{ - Files: []types.File{ - { - Node: types.Node{ - Path: "/etc/rpm-ostree/origin.d/extensions-e2ecf66.yaml", - }, - FileEmbedded1: types.FileEmbedded1{ - Contents: types.Resource{ - Source: util.StrToPtr("data:;base64,IyBHZW5lcmF0ZWQgYnkgQnV0YW5lCgpwYWNrYWdlczoKICAgIC0gc3RyYWNlCiAgICAtIHpzaAo="), - Compression: util.StrToPtr(""), - }, - Mode: util.IntToPtr(420), + }, + Files: []types.File{ + { + Node: types.Node{ + Path: "/boot/grub2/user.cfg", + }, + FileEmbedded1: types.FileEmbedded1{ + Append: []types.Resource{ + { + Source: util.StrToPtr("data:,%23%20Generated%20by%20Butane%0A%0Aset%20superusers%3D%22root%22%0Apassword_pbkdf2%20root%20grub.pbkdf2.sha512.10000.874A958E526409...%0A"), + Compression: util.StrToPtr(""), }, }, }, }, }, - []translate.Translation{ - {path.New("yaml", "version"), path.New("json", "ignition", "version")}, - {path.New("yaml", "extensions"), path.New("json", "storage")}, - {path.New("yaml", "extensions"), path.New("json", "storage", "files")}, - {path.New("yaml", "extensions"), path.New("json", "storage", "files", 0)}, - {path.New("yaml", "extensions"), path.New("json", "storage", "files", 0, "path")}, - {path.New("yaml", "extensions"), path.New("json", "storage", "files", 0, "mode")}, - {path.New("yaml", "extensions"), path.New("json", "storage", "files", 0, "contents")}, - {path.New("yaml", "extensions"), path.New("json", "storage", "files", 0, "contents", "source")}, - {path.New("yaml", "extensions"), path.New("json", "storage", "files", 0, "contents", "compression")}, - }, - report.Report{}, }, } - - for i, test := range tests { - t.Run(fmt.Sprintf("translate %d", i), func(t *testing.T) { - actual, translations, r := test.in.ToIgn3_4Unvalidated(common.TranslateOptions{}) - assert.Equal(t, test.out, actual, "translation mismatch") - assert.Equal(t, test.report, r, "report mismatch") - baseutil.VerifyTranslations(t, translations, test.exceptions) - assert.NoError(t, translations.DebugVerifyCoverage(actual), "incomplete TranslationSet coverage") - }) - } -} - -// TestTranslateGrub tests translating the Butane config Grub section. -func TestTranslateGrub(t *testing.T) { - // Some tests below have the same translations - translations := []translate.Translation{ + test.exceptions = []translate.Translation{ {path.New("yaml", "version"), path.New("json", "ignition", "version")}, {path.New("yaml", "grub", "users"), path.New("json", "storage")}, {path.New("yaml", "grub", "users"), path.New("json", "storage", "filesystems")}, @@ -1507,113 +1838,73 @@ func TestTranslateGrub(t *testing.T) { {path.New("yaml", "grub", "users"), path.New("json", "storage", "files", 0, "append", 0, "source")}, {path.New("yaml", "grub", "users"), path.New("json", "storage", "files", 0, "append", 0, "compression")}, } - tests := []struct { - in Config - out types.Config - exceptions []translate.Translation - report report.Report - }{ - // config with 1 user - { - Config{ - Grub: Grub{ - Users: []GrubUser{ - { - Name: "root", - PasswordHash: util.StrToPtr("grub.pbkdf2.sha512.10000.874A958E526409..."), - }, - }, - }, - }, - types.Config{ - Ignition: types.Ignition{ - Version: "3.4.0-experimental", + test.report = report.Report{} + + TranslateTest(t, test) +} + +func TestGrub2UsersWithDiffrentHashes(t *testing.T) { + var test translateTestData + test.in = Config{ + Grub: Grub{ + Users: []GrubUser{ + { + Name: "root1", + PasswordHash: util.StrToPtr("grub.pbkdf2.sha512.10000.874A958E526409..."), }, - Storage: types.Storage{ - Filesystems: []types.Filesystem{ - { - Device: "/dev/disk/by-label/boot", - Format: util.StrToPtr("ext4"), - Path: util.StrToPtr("/boot"), - }, - }, - Files: []types.File{ - { - Node: types.Node{ - Path: "/boot/grub2/user.cfg", - }, - FileEmbedded1: types.FileEmbedded1{ - Append: []types.Resource{ - { - Source: util.StrToPtr("data:,%23%20Generated%20by%20Butane%0A%0Aset%20superusers%3D%22root%22%0Apassword_pbkdf2%20root%20grub.pbkdf2.sha512.10000.874A958E526409...%0A"), - Compression: util.StrToPtr(""), - }, - }, - }, - }, - }, + { + Name: "root2", + PasswordHash: util.StrToPtr("grub.pbkdf2.sha512.10000.874B829D126209..."), }, }, - translations, - report.Report{}, }, - // config with 2 users (and 2 different hashes) - { - Config{ - Grub: Grub{ - Users: []GrubUser{ - { - Name: "root1", - PasswordHash: util.StrToPtr("grub.pbkdf2.sha512.10000.874A958E526409..."), - }, - { - Name: "root2", - PasswordHash: util.StrToPtr("grub.pbkdf2.sha512.10000.874B829D126209..."), - }, - }, + } + test.out = types.Config{ + Ignition: types.Ignition{ + Version: "3.4.0-experimental", + }, + Storage: types.Storage{ + Filesystems: []types.Filesystem{ + { + Device: "/dev/disk/by-label/boot", + Format: util.StrToPtr("ext4"), + Path: util.StrToPtr("/boot"), }, }, - types.Config{ - Ignition: types.Ignition{ - Version: "3.4.0-experimental", - }, - Storage: types.Storage{ - Filesystems: []types.Filesystem{ - { - Device: "/dev/disk/by-label/boot", - Format: util.StrToPtr("ext4"), - Path: util.StrToPtr("/boot"), - }, + Files: []types.File{ + { + Node: types.Node{ + Path: "/boot/grub2/user.cfg", }, - Files: []types.File{ - { - Node: types.Node{ - Path: "/boot/grub2/user.cfg", - }, - FileEmbedded1: types.FileEmbedded1{ - Append: []types.Resource{ - { - Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/3zMsQrCMBDG8b1PcdT9SI62JoODRfExJCGngtCEuwTx7UWyiss3fH/47eDCG0uonCC+YW01bDwMyhW0FZamLHoYJedq4bs0DiWovrKka4nPdCPo8S4tYn9QH2G2hNYYY9Dtp6Of3XmmZTIeEX8C9BdYHfmTpYU68AkAAP//Mp8bt7YAAAA="), - Compression: util.StrToPtr("gzip"), - }, - }, + FileEmbedded1: types.FileEmbedded1{ + Append: []types.Resource{ + { + Source: util.StrToPtr("data:;base64,H4sIAAAAAAAC/3zMsQrCMBDG8b1PcdT9SI62JoODRfExJCGngtCEuwTx7UWyiss3fH/47eDCG0uonCC+YW01bDwMyhW0FZamLHoYJedq4bs0DiWovrKka4nPdCPo8S4tYn9QH2G2hNYYY9Dtp6Of3XmmZTIeEX8C9BdYHfmTpYU68AkAAP//Mp8bt7YAAAA="), + Compression: util.StrToPtr("gzip"), }, }, }, }, }, - translations, - report.Report{}, }, } - - for i, test := range tests { - t.Run(fmt.Sprintf("translate %d", i), func(t *testing.T) { - actual, translations, r := test.in.ToIgn3_4Unvalidated(common.TranslateOptions{}) - assert.Equal(t, test.out, actual, "translation mismatch") - assert.Equal(t, test.report, r, "report mismatch") - baseutil.VerifyTranslations(t, translations, test.exceptions) - assert.NoError(t, translations.DebugVerifyCoverage(actual), "incomplete TranslationSet coverage") - }) + test.exceptions = []translate.Translation{ + {path.New("yaml", "version"), path.New("json", "ignition", "version")}, + {path.New("yaml", "grub", "users"), path.New("json", "storage")}, + {path.New("yaml", "grub", "users"), path.New("json", "storage", "filesystems")}, + {path.New("yaml", "grub", "users"), path.New("json", "storage", "filesystems", 0)}, + {path.New("yaml", "grub", "users"), path.New("json", "storage", "filesystems", 0, "path")}, + {path.New("yaml", "grub", "users"), path.New("json", "storage", "filesystems", 0, "device")}, + {path.New("yaml", "grub", "users"), path.New("json", "storage", "filesystems", 0, "format")}, + {path.New("yaml", "grub", "users"), path.New("json", "storage", "files")}, + {path.New("yaml", "grub", "users"), path.New("json", "storage", "files", 0)}, + {path.New("yaml", "grub", "users"), path.New("json", "storage", "files", 0, "path")}, + {path.New("yaml", "grub", "users"), path.New("json", "storage", "files", 0, "append")}, + {path.New("yaml", "grub", "users"), path.New("json", "storage", "files", 0, "append", 0)}, + {path.New("yaml", "grub", "users"), path.New("json", "storage", "files", 0, "append", 0, "source")}, + {path.New("yaml", "grub", "users"), path.New("json", "storage", "files", 0, "append", 0, "compression")}, } + test.report = report.Report{} + + TranslateTest(t, test) } diff --git a/docs/release-notes.md b/docs/release-notes.md index 3251467e..cbe2c433 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -17,7 +17,8 @@ nav_order: 9 ### Misc. changes - +- Warn on root size is too small _(fcos)_ +- Warn on root constrained by another partition _(fcos)_ ### Docs changes