Network Interface Resource using Biosdevname

https://bugs.launchpad.net/ironic-python-agent/+bug/1635351 https://bugs.launchpad.net/ironic-inspector/+bug/1635351

Currently, the hardware inspection collects the MAC address, IP address and kernel given name of the network interface but does not collect the bios given name for the network interface. The deployer needs the bios given name of network interface to setup network configuration automation on multi NIC nodes. In this spec, we want to add an extra field ‘biosdevname’ to network interface inventory, collected by default collector of ironic-python-agent. The extra field is fetched using biosdevname utility. Once the node inspection is successfuil, the collected hardware details from the ramdisk is stored in swift object as JSON encoded string.

Problem description

The classic naming scheme for network interfaces applied by the kernel is to simply assign names beginning with “eth0”, “eth1”, … to all interfaces as they are probed by the drivers. Kernel name is not fixed, it changes on every boot. This can have serious security implications, for example, in firewall rules that are coded for certain naming schemes are sensitive to unpredictable name changes.

To fix this problem we need a consistent and stable naming scheme for network interfaces. One solution is the utility named biosdevname. Biosdevname finds fixed slot topology information in certain firmware interfaces and uses them to assign fixed names to interfaces which incorporate their physical location on the motherboard. This will help to provide a consistent of mapping kernel name with system.

The data collected from the collector would enable us to create config files to script provisioning of nodes. For example, as the system boots, it uses these files to determine what network interfaces to bring up and how to configure them. So when we have a multiple NIC we need unique names for network interfaces to configure and this can be obtained from the proposed spec.

Proposed change

The proposed change is to add an ‘biosdevname’ field to network interface inventory which is collected by default collector of ironic-python-agent inspector module, which will return a full list of inventory to ironic inspector.

The requested change will be in the class NetworkInterface, HardwareManager, and GenericHardwareManager. The list will consist of dicts containing biosdevname field added to existing network interface details:

"inventory":
{
    ...,
    ...,
    "interface":[
    {
        ...,
        ...,
        "name": "eth0",
        "ip": "172.24.42.100",
        "mac: "52:54:00:52:bc:2c",
        "biosdevname": "em0",
        ...,
        ...,
    }
],
...,
...,
}

Alternatives

None

Data model impact

None

HTTP API impact

None

Client (CLI) impact

None

Ironic python agent impact

The changes proposed above will be implemented in IPA

Performance and scalability impact

None

Security impact

None

Deployer impact

None

Developer impact

None

Implementation

Assignee(s)

Primary assignee:

Annie Lezil <annie-lezil>

Work Items

  • create a tooling module for biosdevname to collect bios given name.

  • add an extra field to network interface inventory which is collected by default collector of ironic-python-agent inspector module.

  • document the new feature.

Dependencies

None

Testing

Unit test cases will be added.