Sync from SUSE:SLFO:Main python-rtslib-fb revision e2f1b1353cfd3969c1f31cac8dab20dc

This commit is contained in:
Adrian Schröter 2024-05-03 22:54:08 +02:00
commit 931f4555ca
10 changed files with 855 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

18
_service Normal file
View File

@ -0,0 +1,18 @@
<services>
<service name="tar_scm" mode="disabled">
<param name="scm">git</param>
<param name="url">https://github.com/open-iscsi/rtslib-fb.git</param>
<param name="subdir"></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.75</param>
<param name="changesgenerate">enable</param>
</service>
<service name="recompress" mode="disabled">
<param name="file">*rtslib-fb*.tar</param>
<param name="compression">xz</param>
</service>
<service name="set_version" mode="disabled"/>
</services>

4
_servicedata Normal file
View File

@ -0,0 +1,4 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/open-iscsi/rtslib-fb.git</param>
<param name="changesrevision">5469e71cfc47a5a869dae6bc7c1e0b2db7ae4c6a</param></service></servicedata>

BIN
python-rtslib-fb-v2.1.75.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

320
python-rtslib-fb.changes Normal file
View File

@ -0,0 +1,320 @@
-------------------------------------------------------------------
Fri Apr 21 12:33:32 UTC 2023 - Dirk Müller <dmueller@suse.com>
- add sle15_python_module_pythons (jsc#PED-68)
-------------------------------------------------------------------
Fri May 06 16:54:21 UTC 2022 - lduncan@suse.com
- Update to version v2.1.75: (bsc#1206720)
* version 2.1.75
* rtslib: fix missing ':' after else statement
* dbroot: let the user change the dbroot directory freely.
* handle target kernel module new attribute cpus_allowed_list
* fix "This _Backstore already exists in configFS" exception
* Check whether the enable attribute exists before fread
* Filter fabric wwns by reading driver name
* Add support of efct fabric driver
* tcmu: add support for config param data_pages_per_blk
* Relax restrictions on TPG Tag range
* rtslib: Use O_RDWR for sg devices alone.
-------------------------------------------------------------------
Sun Jan 30 17:07:00 UTC 2022 - Mykola Golub <mgolub@suse.com>
- Update parameters description in rbd-support.patch
- Add rbd-support-disable_emulate_legacy_capacity.patch (bsc#1199090)
-------------------------------------------------------------------
Thu Sep 30 19:14:14 UTC 2021 - Stefan Schubert <schubi@suse.de>
- Use libalternatives instead of update-alternatives.
-------------------------------------------------------------------
Sat Nov 7 18:05:32 UTC 2020 - Lee Duncan <lduncan@suse.com>
- Fixed issue in SPEC file w/r/t package split with common.
Now, packages python3-rtslib-fb and python-rtslib-fb-common
are built, and the former depends on the latter. The common
package has the non-python parts (documentation, etc),
and the python3-* part the python parts.
-------------------------------------------------------------------
Fri Oct 23 18:20:23 UTC 2020 - Lee Duncan <lduncan@suse.com>
- Split package into "common" part, python-rtslib-fb-common, which
is python-verserion-agnostic, and either python2-rtslib-comon-fb
or python3-rtslib-fb. This maens common files, like man pages,
don't have to be duplicated.
-------------------------------------------------------------------
Fri Oct 16 18:47:04 UTC 2020 - lduncan@suse.com
- Update to version v2.1.74:
* version 2.1.74
* rtslib: safely call shutil.copy()
* Fix fail when target_core_mod doesn't exists
* Fix EPERM errors with scsi_generic devices
Also, add this commit submitted upstream:
* rtslib-Fix-handling-of-sysfs-RW-attrs-that-are-actually-RO.patch
And this commit for SUSE:
* rtslib-target-service-for-suse.patch
Lastly, this package now installs systemd unit file target.service,
which will replace eventually targetcli.service (from the
targetcli-fb package), since this matches how upstream works.
This also meant updating the SPEC file.
-------------------------------------------------------------------
Thu Aug 27 02:10:59 UTC 2020 - Matthew Oliver <moliver@suse.com>
- Updated the rbd-support.patch (bsc#1175808):
* Fixed the signiture of the RBDStorageObject to match changes made
to parent StorageObject class.
-------------------------------------------------------------------
Tue Jun 30 17:49:04 UTC 2020 - lduncan@suse.com
- Update to version v2.1.73 (bsc#1173257 CVE-2020-14019):
* version 2.1.73
* save_to_file: fix fd open mode
* saveconfig: copy temp configfile with permissions
* saveconfig: open the temp configfile with modes set
* Fix "is not" with a literal SyntaxWarning
* Fix an incorrect config path in two comments
* version 2.1.72
* Do not change dbroot after drivers have been registered
* Remove '_if_needed' from RTSRoot._set_dbroot()'s name
Replacing old tarball with python-rtslib-fb-v2.1.73.tar.xz
-------------------------------------------------------------------
Tue Mar 03 15:46:53 UTC 2020 - lduncan@suse.com
- Update to version v2.1.71 (jre#SLE-7751):
* version 2.1.71
* restoreconfig: fix skipping of targets [re]loading
Replacing python-rtslib-fb-v2.1.70.tar.xz with python-rtslib-fb-v2.1.71.tar.xz
-------------------------------------------------------------------
Mon Sep 16 18:14:18 UTC 2019 - lduncan@suse.com
- Update to version v2.1.70:
* version 2.1.70
* restoreconfig: add ability to restore/reload single target or storage_object
* rtslib: fix __version__
* saveconfig: add hw_block_size support in control string
* remove extra semicolons in _get_saveconf
* Add 'readable' param to Group list_*() methods
* Handle write-only parameters like attributes
* save_to_file() function breaks symbolic link when saving configuration
* Handle write-only attributes.
* Allow bs_cache to be bypassed
* report the correct size for partitions
* restoreconfig: support restore when list is non-empty
Replacing python-rtslib-fb-2.1.69.tar.xz with python-rtslib-fb-v2.1.70.tar.xz,
and removing patches:
* 0001-Handle-write-only-attributes.patch
* 0002-Handle-write-only-parameters-like-attributes.patch
* 0003-Add-readable-param-to-Group-list_-methods.patch
-------------------------------------------------------------------
Mon Feb 18 17:56:57 UTC 2019 - lduncan@suse.com
- Added 3 patches subbmitted and accepted upstream, to deal with
possibly-write-only sysfs attributes (bsc#1123933), adding:
* 0001-Handle-write-only-attributes.patch
* 0002-Handle-write-only-parameters-like-attributes.patch
* 0003-Add-readable-param-to-Group-list_-methods.patch
-------------------------------------------------------------------
Fri Dec 7 09:29:54 UTC 2018 - ddiss@suse.com
- Enable RBD support for SLE/Leap 15+ (bsc#1118516)
-------------------------------------------------------------------
Tue Dec 4 12:54:00 UTC 2018 - Matej Cepl <mcepl@suse.com>
- Remove superfluous devel dependency for noarch package
-------------------------------------------------------------------
Thu Oct 18 23:27:42 UTC 2018 - opensuse-packaging@opensuse.org
- Update to version 2.1.69:
* version 2.1.fb69
* fix compiler warning
* version 2.1.fb68
* Fix typo
* - remove underscore in hostname
* tcm: allow to enable asynchronous I/O for file backing stores
* saveconfig: way for block-level save with delete command
* saveconfig: fix missing import
* saveconfig: handle no attr exception in _parse_info()
* saveconfig: fix failure in absence of save file
* saveconfig: dump control string containing control=value tuples
* restoreconfig: fix alua tpg config setup
* tcmu: add control constructor arg
* save_to_file: support saveconfig at storage object level
* Allow creating more than 256 LUNs per target
* Ship a systemd service file
Which replaces python-rtslib-fb-2.1.67.tar.xz with
python-rtslib-fb-2.1.69.tar.xz, and updates the SPEC file as well.
-------------------------------------------------------------------
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
- Update to version 2.1.fb67:
* Add missing dependency on six in setup.py
* Display a more meaningful error when targetcli cannot change "dbroot"
* Raise an error about failing to change the dbroot value only if the directory does not exist
* More compatibility syntax for legacy distros
* Remove hba-only directories in clear_existing()
* Correct name for Xen pvscsi
* version 2.1.fb65
* Fix unqualified reference to pyudev.Device
* version 2.1.fb66
* create: remove stale hba-only dir
* version 2.1.fb67
- This replaced rtslib-fb-2.1.fb64.tar.xz with
rtslib-fb-2.1.fb67.tar.xz, and it also removed
the patch correct-name-for-xen-pvscsi.patch,
since it is already in the updated tarball
-------------------------------------------------------------------
Sun Feb 25 08:09:45 UTC 2018 - olaf@aepfle.de
- Fix upgrade path by provide/obsolete python-rtslib (bsc#1082693)
-------------------------------------------------------------------
Wed Jan 24 18:43:43 UTC 2018 - lduncan@suse.com
- Fix incorrect naming for XEN (bsc#1076455), adding patch:
* correct-name-for-xen-pvscsi.patch
-------------------------------------------------------------------
Tue Jan 9 14:37:15 UTC 2018 - tchvatal@suse.com
- Fix the conflict to the rtslib properly
-------------------------------------------------------------------
Wed Jan 3 16:13:57 UTC 2018 - tchvatal@suse.com
- Drop the epydoc dependency/documentation generating from the package
to allow building in py3 only enviroment
-------------------------------------------------------------------
Sun Dec 10 21:14:08 UTC 2017 - lduncan@suse.com
- Converting RPM SPEC file to singlespec format (bsc#1045332),
updating SPEC file only.
- ran 'spec-cleaner' on SPEC file to clean it up.
- Converted from manually-added rtslib-fb-2.1.fb64.tar.gz to
tar_scm service-retrieved rtslib-fb-2.1.fb64.tar.xz
-------------------------------------------------------------------
Thu Aug 17 08:03:10 UTC 2017 - lszhu@suse.com
- Update to version 2.1.fb64
*Improve ALUA and TCMU support, as well as moving the default
directory for APTPL files from /var/target to /etc/target
for better FHS compliance.
*Remove patch Switch-target-driver-DB-root-dir-to-etc-target.patch
from the spec file because upstream already has this change.
-------------------------------------------------------------------
Thu Jun 8 21:37:20 UTC 2017 - lduncan@suse.com
- Enable Persistent Reservations (bsc#1042944):
* Add patch Switch-target-driver-DB-root-dir-to-etc-target.patch
* Add /etc/target/pr and /etc/target/alua to SPEC file
-------------------------------------------------------------------
Thu Apr 13 07:11:02 UTC 2017 - hare@suse.com
- Update to version 2.1.63 (bsc#1032833):
* Get/Set LUN's ALUA group
* Add ALUA restore support
* Delete ALUA groups with its storage object
* version 2.1.fb62
* Do not set alua_tg_pt_gp if not supported
* Add ability to invalidate caches
* Add ALUA supported method
* Don't raise exception when getting/setting a LUNs ALUA group
* update to 2.1.fb63
-------------------------------------------------------------------
Fri Jun 24 23:12:29 UTC 2016 - lduncan@suse.com
- Updated spec file: Removed Provides/Obsoletes for python-rtslib,
and added Conflicts for same (bsc#986475)
-------------------------------------------------------------------
Tue Jun 14 17:12:34 UTC 2016 - lduncan@suse.com
- Fixing build issue: removed 'noarch' from main package
-------------------------------------------------------------------
Tue Jun 14 17:12:33 UTC 2016 - lduncan@suse.com
- Updated SPEC file:
* added Requires for pyudev (bsc#984563)
* removed BuildRequires of pyudev for doc sub-package
-------------------------------------------------------------------
Wed Apr 20 16:17:30 UTC 2016 - lduncan@suse.com
- Update to version 2.1.fb60
* no changelog available, but git log shows 59 changes,
some trivial
-------------------------------------------------------------------
Tue May 12 14:58:13 UTC 2015 - benoit.monin@gmx.fr
- update to version 2.1.51:
* no changelog available
-------------------------------------------------------------------
Wed Sep 3 12:01:09 UTC 2014 - dmueller@suse.com
- update to 2.1.49:
* Improve error message when NetworkPortal restore fails
* Python 3.x porting fixes
* targetctl: A missing restore file is not an error
* Add a message if no configfile is found
* Add StorageObjectFactory
* Convert all exceptions in set_parameter/attribute to RTSLibError
* Change set_parameters/attributes to take an err_func
* Fix missing err_func parameter to set_attributes
* '!' allowed character in block and partition names
* Don't add to cache if cfs create fails
* Don't lower-case return values from _parse_info functions
-------------------------------------------------------------------
Tue Jan 14 14:57:28 UTC 2014 - speilicke@suse.com
- Conflict with python-rtslib
-------------------------------------------------------------------
Mon Jan 13 13:25:15 UTC 2014 - dmueller@suse.com
- update to 2.1.43:
* various bugfixes
-------------------------------------------------------------------
Mon Oct 28 12:21:13 UTC 2013 - dmueller@suse.com
- Initial package (2.1.40)

154
python-rtslib-fb.spec Normal file
View File

@ -0,0 +1,154 @@
#
# spec file for package python-rtslib-fb
#
# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%if 0%{?suse_version} > 1500
%bcond_without libalternatives
%else
%bcond_with libalternatives
%endif
%define dbdir %{_sysconfdir}/target
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%{?sle15_python_module_pythons}
Name: python-rtslib-fb
Version: 2.1.75
Release: 0%{?dist}
Summary: API for Linux kernel SCSI target (aka LIO)
License: Apache-2.0
Group: Development/Languages/Python
URL: https://github.com/open-iscsi/rtslib-fb.git
Source: python-rtslib-fb-v%{version}.tar.xz
Patch1: rbd-support.patch
Patch2: rtslib-Fix-handling-of-sysfs-RW-attrs-that-are-actually-RO.patch
Patch3: rtslib-target-service-for-suse.patch
Patch4: rbd-support-disable_emulate_legacy_capacity.patch
BuildRequires: %{python_module pyudev}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module six}
BuildRequires: fdupes
BuildRequires: python-rpm-macros >= 20210929
Requires: python-pyudev
%define oldpython python
%define cpkg %{oldpython}-rtslib-fb-common
Requires: %{cpkg}
%if %{with libalternatives}
Requires: alts
BuildRequires: alts
%else
Requires(post): update-alternatives
Requires(postun):update-alternatives
%endif
Provides: python-rtslib = %{version}-%{release}
Obsoletes: python-rtslib < %{version}
%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
%description
rtslib-fb is an object-based Python library for configuring the LIO generic
SCSI target, present in 3.x Linux kernel versions. rtslib-fb is licensed under
the Apache 2.0 license. Contributions are welcome
%package -n %{cpkg}
Summary: Common python-rtslib-fb subpackage for Python 2 or 3
Group: Development/Languages/Python
Obsoletes: %{name} < %{version}-%{release}
%description -n %{cpkg}
python-rtslib-fb-common is the invariant base package needed by both
python2-rtslib-fb and python3-rtslib-fb.
%prep
%setup -q -n python-rtslib-fb-v%{version}
%if 0%{?sle_version} >= 150000
# RBD support is dependent on LIO changes present in the SLE/Leap kernel
%patch1 -p1
%patch4 -p1
%endif
%patch2 -p1
%patch3 -p1
%build
%python_build
%install
%python_install
%python_clone -a %{buildroot}/%{_bindir}/targetctl
%fdupes %{buildroot}
install -d -m755 %{buildroot}%{_mandir}/man5
install -m644 doc/saveconfig.json.5 %{buildroot}%{_mandir}/man5
install -d -m755 %{buildroot}%{_mandir}/man8
install -m644 doc/targetctl.8 %{buildroot}%{_mandir}/man8
install -d -m755 %{buildroot}/%{dbdir}
install -d -m755 %{buildroot}/%{dbdir}/pr
install -d -m755 %{buildroot}/%{dbdir}/alua
mkdir -p %{buildroot}/%{_unitdir}/
install -m644 systemd/target.service %{buildroot}/%{_unitdir}
install -d -m755 %{buildroot}%{_sbindir}
ln -s %{_sbindir}/service %{buildroot}/%{_sbindir}/rctarget
%post
%python_install_alternative targetctl
%{service_add_post target.service}
%postun
%python_uninstall_alternative targetctl
%{service_del_postun target.service}
%pre
%{service_add_pre target.service}
# If libalternatives is used: Removing old update-alternatives entries.
%python_libalternatives_reset_alternative targetctl
%preun
%{stop_on_removal target}
%{service_del_preun target.service}
%post -n %{cpkg}
%{service_add_post target.service}
%postun -n %{cpkg}
%{service_del_postun target.service}
%pre -n %{cpkg}
%{service_add_pre target.service}
%preun -n %{cpkg}
%{service_del_preun target.service}
%files %{python_files}
%python_alternative %{_bindir}/targetctl
%{python_sitelib}/*
%files -n %{cpkg}
%license COPYING
%doc README.md
%dir %{dbdir}
%dir %{dbdir}/pr
%dir %{dbdir}/alua
%{_unitdir}/target.service
%{_sbindir}/rctarget
%doc %{_mandir}/man5/saveconfig.json.5.gz
%doc %{_mandir}/man8/targetctl.8.gz
%changelog

View File

@ -0,0 +1,96 @@
From 4e633572ef8a9b07d1ae1252cf4c2b2daf673998 Mon Sep 17 00:00:00 2001
From: Mykola Golub <mgolub@suse.com>
Date: Thu, 3 Feb 2022 18:40:47 +0000
Subject: [PATCH] disable emulate_legacy_capacity on creating RBD backstore
When rbd image has object-map feature set, `enable` will fail
unless emulate_legacy_capacity (default is 1) is set to 0.
Provide a possibility to disable emulate_legacy_capacity when
creating backstore (before enabling it) via additional
disable_emulate_legacy_capacity parameter.
We might eventually want to merge the rbd support patches into one,
but right now keeping them separate looks useful for tracking the
change (feature) added here.
This patch is for the changes added by "rbd support" patch
(rbd-support.patch) and thus it is not needed upstream until
the rbd support is added upstream.
Eventualy we might want to merge this and "rbd support" patches
into one. For now it looks useful to keep it separate to track
the change (feature) added by this patch.
ceph-iscsi needs this change to support rbd images with
object-map feature enabled.
Reviewed-by: David Disseldorp <ddiss@suse.de>
Signed-off-by: Mykola Golub <mgolub@suse.com>
---
rtslib/tcm.py | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/rtslib/tcm.py b/rtslib/tcm.py
index d42a78f..3bf599d 100644
--- a/rtslib/tcm.py
+++ b/rtslib/tcm.py
@@ -809,7 +809,8 @@ class RBDStorageObject(StorageObject):
# RBDStorageObject private stuff
def __init__(self, name, dev=None, wwn=None, readonly=False,
- write_back=False, index=None):
+ write_back=False, index=None,
+ disable_emulate_legacy_capacity=False):
'''
A RBDIOStorageObject can be instantiated in two ways:
- B{Creation mode}: If I{dev} is specified, the underlying configFS
@@ -822,6 +823,10 @@ class RBDStorageObject(StorageObject):
I{name}. The underlying configFS object must already exist in
that mode, or instantiation will fail.
+ Note, setting disable_emulate_legacy_capacity to True is dangerous
+ for any image that has previously been iSCSI exported with
+ emulate_legacy_capacity enabled.
+
@param name: The name of the RBDIOStorageObject.
@type name: string
@param dev: The path to the backend rbd device to be used.
@@ -835,20 +840,23 @@ class RBDStorageObject(StorageObject):
@type readonly: boolean
@param write_back: Enable write back cache.
@type write_back: boolean
+ @param disable_emulate_legacy_capacity: Disable emulate_legacy_capacity mode.
+ @type disable_emulate_legacy_capacity: boolean
@return: A RBDIOStorageObject object.
'''
if dev is not None:
super(RBDStorageObject, self).__init__(name, 'create', index)
try:
- self._configure(dev, wwn, readonly)
+ self._configure(dev, wwn, readonly,
+ disable_emulate_legacy_capacity)
except:
self.delete()
raise
else:
super(RBDStorageObject, self).__init__(name, 'lookup', index)
- def _configure(self, dev, wwn, readonly):
+ def _configure(self, dev, wwn, readonly, disable_emulate_legacy_capacity):
self._check_self()
if get_blockdev_type(dev) != 0:
raise RTSLibError("Device %s is not a TYPE_DISK rbd device" % dev)
@@ -858,6 +866,8 @@ class RBDStorageObject(StorageObject):
self._set_udev_path(dev)
self._control("udev_path=%s" % dev)
self._control("readonly=%d" % readonly)
+ if disable_emulate_legacy_capacity:
+ self.set_attribute("emulate_legacy_capacity", 0)
self._enable()
super(RBDStorageObject, self)._configure(wwn)
--
2.33.1

154
rbd-support.patch Normal file
View File

@ -0,0 +1,154 @@
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(+)
--- 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
--- a/rtslib/tcm.py
+++ b/rtslib/tcm.py
@@ -801,6 +801,111 @@ 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, index=None):
+ '''
+ 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
+ @param readonly: Use to read only.
+ @type readonly: boolean
+ @param write_back: Enable write back cache.
+ @type write_back: boolean
+ @return: A RBDIOStorageObject object.
+ '''
+
+ if dev is not None:
+ super(RBDStorageObject, self).__init__(name, 'create', index)
+ try:
+ self._configure(dev, wwn, readonly)
+ except:
+ self.delete()
+ raise
+ else:
+ super(RBDStorageObject, self).__init__(name, 'lookup', index)
+
+ 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):
'''
@@ -940,6 +1041,7 @@ so_mapping = {
"fileio": FileIOStorageObject,
"iblock": BlockStorageObject,
"block": BlockStorageObject,
+ "rbd": RBDStorageObject,
"user": UserBackedStorageObject,
}
@@ -950,6 +1052,7 @@ bs_params = {
FileIOStorageObject: dict(name='fileio'),
BlockStorageObject: dict(name='block', alt_dirprefix='iblock'),
UserBackedStorageObject: dict(name='user'),
+ RBDStorageObject: dict(name='rbd'),
}
bs_cache = {}

View File

@ -0,0 +1,65 @@
From 10f23379b2d3e2226782e2d6185bee22cc586170 Mon Sep 17 00:00:00 2001
From: Lee Duncan <lduncan@suse.com>
Date: Thu, 15 Oct 2020 14:21:20 -0700
Subject: [PATCH] Fix handling of sysfs RW attrs that are actually RO
Kernel commit 356ba2a8bc8d ("scsi: target: tcmu: Make
gr_support and alua_support attributes writable"), made the
alua_support and pgr_support sysfs attributes writable
so that individual target drivers could change them.
This means that the filesystem attributes might saw
read-write, but the attributes can in fact be read-only.
When a user tries to write to them, in this case,
they EINVAL.
This causes rtslib to throw error messages when one does
a "targetctl restore" like these:
> Storage Object fileio/file01: Cannot set attribute alua_support: [Errno 22] Invalid argument, skipped
> Storage Object fileio/file01: Cannot set attribute pgr_support: [Errno 22] Invalid argument, skipped
While these messages are benign, they will cause confusion, since
(1) there's nothing wrong, and (2) they didn't occur before above-
mentioned kernel commit.
This fix tells rtslib to ignore errno 22 for these two attributes.
---
rtslib/node.py | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/rtslib/node.py b/rtslib/node.py
index 415f45d675f9..ed08030002bb 100644
--- a/rtslib/node.py
+++ b/rtslib/node.py
@@ -20,6 +20,7 @@ under the License.
import os
import stat
+import errno
from .utils import fread, fwrite, RTSLibError, RTSLibNotInCFS
@@ -28,6 +29,10 @@ class CFSNode(object):
# Where is the configfs base LIO directory ?
configfs_dir = '/sys/kernel/config/target'
+ # these two attributes can have file permissions of
+ # read-write but be read-only
+ may_be_ro_attrs = ['alua_support', 'pgr_support']
+
# CFSNode private stuff
def __init__(self):
@@ -172,7 +177,8 @@ class CFSNode(object):
try:
fwrite(path, "%s" % str(value))
except Exception as e:
- raise RTSLibError("Cannot set attribute %s: %s" % (attribute, e))
+ if attribute not in self.may_be_ro_attrs or e.errno != errno.EINVAL:
+ raise RTSLibError("Cannot set attribute %s: %s" % (attribute, e))
def get_attribute(self, attribute):
'''
--
2.26.2

View File

@ -0,0 +1,18 @@
--- a/systemd/target.service 2019-01-31 11:11:28.517558290 -0800
+++ b/systemd/target.service 2020-10-16 09:34:28.888091013 -0700
@@ -6,10 +6,13 @@ After=sys-kernel-config.mount network.ta
[Service]
Type=oneshot
RemainAfterExit=yes
-ExecStart=/usr/bin/targetctl restore
+Environment=CONFIG_FILE=/etc/target/saveconfig.json
+EnvironmentFile=-/etc/sysconfig/target
+ExecStart=/usr/bin/targetctl restore $CONFIG_FILE
+ExecStop=/usr/bin/targetctl save $CONFIG_FILE
ExecStop=/usr/bin/targetctl clear
SyslogIdentifier=target
[Install]
WantedBy=multi-user.target
-
+Alias=targetcli.service