Review Comments Changes

Change-Id: I62ea9067df439d882002b3000c1b7319706086ec
This commit is contained in:
suhanigupta 2016-02-16 14:50:08 -08:00
parent d1829eaa79
commit 6062f73c7e
8 changed files with 124 additions and 73 deletions

View File

@ -1,4 +0,0 @@
#!/bin/bash
# It's a script which deploys your plugin
echo fuel-plugin-hedvig-cinder > /tmp/fuel-plugin-hedvig-cinder

View File

@ -1,2 +1,5 @@
$plugin_settings = hiera('fuel-plugin-hedvig-cinder')
$services = ['cinder-volume']
$metadata_server = $plugin_settings['hedvig_metadata_server']
$volume_type = "hedvig"
class {'plugin_hedvig_cinder': }

View File

@ -279,10 +279,9 @@ class HCreateVirtualDiskOpCb(HedvigOpCb):
def __init__(self, vDiskInfo):
HedvigOpCb.__init__(self)
LOG.debug("Creating virtual disk: %s", vDiskInfo.vDiskName)
LOG.info("Creating virtual disk: %s", vDiskInfo.vDiskName)
self.op_ = hc.HCreateVirtualDiskOp()
self.op_.vDiskInfo_ = hc.VDiskInfo()
self.op_.vDiskInfo_.dedup = vDiskInfo.dedup
self.op_.vDiskInfo_.vDiskName = str(vDiskInfo.vDiskName)
self.op_.vDiskInfo_.createdBy = vDiskInfo.createdBy
self.op_.vDiskInfo_.size = vDiskInfo.size
@ -290,10 +289,10 @@ class HCreateVirtualDiskOpCb(HedvigOpCb):
self.op_.vDiskInfo_.blockSize = vDiskInfo.blockSize
self.op_.vDiskInfo_.exportedBlockSize = vDiskInfo.exportedBlockSize
self.op_.vDiskInfo_.isClone = vDiskInfo.isClone
self.op_.vDiskInfo_.dedup = vDiskInfo.dedup
self.op_.vDiskInfo_.cloudEnabled = vDiskInfo.cloudEnabled
self.op_.vDiskInfo_.dedupBuckets = str(vDiskInfo.dedupBuckets)
self.op_.vDiskInfo_.masterVDiskName = str(vDiskInfo.masterVDiskName)
self.op_.vDiskInfo_.dedup = vDiskInfo.dedup
self.op_.vDiskInfo_.compressed = vDiskInfo.compressed
self.op_.vDiskInfo_.immutable = vDiskInfo.immutable
self.op_.vDiskInfo_.cacheEnable = vDiskInfo.cacheEnable
@ -301,11 +300,20 @@ class HCreateVirtualDiskOpCb(HedvigOpCb):
self.op_.vDiskInfo_.clusteredfilesystem = vDiskInfo.clusteredfilesystem
self.op_.vDiskInfo_.description = str(vDiskInfo.description)
self.op_.vDiskInfo_.mntLocation = str(vDiskInfo.mntLocation)
self.op_.vDiskInfo_.residence = vDiskInfo.residence
self.op_.vDiskInfo_.residence = vDiskInfo.residence
self.op_.vDiskInfo_.diskType = vDiskInfo.diskType
self.op_.vDiskInfo_.cloudProvider = vDiskInfo.cloudProvider
self.op_.vDiskInfo_.replicationPolicy = vDiskInfo.replicationPolicy
self.op_.vDiskInfo_.replicationPolicyInfo = hc.ReplicationPolicyInfo()
self.op_.vDiskInfo_.replicationPolicyInfo.dataCenterNames = hc.buffer_vector()
for dataCenter in vDiskInfo.replicationPolicyInfo.dataCenterNames:
self.op_.vDiskInfo_.replicationPolicyInfo.dataCenterNames.append(str(dataCenter))
self.op_.vDiskInfo_.cloneInfo = hc.CloneInfo()
self.op_.vDiskInfo_.cloneInfo.baseDisk = str(vDiskInfo.cloneInfo.baseDisk)
self.op_.vDiskInfo_.cloneInfo.snapshot = str(vDiskInfo.cloneInfo.snapshot)
self.op_.vDiskInfo_.cloneInfo.baseVersion = vDiskInfo.cloneInfo.baseVersion
self.op_.vDiskInfo_.cloneInfo.typeOfClone = vDiskInfo.cloneInfo.typeOfClone
def createVirtualDisk(self):
self.pyCallback_.createVirtualDisk(self.op_)
self.waitForResult(self.__class__.__name__)

View File

@ -34,6 +34,7 @@ from cinder.db.sqlalchemy import api
from cinder.i18n import _, _LE, _LI, _LW
from cinder.volume import driver
from cinder.volume import volume_types
from cinder.volume import qos_specs
from oslo.config import cfg
from oslo_concurrency import processutils
@ -88,8 +89,8 @@ class HedvigISCSIDriver(driver.ISCSIDriver):
"storage_protocol" : "ISCSI",
"total_capacity_gb": total_capacity,
"free_capacity_gb": free_capacity,
"reserverd_percentage": 0,
"QoS_support": False}
"reserved_percentage": 0,
"QoS_support": True}
return self.group_stats
def hedvigGetVolumeDetails(self, volume):
@ -118,7 +119,7 @@ class HedvigISCSIDriver(driver.ISCSIDriver):
name, description, size = self.hedvigGetVolumeDetails(volume)
volumeTypeId = volume["volume_type_id"]
volumeType = None
try:
try:
LOG.debug("Retrieving volume type details for id: %s", volumeTypeId)
volumeType = api.volume_type_get(self.context_, volumeTypeId)
LOG.debug("Volume type is: %s", volumeType)
@ -446,12 +447,21 @@ class HedvigISCSIDriver(driver.ISCSIDriver):
This is the same as cloning.
"""
name, description, size = self.hedvigGetVolumeDetails(volume)
snapshotname = snapshot['display_name']
snapshotName = snapshot['display_name']
volumeTypeId = volume["volume_type_id"]
volumeType = None
try:
LOG.debug("Creating volume from snapshot. snapshotName: %s, name: %s, description: %s, size: %s", snapshotname, name, description, size)
self.hedvigCloneSnapshot(snapshotname, name, description, size)
LOG.debug("Retrieving volume type details for id: %s", volumeTypeId)
volumeType = api.volume_type_get(self.context_, volumeTypeId)
LOG.debug("Volume type is: %s", volumeType)
except Exception as e:
LOG.error(_LE('Failed to create volume from snapshot. snapshotName: %(snapshotName)s, name: %(name)s, description: %(description)s, size: %(size)s'), {'snapshotName': snapshotName, 'name': name, 'description': description, 'size': size})
LOG.error(_LE('Failed to retrieve volume type details for id: %s'), volumeTypeId)
raise exception.HedvigDriverException()
try:
LOG.info(_LI('Creating volume from snapshot. snapshotName: %s, name: %s, description: %s, size: %s'), snapshotName, name, description, size)
self.hedvigCloneSnapshot(snapshotName, name, description, size, volumeType)
except Exception as e:
# LOG.exception(_LE('Failed to create volume from snapshot. snapshotName: %(snapshotName)s, name: %(name)s, description: %(description)s, size: %(size)s'), {'snapshotName': snapshotName, 'name': name, 'description': description, 'size': size})
raise exception.HedvigDriverException()
def check_for_export(self, context, volume_id):
@ -505,38 +515,44 @@ class HedvigISCSIDriver(driver.ISCSIDriver):
vDiskInfo.isClone = False
vDiskInfo.consistency = hc.Consistency.STRONG
if "extra_specs" in volumeType:
key = volumeType["extra_specs"]
if "qos:dedup_enable" in key:
entry = key["qos:dedup_enable"]
val = HedvigConfig.parseAndGetBooleanEntry(entry)
if val != None:
vDiskInfo.dedup = val
if "qos:compress_enable" in key:
entry = key["qos:compress_enable"]
val = HedvigConfig.parseAndGetBooleanEntry(entry)
if val != None:
vDiskInfo.compressed = val
if "qos:cache_enable" in key:
entry = key["qos:cache_enable"]
val = HedvigConfig.parseAndGetBooleanEntry(entry)
if val != None:
vDiskInfo.cacheEnable = val
if "qos:replication_factor" in key:
val = key["qos:replication_factor"]
val = int(val)
if val > 0:
vDiskInfo.replicationFactor = val
if "qos:replication_policy" in key:
entry = key["qos:replication_policy"]
val = HedvigConfig.parseAndGetReplicationPolicy(entry)
if val != None:
vDiskInfo.replicationPolicy = val
if "qos:disk_residence" in key:
entry = key["qos:disk_residence"]
val = HedvigConfig.parseAndGetDiskResidence(entry)
if val != None:
vDiskInfo.residence = val
hedvigCreateVirtualDiskOp = HCreateVirtualDiskOpCb(vDiskInfo)
qos = {}
qos_specs_id = volumeType.get('qos_specs_id')
specs = volumeType.get('extra_specs')
if qos_specs_id is not None:
kvs = qos_specs.get_qos_specs(self.context_, qos_specs_id)['specs']
for key, value in kvs.items():
if "dedup_enable" in key:
val = HedvigConfig.parseAndGetBooleanEntry(value)
if val != None:
vDiskInfo.dedup = val
if "compressed_enable" in key:
val = HedvigConfig.parseAndGetBooleanEntry(value)
if val != None:
vDiskInfo.compressed = True
if "cache_enable" in key:
val = HedvigConfig.parseAndGetBooleanEntry(value)
if val != None:
vDiskInfo.cacheEnable = val
if "replication_factor" in key:
val = int(value)
if val > 0:
vDiskInfo.replicationFactor = val
if "replication_policy" in key:
val = HedvigConfig.parseAndGetReplicationPolicy(value)
if val != None:
vDiskInfo.replicationPolicy = val
if "disk_residence" in key:
val = HedvigConfig.parseAndGetDiskResidence(value)
if val != None:
vDiskInfo.residence = val
if "replication_policy_info" in key:
val = value.split(',')
if len(val) != 0:
vDiskInfo.replicationPolicyInfo = hc.ReplicationPolicyInfo()
vDiskInfo.replicationPolicyInfo.dataCenterNames = hc.buffer_vector()
for dataCenter in val:
vDiskInfo.replicationPolicyInfo.dataCenterNames.append(str(dataCenter))
hedvigCreateVirtualDiskOp = HCreateVirtualDiskOpCb(vDiskInfo)
hedvigCreateVirtualDiskOp.createVirtualDisk()
def hedvigDeleteVirtualDisk(self, name):
@ -544,32 +560,32 @@ class HedvigISCSIDriver(driver.ISCSIDriver):
hedvigDeleteVirtualDiskOp = HDeleteVirtualDiskOpCb(name)
hedvigDeleteVirtualDiskOp.deleteVirtualDisk()
def hedvigCloneSnapshot(self, snapshotname, name, description, size):
LOG.debug("Cloning a snapshot. snapshotName: %s, name: %s, description: %s, size: %s", snapshotname, name, description, size)
def hedvigCloneSnapshot(self, snapshotName, name, description, size, volumeType):
LOG.debug("Cloning a snapshot. snapshotName: %s, name: %s, description: %s, size: %s", snapshotName, name, description, size)
LOG.info(_LI('Cloning a snapshot. snapshotName: %(snapshotName)s, name: %(name)s, description: %(description)s, size: %(size)s'), {'snapshotName': snapshotName, 'name': name, 'description': description, 'size': size})
vDiskInfo = hc.VDiskInfo()
vDiskInfo = hc.VDiskInfo()
cloneInfo = hc.CloneInfo()
baseDisk = snapshotname.split("$")[0]
baseVersion = snapshotname.split("$")[2]
hedvigDescribeVirtualDiskOp = HDescribeVirtualDiskOpCb(vDiskName)
baseDisk = snapshotName.split("$")[0]
baseVersion = snapshotName.split("$")[2]
hedvigDescribeVirtualDiskOp = HDescribeVirtualDiskOpCb(baseDisk)
parentVDiskInfo = hedvigDescribeVirtualDiskOp.describeVirtualDisk()
vDiskInfo.vDiskName = name
cloneInfo.typeOfClone = TypeOfClone.Shallow
vDiskInfo.vDiskName = str(name)
cloneInfo.typeOfClone = hc.TypeOfClone.Shallow
vDiskInfo.clusteredfilesystem = parentVDiskInfo.clusteredfilesystem
vDiskInfo.blockSize = parentVDiskInfo.blockSize
vDiskInfo.exportedBlockSize = parentVDiskInfo.exportedBlockSize
if parentVDiskInfo.size > size:
if parentVDiskInfo.size > size:
LOG.error(_LE('Failed to clone snapshot. Size of the clone: %(cloneSize)s is less than the parent virtual disk size: %(parentSize)s'), {'cloneSize': size, 'parentSize': parentVDiskInfo.size})
raise Exception("Specified size: %s is less than parent virtual disk size: %s" % (size, parentVDiskInfo.size))
vDiskInfo.size = size
vDiskInfo.createdBy = parentVDiskInfo.createdBy
vDiskInfo.description = description
vDiskInfo.description = str(description)
vDiskInfo.residence = parentVDiskInfo.residence
vDiskInfo.replicationFactor = parentVDiskInfo.replicationFactor
vDiskInfo.replicationPolicy = parentVDiskInfo.replicationPolicy
cloneInfo.snapshot = snapshotname
cloneInfo.snapshot = str(snapshotName)
cloneInfo.baseVersion = int(baseVersion)
cloneInfo.baseDisk = baseDisk
cloneInfo.baseDisk = str(baseDisk)
vDiskInfo.cloneInfo = cloneInfo
vDiskInfo.isClone = True
vDiskInfo.scsisn = 0
@ -578,7 +594,45 @@ class HedvigISCSIDriver(driver.ISCSIDriver):
vDiskInfo.cloudProvider = parentVDiskInfo.cloudProvider
vDiskInfo.cloudEnabled = parentVDiskInfo.cloudEnabled
vDiskInfo.dedup = parentVDiskInfo.dedup
vDiskInfo.consistency = Consistency.STRONG
hedvigCreateVirtualDiskOp = HCreateVirtualDiskOpCb(vDiskInfo)
vDiskInfo.consistency = hc.Consistency.STRONG
if "extra_specs" in volumeType:
qos = {}
qos_specs_id = volumeType.get('qos_specs_id')
specs = volumeType.get('extra_specs')
if qos_specs_id is not None:
kvs = qos_specs.get_qos_specs(self.context_, qos_specs_id)['specs']
for key, value in kvs.items():
if "dedup_enable" in key:
val = HedvigConfig.parseAndGetBooleanEntry(value)
if val != None:
vDiskInfo.dedup = val
if "compressed_enable" in key:
val = HedvigConfig.parseAndGetBooleanEntry(value)
if val != None:
vDiskInfo.compressed = True
if "cache_enable" in key:
val = HedvigConfig.parseAndGetBooleanEntry(value)
if val != None:
vDiskInfo.cacheEnable = val
if "replication_factor" in key:
val = int(value)
if val > 0:
vDiskInfo.replicationFactor = val
if "replication_policy" in key:
val = HedvigConfig.parseAndGetReplicationPolicy(value)
if val != None:
vDiskInfo.replicationPolicy = val
if "disk_residence" in key:
val = HedvigConfig.parseAndGetDiskResidence(value)
if val != None:
vDiskInfo.residence = val
if "replication_policy_info" in key:
val = value.split(',')
if len(val) != 0:
vDiskInfo.replicationPolicyInfo = hc.ReplicationPolicyInfo()
vDiskInfo.replicationPolicyInfo.dataCenterNames = hc.buffer_vector()
for dataCenter in val:
vDiskInfo.replicationPolicyInfo.dataCenterNames.append(str(dataCenter))
hedvigCreateVirtualDiskOp = HCreateVirtualDiskOpCb(vDiskInfo)
hedvigCreateVirtualDiskOp.createVirtualDisk()

View File

@ -1,10 +1,5 @@
class plugin_hedvig_cinder::ubuntu
{
$services = ['cinder-volume']
$metadata_server = $plugin_settings['hedvig_metadata_server']
$volume_type = "hedvig"
file { "/usr/lib/python2.7/dist-packages/cinder/volume/drivers/hedvig/":
ensure => directory,
}

Binary file not shown.

View File

@ -7,7 +7,7 @@ version: '1.0.0'
# Description
description: Enable to use Hedvig as a cinder backend
# Required fuel version
fuel_version: ['7.0', '8.0']
fuel_version: ['7.0']
# Specify license of your plugin
licenses: ['Apache License Version 2.0']
# Specify author or company name
@ -25,11 +25,6 @@ releases:
mode: ['ha']
deployment_scripts_path: deployment_scripts/
repository_path: repositories/ubuntu
- os: ubuntu
version: 2015.1.0-8.0
mode: ['ha']
deployment_scripts_path: deployment_scripts/
repository_path: repositories/ubuntu
# Version of plugin package
package_version: '1.0.0'

Binary file not shown.