From 66bfd46e4b683b2e826e9c34bd2bbfa3e3a92a7f Mon Sep 17 00:00:00 2001 From: chiehhsuny Date: Fri, 22 Feb 2019 15:02:45 +0800 Subject: [PATCH] Synology: Add support for UC-Series model Use regular expression of firmware version to check if the model supports Cinder driver or not. Closes-Bug: #1817259 Change-Id: I166be597d62d8e5fb221da73fd79487379917850 --- .../drivers/synology/test_synology_common.py | 4 +-- .../drivers/synology/synology_common.py | 28 +++++++++++++------ .../volume/drivers/synology/synology_iscsi.py | 3 +- ...ogy-support-uc-model-9cda442828c2eb32.yaml | 4 +++ 4 files changed, 27 insertions(+), 12 deletions(-) create mode 100644 releasenotes/notes/synology-support-uc-model-9cda442828c2eb32.yaml diff --git a/cinder/tests/unit/volume/drivers/synology/test_synology_common.py b/cinder/tests/unit/volume/drivers/synology/test_synology_common.py index 592ccdab14a..86eb25a3841 100644 --- a/cinder/tests/unit/volume/drivers/synology/test_synology_common.py +++ b/cinder/tests/unit/volume/drivers/synology/test_synology_common.py @@ -1104,10 +1104,10 @@ class SynoCommonTestCase(test.TestCase): def test__check_ds_version(self): ver1 = 'DSM 6.1-9999' - ver2 = 'DSM 6.0.2-9999' + ver2 = 'DSM UC 1.0-9999 Update 2' ver3 = 'DSM 6.0.1-9999 Update 2' ver4 = 'DSM 6.0-9999 Update 2' - ver5 = 'DSM 5.2-9999 ' + ver5 = 'DSM 5.2-9999' out = { 'data': { }, diff --git a/cinder/volume/drivers/synology/synology_common.py b/cinder/volume/drivers/synology/synology_common.py index 09e8029e410..2ddca811d7f 100644 --- a/cinder/volume/drivers/synology/synology_common.py +++ b/cinder/volume/drivers/synology/synology_common.py @@ -20,6 +20,7 @@ import json import math from os import urandom from random import randint +import re from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.asymmetric import padding @@ -856,17 +857,26 @@ class SynoCommon(object): reason=_('data not found')) firmware_version = out['data']['firmware_ver'] - # e.g. 'DSM 6.1-7610', 'DSM 6.0.1-7370', 'DSM 6.0-7321 update 3' - version = firmware_version.split()[1].split('-')[0] - versions = version.split('.') - major, minor, hotfix = (versions[0], - versions[1], - versions[2] if len(versions) is 3 else '0') + # e.g. 'DSM 6.1-7610', 'DSM 6.0.1-7321 update 3', 'DSM UC 1.0-6789' + pattern = re.compile(r"^(.*) (\d+)\.(\d+)(?:\.(\d+))?-(\d+)" + r"(?: [uU]pdate (\d+))?$") + matches = pattern.match(firmware_version) - major, minor, hotfix = (int(major), int(minor), int(hotfix)) + if not matches: + m = (_('DS version %s is not supported') % + firmware_version) + raise exception.VolumeDriverException(message=m) - if (6 > major) or (major is 6 and minor is 0 and hotfix < 2): - m = (_('DS version %s is not supperted') % + os_name = matches.group(1) + major = int(matches.group(2)) + minor = int(matches.group(3)) + hotfix = int(matches.group(4)) if matches.group(4) else 0 + + if os_name == 'DSM UC': + return + elif (os_name == 'DSM' and + ((6 > major) or (major is 6 and minor is 0 and hotfix < 2))): + m = (_('DS version %s is not supported') % firmware_version) raise exception.VolumeDriverException(message=m) diff --git a/cinder/volume/drivers/synology/synology_iscsi.py b/cinder/volume/drivers/synology/synology_iscsi.py index f5c91ce0dd4..029a8898116 100644 --- a/cinder/volume/drivers/synology/synology_iscsi.py +++ b/cinder/volume/drivers/synology/synology_iscsi.py @@ -31,10 +31,11 @@ class SynoISCSIDriver(driver.ISCSIDriver): Version history: 1.0.0 - Initial driver. Provide Cinder minimum features + 1.0.1 - Add support for UC series model """ # ThirdPartySystems wiki page CI_WIKI_NAME = 'Synology_DSM_CI' - VERSION = '1.0.0' + VERSION = '1.0.1' def __init__(self, *args, **kwargs): super(SynoISCSIDriver, self).__init__(*args, **kwargs) diff --git a/releasenotes/notes/synology-support-uc-model-9cda442828c2eb32.yaml b/releasenotes/notes/synology-support-uc-model-9cda442828c2eb32.yaml new file mode 100644 index 00000000000..0653073f39a --- /dev/null +++ b/releasenotes/notes/synology-support-uc-model-9cda442828c2eb32.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Added support for UC-Series model to Synology Cinder driver.