--- a/components/openstack/cinder/cinder.p5m Tue May 20 14:02:40 2014 -0700
+++ b/components/openstack/cinder/cinder.p5m Wed May 21 06:05:33 2014 +0800
@@ -321,9 +321,6 @@
# force a dependency on package delivering zfs(1M)
depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/zfs
-# force a dependency on package delivering zpool(1M)
-depend type=require fmri=__TBD pkg.debug.depend.file=usr/sbin/zpool
-
# force a dependency on pywbem; pkgdepend work is needed to flush this out.
# (dependency is for EMC volume driver)
depend type=require fmri=library/python-2/pywbem
--- a/components/openstack/cinder/files/solaris/zfs.py Tue May 20 14:02:40 2014 -0700
+++ b/components/openstack/cinder/files/solaris/zfs.py Wed May 21 06:05:33 2014 +0800
@@ -30,6 +30,8 @@
from cinder.openstack.common import log as logging
from cinder.volume import driver
+from solaris_install.target.size import Size
+
FLAGS = flags.FLAGS
LOG = logging.getLogger(__name__)
@@ -207,10 +209,10 @@
image_meta,
self.local_path(volume))
- def _get_zfs_property(self, prop, vol_snap):
- """Get the value of property for the volume or snapshot."""
+ def _get_zfs_property(self, prop, dataset):
+ """Get the value of property for the dataset."""
(out, _err) = self._execute('/usr/sbin/zfs', 'get', '-H', '-o',
- 'value', prop, vol_snap)
+ 'value', prop, dataset)
return out.rstrip()
def _get_zfs_snap_name(self, snapshot):
@@ -223,23 +225,6 @@
return "%s/%s" % (self.configuration.zfs_volume_base,
volume['name'])
- def _get_zpool_property(self, prop):
- """Get the value of property from the zpool."""
- zpool = self.configuration.zfs_volume_base.split('/')[0]
- try:
- value = None
- (out, _err) = self._execute('/usr/sbin/zpool', 'get', prop, zpool)
- except exception.ProcessExecutionError as err:
- LOG.error(_("Failed to get property '%s': %s")
- % (prop, err.stderr))
- return value
-
- zpool_prop = out.splitlines()[1].split()
- if zpool_prop[1] == prop:
- value = zpool_prop[2]
-
- return value
-
def _get_zvol_path(self, volume):
"""Get the ZFS volume path."""
return "/dev/zvol/rdsk/%s" % self._get_zfs_volume_name(volume)
@@ -256,16 +241,12 @@
stats["vendor_name"] = 'Oracle'
stats['QoS_support'] = False
- total = self._get_zpool_property("size")
- free = self._get_zpool_property("free")
- if total is not None:
- stats['total_capacity_gb'] = float(total.split('G')[0])
- else:
- stats['total_capacity_gb'] = 0
- if free is not None:
- stats['free_capacity_gb'] = float(free.split('G')[0])
- else:
- stats['free_capacity_gb'] = 0
+ dataset = self.configuration.zfs_volume_base
+ used_size = self._get_zfs_property('used', dataset)
+ avail_size = self._get_zfs_property('avail', dataset)
+ stats['total_capacity_gb'] = \
+ (Size(used_size) + Size(avail_size)).get(Size.gb_units)
+ stats['free_capacity_gb'] = Size(avail_size).get(Size.gb_units)
stats['reserved_percentage'] = self.configuration.reserved_percentage
self._stats = stats