Accepting request 596385 from home:dmdiss:bsc1079329_krbd

- Merge RBD support from non-fb version (bsc#1079329)
  + rbd-support.patch (SLE/Leap only, due to LIO kernel dependency)
  + Add explicit Provides for "python-rtslib-rbd"

- Automatically generate version string from upstream tag
  + Retain current fb-removed version format used
  + Rename rtslib-fb-2.1.fb67.tar.xz to python-rtslib-fb-2.1.67.tar.xz and
    cleanup hardcoded duplicate name/version values in spec

OBS-URL: https://build.opensuse.org/request/show/596385
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-rtslib-fb?expand=0&rev=35
This commit is contained in:
Lee Duncan 2018-04-16 20:19:21 +00:00 committed by Git OBS Bridge
parent 4542f882f7
commit 11c7b534cb
6 changed files with 192 additions and 10 deletions

View File

@ -3,8 +3,10 @@
<param name="scm">git</param>
<param name="url">https://github.com/open-iscsi/rtslib-fb.git</param>
<param name="subdir"></param>
<param name="filename">rtslib-fb</param>
<param name="versionformat">2.1.fb67</param>
<param name="filename">python-rtslib-fb</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-pattern">v(\d*\.\d*\.)fb(\d*)</param>
<param name="versionrewrite-replacement">\1\2</param>
<param name="revision">v2.1.fb67</param>
<param name="changesgenerate">enable</param>
</service>

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7c91cf4dbabde6e97c22232ddf2451565a0fef1f077d98971bfe89b030dcb5c0
size 39960

View File

@ -1,3 +1,18 @@
-------------------------------------------------------------------
Tue Apr 10 16:03:33 UTC 2018 - ddiss@suse.com
- Merge RBD support from non-fb version (bsc#1079329)
+ rbd-support.patch (SLE/Leap only, due to LIO kernel dependency)
+ Add explicit Provides for "python-rtslib-rbd"
-------------------------------------------------------------------
Tue Apr 10 12:41:16 UTC 2018 - ddiss@suse.com
- Automatically generate version string from upstream tag
+ Retain current fb-removed version format used
+ Rename rtslib-fb-2.1.fb67.tar.xz to python-rtslib-fb-2.1.67.tar.xz and
cleanup hardcoded duplicate name/version values in spec
-------------------------------------------------------------------
Mon Apr 09 21:41:01 UTC 2018 - lduncan@suse.com

View File

@ -16,18 +16,17 @@
#
%define oname rtslib-fb
%define realver 2.1.fb67
%define dbdir %{_sysconfdir}/target
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-%{oname}
Name: python-rtslib-fb
Version: 2.1.67
Release: 0%{?dist}
Summary: API for Linux kernel SCSI target (aka LIO)
License: Apache-2.0
Group: Development/Languages/Python
Url: http://github.com/open-iscsi/rtslib-fb.git
Source: %{oname}-%{realver}.tar.xz
Source: %{name}-%{version}.tar.xz
Patch1: rbd-support.patch
BuildRequires: %{python_module devel}
BuildRequires: %{python_module pyudev}
BuildRequires: %{python_module setuptools}
@ -39,6 +38,11 @@ Requires(post): update-alternatives
Requires(postun): update-alternatives
Provides: python-rtslib = %{version}-%{release}
Obsoletes: python-rtslib
%if 0%{?sle_version} == 150000
# explicit Provides advertising RBD support
Provides: python-rtslib-rbd = %{version}
Obsoletes: python-rtslib-rbd < %{version}
%endif
BuildArch: noarch
%python_subpackages
@ -48,7 +52,11 @@ SCSI target, present in 3.x Linux kernel versions. rtslib-fb is licensed under
the Apache 2.0 license. Contributions are welcome
%prep
%setup -q -n %{oname}-%{realver}
%setup -q
%if 0%{?sle_version} == 150000
# RBD support is dependent on LIO changes present in the SLE/Leap kernel
%patch1 -p1
%endif
%build
%python_build

157
rbd-support.patch Normal file
View File

@ -0,0 +1,157 @@
From 9496352d515b9f440b68c8534e41899cf1a9570e Mon Sep 17 00:00:00 2001
From: Mike Christie <mchristi@redhat.com>
Date: Wed, 29 Jul 2015 04:28:02 -0500
Subject: [PATCH] rbd support
rtslib-fb-rbd-support.patch obtained from:
https://marc.info/?l=ceph-devel&m=143816209010058
Reviewed-by: David Disseldorp <ddiss@suse.de>
---
rtslib/__init__.py | 1 +
rtslib/tcm.py | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 104 insertions(+)
diff --git a/rtslib/__init__.py b/rtslib/__init__.py
index 568619e..1a5bee5 100644
--- a/rtslib/__init__.py
+++ b/rtslib/__init__.py
@@ -32,6 +32,7 @@ from .fabric import FabricModule
from .tcm import FileIOStorageObject, BlockStorageObject
from .tcm import PSCSIStorageObject, RDMCPStorageObject, UserBackedStorageObject
+from .tcm import RBDStorageObject
from .tcm import StorageObjectFactory
from .alua import ALUATargetPortGroup
diff --git a/rtslib/tcm.py b/rtslib/tcm.py
index 1aeea23..17df8e9 100644
--- a/rtslib/tcm.py
+++ b/rtslib/tcm.py
@@ -780,6 +780,107 @@ class BlockStorageObject(StorageObject):
d['dev'] = self.udev_path
return d
+class RBDStorageObject(StorageObject):
+ '''
+ An interface to configFS storage objects for RBD backstore.
+ '''
+
+ # RBDStorageObject private stuff
+
+ def __init__(self, name, dev=None, wwn=None, readonly=False,
+ write_back=False):
+ '''
+ A RBDIOStorageObject can be instantiated in two ways:
+ - B{Creation mode}: If I{dev} is specified, the underlying configFS
+ object will be created with that parameter.
+ No RBDIOStorageObject with the same I{name} can pre-exist in
+ the parent Backstore in that mode.
+ - B{Lookup mode}: If I{dev} is not set, then the
+ RBDIOStorageObject will be bound to the existing configFS
+ object in the parent Backstore having the specified
+ I{name}. The underlying configFS object must already exist in
+ that mode, or instantiation will fail.
+
+ @param name: The name of the RBDIOStorageObject.
+ @type name: string
+ @param dev: The path to the backend rbd device to be used.
+ - Example: I{dev="/dev/sda"}.
+ - The only device type that is accepted I{TYPE_DISK}.
+ For other device types, use pscsi.
+ @type dev: string
+ @param wwn: T10 WWN Unit Serial, will generate if None
+ @type wwn: string
+ @return: A RBDIOStorageObject object.
+ '''
+
+ if dev is not None:
+ super(RBDStorageObject, self).__init__(name, 'create')
+ try:
+ self._configure(dev, wwn, readonly)
+ except:
+ self.delete()
+ raise
+ else:
+ super(RBDStorageObject, self).__init__(name, 'lookup')
+
+ def _configure(self, dev, wwn, readonly):
+ self._check_self()
+ if get_blockdev_type(dev) != 0:
+ raise RTSLibError("Device %s is not a TYPE_DISK rbd device" % dev)
+ if is_dev_in_use(dev):
+ raise RTSLibError("Cannot configure StorageObject because "
+ + "device %s is already in use" % dev)
+ self._set_udev_path(dev)
+ self._control("udev_path=%s" % dev)
+ self._control("readonly=%d" % readonly)
+ self._enable()
+
+ super(RBDStorageObject, self)._configure(wwn)
+
+ def _get_major(self):
+ self._check_self()
+ return int(self._parse_info('Major'))
+
+ def _get_minor(self):
+ self._check_self()
+ return int(self._parse_info('Minor'))
+
+ def _get_size(self):
+ # udev_path doesn't work here, what if LV gets renamed?
+ return get_size_for_disk_name(self._parse_info('device')) * int(self._parse_info('SectorSize'))
+
+ def _get_wb_enabled(self):
+ self._check_self()
+ return bool(int(self.get_attribute("emulate_write_cache")))
+
+ def _get_readonly(self):
+ self._check_self()
+ # 'readonly' not present before kernel 3.6
+ try:
+ return bool(int(self._parse_info('readonly')))
+ except AttributeError:
+ return False
+
+ # RBDStorageObject public stuff
+
+ major = property(_get_major,
+ doc="Get the block device major number")
+ minor = property(_get_minor,
+ doc="Get the block device minor number")
+ size = property(_get_size,
+ doc="Get the block device size")
+ write_back = property(_get_wb_enabled,
+ doc="True if write-back, False if write-through (write cache disabled)")
+ readonly = property(_get_readonly,
+ doc="True if the device is read-only, False if read/write")
+
+ def dump(self):
+ d = super(RBDStorageObject, self).dump()
+ d['write_back'] = self.write_back
+ d['readonly'] = self.readonly
+ d['wwn'] = self.wwn
+ d['dev'] = self.udev_path
+ return d
class UserBackedStorageObject(StorageObject):
'''
@@ -897,6 +998,7 @@ so_mapping = {
"fileio": FileIOStorageObject,
"iblock": BlockStorageObject,
"block": BlockStorageObject,
+ "rbd": RBDStorageObject,
"user": UserBackedStorageObject,
}
@@ -907,6 +1009,7 @@ bs_params = {
FileIOStorageObject: dict(name='fileio'),
BlockStorageObject: dict(name='block', alt_dirprefix='iblock'),
UserBackedStorageObject: dict(name='user'),
+ RBDStorageObject: dict(name='rbd'),
}
bs_cache = {}
--
2.13.6

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5f7a668677dd8ac266090626184af1e90709b5d3988933b2015771636f157324
size 39944