Bug 1114150

Summary: sysfsutils needs to be a dependency of OpenStack nova
Product: Red Hat OpenStack Reporter: Bryan Yount <byount>
Component: openstack-novaAssignee: Nikola Dipanov <ndipanov>
Status: CLOSED ERRATA QA Contact: nlevinki <nlevinki>
Severity: high Docs Contact:
Priority: high    
Version: 4.0CC: ajeain, eglynn, ndipanov, sgordon, stoner, tdunnon, yeylon
Target Milestone: asyncKeywords: AutoVerified, ZStream
Target Release: 4.0   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
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.
Story Points: ---
Clone Of:
: 1114637 (view as bug list) Environment:
Last Closed: 2014-08-21 00:40:27 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1114637, 1115625, 1184663    

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