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:
Seems likely this actually should be a dependency of the specific plugin in use.
(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
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.
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