Accepting request 775439 from home:lee_duncan:branches:Base:System
- Update to version 2.1.51 from 2.1.49, which includes the addition of a targetcli daemon, which can be used to speed up batch processing. See changes file for details. OBS-URL: https://build.opensuse.org/request/show/775439 OBS-URL: https://build.opensuse.org/package/show/Base:System/targetcli-fb?expand=0&rev=38
This commit is contained in:
parent
2207f820d2
commit
ddb82c3654
@ -1,29 +0,0 @@
|
|||||||
From fa71860b0d819a691683c1fdcb70c255653b5851 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Disseldorp <ddiss@suse.de>
|
|
||||||
Date: Tue, 15 Jan 2019 12:04:49 +0100
|
|
||||||
Subject: [PATCH] Add emulate_pr backstore attribute
|
|
||||||
|
|
||||||
Added to the kernel via b49d6f7885306ee636d5c1af52170f3069ccf5f7, the
|
|
||||||
emulate_pr attribute can be used to disable support for SCSI-2
|
|
||||||
(RESERVE/RELEASE) and Persistent Reservations.
|
|
||||||
|
|
||||||
Signed-off-by: David Disseldorp <ddiss@suse.de>
|
|
||||||
---
|
|
||||||
targetcli/ui_backstore.py | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/targetcli/ui_backstore.py b/targetcli/ui_backstore.py
|
|
||||||
index efa532f..cc2cf2b 100644
|
|
||||||
--- a/targetcli/ui_backstore.py
|
|
||||||
+++ b/targetcli/ui_backstore.py
|
|
||||||
@@ -670,6 +670,7 @@ class UIStorageObject(UIRTSLibNode):
|
|
||||||
'emulate_tpws': ('number', 'If set to 1, enable Thin Provisioning Write Same.'),
|
|
||||||
'emulate_ua_intlck_ctrl': ('number', 'If set to 1, enable Unit Attention Interlock.'),
|
|
||||||
'emulate_write_cache': ('number', 'If set to 1, turn on Write Cache Enable.'),
|
|
||||||
+ 'emulate_pr': ('number', 'If set to 1, enable SCSI Reservations.'),
|
|
||||||
'enforce_pr_isids': ('number', 'If set to 1, enforce persistent reservation ISIDs.'),
|
|
||||||
'force_pr_aptpl': ('number', 'If set to 1, force SPC-3 PR Activate Persistence across Target Power Loss operation.'),
|
|
||||||
'fabric_max_sectors': ('number', 'Maximum number of sectors the fabric can transfer at once.'),
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,20 +1,22 @@
|
|||||||
From 7374ba0e53d8e6af4abbb02bd60f35ed541b94f5 Mon Sep 17 00:00:00 2001
|
From 7374ba0e53d8e6af4abbb02bd60f35ed541b94f5 Mon Sep 17 00:00:00 2001
|
||||||
From: David Disseldorp <ddiss@suse.de>
|
From: David Disseldorp <ddiss@suse.de>
|
||||||
Date: Tue, 10 Apr 2018 16:22:54 +0200
|
Date: Tue, 10 Apr 2018 16:22:54 +0200
|
||||||
Subject: [PATCH 3/4] Split out blockdev readonly state detection helper
|
Patch-mainline: never (SUSE-specific)
|
||||||
|
Subject: Split out blockdev readonly state detection helper
|
||||||
|
|
||||||
So that it can be reused for RBD backstores.
|
So that it can be reused for RBD backstores.
|
||||||
|
|
||||||
|
Note: not accepted upstream, but still needed
|
||||||
|
here for our rbd stuff. (lduncan@suse.com)
|
||||||
|
|
||||||
Signed-off-by: David Disseldorp <ddiss@suse.de>
|
Signed-off-by: David Disseldorp <ddiss@suse.de>
|
||||||
---
|
---
|
||||||
targetcli/ui_backstore.py | 40 ++++++++++++++++++++--------------------
|
targetcli/ui_backstore.py | 40 ++++++++++++++++++++--------------------
|
||||||
1 file changed, 20 insertions(+), 20 deletions(-)
|
1 file changed, 20 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
diff --git a/targetcli/ui_backstore.py b/targetcli/ui_backstore.py
|
|
||||||
index 546d9d2..57dedb1 100644
|
|
||||||
--- a/targetcli/ui_backstore.py
|
--- a/targetcli/ui_backstore.py
|
||||||
+++ b/targetcli/ui_backstore.py
|
+++ b/targetcli/ui_backstore.py
|
||||||
@@ -117,6 +117,25 @@ def complete_path(path, stat_fn):
|
@@ -119,6 +119,25 @@ def complete_path(path, stat_fn):
|
||||||
return sorted(filtered,
|
return sorted(filtered,
|
||||||
key=lambda s: '~'+s if s.endswith('/') else s)
|
key=lambda s: '~'+s if s.endswith('/') else s)
|
||||||
|
|
||||||
@ -40,7 +42,7 @@ index 546d9d2..57dedb1 100644
|
|||||||
|
|
||||||
class UIALUATargetPortGroup(UIRTSLibNode):
|
class UIALUATargetPortGroup(UIRTSLibNode):
|
||||||
'''
|
'''
|
||||||
@@ -519,25 +538,6 @@ class UIBlockBackstore(UIBackstore):
|
@@ -536,25 +555,6 @@ class UIBlockBackstore(UIBackstore):
|
||||||
self.so_cls = UIBlockStorageObject
|
self.so_cls = UIBlockStorageObject
|
||||||
UIBackstore.__init__(self, 'block', parent)
|
UIBackstore.__init__(self, 'block', parent)
|
||||||
|
|
||||||
@ -65,8 +67,8 @@ index 546d9d2..57dedb1 100644
|
|||||||
-
|
-
|
||||||
def ui_command_create(self, name, dev, readonly=None, wwn=None):
|
def ui_command_create(self, name, dev, readonly=None, wwn=None):
|
||||||
'''
|
'''
|
||||||
Creates an Block Storage object. I{dev} is the path to the TYPE_DISK
|
Creates an Block Storage object. "dev" is the path to the TYPE_DISK
|
||||||
@@ -548,7 +548,7 @@ class UIBlockBackstore(UIBackstore):
|
@@ -565,7 +565,7 @@ class UIBlockBackstore(UIBackstore):
|
||||||
ro_string = self.ui_eval_param(readonly, 'string', None)
|
ro_string = self.ui_eval_param(readonly, 'string', None)
|
||||||
if ro_string == None:
|
if ro_string == None:
|
||||||
# attempt to detect block device readonly state via ioctl
|
# attempt to detect block device readonly state via ioctl
|
||||||
@ -75,6 +77,3 @@ index 546d9d2..57dedb1 100644
|
|||||||
else:
|
else:
|
||||||
readonly = self.ui_eval_param(readonly, 'bool', False)
|
readonly = self.ui_eval_param(readonly, 'bool', False)
|
||||||
|
|
||||||
--
|
|
||||||
2.13.6
|
|
||||||
|
|
||||||
|
4
_service
4
_service
@ -5,9 +5,9 @@
|
|||||||
<param name="subdir"></param>
|
<param name="subdir"></param>
|
||||||
<param name="filename">targetcli-fb</param>
|
<param name="filename">targetcli-fb</param>
|
||||||
<param name="versionformat">@PARENT_TAG@</param>
|
<param name="versionformat">@PARENT_TAG@</param>
|
||||||
<param name="versionrewrite-pattern">v(\d*\.\d*\.)fb(\d*)</param>
|
<param name="versionrewrite-pattern">v(\d*\.\d*\.)(\d*)</param>
|
||||||
<param name="versionrewrite-replacement">\1\2</param>
|
<param name="versionrewrite-replacement">\1\2</param>
|
||||||
<param name="revision">v2.1.fb49</param>
|
<param name="revision">v2.1.51</param>
|
||||||
<param name="changesgenerate">enable</param>
|
<param name="changesgenerate">enable</param>
|
||||||
</service>
|
</service>
|
||||||
<service name="recompress" mode="disabled">
|
<service name="recompress" mode="disabled">
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<servicedata>
|
<servicedata>
|
||||||
<service name="tar_scm">
|
<service name="tar_scm">
|
||||||
<param name="url">https://github.com/open-iscsi/targetcli-fb.git</param>
|
<param name="url">https://github.com/open-iscsi/targetcli-fb.git</param>
|
||||||
<param name="changesrevision">4d08771c0e6bf3cacba2ed3d3127dd10a86a7847</param></service></servicedata>
|
<param name="changesrevision">06076aba7e9e9bd4a1e84bac61e85265e8075b8e</param></service></servicedata>
|
@ -1,31 +0,0 @@
|
|||||||
From: Christophe Vu-Brugier <cvubrugier@fastmail.fm>
|
|
||||||
Date: Sat, 11 May 2019 15:15:16 +0200
|
|
||||||
Subject: Do not remove the first digit when auto-completing the TPG tag
|
|
||||||
Git-commit: 311ae0fc49174316c991dd3800c12549632e2c64
|
|
||||||
|
|
||||||
Instead of removing the first three characters of the "tpg" prefix to
|
|
||||||
get matches for the TPG tag number, the code removes four characters,
|
|
||||||
thus erasing the first digit of the TPG tag number.
|
|
||||||
|
|
||||||
This patches fixes issue #134.
|
|
||||||
|
|
||||||
Signed-off-by: Christophe Vu-Brugier <cvubrugier@fastmail.fm>
|
|
||||||
Acked-by: Lee Duncan <lduncan@suse.com>
|
|
||||||
---
|
|
||||||
targetcli/ui_target.py | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/targetcli/ui_target.py b/targetcli/ui_target.py
|
|
||||||
index 6895b38e62b8..0c3fe1b708db 100644
|
|
||||||
--- a/targetcli/ui_target.py
|
|
||||||
+++ b/targetcli/ui_target.py
|
|
||||||
@@ -384,7 +384,7 @@ class UIMultiTPGTarget(UIRTSLibNode):
|
|
||||||
@rtype: list of str
|
|
||||||
'''
|
|
||||||
if current_param == 'tag':
|
|
||||||
- tags = [child.name[4:] for child in self.children]
|
|
||||||
+ tags = [child.name[3:] for child in self.children]
|
|
||||||
completions = [tag for tag in tags if tag.startswith(text)]
|
|
||||||
else:
|
|
||||||
completions = []
|
|
||||||
|
|
@ -1,78 +0,0 @@
|
|||||||
From: Lee Duncan <lduncan@suse.com>
|
|
||||||
Date: Thu, 15 Aug 2019 08:38:35 -0700
|
|
||||||
Subject: iscsi discovery_auth enable is a number not a string
|
|
||||||
Git-commit: dc8d9d83cef8489f3b6aec1609299cdba70eda34
|
|
||||||
|
|
||||||
The discovery_auth attribute group in the /iscsi node
|
|
||||||
has several attributes, and all area treated like strings,
|
|
||||||
even though "enable" is a number in sysfs, accepting either
|
|
||||||
zero or one. It would break backwards compatability to
|
|
||||||
convert this attribute to be a boolean, so at least
|
|
||||||
treat it like a proper number instead of a string.
|
|
||||||
|
|
||||||
This avoids stack dumps like the following when trying
|
|
||||||
to set this attribute to 'true' or 'false':
|
|
||||||
|
|
||||||
> /iscsi> set discovery_auth enable=false
|
|
||||||
> Traceback (most recent call last):
|
|
||||||
> File "/usr/bin/targetcli", line 122, in <module>
|
|
||||||
> main()
|
|
||||||
> File "/usr/bin/targetcli", line 112, in main
|
|
||||||
> shell.run_interactive()
|
|
||||||
> File "/usr/lib/python3.6/site-packages/configshell_fb/shell.py", line 905, in run_interactive
|
|
||||||
> self._cli_loop()
|
|
||||||
> File "/usr/lib/python3.6/site-packages/configshell_fb/shell.py", line 734, in _cli_loop
|
|
||||||
> self.run_cmdline(cmdline)
|
|
||||||
> File "/usr/lib/python3.6/site-packages/configshell_fb/shell.py", line 848, in run_cmdline
|
|
||||||
> self._execute_command(path, command, pparams, kparams)
|
|
||||||
> File "/usr/lib/python3.6/site-packages/configshell_fb/shell.py", line 823, in _execute_command
|
|
||||||
> result = target.execute_command(command, pparams, kparams)
|
|
||||||
> File "/usr/lib/python3.6/site-packages/configshell_fb/node.py", line 1406, in execute_command
|
|
||||||
> return method(*pparams, **kparams)
|
|
||||||
> File "/usr/lib/python3.6/site-packages/configshell_fb/node.py", line 522, in ui_command_set
|
|
||||||
> group_setter(param, value)
|
|
||||||
> File "/usr/lib/python3.6/site-packages/targetcli/ui_target.py", line 134, in ui_setgroup_discovery_auth
|
|
||||||
> self.rtsnode.discovery_enable_auth = value
|
|
||||||
> File "/usr/lib/python3.6/site-packages/rtslib_fb/fabric.py", line 243, in _set_discovery_enable_auth
|
|
||||||
> if int(enable):
|
|
||||||
> ValueError: invalid literal for int() with base 10: 'false'
|
|
||||||
|
|
||||||
Now the output will be:
|
|
||||||
|
|
||||||
> Not setting enable! Syntax error, 'false' is not a NUMBER.
|
|
||||||
|
|
||||||
Acked-by: Lee Duncan <lduncan@suse.com>
|
|
||||||
---
|
|
||||||
targetcli/ui_target.py | 11 ++++++++---
|
|
||||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/targetcli/ui_target.py b/targetcli/ui_target.py
|
|
||||||
index 0c3fe1b708db..16ccae715688 100644
|
|
||||||
--- a/targetcli/ui_target.py
|
|
||||||
+++ b/targetcli/ui_target.py
|
|
||||||
@@ -34,7 +34,8 @@ from .ui_backstore import complete_path
|
|
||||||
from .ui_node import UINode, UIRTSLibNode
|
|
||||||
|
|
||||||
auth_params = ('userid', 'password', 'mutual_userid', 'mutual_password')
|
|
||||||
-discovery_params = auth_params + ("enable",)
|
|
||||||
+int_params = ('enable',)
|
|
||||||
+discovery_params = auth_params + int_params
|
|
||||||
|
|
||||||
class UIFabricModule(UIRTSLibNode):
|
|
||||||
'''
|
|
||||||
@@ -47,8 +48,12 @@ class UIFabricModule(UIRTSLibNode):
|
|
||||||
self.refresh()
|
|
||||||
if self.rtsnode.has_feature('discovery_auth'):
|
|
||||||
for param in discovery_params:
|
|
||||||
- self.define_config_group_param('discovery_auth',
|
|
||||||
- param, 'string')
|
|
||||||
+ if param in int_params:
|
|
||||||
+ self.define_config_group_param('discovery_auth',
|
|
||||||
+ param, 'number')
|
|
||||||
+ else:
|
|
||||||
+ self.define_config_group_param('discovery_auth',
|
|
||||||
+ param, 'string')
|
|
||||||
self.refresh()
|
|
||||||
|
|
||||||
# Support late params
|
|
||||||
|
|
@ -1,116 +0,0 @@
|
|||||||
From: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
|
|
||||||
Date: Wed, 28 Nov 2018 16:55:38 +0530
|
|
||||||
Subject: saveconfig: compress the backup config files
|
|
||||||
Git-commit: 3d9e6c616ca7789d281843caf2d3dfb99dbf78a0
|
|
||||||
|
|
||||||
We have noticed saveconfig.json with 100 storage objects and 100 targets
|
|
||||||
(each holding a single tpg and a portal) consumes disk space around ~500K.
|
|
||||||
|
|
||||||
Which is very expensive, and backing-up such 100 saveconfig.json files will
|
|
||||||
take ~50M of disk space under /etc/target/backup/
|
|
||||||
|
|
||||||
And at scale like 1000 storage objects and targets, this will become worst.
|
|
||||||
|
|
||||||
Hence this patch attempts to compress(gzip) and store saveconfig.json while
|
|
||||||
backing-up.
|
|
||||||
|
|
||||||
Saved space example:
|
|
||||||
|
|
||||||
[root@localhost ~]# targetcli ls | grep -e "user:glfs" -e "iscsi"
|
|
||||||
| o- user:glfs ......................... [Storage Objects: 100]
|
|
||||||
o- iscsi ............................... [Targets: 100]
|
|
||||||
|
|
||||||
[root@localhost ~]# du -sh /etc/target/saveconfig.json
|
|
||||||
448K /etc/target/saveconfig.json
|
|
||||||
|
|
||||||
[root@localhost ~]# du -sh /etc/target/backup/saveconfig-20181128-18\:20\:43-json.gz
|
|
||||||
12K /etc/target/backup/saveconfig-20181128-18:20:43-json.gz
|
|
||||||
|
|
||||||
Reducing disk usage per backup file from 448K to 12K is very efficient right.
|
|
||||||
|
|
||||||
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
|
|
||||||
Acked-by: Lee Duncan <lduncan@suse.com>
|
|
||||||
---
|
|
||||||
targetcli/ui_root.py | 44 +++++++++++++++++++++++++++++++++++++++-----
|
|
||||||
1 file changed, 39 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/targetcli/ui_root.py b/targetcli/ui_root.py
|
|
||||||
index 38118bd582f6..6f3a79bf4f66 100644
|
|
||||||
--- a/targetcli/ui_root.py
|
|
||||||
+++ b/targetcli/ui_root.py
|
|
||||||
@@ -24,6 +24,7 @@ import re
|
|
||||||
import shutil
|
|
||||||
import stat
|
|
||||||
import filecmp
|
|
||||||
+import gzip
|
|
||||||
|
|
||||||
from configshell_fb import ExecutionError
|
|
||||||
from rtslib_fb import RTSRoot
|
|
||||||
@@ -62,6 +63,38 @@ class UIRoot(UINode):
|
|
||||||
if fm.wwns == None or any(fm.wwns):
|
|
||||||
UIFabricModule(fm, self)
|
|
||||||
|
|
||||||
+ def _compare_files(self, backupfile, savefile):
|
|
||||||
+ '''
|
|
||||||
+ Compare backfile and saveconfig file
|
|
||||||
+ '''
|
|
||||||
+ if (os.path.splitext(backupfile)[1] == '.gz'):
|
|
||||||
+ try:
|
|
||||||
+ with gzip.open(backupfile, 'rb') as fbkp:
|
|
||||||
+ fdata_bkp = fbkp.read()
|
|
||||||
+ except IOError as e:
|
|
||||||
+ self.shell.log.warning("Could not gzip open backupfile %s: %s"
|
|
||||||
+ % (backupfile, e.strerror))
|
|
||||||
+
|
|
||||||
+ else:
|
|
||||||
+ try:
|
|
||||||
+ with open(backupfile, 'rb') as fbkp:
|
|
||||||
+ fdata_bkp = fbkp.read()
|
|
||||||
+ except IOError as e:
|
|
||||||
+ self.shell.log.warning("Could not open backupfile %s: %s"
|
|
||||||
+ % (backupfile, e.strerror))
|
|
||||||
+
|
|
||||||
+ try:
|
|
||||||
+ with open(savefile, 'rb') as f:
|
|
||||||
+ fdata = f.read()
|
|
||||||
+ except IOError as e:
|
|
||||||
+ self.shell.log.warning("Could not open saveconfig file %s: %s"
|
|
||||||
+ % (savefile, e.strerror))
|
|
||||||
+
|
|
||||||
+ if fdata_bkp == fdata:
|
|
||||||
+ return True
|
|
||||||
+ else:
|
|
||||||
+ return False
|
|
||||||
+
|
|
||||||
def _save_backups(self, savefile):
|
|
||||||
'''
|
|
||||||
Take backup of config-file if needed.
|
|
||||||
@@ -72,7 +105,7 @@ class UIRoot(UINode):
|
|
||||||
|
|
||||||
backup_dir = os.path.dirname(savefile) + "/backup/"
|
|
||||||
backup_name = "saveconfig-" + \
|
|
||||||
- datetime.now().strftime("%Y%m%d-%H:%M:%S") + ".json"
|
|
||||||
+ datetime.now().strftime("%Y%m%d-%H:%M:%S") + "-json.gz"
|
|
||||||
backupfile = backup_dir + backup_name
|
|
||||||
backup_error = None
|
|
||||||
|
|
||||||
@@ -88,13 +121,14 @@ class UIRoot(UINode):
|
|
||||||
return
|
|
||||||
|
|
||||||
backed_files_list = sorted(glob(os.path.dirname(savefile) + \
|
|
||||||
- "/backup/*.json"))
|
|
||||||
+ "/backup/saveconfig-*json*"))
|
|
||||||
|
|
||||||
# Save backup if backup dir is empty, or savefile is differnt from recent backup copy
|
|
||||||
- if not backed_files_list or not filecmp.cmp(backed_files_list[-1], savefile):
|
|
||||||
+ if not backed_files_list or not self._compare_files(backed_files_list[-1], savefile):
|
|
||||||
try:
|
|
||||||
- shutil.copy(savefile, backupfile)
|
|
||||||
-
|
|
||||||
+ with open(savefile, 'rb') as f_in, gzip.open(backupfile, 'wb') as f_out:
|
|
||||||
+ shutil.copyfileobj(f_in, f_out)
|
|
||||||
+ f_out.flush()
|
|
||||||
except IOError as ioe:
|
|
||||||
backup_error = ioe.strerror or "Unknown error"
|
|
||||||
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:ad5a9438589cb63bbde70ecaf78614686b8b623480297f210bb323972d7acb66
|
|
||||||
size 30080
|
|
3
targetcli-fb-2.1.51.tar.xz
Normal file
3
targetcli-fb-2.1.51.tar.xz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:523e75fa1cc5820baee823f89b1d514b3458fd9c5ce7b438a3af7038c2d467a5
|
||||||
|
size 33464
|
@ -1,25 +0,0 @@
|
|||||||
From: Leo Zhang <nguzcf@gmail.com>
|
|
||||||
Date: Wed, 9 Jan 2019 14:20:28 +0800
|
|
||||||
Subject: targetcli-fb: Fix raise exception error in _save_backups
|
|
||||||
Git-commit: f6e813454c18e02222473713f53db5be99b84142
|
|
||||||
|
|
||||||
Signed-off-by: Leo Zhang <nguzcf@gmail.com>
|
|
||||||
Acked-by: Lee Duncan <lduncan@suse.com>
|
|
||||||
---
|
|
||||||
targetcli/ui_root.py | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/targetcli/ui_root.py b/targetcli/ui_root.py
|
|
||||||
index 6f3a79bf4f66..af5554f2dd76 100644
|
|
||||||
--- a/targetcli/ui_root.py
|
|
||||||
+++ b/targetcli/ui_root.py
|
|
||||||
@@ -114,7 +114,7 @@ class UIRoot(UINode):
|
|
||||||
os.makedirs(backup_dir);
|
|
||||||
except OSError as exe:
|
|
||||||
raise ExecutionError("Cannot create backup directory [%s] %s."
|
|
||||||
- % (backup_dir, exc.strerror))
|
|
||||||
+ % (backup_dir, exe.strerror))
|
|
||||||
|
|
||||||
# Only save backups if savefile exits
|
|
||||||
if not os.path.exists(savefile):
|
|
||||||
|
|
@ -1,3 +1,51 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 12 17:58:15 UTC 2020 - lduncan@suse.com
|
||||||
|
|
||||||
|
- Update to version 2.1.51 from 2.1.49, which includes
|
||||||
|
the addition of a targetcli daemon, which can be used
|
||||||
|
to speed up batch processing. With patches:
|
||||||
|
* version 2.1.51
|
||||||
|
* targetcli: depreciate the redundant '--tcp' option
|
||||||
|
* man: add daemon intro at targetcli(8) man page
|
||||||
|
* systemd-units: fix documentation
|
||||||
|
* targetclid: add man page entry
|
||||||
|
* daemon: load the prefs on every new connection
|
||||||
|
* cli: show useful hint in header area of shell in daemonized mode
|
||||||
|
* cli: provide a way to disable using daemon
|
||||||
|
* cli: show better error msg when daemon is not running
|
||||||
|
* Do not print err msg when signal closes socket.
|
||||||
|
* Handle systemd socket activation, when present.
|
||||||
|
* Close socket when receiving a signal to interrupt connection.
|
||||||
|
* Exit with success when getting a signal.
|
||||||
|
* Only return response to targetcli when bytes present
|
||||||
|
* Removed useless semicolons, as they're ignored
|
||||||
|
* Handle OSError correctly: use strerror to get string
|
||||||
|
* Tweak systemd socket-activation settings for daemon
|
||||||
|
* Handle Python 3.7 stricter binary vs. string rules.
|
||||||
|
* Fix indention for targetclid when processing output.
|
||||||
|
* version 2.1.50
|
||||||
|
* iscsi discovery_auth enable is a number not a string
|
||||||
|
* restoreconfig: add ability to restore/reload single target or storage_object
|
||||||
|
* Fix a syntax error in some except clauses
|
||||||
|
* Remove Epydoc markup from command messages
|
||||||
|
* targetcli: serialize multiple requests
|
||||||
|
* targetcli: way to enable targetclid as default choice
|
||||||
|
* targetclid: enable socket based activation
|
||||||
|
* targetclid: add daemonize component for targetcli
|
||||||
|
* Do not remove the first digit when auto-completing the TPG tag
|
||||||
|
* Remove the extra semicolon in _save_backups
|
||||||
|
* Add emulate_pr backstore attribute
|
||||||
|
* targetcli-fb: Fix raise exception error in _save_backups
|
||||||
|
* saveconfig: compress the backup config files
|
||||||
|
This replaces targetcli-fb-2.1.49.tar.xz with
|
||||||
|
targetcli-fb-2.1.51.tar.xz, and removes the following patches,
|
||||||
|
which area already upstream:
|
||||||
|
* Add-emulate_pr-backstore-attribute.patch
|
||||||
|
* do-not-remove-the-first-digit-when-auto-completing-the-tpg-tag
|
||||||
|
* iscsi-discovery_auth-enable-is-a-number-not-a-string
|
||||||
|
* saveconfig-compress-the-backup-config-files
|
||||||
|
* targetcli-fb-fix-raise-exception-error-in-save_backups
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Feb 3 16:38:45 UTC 2020 - Dominique Leuenberger <dimstar@opensuse.org>
|
Mon Feb 3 16:38:45 UTC 2020 - Dominique Leuenberger <dimstar@opensuse.org>
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
|
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
|
||||||
Name: targetcli-fb
|
Name: targetcli-fb
|
||||||
Version: 2.1.49
|
Version: 2.1.51
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: A command shell for managing the Linux LIO kernel target
|
Summary: A command shell for managing the Linux LIO kernel target
|
||||||
License: Apache-2.0
|
License: Apache-2.0
|
||||||
@ -26,6 +26,8 @@ Group: System/Management
|
|||||||
URL: https://github.com/open-iscsi/%{name}
|
URL: https://github.com/open-iscsi/%{name}
|
||||||
Source: %{name}-%{version}.tar.xz
|
Source: %{name}-%{version}.tar.xz
|
||||||
Source1: %{name}.service
|
Source1: %{name}.service
|
||||||
|
Source2: targetclid.socket
|
||||||
|
Source3: targetclid.service
|
||||||
BuildRequires: %{python_module configshell-fb}
|
BuildRequires: %{python_module configshell-fb}
|
||||||
BuildRequires: %{python_module devel}
|
BuildRequires: %{python_module devel}
|
||||||
BuildRequires: %{python_module pyparsing}
|
BuildRequires: %{python_module pyparsing}
|
||||||
@ -45,8 +47,8 @@ Requires(postun): update-alternatives
|
|||||||
Provides: targetcli = %{version}-%{release}
|
Provides: targetcli = %{version}-%{release}
|
||||||
Provides: targetcli-fb = %{version}-%{release}
|
Provides: targetcli-fb = %{version}-%{release}
|
||||||
%endif
|
%endif
|
||||||
Obsoletes: targetcli
|
Obsoletes: targetcli < %{version}-%{release}
|
||||||
Obsoletes: targetcli-fb
|
Obsoletes: targetcli-fb < %{version}-%{release}
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
%if 0%{?sle_version} >= 150000
|
%if 0%{?sle_version} >= 150000
|
||||||
# explicit Provides advertising RBD support
|
# explicit Provides advertising RBD support
|
||||||
@ -56,11 +58,6 @@ Obsoletes: targetcli-rbd < %{version}
|
|||||||
%{?systemd_ordering}
|
%{?systemd_ordering}
|
||||||
Patch1: Split-out-blockdev-readonly-state-detection-helper.patch
|
Patch1: Split-out-blockdev-readonly-state-detection-helper.patch
|
||||||
Patch2: rbd-support.patch
|
Patch2: rbd-support.patch
|
||||||
Patch3: saveconfig-compress-the-backup-config-files
|
|
||||||
Patch4: targetcli-fb-fix-raise-exception-error-in-save_backups
|
|
||||||
Patch5: Add-emulate_pr-backstore-attribute.patch
|
|
||||||
Patch6: do-not-remove-the-first-digit-when-auto-completing-the-tpg-tag
|
|
||||||
Patch7: iscsi-discovery_auth-enable-is-a-number-not-a-string
|
|
||||||
|
|
||||||
%python_subpackages
|
%python_subpackages
|
||||||
|
|
||||||
@ -90,11 +87,6 @@ python2-targetcli-fb and python3-targetcli-fb.
|
|||||||
# RBD support is dependent on LIO changes present in the SLE/Leap kernel
|
# RBD support is dependent on LIO changes present in the SLE/Leap kernel
|
||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
%endif
|
%endif
|
||||||
%patch3 -p1
|
|
||||||
%patch4 -p1
|
|
||||||
%patch5 -p1
|
|
||||||
%patch6 -p1
|
|
||||||
%patch7 -p1
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%python_build
|
%python_build
|
||||||
@ -102,48 +94,62 @@ python2-targetcli-fb and python3-targetcli-fb.
|
|||||||
%install
|
%install
|
||||||
%python_install
|
%python_install
|
||||||
%python_clone -a %{buildroot}%{_bindir}/targetcli
|
%python_clone -a %{buildroot}%{_bindir}/targetcli
|
||||||
|
%python_clone -a %{buildroot}%{_bindir}/targetclid
|
||||||
install -d -m755 %{buildroot}%{_sysconfdir}/target
|
install -d -m755 %{buildroot}%{_sysconfdir}/target
|
||||||
install -d -m755 %{buildroot}%{_sysconfdir}/target/backup
|
install -d -m755 %{buildroot}%{_sysconfdir}/target/backup
|
||||||
install -d -m755 %{buildroot}%{_sbindir}
|
install -d -m755 %{buildroot}%{_sbindir}
|
||||||
install -D -m644 targetcli.8 %{buildroot}%{_mandir}/man8/targetcli.8
|
install -D -m644 targetcli.8 %{buildroot}%{_mandir}/man8/targetcli.8
|
||||||
install -D -m644 %{SOURCE1} %{buildroot}%{_unitdir}/targetcli.service
|
install -D -m644 targetclid.8 %{buildroot}%{_mandir}/man8/targetclid.8
|
||||||
|
install -D -m644 %{S:1} %{buildroot}%{_unitdir}/targetcli.service
|
||||||
|
install -D -m644 %{S:2} %{buildroot}%{_unitdir}/targetclid.socket
|
||||||
|
install -D -m644 %{S:3} %{buildroot}%{_unitdir}/targetclid.service
|
||||||
%fdupes %{buildroot}
|
%fdupes %{buildroot}
|
||||||
ln -s %{_sbindir}/service %{buildroot}/%{_sbindir}/rctargetcli
|
ln -s %{_sbindir}/service %{buildroot}/%{_sbindir}/rctargetcli
|
||||||
|
ln -s %{_sbindir}/service %{buildroot}/%{_sbindir}/rctargetclid
|
||||||
|
|
||||||
%post
|
%post
|
||||||
%python_install_alternative targetcli
|
%python_install_alternative targetcli
|
||||||
|
%python_install_alternative targetclid
|
||||||
|
|
||||||
%postun
|
%postun
|
||||||
%python_uninstall_alternative targetcli
|
%python_uninstall_alternative targetcli
|
||||||
|
%python_uninstall_alternative targetclid
|
||||||
|
|
||||||
%pre
|
%pre
|
||||||
%{service_add_pre targetcli.service}
|
%{service_add_pre targetcli.service targetclid.socket targetclid.service}
|
||||||
|
|
||||||
%preun
|
%preun
|
||||||
%{stop_on_removal targetcli}
|
%{stop_on_removal targetcld targetcli}
|
||||||
|
%{service_del_preun targetcli.service targetclid.socket targetclid.service}
|
||||||
|
|
||||||
%post -n %{name}-common
|
%post -n %{name}-common
|
||||||
%{service_add_post targetcli.service}
|
%{service_add_post targetcli.service targetclid.socket targetclid.service}
|
||||||
|
|
||||||
%postun -n %{name}-common
|
%postun -n %{name}-common
|
||||||
%{service_del_postun targetcli.service}
|
%{service_del_postun targetcli.service targetclid.socket targetclid.service}
|
||||||
|
|
||||||
%pre -n %{name}-common
|
%pre -n %{name}-common
|
||||||
%{service_add_pre targetcli.service}
|
%{service_add_pre targetcli.service targetclid.socket targetclid.service}
|
||||||
|
|
||||||
%preun -n %{name}-common
|
%preun -n %{name}-common
|
||||||
%{service_del_preun targetcli.service}
|
%{service_del_preun targetcli.service targetclid.socket targetclid.service}
|
||||||
|
|
||||||
%files %{python_files}
|
%files %{python_files}
|
||||||
%python_alternative %{_bindir}/targetcli
|
%python_alternative %{_bindir}/targetcli
|
||||||
|
%python_alternative %{_bindir}/targetclid
|
||||||
%{python_sitelib}/*
|
%{python_sitelib}/*
|
||||||
|
|
||||||
%files -n %{name}-common
|
%files -n %{name}-common
|
||||||
%doc COPYING README.md THANKS
|
%license COPYING
|
||||||
|
%doc README.md THANKS
|
||||||
%dir %{_sysconfdir}/target
|
%dir %{_sysconfdir}/target
|
||||||
%dir %{_sysconfdir}/target/backup
|
%dir %{_sysconfdir}/target/backup
|
||||||
%doc %{_mandir}/man8/targetcli.8%{ext_man}
|
%doc %{_mandir}/man8/targetcli.8%{ext_man}
|
||||||
|
%doc %{_mandir}/man8/targetclid.8%{ext_man}
|
||||||
%{_unitdir}/targetcli.service
|
%{_unitdir}/targetcli.service
|
||||||
|
%{_unitdir}/targetclid.service
|
||||||
|
%{_unitdir}/targetclid.socket
|
||||||
%{_sbindir}/rctargetcli
|
%{_sbindir}/rctargetcli
|
||||||
|
%{_sbindir}/rctargetclid
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
13
targetclid.service
Normal file
13
targetclid.service
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Targetcli daemon
|
||||||
|
Documentation=man:targetclid(8)
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/targetclid
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
Also=targetclid.socket
|
9
targetclid.socket
Normal file
9
targetclid.socket
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=targetclid socket
|
||||||
|
Documentation=man:targetclid(8)
|
||||||
|
|
||||||
|
[Socket]
|
||||||
|
ListenStream=/var/run/targetclid.sock
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=sockets.target
|
Loading…
Reference in New Issue
Block a user