Modifying gluster_base_class and mount_ops to suit the config file changes made
Change-Id: Ic551724dd27fcc2cc618e8de04110752bf5a8786 BUG: 1350017 Signed-off-by: Shwetha Panduranga <spandura@redhat.com> Reviewed-on: http://review.gluster.org/14808 Tested-by: ShwethaHPanduranga NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Jonathan Holloway <jholloway@redhat.com> Smoke: Gluster Build System <jenkins@build.gluster.org>
This commit is contained in:
parent
eaadde082e
commit
d2842f1b58
@ -19,6 +19,8 @@
|
||||
from distaf.util import tc
|
||||
from distaflibs.gluster.volume_ops import (setup_vol, get_volume_info,
|
||||
cleanup_volume)
|
||||
from distaflibs.gluster.mount_ops import GlusterMount
|
||||
from distaflibs.gluster.gluster_init import env_setup_servers
|
||||
|
||||
|
||||
class GlusterBaseClass():
|
||||
@ -33,25 +35,48 @@ class GlusterBaseClass():
|
||||
Initialise the class with the config values
|
||||
"""
|
||||
if config_data['global_mode']:
|
||||
self.volname = config_data['volumes'].keys()[0]
|
||||
self.voltype = config_data['volumes'][self.volname]['voltype']
|
||||
self.servers = config_data['volumes'][self.volname]['servers']
|
||||
self.peers = config_data['volumes'][self.volname]['peers']
|
||||
self.clients = config_data['volumes'][self.volname]['clients']
|
||||
self.mount_proto = (config_data['volumes'][self.volname]
|
||||
['mount_proto'])
|
||||
self.mountpoint = (config_data['volumes'][self.volname]
|
||||
['mountpoint'])
|
||||
self.volname = config_data['gluster']['volumes'][0]['name']
|
||||
self.voltype = (config_data['gluster']['volumes'][0]['voltype']
|
||||
['type'])
|
||||
self.servers = []
|
||||
for server in config_data['gluster']['volumes'][0]['servers']:
|
||||
self.servers.append(server['host'])
|
||||
self.peers = config_data['gluster']['volumes'][0]['peers']
|
||||
self.mounts = []
|
||||
for mount in config_data['gluster']['mounts']:
|
||||
mount['client'] = mount['client']['host']
|
||||
mount['server'] = mount['server']['host']
|
||||
self.mounts.append(GlusterMount(mount))
|
||||
self.clients = []
|
||||
for mount_obj in self.mounts:
|
||||
self.clients.append(mount_obj.client_system)
|
||||
self.clients = filter(None, self.clients)
|
||||
|
||||
else:
|
||||
self.voltype = config_data['voltype']
|
||||
self.volname = "%s-testvol" % self.voltype
|
||||
self.servers = config_data['servers'].keys()
|
||||
self.clients = config_data['clients'].keys()
|
||||
self.servers = []
|
||||
for server in config_data['servers']:
|
||||
self.servers.append(server['host'])
|
||||
self.clients = []
|
||||
for client in config_data['clients']:
|
||||
self.clients.append(client['host'])
|
||||
self.peers = []
|
||||
if config_data['peers'] is not None:
|
||||
self.peers = config_data['peers'].keys()
|
||||
for peer in config_data['peers']:
|
||||
self.peers.append(peers['host'])
|
||||
self.mounts = []
|
||||
self.mount_proto = config_data['mount_proto']
|
||||
self.mountpoint = "/mnt/%s_mount" % self.mount_proto
|
||||
for client in self.clients:
|
||||
mount = {}
|
||||
mount['protocol'] = config_data['mount_proto']
|
||||
mount['mountpoint'] = "/mnt/%s_mount" % self.mount_proto
|
||||
mount['server'] = self.servers[0]
|
||||
mount['client'] = client
|
||||
mount['volname'] = self.volname
|
||||
mount['options'] = ""
|
||||
self.mounts.append(GlusterMount(mount))
|
||||
self.mnode = self.servers[0]
|
||||
self.config_data = config_data
|
||||
|
||||
@ -62,29 +87,39 @@ class GlusterBaseClass():
|
||||
dist = rep = dispd = red = stripe = 1
|
||||
trans = ''
|
||||
if self.voltype == 'distribute':
|
||||
dist = self.config_data[self.voltype]['dist_count']
|
||||
trans = self.config_data[self.voltype]['transport']
|
||||
dist = (self.config_data['gluster']['volume_types'][self.voltype]
|
||||
['dist_count'])
|
||||
trans = (self.config_data['gluster']['volume_types'][self.voltype]
|
||||
['transport'])
|
||||
elif self.voltype == 'replicate':
|
||||
rep = self.config_data[self.voltype]['replica']
|
||||
trans = self.config_data[self.voltype]['transport']
|
||||
rep = (self.config_data['gluster']['volume_types'][self.voltype]
|
||||
['replica_count'])
|
||||
trans = (self.config_data['gluster']['volume_types'][self.voltype]
|
||||
['transport'])
|
||||
elif self.voltype == 'dist_rep':
|
||||
dist = self.config_data[self.voltype]['dist_count']
|
||||
rep = self.config_data[self.voltype]['replica']
|
||||
trans = self.config_data[self.voltype]['transport']
|
||||
dist = (self.config_data['gluster']['volume_types'][self.voltype]
|
||||
['dist_count'])
|
||||
rep = (self.config_data['gluster']['volume_types'][self.voltype]
|
||||
['replica_count'])
|
||||
trans = (self.config_data['gluster']['volume_types'][self.voltype]
|
||||
['transport'])
|
||||
elif self.voltype == 'disperse':
|
||||
dispd = self.config_data[self.voltype]['disperse']
|
||||
red = self.config_data[self.voltype]['redundancy']
|
||||
trans = self.config_data[self.voltype]['transport']
|
||||
dispd = (self.config_data['gluster']['volume_types'][self.voltype]
|
||||
['disperse_count'])
|
||||
red = (self.config_data['gluster']['volume_types'][self.voltype]
|
||||
['redundancy_count'])
|
||||
trans = (self.config_data['gluster']['volume_types'][self.voltype]
|
||||
['transport'])
|
||||
elif self.voltype == 'dist_disperse':
|
||||
dist = self.config_data[self.voltype]['dist_count']
|
||||
dispd = self.config_data[self.voltype]['disperse']
|
||||
red = self.config_data[self.voltype]['redundancy']
|
||||
dispd = self.config_data[self.voltype]['disperse_count']
|
||||
red = self.config_data[self.voltype]['redundancy_count']
|
||||
trans = self.config_data[self.voltype]['transport']
|
||||
else:
|
||||
tc.logger.error("The volume type is not present")
|
||||
return False
|
||||
ret = setup_vol(self.volname, dist, rep, dispd, red, stripe, trans,
|
||||
servers=self.servers)
|
||||
ret = setup_vol(self.volname, self.mnode, dist, rep, dispd, red,
|
||||
stripe, trans, servers=self.servers)
|
||||
if not ret:
|
||||
tc.logger.error("Unable to setup volume %s", self.volname)
|
||||
return False
|
||||
@ -94,7 +129,11 @@ class GlusterBaseClass():
|
||||
"""
|
||||
Function to setup the volume for testing.
|
||||
"""
|
||||
volinfo = get_volume_info(server=self.servers[0])
|
||||
if not env_setup_servers():
|
||||
tc.logger.error("Unable to setup testenv")
|
||||
return False
|
||||
|
||||
volinfo = get_volume_info(mnode=self.servers[0])
|
||||
if volinfo is not None and self.volname in volinfo.keys():
|
||||
tc.logger.debug("The volume %s is already present in %s",
|
||||
self.volname, self.mnode)
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
|
||||
from distaf.util import tc
|
||||
|
||||
import re
|
||||
"""
|
||||
This file contains the glusterd and other initial gluster
|
||||
options like start/stop glusterd and env_setup_servers for
|
||||
@ -67,4 +67,11 @@ def env_setup_servers(snap=True, servers=''):
|
||||
"""
|
||||
tc.logger.info("The function isn't implemented yet")
|
||||
tc.logger.info("Please setup the bricks manually.")
|
||||
|
||||
if servers == '':
|
||||
servers = tc.servers
|
||||
|
||||
if not start_glusterd(servers):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
@ -18,15 +18,140 @@
|
||||
|
||||
from distaf.util import tc
|
||||
|
||||
class GlusterMount():
|
||||
"""Gluster Mount class
|
||||
|
||||
def mount_volume(volname, mtype='glusterfs', mpoint='/mnt/glusterfs', \
|
||||
mserver='', mclient='', options=''):
|
||||
Args:
|
||||
mount (dict): Mount dict with 'mount_protocol', 'mountpoint',
|
||||
'server', 'client', 'volname', 'options' as keys
|
||||
|
||||
Returns:
|
||||
Instance of GlusterMount class
|
||||
"""
|
||||
client_register = 0
|
||||
|
||||
def __init__(self, mount):
|
||||
if mount['protocol']:
|
||||
self.mounttype = mount['protocol']
|
||||
else:
|
||||
self.mounttype = "glusterfs"
|
||||
|
||||
if mount['mountpoint']:
|
||||
self.mountpoint = mount['mountpoint']
|
||||
else:
|
||||
self.mountpoint = "/mnt/%s" % self.mounttype
|
||||
|
||||
self.server_system = mount['server']
|
||||
self.client_system = mount['client']
|
||||
self.volname = mount['volname']
|
||||
self.options = mount['options']
|
||||
|
||||
def mount(self):
|
||||
"""Mounts the volume
|
||||
|
||||
Args:
|
||||
uses instance args passed at init
|
||||
|
||||
Returns:
|
||||
bool: True on success and False on failure.
|
||||
"""
|
||||
(_retcode, _, _) = mount_volume(self.volname,
|
||||
mtype=self.mounttype,
|
||||
mpoint=self.mountpoint,
|
||||
mserver=self.server_system,
|
||||
mclient=self.client_system,
|
||||
options=self.options)
|
||||
|
||||
if _retcode == 0:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def is_mounted(self):
|
||||
"""Tests for mount on client
|
||||
|
||||
Args:
|
||||
uses instance args passed at init
|
||||
|
||||
Returns:
|
||||
bool: True on success and False on failure.
|
||||
"""
|
||||
_retcode = is_mounted(self.volname,
|
||||
mpoint=self.mountpoint,
|
||||
mserver=self.server_system,
|
||||
mclient=self.client_system)
|
||||
|
||||
if _retcode:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def unmount(self):
|
||||
"""Unmounts the volume
|
||||
|
||||
Args:
|
||||
uses instance args passed at init
|
||||
|
||||
Returns:
|
||||
bool: True on success and False on failure.
|
||||
"""
|
||||
(_retcode, _, _) = umount_volume(self.client_system,
|
||||
self.mountpoint)
|
||||
|
||||
if _retcode == 0:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def is_mounted(volname, mpoint, mserver, mclient):
|
||||
"""Check if mount exist.
|
||||
|
||||
Args:
|
||||
volname (str): Name of the volume
|
||||
mpoint (str): Mountpoint dir
|
||||
mserver (str): Server to which it is mounted to
|
||||
mclient (str): Client from which it is mounted.
|
||||
|
||||
Returns:
|
||||
bool: True if mounted and False otherwise.
|
||||
"""
|
||||
Mount the gluster volume with specified options
|
||||
Takes the volume name as mandatory argument
|
||||
# python will error on missing arg, so just checking for empty args here
|
||||
if not volname or not mpoint or not mserver or not mclient:
|
||||
tc.logger.error("Missing arguments for mount.")
|
||||
return False
|
||||
|
||||
Returns a tuple of (returncode, stdout, stderr)
|
||||
Returns (0, '', '') if already mounted
|
||||
ret, _, _ = tc.run(mclient, "mount | grep %s | grep %s | grep \"%s\""
|
||||
% (volname, mpoint, mserver), verbose=False)
|
||||
if ret == 0:
|
||||
tc.logger.debug("Volume %s is mounted at %s:%s" % (volname,
|
||||
mclient,
|
||||
mpoint))
|
||||
return True
|
||||
else:
|
||||
tc.logger.error("Volume %s is not mounted at %s:%s" % (volname,
|
||||
mclient,
|
||||
mpoint))
|
||||
return False
|
||||
|
||||
def mount_volume(volname, mtype='glusterfs', mpoint='/mnt/glusterfs',
|
||||
mserver='', mclient='', options=''):
|
||||
"""Mount the gluster volume with specified options.
|
||||
|
||||
Args:
|
||||
volname (str): Name of the volume to mount.
|
||||
|
||||
Kwargs:
|
||||
mtype (str): Protocol to be used to mount.
|
||||
mpoint (str): Mountpoint dir.
|
||||
mserver (str): Server to mount.
|
||||
mclient (str): Client from which it has to be mounted.
|
||||
option (str): Options for the mount command.
|
||||
|
||||
Returns:
|
||||
tuple: Tuple containing three elements (ret, out, err).
|
||||
(0, '', '') if already mounted.
|
||||
(1, '', '') if setup_samba_service fails in case of smb.
|
||||
(ret, out, err) of mount commnd execution otherwise.
|
||||
"""
|
||||
global tc
|
||||
if mserver == '':
|
||||
@ -39,24 +164,47 @@ def mount_volume(volname, mtype='glusterfs', mpoint='/mnt/glusterfs', \
|
||||
options = "%s" % options
|
||||
elif mtype == 'nfs' and options == '':
|
||||
options = '-o vers=3'
|
||||
ret, _, _ = tc.run(mclient, "mount | grep %s | grep %s | grep \"%s\"" \
|
||||
% (volname, mpoint, mserver), verbose=False)
|
||||
if ret == 0:
|
||||
tc.logger.debug("Volume %s is already mounted at %s" \
|
||||
% (volname, mpoint))
|
||||
|
||||
if is_mounted(volname, mpoint, mserver, mclient):
|
||||
tc.logger.debug("Volume %s is already mounted at %s" %
|
||||
(volname, mpoint))
|
||||
return (0, '', '')
|
||||
mcmd = "mount -t %s %s %s:/%s %s" % \
|
||||
(mtype, options, mserver, volname, mpoint)
|
||||
tc.run(mclient, "test -d %s || mkdir -p %s" % (mpoint, mpoint), \
|
||||
verbose=False)
|
||||
|
||||
mcmd = ("mount -t %s %s %s:/%s %s" %
|
||||
(mtype, options, mserver, volname, mpoint))
|
||||
|
||||
if mtype == 'cifs':
|
||||
from distaflibs.gluster.samba_ops import setup_samba_service
|
||||
smbuser = tc.global_config['gluster']['cluster_config']['smb']['user']
|
||||
smbpasswd = (tc.global_config['gluster']['cluster_config']['smb']
|
||||
['passwd'])
|
||||
|
||||
if not setup_samba_service(volname, mserver, smbuser, smbpasswd):
|
||||
tc.logger.error("Failed to setup samba service %s" % mserver)
|
||||
return (1, '', '')
|
||||
|
||||
mcmd = ("mount -t cifs -o username=root,password=%s "
|
||||
"\\\\\\\\%s\\\\gluster-%s %s" % (smbpasswd, mserver,
|
||||
volname, mpoint))
|
||||
# Create mount dir
|
||||
_, _, _ = tc.run(mclient, "test -d %s || mkdir -p %s" % (mpoint, mpoint),
|
||||
verbose=False)
|
||||
|
||||
# Create mount
|
||||
return tc.run(mclient, mcmd)
|
||||
|
||||
|
||||
def umount_volume(client, mountpoint):
|
||||
def umount_volume(mclient, mpoint):
|
||||
"""Unmounts the mountpoint.
|
||||
|
||||
Args:
|
||||
mclient (str): Client from which it has to be mounted.
|
||||
mpoint (str): Mountpoint dir.
|
||||
|
||||
Returns:
|
||||
tuple: Tuple containing three elements (ret, out, err) as returned by
|
||||
umount command execution.
|
||||
"""
|
||||
unmounts the mountpoint
|
||||
Returns the output of umount command
|
||||
"""
|
||||
cmd = "umount %s || umount -f %s || umount -l %s" \
|
||||
% (mountpoint, mountpoint, mountpoint)
|
||||
return tc.run(client, cmd)
|
||||
cmd = ("umount %s || umount -f %s || umount -l %s" %
|
||||
(mpoint, mpoint, mpoint))
|
||||
return tc.run(mclient, cmd)
|
||||
|
@ -68,10 +68,10 @@ gluster:
|
||||
ctdb_vips:
|
||||
- vip: vip1
|
||||
routing_prefix: '23'
|
||||
interfaces: 'eth0'
|
||||
interface: 'eth0'
|
||||
- vip: vip2
|
||||
routing_prefix: '22'
|
||||
interfaces: 'eth0'
|
||||
interface: 'eth0'
|
||||
ctdb_metavol_brick_path: ''
|
||||
|
||||
nfs_ganesha:
|
||||
@ -81,24 +81,25 @@ gluster:
|
||||
|
||||
volume_types:
|
||||
distribute: &distribute
|
||||
type: distribute
|
||||
dist_count: 4
|
||||
transport: tcp
|
||||
|
||||
replicate: &replicate
|
||||
type: replicate
|
||||
replica_count: 3
|
||||
transport: tcp
|
||||
|
||||
dist_rep: &dist_rep
|
||||
type: dist_rep
|
||||
dist_count: 2
|
||||
replica_count: 2
|
||||
transport: tcp
|
||||
|
||||
disperse: &disperse
|
||||
type: disperse
|
||||
disperse_count: 4
|
||||
redundancy_count: 2
|
||||
transport: tcp
|
||||
|
||||
dist_disperse: &dist_disperse
|
||||
type: dist_disperse
|
||||
dist_count: 2
|
||||
disperse_count: 4
|
||||
redundancy_count: 2
|
||||
|
Loading…
x
Reference in New Issue
Block a user