Hello community, here is the log from the commit of package python-rtslib-fb for openSUSE:Factory checked in at 2018-04-19 15:29:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-rtslib-fb (Old) and /work/SRC/openSUSE:Factory/.python-rtslib-fb.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-rtslib-fb" Thu Apr 19 15:29:22 2018 rev:17 rq:597224 version:2.1.67 Changes: -------- --- /work/SRC/openSUSE:Factory/python-rtslib-fb/python-rtslib-fb.changes 2018-04-11 14:02:53.888836711 +0200 +++ /work/SRC/openSUSE:Factory/.python-rtslib-fb.new/python-rtslib-fb.changes 2018-04-19 15:29:24.199264772 +0200 @@ -1,0 +2,15 @@ +Tue Apr 10 16:03:33 UTC 2018 - [email protected] + +- 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 - [email protected] + +- 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 + +------------------------------------------------------------------- Old: ---- rtslib-fb-2.1.fb67.tar.xz New: ---- python-rtslib-fb-2.1.67.tar.xz rbd-support.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-rtslib-fb.spec ++++++ --- /var/tmp/diff_new_pack.oGRNoR/_old 2018-04-19 15:29:24.731242993 +0200 +++ /var/tmp/diff_new_pack.oGRNoR/_new 2018-04-19 15:29:24.731242993 +0200 @@ -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(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 @@ 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 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.oGRNoR/_old 2018-04-19 15:29:24.775241191 +0200 +++ /var/tmp/diff_new_pack.oGRNoR/_new 2018-04-19 15:29:24.779241028 +0200 @@ -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> ++++++ rbd-support.patch ++++++ >From 9496352d515b9f440b68c8534e41899cf1a9570e Mon Sep 17 00:00:00 2001 From: Mike Christie <[email protected]> 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 <[email protected]> --- 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
