Review Comments Changes
Change-Id: I62ea9067df439d882002b3000c1b7319706086ec
This commit is contained in:
parent
d1829eaa79
commit
6062f73c7e
|
@ -1,4 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# It's a script which deploys your plugin
|
||||
echo fuel-plugin-hedvig-cinder > /tmp/fuel-plugin-hedvig-cinder
|
|
@ -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': }
|
||||
|
|
|
@ -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__)
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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.
|
@ -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.
Loading…
Reference in New Issue