Bug 2128268 - Biosdevname missing from overcloud image and introspection image.
Summary: Biosdevname missing from overcloud image and introspection image.
Keywords:
Status: CLOSED DUPLICATE of bug 2029941
Alias: None
Product: Red Hat OpenStack
Classification: Red Hat
Component: rhosp-director-images
Version: 16.1 (Train)
Hardware: Unspecified
OS: Unspecified
medium
medium
Target Milestone: ---
: ---
Assignee: Harald Jensås
QA Contact: David Rosenfeld
URL:
Whiteboard:
Depends On: 2130342
Blocks:
TreeView+ depends on / blocked
 
Reported: 2022-09-20 12:48 UTC by KAUSHIK
Modified: 2023-09-19 04:26 UTC (History)
5 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2022-11-21 18:15:53 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Issue Tracker OSP-18810 0 None None None 2022-09-20 12:55:08 UTC

Description KAUSHIK 2022-09-20 12:48:22 UTC
Description of problem: 

Biosdevname missing from overcloud image and introspection image.


When adding a new compute node CU noticed that neither introspection image nor the overcloud-full image has the biosdevname=1 kernel parameter. This was the default in openstack 13 and their network-scripts and configuration depend on it. 

CU also noticed that the leapp upgrade brought this parameter with it for the current kernel but updates do not get.


Ask from CU:

How can we get this parameter when introspecting?

How can we get this for the overcloud-full image when deploying new nodes?

How can we get this to be the default for current nodes when updating kernel?





Actual results: Biosdevname missing from overcloud image and introspection image.


Expected results: Biosdevname should be included in overcloud image and introspection image.


Additional info:

Comment 3 Harald Jensås 2022-09-27 09:48:15 UTC
> Description of problem: 
> 
> Biosdevname missing from overcloud image and introspection image.
> 
> 
> When adding a new compute node CU noticed that neither introspection image
> nor the overcloud-full image has the biosdevname=1 kernel parameter. This
> was the default in openstack 13 and their network-scripts and configuration
> depend on it. 
> 

biosdevname used to be the default only for Dell hardware on RHEL 7, Dell requested that this should not be the case for RHEL 8 (RHBZ#1662085 [3]. Both Dell and RedHat recommends using the Consistent Device Naming using systemd Predictable Network Interface Names (net.ifnames=1) instead. Ref doc: https://access.redhat.com/documentation/en-us/red-hat-enterprise-linux/8/guide/3b2a0d8b-6ccd-4e35-83b0-7e5e0fef2913.

Network device names are not guaranteed to be the same between different RHEL versions[2] which is why there is additional steps[2] in the upgrade guide to compensate for this. Unfortunately that seems to not fully take in account biosdevname (which was only relevant for Dell hardware). We cannot set biosdevname=1 by default in the overcloud-full image, because the image is generic for all hardware vendors, biosdevname is not.

> CU also noticed that the leapp upgrade brought this parameter with it for
> the current kernel but updates do not get.
> 

This migthe be a bug in leapp, if it brought the biosdevname=1 kernel parameter on from the previous release but failed to set up grub defaults so that biosdevname is also enabled after a kernel update this is problematic. I don't know the Leapp implementation well, but I can see that they do try to handle biosdevname[5], and it looks like it would only enable it if a) it's not currently disabled and b) it is a Dell system. I would like DFG:Upgrades to look into this, it is possible we should raise a separate bug related to biosdevname and Leapp.

> Ask from CU:
> 
> How can we get this parameter when introspecting?
> 

I have verified that /sbin/biosdevname is included in rhosp-director-images-ipa-x86_64-16.1-20220315.1.el8ost.noarch.rpm (the ironic python agent ramdisk image). This confirms the package is installed, but the functionality is not enabled by default.

There is a parameter in tripleo-heat-templates `IronicInspectorKernelArgs` that can be used to set the kernel arguments for ironic inspector.

  IronicInspectorKernelArgs:
    default: 'ipa-inspection-dhcp-all-interfaces=1 ipa-collect-lldp=1 ipa-debug=1'
    description: Kernel args for the Ironic inspector.
    type: string

Assuming they are using ironic inspector from the undercloud they will have to use the `custom_env_files` option in undercloud.conf. Create a custom environment file and set up IronicInspectorKernelArgs to include 'biosdevname=1', then point to that environment file using the `custom_env_files` option in undercloud.conf, for example:

Example: undercloud.conf
------------------------
[DEFAULT]
custom_env_files = /home/stack/undercloud_custom_env.yaml

------------------------

Example: /home/stack/undercloud_inspector_biosdevname_env.yaml
-----------------------------------------------
parameter_defaults:
    IronicInspectorKernelArgs: 'ipa-inspection-dhcp-all-interfaces=1 ipa-collect-lldp=1 ipa-debug=1 biosdevname=1'

-----------------------------------------------

NOTE:
  Please see [4] to understand exactly which arguments to include in addition to biosdevname=1. On the undercloud the options `undercloud_debug`, `inspection_runbench` and `inspection_extras` control what go into IronicInspectorKernelArgs. Adding biosdevname requires a complete override of IronicInspectorKernelArgs which means manually adding the arguments controlled by the options in undercloud.conf.

> How can we get this for the overcloud-full image when deploying new nodes?
> 
> How can we get this to be the default for current nodes when updating kernel?
> 

I've verified that biosdevname-0.7.3-2.el8.x86_64 is installed in rhosp-director-images-x86_64-16.1-20220315.1.el8ost.noarch.rpm, so the package required is in the overcloud-full image.

To enable biosdevname I would recommend using the OS::TripleO::Services::BootParams service in OSP director. This service is enabled by default for all roles. To add kernel arguments use the role specific `KernelArgs` heat parameter. For example to add `biosdevname=1` to Controller and Compute roles the following environment file can be used:

  parameter_defaults:
      ControllerParameters:
         KernelArgs: "biosdevname=1"
      ComputeParameters:
         KernelArgs: "biosdevname=1"

!!! WARNING !!! !!! WARNING !!!

By default the tripleo-kernel ansible role will reboot the node after changing the kernel arguments to ensure the configuration change is applied. It will also update the grub default configuration (/etc/default/grub) to ensure that the kernel arguments is used also after a kernel update. The parameter `KernelArgsDeferReboot` (default: false) should be set to `true` to avoid unplanned reboots when initially applying this change. Once the change is applied, the administrator can migrate workloads and reboot nodes in a controlled fashion. Re-set the `KernelArgsDeferReboot` to `false` when done, so that new nodes automatically get biosdevname activated when scaling the cloud.

!!! END WARNING !!!

NOTE: If/When the customer need to scale their overcloud, and potentially need to add new roles to meet new hardware configuration. The recommendation would be to not use biosdevname, the network interface templates for the new role should use the systemd Predictable Network Interface Names (net.ifnames=1). We expect that biosdevname will be deprecated and removed in future RHEL releases, so this would be a proactive action to avoid challenges related to device naming in the future.
 
> Actual results: Biosdevname missing from overcloud image and introspection
> image.
> 
> 
> Expected results: Biosdevname should be included in overcloud image and
> introspection image.
> 

Since biosdevname is only recommended for Dell Hardware adding it to the kernel arguments for overcloud and introspection images by default does not make sense.
Adding it in the released product will also cause issues for users who deployed OSP16 without biosdevname, the interface names would change on update which would cause cloud outage.


[1] https://access.redhat.com/solutions/5984311
[2] https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/16.2/html/framework_for_upgrades_13_to_16.2/configuring-the-overcloud-for-a-leapp-upgrade_preparing-overcloud#using-predictable-nic-names-overcloud-leapp
[3] https://bugzilla.redhat.com/show_bug.cgi?id=1662085
[4] https://opendev.org/openstack/python-tripleoclient/src/branch/stable/train/tripleoclient/v1/undercloud_config.py#L212-L226
[5] https://github.com/oamg/leapp-repository/blob/master/repos/system_upgrade/common/actors/biosdevname/libraries/biosdevname.py

Comment 9 Harald Jensås 2022-11-21 18:15:53 UTC

*** This bug has been marked as a duplicate of bug 2029941 ***

Comment 10 Red Hat Bugzilla 2023-09-19 04:26:42 UTC
The needinfo request[s] on this closed bug have been removed as they have been unresolved for 120 days


Note You need to log in before you can comment on or make changes to this bug.