Bug 1114150 - sysfsutils needs to be a dependency of OpenStack nova
Summary: sysfsutils needs to be a dependency of OpenStack nova
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat OpenStack
Classification: Red Hat
Component: openstack-nova
Version: 4.0
Hardware: Unspecified
OS: Unspecified
high
high
Target Milestone: async
: 4.0
Assignee: Nikola Dipanov
QA Contact: nlevinki
URL:
Whiteboard:
Depends On:
Blocks: 1114637 1115625 1184663
TreeView+ depends on / blocked
 
Reported: 2014-06-27 22:08 UTC by Bryan Yount
Modified: 2022-07-09 07:57 UTC (History)
7 users (show)

Fixed In Version: openstack-nova-2013.2.3-10.el6ost
Doc Type: Bug Fix
Doc Text:
Previously, sysfsutils were not a requirements for the Compute package (openstack-nova). However, some configurations did require sysfsutils and would not work for a basic install. Now, sysfsutils are required by Compute and so sysfsutils will always get installed.
Clone Of:
: 1114637 (view as bug list)
Environment:
Last Closed: 2014-08-21 00:40:27 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Issue Tracker OSP-16680 0 None None None 2022-07-09 07:57:45 UTC
Red Hat Knowledge Base (Solution) 969433 0 None None None Never
Red Hat Product Errata RHSA-2014:1084 0 normal SHIPPED_LIVE Moderate: openstack-nova security, bug fix, and enhancement update 2014-08-21 04:34:32 UTC

Description Bryan Yount 2014-06-27 22:08:39 UTC
Description of problem:
If the sysfsutils package is not installed on an OpenStack machine (example, one that was not installed with packstack), nova is unable to attach to cinder volumes and the following error is seen:

===============nova log snippet===============
2014-06-23 23:58:49.949 3874 WARNING nova.virt.libvirt.utils [req-4d3e8dd6-4174-4b24-aa52-4894373478fc d1cda3288e154c3e99690d29e56f4414 faa84109e5d34c61adf39ce8d8921471] systool is not installed
....
method(connection_info, *args, **kwargs)
2014-06-23 23:58:59.402 3874 TRACE nova.compute.manager [instance: 6838b8a8-b86f-4334-8474-edba43d0002c]   File "/usr/lib/python2.6/site-packages/nova/openstack/common/lockutils.py", line 246, in inner
2014-06-23 23:58:59.402 3874 TRACE nova.compute.manager [instance: 6838b8a8-b86f-4334-8474-edba43d0002c]     return f(*args, **kwargs)
2014-06-23 23:58:59.402 3874 TRACE nova.compute.manager [instance: 6838b8a8-b86f-4334-8474-edba43d0002c]   File "/usr/lib/python2.6/site-packages/nova/virt/libvirt/volume.py", line 970, in connect_volume
2014-06-23 23:58:59.402 3874 TRACE nova.compute.manager [instance: 6838b8a8-b86f-4334-8474-edba43d0002c]     raise exception.NovaException(msg)
2014-06-23 23:58:59.402 3874 TRACE nova.compute.manager [instance: 6838b8a8-b86f-4334-8474-edba43d0002c] NovaException: We are unable to locate any Fibre Channel devices
===============nova log snippet===============


Version-Release number of selected component (if applicable):
Red Hat OpenStack 4.0
openstack-nova-common-2013.2.3-7.1

How reproducible:
Very

Steps to Reproduce:
1. Install an OpenStack instance without packstack
2. Configure fibrechannel storage with multipathing on 3par storage
3. Try to attach cinder volumes to nova

Actual results:
Nova will fail to attach the volumes and give the following error: "NovaException: We are unable to locate any Fibre Channel devices"

Expected results:
Nova should be able to find the fibrechannel devices and attach the volumes. The sysfsutils package should have been a dependency of at least nova and possibly cinder.

Additional info:
The issue is happening as it's not able to find any Fibre Channel devices because 'systool' is not installed.

The related location of the issue is in the following code:

    @utils.synchronized('connect_volume')
    def connect_volume(self, connection_info, disk_info):
        """Attach the volume to instance_name."""
...
        hbas = virtutils.get_fc_hbas_info()
        host_devices = []
        for hba in hbas:
            pci_num = self._get_pci_num(hba)
...
        if len(host_devices) == 0:
            # this is empty because we don't have any FC HBAs
            msg = _("We are unable to locate any Fibre Channel devices")
            raise exception.NovaException(msg)

It's trying to use HBA devices, but none is available at the system. The HBA information is collected via systool in get_fc_hbas() function. If systool is not installed, it'll failed with no device list.

def get_fc_hbas():
    """Get the Fibre Channel HBA information."""
    out = None
    try:
        out, err = execute('systool', '-c', 'fc_host', '-v',
                           run_as_root=True)
    except processutils.ProcessExecutionError as exc:

Comment 2 Stephen Gordon 2014-06-30 13:40:16 UTC
Seems likely this actually should be a dependency of the specific plugin in use.

Comment 3 Russell Bryant 2014-06-30 13:45:23 UTC
(In reply to Stephen Gordon from comment #2)
> Seems likely this actually should be a dependency of the specific plugin in
> use.

From IRC:

<danpb> steveg: it is only needed for fibre channel

Comment 4 Nikola Dipanov 2014-06-30 14:17:25 UTC
I think that in this case we should just depend on sysfsutils. It does seem to be needed for Fibrechannel volume backend for the libvirt driver ONLY, however the libvirt driver loads drivers at runtime depending on the data specified by Cinder on attach request - meaning it is not possible to know at Nova install time if this will be needed or not and should be installed at all times really.

Comment 9 errata-xmlrpc 2014-08-21 00:40:27 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

http://rhn.redhat.com/errata/RHSA-2014-1084.html


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