Skip to content

Commit

Permalink
Merge branch 'CP-11278'
Browse files Browse the repository at this point in the history
Signed-off-by: Siddharth Vinothkumar <siddharth.vinothkumar@citrix.com>

GitHub: closes #247 on xapi-project/sm
  • Loading branch information
siddharthv committed Mar 4, 2015
2 parents 22e1fd7 + 03f01bc commit 38c9a0e
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 8 deletions.
20 changes: 14 additions & 6 deletions drivers/NFSSR.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
PROBE_MOUNTPOINT = "probe"
NFSPORT = 2049
DEFAULT_TRANSPORT = "tcp"

PROBEVERSION = 'probeversion'

class NFSSR(FileSR.FileSR):
"""NFS file-based storage repository"""
Expand Down Expand Up @@ -110,17 +110,25 @@ def validate_remotepath(self, scan):

def check_server(self):
try:
nfs.check_server_tcp(self.remoteserver, self.nfsversion)
if self.dconf.has_key(PROBEVERSION):
nfs.check_server_tcp(self.remoteserver)
else:
nfs.check_server_tcp(self.remoteserver, self.nfsversion)
except nfs.NfsException, exc:
raise xs_errors.XenError('NFSVersion',
opterr=exc.errstr)


def mount(self, mountpoint, remotepath, timeout = 0):
try:
nfs.soft_mount(
mountpoint, self.remoteserver, remotepath, self.transport,
timeout=timeout, nfsversion=self.nfsversion)
if self.dconf.has_key(PROBEVERSION):
nfs.soft_mount(
mountpoint, self.remoteserver, remotepath, self.transport,
timeout=timeout)
else:
nfs.soft_mount(
mountpoint, self.remoteserver, remotepath, self.transport,
timeout=timeout, nfsversion=self.nfsversion)
except nfs.NfsException, exc:
raise xs_errors.XenError('NFSMount', opterr=exc.errstr)

Expand Down Expand Up @@ -151,7 +159,7 @@ def probe(self):

self.mount(temppath, self.remotepath)
try:
return nfs.scan_srlist(temppath)
return nfs.scan_srlist(temppath, self.dconf)
finally:
try:
nfs.unmount(temppath, True)
Expand Down
30 changes: 29 additions & 1 deletion drivers/nfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ def scan_exports(target):
return dom


def scan_srlist(path):
def scan_srlist(path, dconf):
"""Scan and report SR, UUID."""
dom = xml.dom.minidom.Document()
element = dom.createElement("SRlist")
Expand All @@ -189,4 +189,32 @@ def scan_srlist(path):
textnode = dom.createTextNode(val)
subentry.appendChild(textnode)

from NFSSR import PROBEVERSION
if dconf.has_key(PROBEVERSION):
util.SMlog("Add supported nfs versions to sr-probe")
supported_versions = get_supported_nfs_versions(dconf.get('server'))
supp_ver = dom.createElement("SupportedVersions")
element.appendChild(supp_ver)

for ver in supported_versions:
version = dom.createElement('Version')
supp_ver.appendChild(version)
textnode = dom.createTextNode(ver)
version.appendChild(textnode)

return dom.toprettyxml()


def get_supported_nfs_versions(server):
"""Return list of supported nfs versions."""
valid_versions = ['3', '4']
supported_versions = []
try:
ns = util.pread2([RPCINFO_BIN, "-t", "%s" % server, "nfs"])
for l in ns.strip().split("\n"):
if l.split()[3] in valid_versions:
supported_versions.append(l.split()[3])

return supported_versions
except:
util.SMlog("Unable to obtain list of valid nfs versions")
3 changes: 2 additions & 1 deletion tests/test_NFSSR.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ def create_nfssr(self, server='aServer', serverpath='/aServerpath',
if nfsversion:
srcmd.dconf.update({'nfsversion': nfsversion})
srcmd.params = {
'command': 'some_command'
'command': 'some_command',
'device_config': {}
}
nfssr = FakeNFSSR(srcmd, None)
nfssr.load(sr_uuid)
Expand Down

0 comments on commit 38c9a0e

Please sign in to comment.