Change in vdsm[master]: gluster: Adds new verb to setup geo-rep mount broker.
dnarayan at redhat.com
dnarayan at redhat.com
Fri Mar 6 09:24:05 UTC 2015
Darshan N has uploaded a new change for review.
Change subject: gluster: Adds new verb to setup geo-rep mount broker.
......................................................................
gluster: Adds new verb to setup geo-rep mount broker.
This patch adds a new verb to setup mount broker for
gluster geo-replication:
geoRepMountBrokerSetup: This verb takes user name,
group name and remote volume name as argument. and
sets the mount broker need for non-root geo-replication.
Change-Id: I9498c937bdf44b7747253e9bc203cb9eca1e671f
Signed-off-by: Darshan N <dnarayan at redhat.com>
---
M client/vdsClientGluster.py
M vdsm/gluster/api.py
M vdsm/gluster/apiwrapper.py
M vdsm/gluster/cli.py
M vdsm/gluster/exception.py
M vdsm/rpc/vdsmapi-gluster-schema.json
6 files changed, 105 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/44/38444/1
diff --git a/client/vdsClientGluster.py b/client/vdsClientGluster.py
index 746a5be..5e8fd18 100644
--- a/client/vdsClientGluster.py
+++ b/client/vdsClientGluster.py
@@ -627,6 +627,18 @@
pp.pprint(status)
return status['status']['code'], status['status']['message']
+ def do_glusterGeoRepMountBrokerSetup(self, args):
+ params = self._eqSplit(args)
+ userName = params.get('userName', '')
+ remoteVolumeName = params.get('remoteVolumeName', '')
+ groupName = params.get('groupName', '')
+
+ status = self.s.glusterGeoRepMountBrokerSetup(userName,
+ groupName,
+ remoteVolumeName)
+ pp.pprint(status)
+ return status['status']['code'], status['status']['message']
+
def getGlusterCmdDict(serv):
return \
@@ -1067,5 +1079,12 @@
'geoRepPubKeys=geo_replication_pub_keys',
'update geo replication public keys to authorized'
' keys file of user'
+ )),
+ 'glusterGeoRepMountBrokerSetup': (
+ serv.do_glusterGeoRepMountBrokerSetup,
+ ('userName=user_name'
+ 'remoteVolumeName=remote_volume_name'
+ 'groupName=group_name',
+ 'setup mount broker for geo replication'
))
}
diff --git a/vdsm/gluster/api.py b/vdsm/gluster/api.py
index ff2556e..66a42af 100644
--- a/vdsm/gluster/api.py
+++ b/vdsm/gluster/api.py
@@ -29,6 +29,7 @@
_SUCCESS = {'status': doneCode}
GEOREP_PUB_KEY_PATH = "/var/lib/glusterd/geo-replication/common_secret.pem.pub"
+MOUNT_BROKER_ROOT = "/var/mountbroker-root"
GLUSTER_RPM_PACKAGES = (
@@ -109,6 +110,21 @@
return
except IOError as e:
raise ge.GlusterGeoRepPublicKeyWriteFailedException(err=e)
+
+
+ at makePublic
+def createMountBrokerRoot(userName):
+ try:
+ getpwnam(userName)
+ except KeyError as e:
+ raise ge.GlusterGeoRepUserNotFoundException(err=e)
+ try:
+ os.makedirs(MOUNT_BROKER_ROOT)
+ os.chmod(MOUNT_BROKER_ROOT, 0711)
+ except OSError:
+ if not os.path.isdir(MOUNT_BROKER_ROOT):
+ raise
+ return
class GlusterApi(object):
@@ -504,6 +520,19 @@
def geoRepKeysUpdate(self, userName, geoRepPubKeys, options=None):
self.svdsmProxy.glusterUpdateGeoRepKeys(userName, geoRepPubKeys)
+ @exportAsVerb
+ def geoRepMountBrokerSetup(self, userName, groupName,
+ remoteVolumeName, options=None):
+ self.svdsmProxy.glusterCreateMountBrokerRoot(userName)
+ mountBrokerOptions = {'mountbroker-root': MOUNT_BROKER_ROOT,
+ 'geo-replication-log-group': groupName,
+ 'rpc-auth-allow-insecure': 'on'}
+ for optionName, optionValue in mountBrokerOptions.iteritems():
+ self.svdsmProxy.glusterExecuteMountBrokerOpt(optionName,
+ optionValue)
+ self.svdsmProxy.glusterExecuteMountBrokerUserAdd(userName,
+ remoteVolumeName)
+
def getGlusterMethods(gluster):
l = []
diff --git a/vdsm/gluster/apiwrapper.py b/vdsm/gluster/apiwrapper.py
index 1c749b5..c507c40 100644
--- a/vdsm/gluster/apiwrapper.py
+++ b/vdsm/gluster/apiwrapper.py
@@ -254,6 +254,10 @@
def geoRepKeysUpdate(self, userName, geoRepPubKeys):
return self._gluster.geoRepKeysUpdate(userName, geoRepPubKeys)
+ def geoRepMountBrokerSetup(self, userName, groupName, remoteVolumeName):
+ return self._gluster.geoRepMountBrokerSetup(userName, groupName,
+ remoteVolumeName)
+
class GlusterSnapshot(GlusterApiBase):
def __init__(self):
diff --git a/vdsm/gluster/cli.py b/vdsm/gluster/cli.py
index cd4e433..d10d215 100644
--- a/vdsm/gluster/cli.py
+++ b/vdsm/gluster/cli.py
@@ -1345,3 +1345,28 @@
raise ge.GlusterGeoRepPublicKeyFileCreateFailedException(rc,
out, err)
return True
+
+
+ at makePublic
+def executeMountBrokerUserAdd(userName, remoteVolumeName):
+ command = _getGlusterSystemCmd() + ["execute", "mountbroker",
+ "user", userName,
+ remoteVolumeName]
+ rc, out, err = _execGluster(command)
+ if rc:
+ raise ge.GlusterGeoRepExecuteMountBrokerUserAddFailedException(rc,
+ out,
+ err)
+ return True
+
+
+ at makePublic
+def executeMountBrokerOpt(optionName, optionValue):
+ command = _getGlusterSystemCmd() + ["execute", "mountbroker",
+ "opt", optionName,
+ optionValue]
+ rc, out, err = _execGluster(command)
+ if rc:
+ raise ge.GlusterGeoRepExecuteMountBrokerOptFailedException(rc,
+ out, err)
+ return True
diff --git a/vdsm/gluster/exception.py b/vdsm/gluster/exception.py
index 91d478b..53e4b4e 100644
--- a/vdsm/gluster/exception.py
+++ b/vdsm/gluster/exception.py
@@ -565,6 +565,18 @@
message = "geo rep public keys write failed"
+class GlusterGeoRepExecuteMountBrokerOptFailedException(
+ GlusterGeoRepException):
+ code = 4211
+ message = "geo rep mount broker option set failed"
+
+
+class GlusterGeoRepExecuteMountBrokerUserAddFailedException(
+ GlusterGeoRepException):
+ code = 4212
+ message = "geo rep mount broker user add failed"
+
+
# Volume Snapshot
class GlusterSnapshotException(GlusterException):
code = 4700
diff --git a/vdsm/rpc/vdsmapi-gluster-schema.json b/vdsm/rpc/vdsmapi-gluster-schema.json
index c52627b..2a31094 100644
--- a/vdsm/rpc/vdsmapi-gluster-schema.json
+++ b/vdsm/rpc/vdsmapi-gluster-schema.json
@@ -1756,3 +1756,19 @@
##
{'command': {'class': 'GlusterVolume', 'name': 'geoRepKeysUpdate'},
'data': {'userName': 'str', 'geoRepPubKeys': 'str'}}
+
+##
+# @GlusterVolume.geoRepMountBrokerSetup:
+#
+# set up gluster mount broker needed for non-root geo-rep
+#
+# @userName: Name of user
+#
+# @groupName : Name of the users group
+#
+# @remoteVolumeName: Name of the remote volume
+#
+# Since: 4.17.0
+##
+{'command': {'class': 'GlusterVolume', 'name': 'geoRepMountBrokerSetup'},
+ 'data': {'userName': 'str', 'groupName': 'str', 'remoteVolumeName': 'str'}}
--
To view, visit https://gerrit.ovirt.org/38444
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9498c937bdf44b7747253e9bc203cb9eca1e671f
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Darshan N <dnarayan at redhat.com>
More information about the vdsm-patches
mailing list