summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Grover <andy@groveronline.com>2017-06-16 10:08:46 -0700
committerGitHub <noreply@github.com>2017-06-16 10:08:46 -0700
commit132601ef3b9c5394c6e0364ae4c0dc673d845ec2 (patch)
treeda6bd94f82f6ac4982fe71484a8ca0568021ff8f
parent70a01fe8911b30af226fdabd20381af5182ad037 (diff)
parentf823033e5c6beced0590a00064e1e7a55e76a995 (diff)
downloadrtslib-fb-132601ef3b9c5394c6e0364ae4c0dc673d845ec2.tar.gz
Merge pull request #98 from gonzoleeman/dbroot-fix-v2
Switch target driver DB root dir to /etc/target
-rw-r--r--rtslib/root.py24
-rw-r--r--rtslib/tcm.py3
2 files changed, 26 insertions, 1 deletions
diff --git a/rtslib/root.py b/rtslib/root.py
index 99a25b7..ee7b103 100644
--- a/rtslib/root.py
+++ b/rtslib/root.py
@@ -28,6 +28,7 @@ from .fabric import FabricModule
from .tcm import so_mapping, bs_cache, StorageObject
from .utils import RTSLibError, RTSLibALUANotSupported, modprobe, mount_configfs
from .utils import dict_remove, set_attributes
+from .utils import fread, fwrite
from .alua import ALUATargetPortGroup
default_save_file = "/etc/target/saveconfig.json"
@@ -57,6 +58,12 @@ class RTSRoot(CFSNode):
'''
# RTSRoot private stuff
+
+ # this should match the kernel target driver default db dir
+ _default_dbroot = "/var/target"
+ # this is where the target DB is to be located (instead of the default)
+ _preferred_dbroot = "/etc/target"
+
def __init__(self):
'''
Instantiate an RTSRoot object. Basically checks for configfs setup and
@@ -75,6 +82,8 @@ class RTSRoot(CFSNode):
modprobe('target_core_mod')
self._create_in_cfs_ine('any')
+ self._set_dbroot_if_needed()
+
def _list_targets(self):
self._check_self()
for fabric_module in self.fabric_modules:
@@ -148,6 +157,19 @@ class RTSRoot(CFSNode):
def __str__(self):
return "rtslib"
+ def _set_dbroot_if_needed(self):
+ dbroot_path = self.path + "/dbroot"
+ if not os.path.exists(dbroot_path):
+ self._dbroot = self._default_dbroot
+ return
+ self._dbroot = fread(dbroot_path)
+ if self._dbroot != self._preferred_dbroot:
+ fwrite(dbroot_path, self._preferred_dbroot+"\n")
+ self._dbroot = fread(dbroot_path)
+
+ def _get_dbroot(self):
+ return self._dbroot
+
# RTSRoot public stuff
def dump(self):
@@ -320,6 +342,8 @@ class RTSRoot(CFSNode):
doc="Get the list of all FabricModule objects.")
alua_tpgs = property(_list_alua_tpgs,
doc="Get the list of all ALUA TPG objects.")
+ dbroot = property(_get_dbroot,
+ doc="Get the target database root")
def _test():
'''Run the doctests.'''
diff --git a/rtslib/tcm.py b/rtslib/tcm.py
index 82ef34e..73bfbe3 100644
--- a/rtslib/tcm.py
+++ b/rtslib/tcm.py
@@ -78,7 +78,8 @@ class StorageObject(CFSNode):
need to read it in and squirt it back into configfs when we configure
the storage object. BLEH.
"""
- aptpl_dir = "/var/target/pr"
+ from .root import RTSRoot
+ aptpl_dir = "%s/pr" % RTSRoot().dbroot
try:
lines = fread("%s/aptpl_%s" % (aptpl_dir, self.wwn)).split()