Collect NIC name given by BIOS

Proposing a spec to add a extra field 'biosdevname' to network interface
inventory collected by 'default' collector of ironic-python-agent.

Change-Id: If4efd3ba5ed7bb2816696b853b1fc39d0b2340ef
Partial-Bug: #1635351
This commit is contained in:
Annie Lezil 2016-11-29 18:19:04 +00:00
parent e209ad3a1e
commit 54eb735659
1 changed files with 156 additions and 0 deletions

View File

@ -0,0 +1,156 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
============================================
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 <https://linux.die.net/man/1/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.
References
==========
.. [1] https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
.. [2] https://linux.die.net/man/1/biosdevname