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.