Conversation
There was a problem hiding this comment.
This is a high level code review, I will come back for a more in-depth one once I understand the issue better.
We prob want to change the commit message to be something like
"fcos: add s390x boot_device sugar"
Additionally in the future if working on an issue its customary to address issues raised in the PR rather then closing and re-making them. It makes it more easy to review and know what is changed.
edit: structurally regarding the issue this is attempting to solve I am a bit confused, trying to formulate questions as I go.
config/fcos/v1_6_exp/translate.go
Outdated
| wantEFIPart = true | ||
| case *layout == "ppc64le": | ||
| wantPRePPart = true | ||
| case *layout == "s390x-eckd": |
There was a problem hiding this comment.
Since s390x-zfcp is the same as s390x-eckd, we could have both cases fall into the same logic
IE
case x:
case y:
dowork = true
There was a problem hiding this comment.
Yes logically it does not do anything with two different layout with one input.
But the plan was user to force use /dev/dasd[a-z] for eckd and /dev/sd[a-z] so that during the layout preference it set appropriate root device; let say for dasd /dev/dasda2. But , I was not able to achieve that under translate.go. I tried with regexp. Somehow it was crashing with memory error. I thought once created the PR will add the device arch once it is discuss within PR.. That's why made it open.
1, imported regexp.
2. then did `diskRe = regexp.MustCompile("(/dev/dasd[a-z]$|/dev/sd[a-z]$)")
3. diskRe.FindString(*c.BootDevice.Luks.Device)
while validating with appropriate layouts getting panic on memory error
There was a problem hiding this comment.
Can we use the following conditions?
In translate.go will have one logic as you corrected
case s390x-zfcp:
case s390x-eckd:
wantS390X = true
below condition in validate.go to fix , so that user force to use either dasd[a-z] or sd[a-z]. If not then it give an error.
var dasdRe = regexp.MustCompile("(/dev/dasd[a-z]$)")
var sdRe = regexp.MustCompile("(/dev/sd[a-z]$)")
if d.Layout != nil && (*d.Layout == "s390x-zfcp" || *d.Layout == "s390x-eckd") {
if util.NilOrEmpty(d.Luks.Device) {
r.AddOnError(c.Append(*d.Layout), common.ErrNoLuksBootDevice)
}
if len(d.Mirror.Devices) > 0 {
r.AddOnError(c.Append(*d.Layout), common.ErrMirrorNotSupport)
}
if *d.Layout == "s390x-zfcp" && util.NotEmpty(d.Luks.Device) && !sdRe.MatchString(*d.Luks.Device) {
r.AddOnError(c.Append(*d.Layout), common.ErrNoLuksBootDevice)
}
if *d.Layout == "s390x-eckd" && util.NotEmpty(d.Luks.Device) && !dasdRe.MatchString(*d.Luks.Device) {
r.AddOnError(c.Append(*d.Layout), common.ErrNoLuksBootDevice)
}
}
config/fcos/v1_6_exp/translate.go
Outdated
| var luksDevice string | ||
| var device_s390x string | ||
| switch { | ||
| case wantMBR: |
There was a problem hiding this comment.
So what is the difference between the work done in the wantMBR case and the wantDasd case? to my eye they are doing the same thing?
There was a problem hiding this comment.
I've explained above...
There was a problem hiding this comment.
here we provide only one condition common to both layouts under switch statement.
var device_S390x string
switch {
case wantS390x:
device_s390x = *c.BootDevice.Luks.Device
luksDevice = device_s390x + "2"
There was a problem hiding this comment.
For more readability I made the changes as follows.
case *layout == "s390x-eckd":
wantS390x = true
case *layout == "s390x-zfcp":
wantS390x = true
// encrypted root partition
if wantLuks {
var luksDevice string
var device_s390x string
switch {
case wantS390x:
//Luks Device for dasd and zFCP-scsi
device_s390x = *c.BootDevice.Luks.Device
luksDevice = device_s390x + "2"
config/fcos/v1_6_exp/schema.go
Outdated
|
|
||
| type BootDeviceLuks struct { | ||
| Discard *bool `yaml:"discard"` | ||
| Device *string `yaml:"device-s390x"` |
There was a problem hiding this comment.
Why are we adding a new field?
There was a problem hiding this comment.
Correct me if am wrong.
I added the Device for s390x disk as new field. So that when user generate ignition from butane config they must provide s390x device like /dev/dasda or /dev/sda. Else it use the label which we do not expect for s390x.
|
Hi @prestist , Can you please review the comments? |
|
Hi Team, Would you please check if the patch can be approved? or further review required? Thanks |
|
I'm not really a maintainer here and I don't know the code involved, but in case it's useful I can say this looks superficially sane to me at least! |
|
I'd recommend squashing your changes into one commit (and avoid merge commits back from main) etc. |
|
This will need a full rebase on top of #491 once it lands. |
7662ec6 to
4ac37f1
Compare
|
Hi, |
|
@madhu-pillai sorry, by mistake instead of suggestion i've committed a change on top of yours. One question: FCP disks have |
config/fcos/v1_6_exp/schema.go
Outdated
|
|
||
| type BootDeviceLuks struct { | ||
| Discard *bool `yaml:"discard"` | ||
| Device *string `yaml:"s390x-device"` |
There was a problem hiding this comment.
| Device *string `yaml:"s390x-device"` | |
| Device *string `yaml:"blockdev"` |
There was a problem hiding this comment.
Is prefix s390x- help in identifying what layout the user trying to use and avoid confusion on device parameter from other arch?
There was a problem hiding this comment.
My suggestion is to keep this as device and document that it's only valid on the s390x-eckd and s390x-zfcp layouts. Having the s390x- prefix makes it feel less integrated than other arches.
docs/config-openshift-v4_15-exp.md
Outdated
| * **_layout_** (string): the disk layout of the target OS image. Supported values are `aarch64`, `ppc64le`, and `x86_64`. Defaults to `x86_64`. | ||
| * **_layout_** (string): the disk layout of the target OS image. Supported values are `aarch64`, `ppc64le`, `s390x-eckd`, `s390x-virt`, `s390x-zfcp` and `x86_64`. Defaults to `x86_64`. | ||
| * **_luks_** (object): describes the clevis configuration for encrypting the root filesystem. | ||
| * **s390x-device** (string): describes device specific to s390x `dasd[a-z]` or `sd[a-z]`. |
There was a problem hiding this comment.
| * **s390x-device** (string): describes device specific to s390x `dasd[a-z]` or `sd[a-z]`. | |
| * **s390x-device** (string): underlying block device`dasd[a-z]` or `sd[a-z]`. |
There was a problem hiding this comment.
Initially i was using device naming device however steven perstist reviewed and suggest to prefix s390x -device.
That is right... 2 is only valid for dasd disk |
|
Accidently click on close PR. Kindly ignore.. |
3805b29 to
ae67e22
Compare
|
Almost LGTM. |
ae67e22 to
6a4a8b0
Compare
|
Have fixed the doc and translate and validate version check. |
|
Hi, Could you help me how to run the test similar to the CI? I just running |
6a4a8b0 to
7f9b2c2
Compare
|
Looks like the |
|
/cc @prestist |
|
Sorry for the delay; I plan on taking a look at this today. |
jlebon
left a comment
There was a problem hiding this comment.
Overall approach LGTM. Mostly minor things and one concern re. BIOS/EFI.
config/fcos/v1_6_exp/schema.go
Outdated
|
|
||
| type BootDeviceLuks struct { | ||
| Discard *bool `yaml:"discard"` | ||
| Device *string `yaml:"s390x-device"` |
There was a problem hiding this comment.
My suggestion is to keep this as device and document that it's only valid on the s390x-eckd and s390x-zfcp layouts. Having the s390x- prefix makes it feel less integrated than other arches.
config/fcos/v1_6_exp/translate.go
Outdated
| case *layout == "s390x-virt": | ||
| wantBIOSPart = true | ||
| wantEFIPart = true |
There was a problem hiding this comment.
This doesn't look right; we don't have BIOS or EFI partitions on s390x. Why is this there?
There was a problem hiding this comment.
Okay, I think I added this because Benjamin suggested that KVM Virt does not need /dev/vda as /dev/disk/by-partlabel similar to x86. I'll correct by removing this case statement and append following case statement.
case *layout == "s390x-eckd" || *layout == "s390x-zfcp" || *layout == "s390x-virt"
There was a problem hiding this comment.
Initially I used device but Steve suggested something specific to s390x that's why I added s390x-device. I'll correct that to device.
There was a problem hiding this comment.
I'll correct by removing this case statement and append following case statement.
Yes, that makes sense to me.
Initially I used
devicebut Steve suggested something specific tos390xthat's why I addeds390x-device. I'll correct that todevice.
Yeah, I think it's debatable either way but I would lean towards device. Having to repeat "s390x" in both the layout name and this field's name is a bit awkward.
There was a problem hiding this comment.
Yeah; 100% thinking about it again and having talked to @jlebon I agree device is certainly better.
| ``` | ||
| ### Mirrored boot disk | ||
|
|
||
| This example uses the shortcut `boot_device` syntax to configure an encrypted root filesystem in s390x KVM unlocked with a network Tang server. |
There was a problem hiding this comment.
Let's move this example down to be the last of this subsection and keep the more common scenarios as first?
There was a problem hiding this comment.
Yes, That is right. I'll move that to the last subsection.
docs/release-notes.md
Outdated
| - Document `key_file` `compression` field _(openshift 4.8.0 - 4.9.0)_ | ||
| - Document support for special mode bits and `arn` URLs _(r4e 1.1.0+)_ | ||
| - Improve rendering of spec docs on docs site | ||
| - Document `luks.s390x-device` spec _(fcos, openshift 4.14.0+)_ |
There was a problem hiding this comment.
Not sure if we need this given that it's a new feature. I think this section is more for doc changes for pre-existing features.
There was a problem hiding this comment.
Okay, I shall remove this.
internal/doc/butane.yaml
Outdated
| - name: s390x-device | ||
| transforms: | ||
| - regex: $ | ||
| replacement: the whole-disk device (not partitions), referenced by their absolute path. One device must be specified with s390x-* layout except s390x-virt. |
There was a problem hiding this comment.
We should mention the expected prefixes.
There was a problem hiding this comment.
Does that mean change to - name: device ?
There was a problem hiding this comment.
I mean mention that on s390x-eckd, it should start with /dev/dasd and similarly for the other layout.
But yes, the field name itself will also need to be updated when we rename it.
02914a5 to
6c80516
Compare
jlebon
left a comment
There was a problem hiding this comment.
Some minor comments, but LGTM overall!
Were you able to do a final test on this with all three layouts?
prestist
left a comment
There was a problem hiding this comment.
Thank you @madhu-pillai and @nikita-dubrovskii LGTM; I am deferring my approval to @jlebon's
I have two small nits;
No big deal but would be nice to fix.
Thank you again for all your work.
config/fcos/v1_6_exp/translate.go
Outdated
| case *layout == "s390x-virt": | ||
| wantBIOSPart = true | ||
| wantEFIPart = true |
There was a problem hiding this comment.
Yeah; 100% thinking about it again and having talked to @jlebon I agree device is certainly better.
4503eb1 to
f8338bd
Compare
Co-authored-by: Nikita Dubrovski <nikita@linux.ibm.com> Co-authored-by: Jonathan Lebon <jonathan@jlebon.com>
jlebon
left a comment
There was a problem hiding this comment.
Just did a small tweak to the transform regex bits.
Nice work! Thanks for working through all the comments.
It depends on fcos 1.6.0-experimental See: coreos#484 See: coreos#514
It depends on fcos 1.6.0-experimental See: coreos#484 See: coreos#514 Fixes: coreos#517
It depends on fcos 1.6.0-experimental See: coreos#484 See: coreos#514 Fixes: coreos#517
- Use "layout" in the context path for errors related to the layout entry in the boot_device configuration. - Add tests for those error cases. - Refactor mirror boot_device check for s390x. Fixes: coreos#484
- Use "layout" in the context path for errors related to the layout entry in the boot_device configuration. - Add tests for those error cases. - Refactor mirror boot_device check for s390x. Fixes: coreos#484
Hi,
I've closed the earlier pr 483 due to some errors. Here is the new PR.
As per the GitHub issue #453 (comment). The PR contains following conditional changes exclusively for s390x.
Added boot_device.luks.device specifically for s390x-zfcp s390x-eckd and forbidden for other arch including s390x-virt.
The configuration will generate only with boot_device.luks and it fails if mirror boot_device.mirror configuration is specified for s390x-eckd and s390x-zfcp .