108 lines
3.6 KiB
Python
108 lines
3.6 KiB
Python
#
|
|
# FCoE module
|
|
#
|
|
# Copyright (C) 2018 Red Hat, Inc.
|
|
#
|
|
# This copyrighted material is made available to anyone wishing to use,
|
|
# modify, copy, or redistribute it subject to the terms and conditions of
|
|
# the GNU General Public License v.2, or (at your option) any later version.
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
# ANY WARRANTY expressed or implied, including the implied warranties of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
# Public License for more details. You should have received a copy of the
|
|
# GNU General Public License along with this program; if not, write to the
|
|
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the
|
|
# source code or documentation are not subject to the GNU General Public
|
|
# License and may only be used or replicated with the express permission of
|
|
# Red Hat, Inc.
|
|
#
|
|
from blivet.fcoe import has_fcoe, fcoe
|
|
|
|
from pyanaconda.core.configuration.anaconda import conf
|
|
from pyanaconda.core.dbus import DBus
|
|
from pyanaconda.modules.common.base import KickstartBaseModule
|
|
from pyanaconda.anaconda_loggers import get_module_logger
|
|
from pyanaconda.modules.common.constants.objects import FCOE
|
|
from pyanaconda.modules.storage.fcoe.discover import FCOEDiscoverTask
|
|
from pyanaconda.modules.storage.fcoe.fcoe_interface import FCOEInterface
|
|
|
|
log = get_module_logger(__name__)
|
|
|
|
|
|
class FCOEModule(KickstartBaseModule):
|
|
"""The FCoE module."""
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.reload_module()
|
|
self._fcoe_data = list()
|
|
|
|
def publish(self):
|
|
"""Publish the module."""
|
|
DBus.publish_object(FCOE.object_path, FCOEInterface(self))
|
|
|
|
def is_supported(self):
|
|
"""Is this module supported?"""
|
|
return has_fcoe()
|
|
|
|
def reload_module(self):
|
|
"""Reload the fcoe module."""
|
|
log.debug("Start up the FCoE module.")
|
|
fcoe.startup()
|
|
|
|
def discover_with_task(self, nic, dcb, auto_vlan):
|
|
"""Discover a FCoE device.
|
|
|
|
:param nic: a name of the network device
|
|
:param dcb: Data Center Bridging awareness enabled
|
|
:param auto_vlan: automatic VLAN discovery and setup enabled
|
|
:return: a task
|
|
"""
|
|
return FCOEDiscoverTask(nic, dcb, auto_vlan)
|
|
|
|
def write_configuration(self):
|
|
"""Write the configuration to sysroot."""
|
|
log.debug("Write FCoE configuration.")
|
|
fcoe.write(conf.target.system_root)
|
|
|
|
def get_nics(self):
|
|
"""Get all NICs.
|
|
|
|
:return: a list of names of network devices connected to FCoE switches
|
|
"""
|
|
return [nic for nic, dcb, auto_vlan in fcoe().nics]
|
|
|
|
def get_dracut_arguments(self, nic):
|
|
"""Get dracut arguments for the given FCoE device.
|
|
|
|
:param nic: a name of the network device
|
|
:return: a list of dracut arguments
|
|
|
|
FIXME: This is just a temporary method taken from blivet.
|
|
"""
|
|
log.debug("Getting dracut arguments for FCoE nic %s", nic)
|
|
|
|
dcb = True
|
|
|
|
for _nic, _dcb, _auto_vlan in fcoe().nics:
|
|
if nic == _nic:
|
|
dcb = _dcb
|
|
break
|
|
else:
|
|
return list()
|
|
|
|
dcb_opt = "dcb" if dcb else "nodcb"
|
|
|
|
if nic in fcoe().added_nics:
|
|
return ["fcoe=%s:%s" % (nic, dcb_opt)]
|
|
else:
|
|
return ["fcoe=edd:%s" % dcb_opt]
|
|
|
|
def process_kickstart(self, data):
|
|
"""Process the kickstart data."""
|
|
self._fcoe_data = data.fcoe.fcoe
|
|
|
|
def setup_kickstart(self, data):
|
|
"""Setup the kickstart data."""
|
|
data.fcoe.fcoe = self._fcoe_data
|