summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorShireesh Anjal <anjalshireesh@gmail.com>2011-09-19 03:12:39 -0700
committerShireesh Anjal <anjalshireesh@gmail.com>2011-09-19 03:12:39 -0700
commit91105db62e21886ed30b00e1aed2ce39f021ea36 (patch)
tree29f04394f4d4d3af49c91a62170e893bf634a411 /src
parent491f03e7eb1a44ec9bb4039bb8ca6f03a7f1d0b1 (diff)
parentaa72c3755fbc9d0004a9a5fe9e386f7071d0055c (diff)
Merge pull request #277 from TimothyAsir/master
Disk details are probed using sysfs, even when HAL found; and done major code cleanup.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/backend/Disk.py2
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py567
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/backend/FsTabUtils.py4
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/backend/GlusterdUtils.py237
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/backend/NetworkUtils.py98
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/backend/RRDUtils.py76
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/backend/ServerUtils.py295
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/backend/VolumeUtils.py526
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/backend/get_file.py117
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py157
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_log.py126
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_cpu_details.py84
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_memory_details.py84
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/common/Globals.py77
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/common/Protocol.py10
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py490
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/common/XmlHandler.py6
17 files changed, 399 insertions, 2557 deletions
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/Disk.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/Disk.py
index ff994731..3b44e3a8 100755
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/Disk.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/Disk.py
@@ -44,7 +44,7 @@ class Disk:
try:
if dev.GetProperty('storage.removable'):
disk_size = str(int(dev.GetProperty('storage.removable.media_size')) / 1024**2)
- except:
+ except: # TODO: Add appropriated exception on property error.
return
self.disks.append({
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py
index deebb388..5d7b0b4a 100644
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py
@@ -90,23 +90,12 @@ def getDeviceByLabel(label):
def getDiskPartitionLabel(device):
- rv = Utils.runCommandFG(["sudo", "e2label", device], stdout=True)
+ rv = Utils.runCommand("e2label %s" % device, output=True, root=True)
if rv["Status"] == 0:
return rv["Stdout"].strip()
return False
-def readFile(fileName):
- lines = None
- try:
- fp = open(fileName)
- lines = fp.readlines()
- fp.close()
- except IOError, e:
- Utils.log("failed to read file %s: %s" % (file, str(e)))
- return lines
-
-
def getRootPartition(fsTabFile=Globals.FSTAB_FILE):
fsTabEntryList = FsTabUtils.readFsTab(fsTabFile)
for fsTabEntry in fsTabEntryList:
@@ -120,26 +109,6 @@ def getRootPartition(fsTabFile=Globals.FSTAB_FILE):
return getDeviceName(fsTabEntry["Device"])
return None
-def getMounts():
- mounts = {}
- for line in readFile("/proc/mounts"):
- str = line.strip()
- if str.startswith("/dev/"):
- tokens = str.split()
- device = {}
- mountPoint = tokens[1].strip()
- device["MountPoint"] = mountPoint
- device["FsType"] = tokens[2].strip()
- device["Uuid"] = getDiskPartitionUuid(tokens[0].strip())
- device["Status"] = "INITIALIZED"
- if mountPoint:
- if mountPoint in ["/", "/boot"]:
- device["Type"] = "BOOT"
- else:
- device["Type"] = "DATA"
- mounts[tokens[0].strip()] = device
- return mounts
-
def getRaidDisk():
array = []
arrayList = []
@@ -199,182 +168,76 @@ def getOsDisk():
Utils.log("WARNING: getOsDisk() is deprecated by getRootPartition()")
return getRootPartition()
+def getDiskInfo(diskNameList=None):
+ procPartitionsDict = getProcPartitions()
+ diskDict = {}
+ for name, values in procPartitionsDict.iteritems():
+ values["Description"] = None
+ values["Uuid"] = None
+ values["FsType"] = None
+ values["MountPoint"] = None
+ values["SpaceInUse"] = None
+ values["Member"] = None
+ ## extras ?!?!
+ values["Init"] = False
+ values["Status"] = None
+ values["Interface"] = None
+ values["DriveType"] = None
+ values["Type"] = None
+ values["FsVersion"] = None
+ values["ReadOnlyAccess"] = None
+
+ device = getDevice(name)
+ values["Uuid"] = getUuidByDiskPartition(device)
+ rv = Utils.runCommand("blkid -c /dev/null -o value %s" % device, output=True, root=True)
+ if rv["Status"] == 0:
+ lines = rv["Stdout"].strip().split("\n")
+ values["FsType"] = lines[-1].strip()
+ values["MountPoint"] = getDeviceMountPoint(device)
+ if values["FsType"]:
+ values["Init"] = True
+ if values["MountPoint"]:
+ rv = Utils.runCommand(["df", values["MountPoint"]], output=True)
+ if rv["Status"] == 0:
+ try:
+ values["SpaceInUse"] = long(rv["Stdout"].split("\n")[1].split()[2])
+ except IndexError, e:
+ pass
+ except ValueError, e:
+ pass
+ if os.path.isdir("/sys/block/%s" % name):
+ model = Utils.readFile("/sys/block/%s/device/model" % name)
+ vendor = Utils.readFile("/sys/block/%s/device/vendor" % name)
+ values["Description"] = "%s %s" % (model.strip(), vendor.strip())
+ values["Partitions"] = {}
+ diskDict[name] = values
+
+ for diskName in diskDict.keys():
+ del procPartitionsDict[diskName]
+ for partName, values in procPartitionsDict.iteritems():
+ if os.path.isdir("/sys/block/%s/%s" % (diskName, partName)):
+ diskDict[diskName]["Partitions"][partName] = values
+
+ procMdstatDict = getProcMdstat()
+ for name, values in procMdstatDict.iteritems():
+ try:
+ diskDict[name]["Description"] = "Software Raid Array - %s - %s" % (values["Type"], values["Status"])
+ diskDict[name]["Member"] = values["Member"]
+ except KeyError, e:
+ pass
+
+ diskNameList = getDeviceName(diskNameList)
+ if Utils.isString(diskNameList):
+ diskNameList = [diskNameList]
+
+ if not diskNameList:
+ return diskDict
+
+ outputDict = {}
+ for diskName in list(set(diskDict.keys()).intersection(set(diskNameList))):
+ outputDict[diskName] = diskDict[diskName]
+ return outputDict
-def getDiskInfo(diskDeviceList=None):
- diskDeviceList = getDevice(diskDeviceList)
- if Utils.isString(diskDeviceList):
- diskDeviceList = [diskDeviceList]
-
- mounts = getMounts()
- if Utils.runCommand("/usr/bin/lshal") != 0:
- Utils.log("failed running /usr/bin/lshal")
-
- dbusSystemBus = dbus.SystemBus()
- halObj = dbusSystemBus.get_object("org.freedesktop.Hal",
- "/org/freedesktop/Hal/Manager")
- halManager = dbus.Interface(halObj, "org.freedesktop.Hal.Manager")
- storageUdiList = halManager.FindDeviceByCapability("storage")
-
- diskInfo = {}
- diskList = []
- for udi in storageUdiList:
- halDeviceObj = dbusSystemBus.get_object("org.freedesktop.Hal", udi)
- halDevice = dbus.Interface(halDeviceObj,
- "org.freedesktop.Hal.Device")
- if halDevice.GetProperty("storage.drive_type") in ["cdrom", "floppy"] or \
- halDevice.GetProperty("block.is_volume"):
- continue
- disk = {}
- disk["Device"] = str(halDevice.GetProperty('block.device'))
- if diskDeviceList and disk["Device"] not in diskDeviceList:
- continue
- disk["Description"] = str(halDevice.GetProperty('storage.vendor')) + " " + str(halDevice.GetProperty('storage.model'))
- if halDevice.GetProperty('storage.removable'):
- disk["Size"] = long(halDevice.GetProperty('storage.removable.media_size'))
- else:
- disk["Size"] = long(halDevice.GetProperty('storage.size')) / 1024**2
- disk["Interface"] = str(halDevice.GetProperty('storage.bus'))
- disk["DriveType"] = str(halDevice.GetProperty('storage.drive_type'))
- disk["Status"] = None
- disk["Uuid"] = None
- disk["Init"] = False
- disk["Type"] = None
- disk["FsType"] = None
- disk["FsVersion"] = None
- disk["MountPoint"] = None
- disk["ReadOnlyAccess"] = None
-
- partitionUdiList = halManager.FindDeviceStringMatch("info.parent", udi)
- if isDiskInFormatting(disk["Device"]):
- disk["Status"] = "INITIALIZING"
- else:
- if partitionUdiList:
- disk["Status"] = "INITIALIZED"
- else:
- disk["Status"] = "UNINITIALIZED"
- disk["Type"] = "UNKNOWN"
-
- if mounts and mounts.has_key(disk["Device"]):
- disk["Uuid"] = mounts[disk["Device"]]["Uuid"]
- disk["Type"] = mounts[disk["Device"]]["Type"]
- disk["Status"] = mounts[disk["Device"]]["Status"]
- disk["FsType"] = mounts[disk["Device"]]["FsType"]
- disk["MountPoint"] = mounts[disk["Device"]]["MountPoint"]
-
- if disk["MountPoint"]:
- disk["SpaceInUse"] = getDeviceUsedSpace(disk["Device"])
- else:
- disk["SpaceInUse"] = None
-
- partitionList = []
- diskSpaceInUse = 0
- for partitionUdi in partitionUdiList:
- used = 0
- partitionHalDeviceObj = dbusSystemBus.get_object("org.freedesktop.Hal",
- partitionUdi)
- partitionHalDevice = dbus.Interface(partitionHalDeviceObj,
- "org.freedesktop.Hal.Device")
- if not partitionHalDevice.GetProperty("block.is_volume"):
- continue
- partitionDevice = str(partitionHalDevice.GetProperty('block.device'))
- if partitionHalDevice.GetProperty("volume.is_mounted"):
- rv = Utils.runCommandFG(["df", str(partitionHalDevice.GetProperty('volume.mount_point'))], stdout=True)
- if rv["Status"] == 0:
- try:
- used = long(rv["Stdout"].split("\n")[1].split()[2]) / 1024
- diskSpaceInUse += used
- except IndexError:
- pass
- except ValueError:
- pass
-
- if disk["Device"] == partitionDevice:
- disk["Uuid"] = str(partitionHalDevice.GetProperty('volume.uuid'))
- disk["Init"] = True # TODO: use isDataDiskPartitionFormatted function to cross verify this
- disk["Status"] = "INITIALIZED"
- mountPoint = str(partitionHalDevice.GetProperty('volume.mount_point'))
- if mountPoint:
- if mountPoint in ["/", "/boot"]:
- disk["Type"] = "BOOT"
- else:
- disk["Type"] = "DATA"
- disk["FsType"] = str(partitionHalDevice.GetProperty('volume.fstype'))
- if disk["FsType"] and "UNINITIALIZED" == disk["Status"]:
- disk["Status"] = "INITIALIZED"
- disk["FsVersion"] = str(partitionHalDevice.GetProperty('volume.fsversion'))
- disk["MountPoint"] = str(partitionHalDevice.GetProperty('volume.mount_point'))
- disk["ReadOnlyAccess"] = str(partitionHalDevice.GetProperty('volume.is_mounted_read_only'))
- if not disk["Size"]:
- disk["Size"] = long(partitionHalDevice.GetProperty('volume.size')) / 1024**2
- #disk["SpaceInUse"] = used
- continue
-
- partition = {}
- partition["Init"] = False
- partition["Type"] = "UNKNOWN"
- partition["Device"] = partitionDevice
- partition["Uuid"] = str(partitionHalDevice.GetProperty('volume.uuid'))
- partition["Size"] = long(partitionHalDevice.GetProperty('volume.size')) / 1024**2
- partition["FsType"] = str(partitionHalDevice.GetProperty('volume.fstype'))
- partition["FsVersion"] = str(partitionHalDevice.GetProperty('volume.fsversion'))
- partition["Label"] = str(partitionHalDevice.GetProperty('volume.label'))
- partition["MountPoint"] = str(partitionHalDevice.GetProperty('volume.mount_point'))
- partition["Size"] = long(partitionHalDevice.GetProperty('volume.size')) / 1024**2
-
- if isDiskInFormatting(partitionDevice):
- partition["Status"] = "INITIALIZING"
- else:
- if partition["FsType"]:
- partition["Status"] = "INITIALIZED"
- else:
- partition["Status"] = "UNINITIALIZED"
-
- partition["SpaceInUse"] = used
- if partition["MountPoint"] or isDataDiskPartitionFormatted(partitionDevice):
- partition["Init"] = True
- partition["Status"] = "INITIALIZED"
- if partition["MountPoint"]:
- if partition["MountPoint"] in ["/", "/boot"]:
- partition["Type"] = "BOOT"
- else:
- partition["Type"] = "DATA"
- else:
- if "SWAP" == partition["FsType"].strip().upper():
- partition["Type"] = "SWAP"
- partition["ReadOnlyAccess"] = str(partitionHalDevice.GetProperty('volume.is_mounted_read_only'))
- partitionList.append(partition)
- disk["Partitions"] = partitionList
- if not disk["SpaceInUse"]:
- disk["SpaceInUse"] = diskSpaceInUse
- diskList.append(disk)
- diskInfo["disks"] = diskList
- if diskList:
- return diskInfo
- for line in readFile("/proc/partitions")[2:]:
- disk = {}
- tokens = line.split()
- if tokens[3].startswith("md"):
- continue
- disk["Device"] = tokens[3]
- ## if diskDeviceList and disk["Device"] not in diskDeviceList:
- ## continue
- disk["Description"] = None
- disk["Size"] = long(tokens[2]) / 1024
- disk["Status"] = None
- disk["Interface"] = None
- disk["DriveType"] = None
- disk["Uuid"] = None
- disk["Init"] = False
- disk["Type"] = None
- disk["FsType"] = None
- disk["FsVersion"] = None
- disk["MountPoint"] = None
- disk["ReadOnlyAccess"] = None
- disk["SpaceInUse"] = None
- disk["Partitions"] = []
- diskList.append(disk)
- diskInfo["disks"] = diskList
- return diskInfo
def getDiskList(diskDeviceList=None):
return diskInfo["disks"]
@@ -383,8 +246,9 @@ def getDiskList(diskDeviceList=None):
def checkDiskMountPoint(diskMountPoint):
try:
fstabEntries = open(Globals.FSTAB_FILE).readlines()
- except IOError:
+ except IOError, e:
fstabEntries = []
+ Utils.log("failed to read file %s: %s" % (Globals.FSTAB_FILE, str(e)))
found = False
for entry in fstabEntries:
entry = entry.strip()
@@ -400,8 +264,9 @@ def getMountPointByUuid(partitionUuid):
# check uuid in etc/fstab
try:
fstabEntries = open(Globals.FSTAB_FILE).readlines()
- except IOError:
+ except IOError, e:
fstabEntries = []
+ Utils.log("failed to read file %s: %s" % (Globals.FSTAB_FILE, str(e)))
found = False
for entry in fstabEntries:
entry = entry.strip()
@@ -416,9 +281,9 @@ def getDeviceUsedSpace(device):
if rv["Status"] == 0:
try:
return long(rv["Stdout"].split("\n")[1].split()[2]) / 1024
- except IndexError:
+ except IndexError, e:
pass
- except ValueError:
+ except ValueError, e:
pass
def getDiskSizeInfo(partition):
@@ -427,10 +292,10 @@ def getDiskSizeInfo(partition):
used = None
free = None
command = "df -kl -t ext3 -t ext4 -t xfs"
- rv = Utils.runCommandFG(command, stdout=True, root=True)
+ rv = Utils.runCommand(command, output=True, root=True)
message = Utils.stripEmptyLines(rv["Stdout"])
- if rv["Stderr"]:
- Utils.log("failed to get disk details. %s" % Utils.stripEmptyLines(rv["Stdout"]))
+ if rv["Status"] != 0:
+ Utils.log("failed to get disk partition details")
return None, None, None
for line in rv["Stdout"].split("\n"):
tokens = line.split()
@@ -457,10 +322,9 @@ def getDiskSizeInfo(partition):
number = int(partitionNumber)
command = "parted -ms %s unit kb print" % disk
- rv = Utils.runCommandFG(command, stdout=True, root=True)
- message = Utils.stripEmptyLines(rv["Stdout"])
- if rv["Stderr"]:
- Utils.log("failed to get disk details. %s" % Utils.stripEmptyLines(rv["Stdout"]))
+ rv = Utils.runCommand(command, output=True, root=True)
+ if rv["Status"] != 0:
+ Utils.log("failed to get disk partition details")
return None, None, None
lines = rv["Stdout"].split(";\n")
@@ -478,7 +342,6 @@ def getDiskSizeInfo(partition):
def isDataDiskPartitionFormatted(device):
- #Todo: Proper label needs to be added for data partition
#if getDiskPartitionLabel(device) != Globals.DATA_PARTITION_LABEL:
# return False
device = getDeviceName(device)
@@ -501,239 +364,6 @@ def isDataDiskPartitionFormatted(device):
return False
-def getDiskDom(diskDeviceList=None, bootPartition=None, skipDisk=None):
- diskDeviceList = getDevice(diskDeviceList)
- if Utils.isString(diskDeviceList):
- diskDeviceList = [diskDeviceList]
-
- if skipDisk:
- skipDisk = getDevice(skipDisk)
- if Utils.isString(skipDisk):
- skipDisk = [skipDisk]
-
- diskInfo = getDiskInfo(diskDeviceList)
- diskList = diskInfo["disks"]
- if not diskList:
- return None
-
- raidPartitions = {}
- raidDisk = getRaidDisk()
-
- for k, v in raidDisk.iteritems():
- for i in v['Disks']:
- raidPartitions[i] = k
-
- #for partition in raidDisk.values():
- # raidDiskPartitions += partition['disks']
-
- diskDom = Protocol.XDOM()
- disksTag = diskDom.createTag("disks", None)
- raidDisks = {}
- if not bootPartition:
- bootPartition = getRootPartition()
- for disk in diskList:
- if skipDisk and disk["Device"] in skipDisk:
- continue
- diskTag = diskDom.createTag("disk", None)
- diskDevice = getDeviceName(disk["Device"])
- diskTag.appendChild(diskDom.createTag("name", diskDevice))
- diskTag.appendChild(diskDom.createTag("description", disk["Description"]))
- diskTag.appendChild(diskDom.createTag("uuid", disk["Uuid"]))
- diskTag.appendChild(diskDom.createTag("status", disk["Status"]))
- diskTag.appendChild(diskDom.createTag("interface", disk["Interface"]))
-
- #if not disk["Partitions"]:
- diskTag.appendChild(diskDom.createTag("type", disk["Type"]))
- #diskTag.appendChild(diskDom.createTag("init", str(disk["Init"]).lower()))
- diskTag.appendChild(diskDom.createTag("fsType", disk["FsType"]))
- diskTag.appendChild(diskDom.createTag("fsVersion", disk["FsVersion"]))
- diskTag.appendChild(diskDom.createTag("mountPoint", disk["MountPoint"]))
-
- diskTag.appendChild(diskDom.createTag("size", disk["Size"]))
- diskTag.appendChild(diskDom.createTag("spaceInUse", disk["SpaceInUse"]))
- partitionsTag = diskDom.createTag("partitions", None)
- if raidPartitions.has_key(diskDevice):
- rdList = {}
- rdList[diskDevice] = [deepcopy(diskTag)]
- if not raidDisks.has_key(raidPartitions[diskDevice]):
- raidDisks[raidPartitions[diskDevice]] = []
- raidDisks[raidPartitions[diskDevice]] += [rdList]
- continue
- for partition in disk["Partitions"]:
- partitionTag = diskDom.createTag("partition", None)
- device = getDeviceName(partition["Device"])
- partitionTag.appendChild(diskDom.createTag("name", device))
- if partition["Uuid"]: #TODO: Move this verification and findings to getDiskInfo function
- partitionTag.appendChild(diskDom.createTag("uuid", partition["Uuid"]))
- else:
- partitionTag.appendChild(diskDom.createTag("uuid", getUuidByDiskPartition("/dev/" + device)))
- partitionTag.appendChild(diskDom.createTag("status", partition["Status"]))
- #partitionTag.appendChild(diskDom.createTag("init", str(partition["Init"]).lower()))
- partitionTag.appendChild(diskDom.createTag("type", str(partition["Type"])))
- partitionTag.appendChild(diskDom.createTag("fsType", partition["FsType"]))
- partitionTag.appendChild(diskDom.createTag("mountPoint", partition['MountPoint']))
- partitionTag.appendChild(diskDom.createTag("size", partition["Size"]))
- partitionTag.appendChild(diskDom.createTag("spaceInUse", partition["SpaceInUse"]))
- if raidPartitions.has_key(device):
- tempPartitionTag = diskDom.createTag("partitions", None)
- if raidDisks.has_key(raidPartitions[device]):
- rdList = raidDisks[raidPartitions[device]]
- for rdItem in rdList:
- if not rdItem.has_key(diskDevice):
- rdItem[diskDevice] = [deepcopy(diskTag), tempPartitionTag]
- rdItem[diskDevice][0].appendChild(tempPartitionTag)
- rdItem[diskDevice][-1].appendChild(partitionTag)
- continue
- rdList = {}
- rdList[diskDevice] = [deepcopy(diskTag), tempPartitionTag]
- tempPartitionTag.appendChild(partitionTag)
- rdList[diskDevice][0].appendChild(tempPartitionTag)
- raidDisks[raidPartitions[device]] = [rdList]
- continue
- partitionsTag.appendChild(partitionTag)
- diskTag.appendChild(partitionsTag)
- disksTag.appendChild(diskTag)
-
- for rdisk in raidDisk.keys():
- raidDiskTag = diskDom.createTag("disk", None)
- raidDiskTag.appendChild(diskDom.createTag("name", rdisk))
- raidDiskTag.appendChild(diskDom.createTag("description"))
- raidDiskTag.appendChild(diskDom.createTag("uuid", raidDisk[rdisk]['Uuid']))
- raidDiskTag.appendChild(diskDom.createTag("type", raidDisk[rdisk]['Type']))
- raidDiskTag.appendChild(diskDom.createTag("mountPoint", raidDisk[rdisk]['MountPoint']))
- raidDiskTag.appendChild(diskDom.createTag("status", raidDisk[rdisk]['Status']))
- raidDiskTag.appendChild(diskDom.createTag("interface", raidDisk[rdisk]['Interface']))
- raidDiskTag.appendChild(diskDom.createTag("fsType", raidDisk[rdisk]['FsType']))
- raidDiskTag.appendChild(diskDom.createTag("fsVersion"))
- raidDiskTag.appendChild(diskDom.createTag("size", raidDisk[rdisk]['Size']))
- raidDiskTag.appendChild(diskDom.createTag("spaceInUse", raidDisk[rdisk]['SpaceInUse']))
- raidDisksTag = diskDom.createTag("raidDisks", None)
- if raidDisks.has_key(rdisk):
- for item in raidDisks[rdisk]:
- for diskTag in item.values():
- raidDisksTag.appendChild(diskTag[0])
- raidDiskTag.appendChild(raidDisksTag)
- disksTag.appendChild(raidDiskTag)
- diskDom.addTag(disksTag)
- return diskDom
-
-
-def initializeDisk(disk, boot=False, startSize=0, sudo=False):
- if boot and startSize > 0:
- return False
-
- disk = getDevice(disk)
- diskObj = getDiskList(disk)[0]
-
- if boot or startSize == 0:
- command = "dd if=/dev/zero of=%s bs=1024K count=1" % diskObj["Device"]
- if runCommandFG(command, root=sudo) != 0:
- if boot:
- Utils.log("failed to clear boot sector of disk %s" % diskObj["Device"])
- return False
- Utils.log("failed to clear boot sector of disk %s. ignoring" % diskObj["Device"])
-
- command = "parted -s %s mklabel gpt" % diskObj["Device"]
- if runCommandFG(command, root=sudo) != 0:
- return False
-
- if boot:
- command = "parted -s %s mkpart primary ext3 0MB %sMB" % (diskObj["Device"], Globals.OS_PARTITION_SIZE)
- if runCommandFG(command, root=sudo) != 0:
- return False
- command = "parted -s %s set 1 boot on" % (diskObj["Device"])
- if runCommandFG(command, root=sudo) != 0:
- return False
- startSize = Globals.OS_PARTITION_SIZE
-
- size = (diskObj["Size"] / ONE_MB_SIZE) - startSize
- while size > Globals.MAX_PARTITION_SIZE:
- endSize = startSize + Globals.MAX_PARTITION_SIZE
- command = "parted -s %s mkpart primary ext3 %sMB %sMB" % (diskObj["Device"], startSize, endSize)
- if runCommandFG(command, root=sudo) != 0:
- return False
- size -= Globals.MAX_PARTITION_SIZE
- startSize = endSize
-
- if size:
- command = "parted -s %s mkpart primary ext3 %sMB 100%%" % (diskObj["Device"], startSize)
- if runCommandFG(command, root=sudo) != 0:
- return False
-
- if runCommandFG("udevadm settle", root=sudo) != 0:
- if runCommandFG("udevadm settle", root=sudo) != 0:
- Utils.log("udevadm settle for disk %s failed. ignoring" % diskObj["Device"])
- time.sleep(1)
-
- if runCommandFG("partprobe %s" % diskObj["Device"], root=sudo) != 0:
- Utils.log("partprobe %s failed" % diskObj["Device"])
- return False
-
- if runCommandFG("gptsync %s" % diskObj["Device"], root=sudo) != 0:
- Utils.log("gptsync %s failed. ignoring" % diskObj["Device"])
-
- # wait forcefully to appear devices in /dev
- time.sleep(2)
- return True
-
-
-def initializeOsDisk(diskObj):
- Utils.log("WARNING: initializeOsDisk() is deprecated by initializeDisk(boot=True)")
- return initializeDisk(diskObj, boot=True)
-
-
-def initializeDataDisk(diskObj):
- Utils.log("WARNING: initializeDataDisk() is deprecated by initializeDisk()")
- return initializeDisk(diskObj)
-
-def getBootPartition(serverName):
- diskDom = XDOM()
- diskDom.parseFile("%s/%s/disk.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName))
- if not diskDom:
- return None
- partitionDom = XDOM()
- partitionUuid = None
- partitionName = None
- for partitionTag in diskDom.getElementsByTagRoute("disk.partition"):
- partitionDom.setDomObj(partitionTag)
- boot = partitionDom.getTextByTagRoute("boot")
- if boot and boot.strip().upper() == 'YES':
- partitionUuid = partitionDom.getTextByTagRoute("uuid")
- partitionName = partitionDom.getTextByTagRoute("device")
- break
- if not (partitionUuid and partitionName):
- return None
-
- # check device label name
- deviceBaseName = os.path.basename(partitionName)
- process = runCommandBG(['sudo', 'e2label', partitionName])
- if type(process) == type(True):
- return None
- if process.wait() != 0:
- return None
- output = process.communicate()
- deviceLabel = output[0].split()[0]
- if deviceLabel != Globals.BOOT_PARTITION_LABEL:
- return None
-
- # check uuid in etc/fstab
- try:
- fstabEntries = open(Globals.FSTAB_FILE).readlines()
- except IOError:
- fstabEntries = []
- found = False
- for entry in fstabEntries:
- entry = entry.strip()
- if not entry:
- continue
- if entry.split()[0] == "UUID=" + partitionUuid:
- found = True
- break
- if not found:
- return None
- return partitionName
-
-
def isDiskInFormatting(device):
DEVICE_FORMAT_LOCK_FILE = "/var/lock/%s.lock" % device
return os.path.exists(DEVICE_FORMAT_LOCK_FILE)
@@ -745,12 +375,29 @@ def isDiskInFormat(device):
def getDeviceMountPoint(device):
- try:
- fp = open("/proc/mounts")
- for token in [line.strip().split() for line in fp.readlines()]:
- if token and len(token) > 2 and token[0] == device:
- return token[1]
- fp.close()
- except IOError, e:
- return None
+ lines = Utils.readFile("/proc/mounts", lines=True)
+ uuid = getUuidByDiskPartition(device)
+ for line in lines:
+ tokens = line.split()
+ if tokens[0] == device or (uuid and tokens[0].endswith(uuid)):
+ return tokens[1]
+ return None
+def getProcPartitions():
+ procPartitionsDict = {}
+ s = Utils.readFile("/proc/partitions", lines=True)
+ for line in s[2:]:
+ tokens = line.strip().split()
+ procPartitionsDict[tokens[3]] = {"Size" : long(tokens[2])}
+ return procPartitionsDict
+
+def getProcMdstat():
+ raidArrayDict = {}
+ lines = Utils.readFile("/proc/mdstat", lines=True)
+ for line in lines[1:]:
+ tokens = line.strip().split()
+ if not tokens:
+ continue
+ if tokens[0].startswith("md"):
+ raidArrayDict[tokens[0]] = {"Status" : tokens[2], "Type" : tokens[3], "Member" : [token.split('[')[0] for token in tokens[4:]]}
+ return raidArrayDict
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/FsTabUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/FsTabUtils.py
index a9adf4de..368b7a15 100644
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/FsTabUtils.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/FsTabUtils.py
@@ -39,7 +39,7 @@ def readFsTab(fsTabFile=Globals.FSTAB_FILE):
fsTabEntry["Options"] = tokens[3]
fsTabEntry["DumpOption"] = tokens[4]
fsTabEntry["fsckOrder"] = tokens[5]
- except IndexError:
+ except IndexError, e:
pass
if fsTabEntry["Device"] and fsTabEntry["MountPoint"] and fsTabEntry["FsType"] and fsTabEntry["Options"]:
fsTabEntryList.append(fsTabEntry)
@@ -81,7 +81,7 @@ def removeFsTabEntry(fsTabEntry, fsTabFile=Globals.FSTAB_FILE):
try:
fsTabEntryList.remove(fsTabEntry)
- except ValueError:
+ except ValueError, e:
return False
return writeFsTab(fsTabEntryList, fsTabFile)
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/GlusterdUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/GlusterdUtils.py
deleted file mode 100644
index 9295d83b..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/GlusterdUtils.py
+++ /dev/null
@@ -1,237 +0,0 @@
-# Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-
-import os
-import Utils
-
-import ServerUtils
-
-
-def getGlusterVolumeInfo(volumeName=None):
- volumeNameList = None
- if Utils.isString(volumeName):
- volumeNameList = [volumeName]
- if type(volumeName) == type([]):
- volumeNameList = volumeName
-
- status = Utils.runCommand("gluster volume info", output=True, root=True)
- if status["Status"] != 0:
- Utils.log("Failed to execute 'gluster volume info' command")
- return None
-
- volumeInfoDict = {}
- volumeInfo = {}
- volumeName = None
- brickList = []
- for line in status['Stdout'].split("\n"):
- if not line:
- if volumeName and volumeInfo:
- volumeInfo["Bricks"] = brickList
- volumeInfoDict[volumeName] = volumeInfo
- volumeInfo = {}
- volumeName = None
- brickList = []
- continue
-
- tokens = line.split(":")
- if tokens[0].strip().upper() == "BRICKS":
- continue
- elif tokens[0].strip().upper() == "VOLUME NAME":
- volumeName = tokens[1].strip()
- volumeInfo["VolumeName"] = volumeName
- elif tokens[0].strip().upper() == "TYPE":
- volumeInfo["VolumeType"] = tokens[1].strip()
- elif tokens[0].strip().upper() == "STATUS":
- volumeInfo["VolumeStatus"] = tokens[1].strip()
- elif tokens[0].strip().upper() == "TRANSPORT-TYPE":
- volumeInfo["TransportType"] = tokens[1].strip()
- elif tokens[0].strip().upper().startswith("BRICK"):
- brickList.append(":".join(tokens[1:]).strip())
-
- if volumeName and volumeInfo:
- volumeInfoDict[volumeName] = volumeInfo
-
- if not volumeNameList:
- return volumeInfoDict
-
- # remove unwanted volume info
- for volumeName in list(set(volumeInfoDict.keys()) - set(volumeNameList)):
- del volumeInfoDict[volumeName]
-
- return volumeInfoDict
-
-
-def isVolumeRunning(volumeName):
- if not volumeName:
- return False
- volumeInfo = getGlusterVolumeInfo(volumeName)
- if not volumeInfo:
- return False
- status = volumeInfo[volumeName]["VolumeStatus"]
- if not status:
- return False
- if status.upper() == "STARTED":
- return True
- return False
-
-
-def isVolumeExist(volumeName):
- if not volumeName:
- return False
- if getGlusterVolumeInfo(volumeName):
- return True
- return False
-
-
-def peerProbe(serverName):
- command = "gluster peer probe %s" % serverName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def setAuthAllow(volumeName, authList, includeServers=True):
- if not (volumeName and authList):
- return False
- vacl = []
- if includeServers:
- for serverName in ServerUtils.getAllServerList():
- vacl += ServerUtils.getServerIpList(serverName)
- vacl += authList
-
- command = "gluster volume set %s auth.allow %s" % (volumeName, ",".join(list(set(vacl))))
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeCreate(volumeName, volumeType, transportTypeList, brickList):
- command = "gluster volume create %s" % volumeName
-
- if volumeType.upper() == "MIRROR":
- command += " replica 2"
- elif volumeType.upper() == "STRIPE":
- command += " stripe 4"
-
- if "RDMA" in transportTypeList:
- command += " transport rdma"
-
- command += " " + " ".join(brickList)
-
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeDelete(volumeName):
- command = "gluster --mode=script volume delete %s" % volumeName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeLogFileName(volumeName, brick, logDir):
- command = "gluster volume log filename %s %s %s" % (volumeName, brick, logDir)
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def startVolumeMigration(volumeName, sourcePath, destinationPath):
- command = "gluster volume replace-brick %s %s %s start" % (volumeName, sourcePath, destinationPath)
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[-1] == "successfully":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def stopVolumeMigration(volumeName, sourcePath, destinationPath):
- command = "gluster volume replace-brick %s %s %s abort" % (volumeName, sourcePath, destinationPath)
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[-1] == "successful":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def commitVolumeMigration(volumeName, sourcePath, destinationPath):
- command = "gluster volume replace-brick %s %s %s commit" % (volumeName, sourcePath, destinationPath)
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[-1] == "successful":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def getMigrationStatus(volumeName, sourcePath, destinationPath):
- command = "gluster volume replace-brick %s %s %s status" % (volumeName, sourcePath, destinationPath)
- status = Utils.runCommand(command, output=True, root=True)
- if status['Status'] == 0 and status['Stdout']:
- lines = status["Stdout"].split("\n")
- if "Current file" in lines[0]:
- return "started"
- if "Migration complete" in lines[0]:
- return "completed"
- Utils.log("command [%s] returns unknown status:%s" % (command, lines[0]))
- return "failed"
- #if status['Status'] == 0 and status['Stdout']:
- # for line in status['Stdout'].split('\n'):
- # words = line.split()
- # if words and words[0].upper() == "STATUS:":
- # return " ".join(words[1:]).upper()
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return None
-
-
-def volumeRebalanceStart(volumeName):
- command = "gluster volume rebalance %s start" % volumeName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[-1] == "successful":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeRebalanceStop(volumeName):
- command = "gluster volume rebalance %s stop" % volumeName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[0] == "stopped":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeRebalanceStatus(volumeName):
- command = "gluster volume rebalance %s status" % volumeName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if "rebalance not started" in lines[0]:
- return "not started"
- if "rebalance completed" in lines[0]:
- return "completed"
- return "running"
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/NetworkUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/NetworkUtils.py
index 2c3f38e0..27a9c056 100755
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/NetworkUtils.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/NetworkUtils.py
@@ -32,8 +32,8 @@ def readHostFile(fileName=None):
continue
hostEntryList.append({tokens[0] : tokens[1:]})
return hostEntryList
- except IOError:
- log("failed to read %s file" % fileName)
+ except IOError, e:
+ log("failed to read %s file: %s" % (fileName, str(e)))
return None
@@ -49,10 +49,10 @@ def writeHostFile(hostEntryList, fileName=None):
fp.close()
if hostFile == fileName:
return True
- except IOError:
- log("failed to write %s file" % hostFile)
+ except IOError, e:
+ log("failed to write %s file: %s" % (hostFile, str(e)))
return False
- if runCommandFG("mv -f %s /etc/hosts" % hostFile, root=True) != 0:
+ if runCommand("mv -f %s /etc/hosts" % hostFile, root=True) != 0:
log("failed to rename file %s to /etc/hosts" % hostFile)
return False
return True
@@ -81,8 +81,8 @@ def readResolvConfFile(fileName=None, includeLocalHost=False):
searchDomain = tokens[1:]
continue
return nameServerList, domain, searchDomain
- except IOError:
- log("failed to read %s file" % fileName)
+ except IOError, e:
+ log("failed to read %s file: %s" % (fileName, str(e)))
return None, None, None
@@ -104,10 +104,10 @@ def writeResolvConfFile(nameServerList, domain, searchDomain, fileName=None, app
fp.close()
if resolvConfFile == fileName:
return True
- except IOError:
- log("failed to write %s file" % resolvConfFile)
+ except IOError, e:
+ log("failed to write %s file: %s" % (resolvConfFile, str(e)))
return False
- if runCommandFG("mv -f %s %s" % (resolvConfFile, Globals.RESOLV_CONF_FILE), root=True) != 0:
+ if runCommand("mv -f %s %s" % (resolvConfFile, Globals.RESOLV_CONF_FILE), root=True) != 0:
log("failed to rename file %s to %s" % (resolvConfFile, Globals.RESOLV_CONF_FILE))
return False
return True
@@ -123,8 +123,8 @@ def readIfcfgConfFile(deviceName, root=""):
continue
conf[tokens[0].strip().lower()] = tokens[1].strip()
return conf
- except IOError:
- log("failed to read %s file" % fileName)
+ except IOError, e:
+ log("failed to read %s file: %s" % (fileName, str(e)))
return None
@@ -162,10 +162,10 @@ def writeIfcfgConfFile(deviceName, conf, root="", deviceFile=None):
fp.close()
if ifcfgConfFile == deviceFile:
return True
- except IOError:
- log("failed to write %s file" % ifcfgConfFile)
+ except IOError, e:
+ log("failed to write %s file" % (ifcfgConfFile, str(e)))
return False
- if runCommandFG("mv -f %s %s" % (ifcfgConfFile, deviceFile), root=True) != 0:
+ if runCommand("mv -f %s %s" % (ifcfgConfFile, deviceFile), root=True) != 0:
log("failed to rename file %s to %s" % (ifcfgConfFile, deviceFile))
return False
return True
@@ -173,7 +173,7 @@ def writeIfcfgConfFile(deviceName, conf, root="", deviceFile=None):
def getNetDeviceDetail(deviceName):
deviceDetail = {}
deviceDetail['Name'] = deviceName
- rv = runCommandFG("ifconfig %s" % deviceName, stdout=True, root=True)
+ rv = runCommand("ifconfig %s" % deviceName, output=True, root=True)
if rv["Status"] != 0:
return False
for line in rv["Stdout"].split():
@@ -189,7 +189,7 @@ def getNetDeviceDetail(deviceName):
try:
deviceDetail['Ip'] = tokens[1].strip().split()[0]
deviceDetail['Mask'] = tokens[-1].strip()
- except IndexError:
+ except IndexError, e:
pass
break
return deviceDetail
@@ -209,7 +209,7 @@ def getNetDeviceGateway(deviceName):
return None
def getNetSpeed(deviceName):
- rv = runCommandFG("ethtool %s" % deviceName, stdout=True, root=True)
+ rv = runCommand("ethtool %s" % deviceName, output=True, root=True)
if rv["Status"] != 0:
return False
for line in rv["Stdout"].split("\n"):
@@ -221,7 +221,7 @@ def getNetSpeed(deviceName):
def getLinkStatus(deviceName):
return True
## ethtool takes very long time to respond. So its disabled now
- rv = runCommandFG("ethtool %s" % deviceName, stdout=True, root=True)
+ rv = runCommand("ethtool %s" % deviceName, output=True, root=True)
if rv["Status"] != 0:
return False
for line in rv["Stdout"].split("\n"):
@@ -252,8 +252,8 @@ def getBondMode(deviceName, fileName=None):
if tokens[5].startswith("mode="):
return tokens[5].split("=")[1]
return None
- except IOError:
- log("failed to read %s file" % fileName)
+ except IOError, e:
+ log("failed to read %s file: %s" % (fileName, str(e)))
return None
@@ -264,8 +264,8 @@ def setBondMode(deviceName, mode, fileName=None):
try:
fp = open(tempFileName, "w")
lines = open(fileName).readlines()
- except IOError:
- log("unable to open file %s" % Globals.MODPROBE_CONF_FILE)
+ except IOError, e:
+ log("unable to open file %s: %s" % (Globals.MODPROBE_CONF_FILE, str(e)))
return False
for line in lines:
tokens = line.split()
@@ -278,7 +278,7 @@ def setBondMode(deviceName, mode, fileName=None):
fp.write("alias %s bonding\n" % deviceName)
fp.write("options %s max_bonds=2 mode=%s miimon=100\n" % (deviceName, mode))
fp.close()
- if runCommandFG(["mv", "-f", tempFileName, fileName], root=True) != 0:
+ if runCommand(["mv", "-f", tempFileName, fileName], root=True) != 0:
log("unable to move file from %s to %s" % (tempFileName, fileName))
return False
return True
@@ -329,7 +329,7 @@ def getNetDeviceList(root=""):
netDevice["speed"] = getNetSpeed(deviceName)
try:
netDevice["hwaddr"] = open("/sys/class/net/%s/address" % deviceName).read().strip()
- except IOError:
+ except IOError, e:
pass
netDeviceList.append(netDevice)
@@ -339,17 +339,17 @@ def getNetDeviceList(root=""):
continue
try:
netDevice["onboot"] = conf["onboot"]
- except KeyError:
+ except KeyError, e:
pass
try:
netDevice["bootproto"] = conf["bootproto"]
- except KeyError:
+ except KeyError, e:
pass
if conf.has_key("ipaddr") and conf["ipaddr"]:
netDevice["ipaddr"] = conf["ipaddr"]
try:
netDevice["netmask"] = conf["netmask"]
- except KeyError:
+ except KeyError, e:
pass
if conf.has_key("gateway") and conf["gateway"]:
netDevice["gateway"] = conf["gateway"]
@@ -357,35 +357,35 @@ def getNetDeviceList(root=""):
netDevice["gateway"] = getNetDeviceGateway(deviceName)
try:
netDevice["peerdns"] = conf["peerdns"]
- except KeyError:
+ except KeyError, e:
pass
try:
netDevice["autodns"] = conf["autodns"]
- except KeyError:
+ except KeyError, e:
pass
try:
netDevice["dns1"] = conf["dns1"]
- except KeyError:
+ except KeyError, e:
pass
try:
netDevice["dns2"] = conf["dns2"]
- except KeyError:
+ except KeyError, e:
pass
try:
netDevice["dns3"] = conf["dns3"]
- except KeyError:
+ except KeyError, e:
pass
try:
netDevice["master"] = conf["master"]
- except KeyError:
+ except KeyError, e:
pass
try:
netDevice["slave"] = conf["slave"]
- except KeyError:
+ except KeyError, e:
pass
try:
netDevice["nmcontrolled"] = conf["nmcontrolled"]
- except KeyError:
+ except KeyError, e:
pass
return netDeviceList
@@ -414,12 +414,12 @@ def configureDhcpServer(serverIpAddress, dhcpIpAddress):
if token[0] == "dhcp":
serverPortString = token[1]
break
- except IOError:
- log(syslog.LOG_ERR, "Failed to read /proc/cmdline. Continuing with default port 68")
+ except IOError, e:
+ log(syslog.LOG_ERR, "Failed to read /proc/cmdline. Continuing with default port 68: %s" % str(e))
try:
serverPort = int(serverPortString)
- except ValueError:
- log(syslog.LOG_ERR, "Invalid dhcp port '%s' in /proc/cmdline. Continuing with default port 68" % serverPortString)
+ except ValueError, e:
+ log(syslog.LOG_ERR, "Invalid dhcp port '%s' in /proc/cmdline. Continuing with default port 68: %s" % (serverPortString, str(e)))
serverPort = 68
try:
@@ -433,10 +433,10 @@ def configureDhcpServer(serverIpAddress, dhcpIpAddress):
#fp.write("server=%s\n" % serverIpAddress)
#fp.write("dhcp-script=/usr/sbin/server-info\n")
fp.close()
- except IOError:
- log(syslog.LOG_ERR, "unable to write dnsmasq dhcp configuration %s" % tmpDhcpConfFile)
+ except IOError, e:
+ log(syslog.LOG_ERR, "unable to write dnsmasq dhcp configuration %s: %s" % (tmpDhcpConfFile, str(e)))
return False
- if runCommandFG("mv -f %s %s" % (tmpDhcpConfFile, Globals.DNSMASQ_DHCP_CONF_FILE), root=True) != 0:
+ if runCommand("mv -f %s %s" % (tmpDhcpConfFile, Globals.DNSMASQ_DHCP_CONF_FILE), root=True) != 0:
log(syslog.LOG_ERR, "unable to copy dnsmasq dhcp configuration to %s" % Globals.DNSMASQ_DHCP_CONF_FILE)
return False
return True
@@ -447,31 +447,31 @@ def isDhcpServer():
def getDhcpServerStatus():
- if runCommandFG("service dnsmasq status", root=True) == 0:
+ if runCommand("service dnsmasq status", root=True) == 0:
return True
return False
def startDhcpServer():
- if runCommandFG("service dnsmasq start", root=True) == 0:
+ if runCommand("service dnsmasq start", root=True) == 0:
return True
return False
def stopDhcpServer():
- if runCommandFG("service dnsmasq stop", root=True) == 0:
- runCommandFG("rm -f %s" % Globals.DNSMASQ_LEASE_FILE, root=True)
+ if runCommand("service dnsmasq stop", root=True) == 0:
+ runCommand("rm -f %s" % Globals.DNSMASQ_LEASE_FILE, root=True)
return True
return False
def restartDhcpServer():
stopDhcpServer()
- runCommandFG("rm -f %s" % Globals.DNSMASQ_LEASE_FILE, root=True)
+ runCommand("rm -f %s" % Globals.DNSMASQ_LEASE_FILE, root=True)
return startDhcpServer()
def reloadDhcpServer():
- if runCommandFG("service dnsmasq reload", root=True) == 0:
+ if runCommand("service dnsmasq reload", root=True) == 0:
return True
return False
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/RRDUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/RRDUtils.py
deleted file mode 100644
index d1a6c058..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/RRDUtils.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-
-import rrdtool
-import os
-from socket import gethostname
-from itertools import groupby
-
-class RRD:
- def __init__ (self):
- self.COLORS = [0xff7777, 0x7777ff, 0x55ff55, 0xffcc77, 0xff77ff, 0x77ffff,0xffff77, 0x55aaff]
- self.HOST = gethostname()
- self.DIR = "/var/lib/collectd"
-
- def fade_component(self, component):
- return ((component + 255 * 5) / 6)
-
- def fade_color(self, color):
- r = 0;
- for i in [0,1,2]:
- shft = (i * 8)
- component = ((color >> shft) & 255)
- r |= (self.fade_component(component) << shft)
- return r
-
- def generate_pngs(self):
-
- rrdlist = os.popen ("find %s -type f -name '*.rrd'" % self.DIR)
-
- for rrd in rrdlist:
- self.dss = []
- self.defs = ""
-
- rrdinfo = rrdtool.info(rrd.strip())
-
- for key in rrdinfo.keys():
- if key.split('[')[0] == 'ds':
- self.dss.append(key.split('[')[1].split(']')[0])
- self.dss.sort()
-
- self.dss = [a for a,b in groupby(self.dss)]
-
- for ds in self.dss:
- self.defs = self.defs + " DEF:%s_avg=%s:%s:AVERAGE " % (ds, rrd.strip(), ds)
- self.defs = self.defs + " DEF:%s_max=%s:%s:MAX " % (ds, rrd.strip(), ds)
-
- j = 0
- for ds in self.dss:
- color = self.COLORS[j % len(self.COLORS)]
- j = j + 1
- faded_color = self.fade_color(color)
- self.defs = self.defs + " AREA:%s_max#%06x " % (ds, faded_color)
-
- j = 0
- for ds in self.dss:
- color = self.COLORS[j % len(self.COLORS)]
- j = j + 1
- self.defs = self.defs + " LINE2:%s_avg#%06x:%s " % (ds, color, ds)
- self.defs = self.defs + " GPRINT:%s_avg:AVERAGE:%%5.1lf%%sAvg " % ds
- self.defs = self.defs + " GPRINT:%s_max:MAX:%%5.1lf%%sMax " % ds
-
- for span in ['1hour', '1day', '1week', '1month']:
- os.system ("mkdir -p %s/%s" % (self.DIR, self.HOST))
- image = os.path.dirname(rrd.strip()) + "-" + span + ".png"
- cmd = "rrdtool graph " + image + " -t \"%s %s\"" % (os.path.dirname(rrd.strip()), span) + " --imgformat PNG --width 600 --height 100 --start now-" + span + " --end now --interlaced " + self.defs + " >/dev/null 2>&1"
- os.system(cmd)
-
-
-def main ():
-
- rrd = RRD ()
- rrd.generate_pngs ()
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/ServerUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/ServerUtils.py
deleted file mode 100644
index 16cdeed2..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/ServerUtils.py
+++ /dev/null
@@ -1,295 +0,0 @@
-# Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-
-import os
-import re
-import subprocess
-import glob
-import Globals
-from Protocol import *
-from Utils import *
-
-def isValidServer(serverName):
- for profile in getProfileList():
- if profile.ProfileName == "default" and profile.Active:
- if serverName == profile.DNS.Hostname:
- return True
- return False
-
-def getHostname():
- for profile in getProfileList():
- if profile.ProfileName == "default" and profile.Active:
- return profile.DNS.Hostname
- return None
-
-def getDomainName():
- try:
- domainName = open(Globals.DOMAINNAME_FILE).read()
- except IOError:
- return None
- return domainName.split()[0]
-
-def replaceServerIp(fileName, findWhat, replaceWith):
- try:
- data = open(fileName).read()
- fp = open(fileName, "w")
- fp.write(re.sub(findWhat, replaceWith, data))
- fp.close()
- return True
- except IOError:
- return False
- except ValueError:
- return False
- except OSError:
- return False
-
-def serverName2IpAddress(serverName):
- command = "dig %s | grep '^%s'" % (serverName, serverName)
- ps = subprocess.Popen(command,
- shell=True,
- stdout=subprocess.PIPE,
- stdin=subprocess.PIPE,
- stderr=subprocess.PIPE,
- close_fds=True)
- ipAddress = serverName
- if ps.wait() == 0:
- output = ps.communicate()
- ipAddress = output[0].split()[-1]
- return ipAddress
-
-def getInstallerIp():
- if not os.path.exists(Globals.INSTALLER_INFO_FILE):
- return None
- try:
- for line in open(Globals.INSTALLER_INFO_FILE):
- tokens = line.split("=")
- if tokens[0] == "IP-ADDRESS":
- return tokens[1].split(",")[0].strip()
- except IOError:
- syslog.syslog(syslog.LOG_ERR, "unable to read %s file" % Globals.INSTALLER_INFO_FILE)
- return False
-
-def setInstallerIp(installerIp):
- try:
- open(Globals.INSTALLER_INFO_FILE, "w").write("IP-ADDRESS=%s\n" % installerIp)
- return True
- except IOError:
- log(syslog.LOG_ERR, "unable to create %s file" % Globals.INSTALLER_INFO_FILE)
- return False
-
-def getCurrentServerName():
- try:
- for line in open(Globals.SYSCONFIG_NETWORK_FILE):
- tokens = line.split("=")
- if tokens[0] == "HOSTNAME":
- return tokens[1].strip()
- except IOError:
- syslog.syslog(syslog.LOG_ERR, "unable to read %s file" % Globals.SYSCONFIG_NETWORK_FILE)
- return False
-
-def getLastAccessedNetwork(serverName):
- lastAccessedNetworkFile = ("/%s/servers/%s/%s" %
- (Globals.GLUSTER_CONF_DIR, serverName, Globals.LAST_ACCESSED_NETWORK_FILE))
- try:
- return open(lastAccessedNetworkFile).read().strip()
- except IOError:
- log(syslog.LOG_ERR, "failed to read last accessed network file %s" % lastAccessedNetworkFile)
- pass
- return False
-
-def setLastAccessedNetwork(serverName, ipAddress):
- lastAccessedNetworkFile = ("/%s/servers/%s/%s" %
- (Globals.GLUSTER_CONF_DIR, serverName, Globals.LAST_ACCESSED_NETWORK_FILE))
- try:
- open(lastAccessedNetworkFile, "w").write(ipAddress.strip() + "\n")
- except IOError:
- log(syslog.LOG_ERR, "failed to write last accessed network file %s" % lastAccessedNetworkFile)
- return False
- return True
-
-def getServerIpList(serverName, preferredNetworkOnly=False):
- networkXmlFile = ("%s/servers/%s/network.xml" % (Globals.GLUSTER_CONF_DIR, serverName))
- configDom = XDOM()
- if not configDom.parseFile(networkXmlFile):
- log(syslog.LOG_ERR, "failed to read %s file" % networkXmlFile)
- return None
- preferredNetwork = configDom.getTextByTagRoute("preferred-network")
- ipList = []
- interfaceDom = XDOM()
- for tagE in configDom.getElementsByTagName("interface"):
- interfaceDom.setDomObj(tagE)
- deviceName = interfaceDom.getTextByTagRoute("device")
- hostIp = interfaceDom.getTextByTagRoute("ipaddr")
- if not hostIp:
- continue
- if preferredNetworkOnly:
- if preferredNetwork.upper() == "ANY" or preferredNetwork.upper() == deviceName.upper():
- ipList.append(hostIp)
- else:
- ipList.append(hostIp)
- if preferredNetworkOnly:
- lastAccessedNetworkIp = getLastAccessedNetwork(serverName)
- if lastAccessedNetworkIp in ipList:
- ipList.remove(lastAccessedNetworkIp)
- ipList = [lastAccessedNetworkIp] + ipList
- return ipList
-
-def getServerPreferredIpList(serverName):
- return getServerIpList(serverName, True)
-
-def getExecuteServerList(serverList):
- executeServerList = {}
- for serverName in serverList:
- if serverName == Globals.INSTALLER_SERVER_NAME:
- installerIp = getInstallerIp()
- if installerIp:
- executeServerList[serverName] = [installerIp]
- continue
- executeServerList[serverName] = getServerPreferredIpList(serverName)
- return executeServerList
-
-def getAllServerList():
- serverList = []
- for filePath in glob.glob("%s/servers/*" % Globals.GLUSTER_CONF_DIR):
- if os.path.isdir(filePath):
- serverList.append(os.path.basename(filePath))
- try:
- serverList.remove(Globals.INSTALLER_SERVER_NAME)
- except ValueError:
- pass
- return serverList
-
-def getServerNetworkConfigFromLocalFile(serverName):
- configDom = XDOM()
- configDom.parseFile("%s/servers/%s/network.xml" % (Globals.GLUSTER_CONF_DIR, serverName))
- return configDom
-
-def updateServerNetworkConfigXmlFile(serverName, serverNetworkDom):
- configDom = XDOM()
- serverTag = serverNetworkDom.getElementsByTagRoute("server")[0]
- configDom.setDomObj(serverTag)
- if not configDom.writexml("%s/%s/network.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName)):
- log("Faild to write xml file %s/%s/network.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName))
-
-def compareServerNetworkDom(serverNetworkDomA, serverNetworkDomB, requestFlag=True):
- command = "command.server."
- if not requestFlag:
- command = ""
- sourceServer = {}
- tagText = serverNetworkDomA.getTextByTagRoute("name")
- if not tagText:
- taxText = None
- sourceServer["name"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("domain-name")
- if not tagText:
- tagText = None
- sourceServer["domain-name"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("search-domain")
- if not tagText:
- tagText = None
- sourceServer["search-domain"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("dns1")
- if not tagText:
- tagText = None
- sourceServer["dns1"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("dns2")
- if not tagText:
- tagText = None
- sourceServer["dns2"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("dns3")
- if not tagText:
- tagText = None
- sourceServer["dns3"] = tagText
- for tagE in serverNetworkDomA.getElementsByTagRoute("interface"):
- interfaceDom = XDOM()
- interfaceDom.setDomObj(tagE)
- sourceServerList = {}
- tagText = interfaceDom.getTextByTagRoute("description")
- if not tagText:
- tagText = None
- sourceServerList["description"] = tagText
- tagText = interfaceDom.getTextByTagRoute("hwaddr")
- if not tagText:
- tagText = None
- sourceServerList["hwaddr"] = tagText
- tagText = interfaceDom.getTextByTagRoute("onboot")
- if not tagText:
- tagText = None
- sourceServerList["onboot"] = tagText
- tagText = interfaceDom.getTextByTagRoute("bootproto")
- if not tagText:
- tagText = None
- sourceServerList["bootproto"] = tagText
- tagText = interfaceDom.getTextByTagRoute("ipaddr")
- if not tagText:
- tagText = None
- sourceServerList["ipaddr"] = tagText
- tagText = interfaceDom.getTextByTagRoute("netmask")
- if not tagText:
- tagText = None
- sourceServerList["netmask"] = tagText
- tagText = interfaceDom.getTextByTagRoute("gateway")
- if not tagText:
- tagText = None
- sourceServerList["gateway"] = tagText
- sourceServer[interfaceDom.getTextByTagRoute("device")] = sourceServerList
- objServer = {}
- tagText = serverNetworkDomB.getTextByTagRoute(command + "name")
- if not tagText:
- taxText = None
- objServer["name"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "domain-name")
- if not tagText:
- tagText = None
- objServer["domain-name"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "search-domain")
- if not tagText:
- tagText = None
- objServer["search-domain"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "dns1")
- if not tagText:
- tagText = None
- objServer["dns1"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "dns2")
- if not tagText:
- tagText = None
- objServer["dns2"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "dns3")
- if not tagText:
- tagText = None
- objServer["dns3"] = tagText
- for tagE in serverNetworkDomB.getElementsByTagRoute(command + "interface"):
- interfaceDom = XDOM()
- interfaceDom.setDomObj(tagE)
- objServerList = {}
- tagText = interfaceDom.getTextByTagRoute("description")
- if not tagText:
- tagText = None
- objServerList["description"] = tagText
- tagText = interfaceDom.getTextByTagRoute("hwaddr")
- if not tagText:
- tagText = None
- objServerList["hwaddr"] = tagText
- tagText = interfaceDom.getTextByTagRoute("onboot")
- if not tagText:
- tagText = None
- objServerList["onboot"] = tagText
- tagText = interfaceDom.getTextByTagRoute("bootproto")
- if not tagText:
- tagText = None
- objServerList["bootproto"] = tagText
- tagText = interfaceDom.getTextByTagRoute("ipaddr")
- if not tagText:
- tagText = None
- objServerList["ipaddr"] = tagText
- tagText = interfaceDom.getTextByTagRoute("netmask")
- if not tagText:
- tagText = None
- objServerList["netmask"] = tagText
- tagText = interfaceDom.getTextByTagRoute("gateway")
- if not tagText:
- tagText = None
- objServerList["gateway"] = tagText
- objServer[interfaceDom.getTextByTagRoute("device")] = objServerList
- return sourceServer == objServer
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/VolumeUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/VolumeUtils.py
index 020a1900..e5256178 100644
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/VolumeUtils.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/VolumeUtils.py
@@ -3,30 +3,15 @@
#
import os
-import glob
-import tempfile
-from operator import itemgetter
+import sys
+p1 = os.path.abspath(os.path.dirname(sys.argv[0]))
+p2 = "%s/common" % os.path.dirname(p1)
+if not p1 in sys.path:
+ sys.path.append(p1)
+if not p2 in sys.path:
+ sys.path.append(p2)
import Globals
-from Protocol import *
-from Utils import *
-from DiskUtils import *
-from ServerUtils import *
-import GlusterdUtils as Glusterd
-
-
-def isVolumeExist(volumeName):
- volumeDom = XDOM()
- return volumeDom.parseFile("%s/%s.xml" % (Globals.VOLUME_CONF_DIR, volumeName)) and \
- Glusterd.isVolumeExist(volumeName)
-
-
-def getVolumeUuid(volumeName):
- fileName = "%s/%s.xml" % (Globals.VOLUME_CONF_DIR, volumeName)
- volumeDom = XDOM()
- if not volumeDom.parseFile(fileName):
- log("Failed to parse volume configuration file %s of %s" % (fileName, volumeName))
- return None
- return volumeDom.getTextByTagRoute("uuid")
+import Utils
def readVolumeSmbConfFile(fileName=Globals.VOLUME_SMBCONF_FILE):
@@ -41,7 +26,7 @@ def readVolumeSmbConfFile(fileName=Globals.VOLUME_SMBCONF_FILE):
entryList.append(tokens[1].strip())
fp.close()
except IOError, e:
- log("Failed to open file %s: %s" % (fileName, str(e)))
+ Utils.log("Failed to open file %s: %s" % (fileName, str(e)))
return entryList
@@ -53,7 +38,7 @@ def writeVolumeSmbConfFile(entryList, fileName=Globals.VOLUME_SMBCONF_FILE):
fp.close()
return True
except IOError, e:
- log("Failed to write file %s: %s" % (fileName, str(e)))
+ Utils.log("Failed to write file %s: %s" % (fileName, str(e)))
return False
@@ -76,7 +61,7 @@ def excludeVolume(volumeName, fileName=Globals.VOLUME_SMBCONF_FILE):
if volumeFile not in entryList:
return True
entryList.remove(volumeFile)
- log("entryList = %s" % entryList)
+ Utils.log("entryList = %s" % entryList)
return writeVolumeSmbConfFile(entryList, fileName)
@@ -99,7 +84,7 @@ def writeVolumeCifsConfiguration(volumeName, userList, adminUser=None):
fp.close()
return True
except IOError, e:
- log("Failed to write file %s: %s" % (volumeFile, str(e)))
+ Utils.log("Failed to write file %s: %s" % (volumeFile, str(e)))
return False
@@ -109,491 +94,6 @@ def removeVolumeCifsConfiguration(volumeName):
os.remove(volumeFile)
return True
except OSError, e:
- log("Failed to remove file %s: %s" % (volumeFile, str(e)))
- return False
-
-
-def getVolumeListByPartitionName(partitionName):
- volumeConfigFileList = glob.glob(Globals.VOLUME_CONF_DIR + "/*.xml")
- if not volumeConfigFileList:
- return None
-
- volumeList = []
- for volumeXmlFile in volumeConfigFileList:
- volumeDom = XDOM()
- volumeDom.parseFile(volumeXmlFile)
- serverTopology = volumeDom.getElementsByTagRoute("volume.topology.group")
- serverPartitionFound = False
- for topology in serverTopology:
- partitionDom = XDOM()
- for partition in topology.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- if partitionDom.getTextByTagRoute("name") == partitionName:
- serverPartitionFound = True
- break
- if serverPartitionFound:
- volumeList.append(volumeDom.getElementsByTagRoute("volume")[0])
- break
- return volumeList
-
-
-def addServerPartitionConfig(inputDom, groupOrder, partitionTag):
- if not(inputDom and groupOrder and partitionTag):
- return False
- groupDom = XDOM()
- for group in inputDom.getElementsByTagRoute("topology.group"):
- groupDom.setDomObj(group)
- order = groupDom.getTextByTagRoute("order")
- if order and int(order) == groupOrder:
- group.appendChild(partitionTag)
- return inputDom
- return False
-
-
-def removeServerPartitionConfig(inputDom, partitionName):
- if not(inputDom and partitionName):
- return False
- for group in inputDom.getElementsByTagRoute("topology.group"):
- partitionDom = XDOM()
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- if partitionDom.getTextByTagRoute("name") == partitionName:
- group.removeChild(partition)
- return inputDom
- return False
-
-
-def updateServerPartitionConfig(inputDom, partitionName, partitionTag):
- if not(inputDom and partitionName and partitionTag):
- return False
- for group in inputDom.getElementsByTagRoute("topology.group"):
- partitionDom = XDOM()
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- if partitionDom.getTextByTagRoute("name") == partitionName:
- try:
- group.replaceChild(partitionTag, partition)
- return inputDom
- except AttributeError:
- return False
- return False
-
-
-def getServerPartitionConfigUuid(serverGroupList, serverPartition):
- for group in serverGroupList:
- if not group:
- continue
- partitionDom = XDOM()
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- partitionName = partition.getTextByTagName("name")
- if not partitionName:
- continue
- if partitionName == serverPartition:
- return partitionDom.getTextByTagName("uuid")
- return False
-
-
-def setServerPartitionConfigProperty(inputDom, partitionName, propertyDict):
- if not(inputDom and partitionName and propertyDict):
- return False
- for group in inputDom.getElementsByTagRoute("topology.group"):
- partitionDom = XDOM()
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- if partitionDom.getTextByTagRoute("name") == partitionName:
- for part in propertyDict.keys():
- x = partition.getElementsByTagName(part)
- if x:
- x[0].childNodes[0].nodeValue = propertyDict[part]
- return inputDom
- return False
-
-
-def getSortedServerPartitionConfigProperty(inputDom):
- groupDict = {}
- if not inputDom:
- return None
- groupDom = XDOM()
- for group in inputDom.getElementsByTagRoute("topology.group"):
- groupDom.setDomObj(group)
- groupOrder = groupDom.getTextByTagRoute("order")
- if not groupOrder:
- return None
- groupOrder = int(groupOrder)
- if groupOrder < 1:
- return None
- partitionDom = XDOM()
- partitionDict = {}
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- partitionName = partitionDom.getTextByTagRoute("name")
- if not partitionName:
- return None
- partitionOrder = partitionDom.getTextByTagRoute("order")
- if not partitionOrder:
- return None
- partitionUuid = partitionDom.getTextByTagRoute("uuid")
- partitionOrder = int(partitionOrder)
- if partitionOrder < 1:
- return None
- partitionDetails = partitionName.split(":")
- if not partitionDetails or len(partitionDetails) < 1:
- return None
- partitionDict[partitionOrder] = { "order":partitionOrder,
- "servername":partitionDetails[0],
- "name":partitionDetails[1],
- "uuid":partitionUuid}
- groupDict[groupOrder] = partitionDict
-
- serverList = []
- groupOrderList = groupDict.keys()
- groupOrderList.sort()
- for groupOrder in groupOrderList:
- partitionOrderList = groupDict[groupOrder].keys()
- partitionOrderList.sort()
- for partitionOrder in partitionOrderList:
- serverList.append(groupDict[groupOrder][partitionOrder])
-
- return serverList
-
-
-def getSortedServerPartitionList(serverGroupElements):
- serverPartitionDict = {}
- groupOrderList = []
- serverList = []
- partitionDom = XDOM()
- for group in serverGroupElements:
- if not group:
- continue
- groupOrderE = group.getElementsByTagName("order")
- if not (groupOrderE and groupOrderE[0].childNodes):
- return None
- value = int(XDOM.getText(groupOrderE[0].childNodes))
- if value > 0:
- groupOrderList.append(value)
- partitionDict = {}
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
-
- partitionName = partitionDom.getTextByTagRoute("name")
- if not partitionName:
- return None
- partitionOrder = partitionDom.getTextByTagRoute("order")
- if not partitionOrder:
- return None
- partitionUuid = partitionDom.getTextByTagRoute("uuid")
- partitionDict[int(partitionOrder)] = [partitionName, partitionUuid]
- serverPartitionDict[value] = partitionDict
- groupOrderList.sort()
-
- for groupOrder in groupOrderList:
- items = serverPartitionDict[groupOrder].items()
- items.sort(key = itemgetter(0))
- serverList = serverList + [ items[i][1] for i in range(0,len(items))]
- return serverList
-
-
-def clearExportDirectory(serverList, volumeName, volumeUuid):
- thisServerName = getCurrentServerName()
- for exportServer in serverList:
- serverName, partition = exportServer[0].split(":")
- if thisServerName != serverName:
- continue
- partitionUuid = getUuidByDiskPartition(getDevice(partition))
- if not partitionUuid:
- log("unable to find uuid of partition %s" % partition)
- return False
- volumeDirName = "%s/%s/%s" % (Globals.GLUSTER_LUN_DIR, partitionUuid, volumeUuid)
- if os.path.exists(volumeDirName):
- ## Removing /data/PARTITION-UUID/VOLUME-UUID/
- ## TODO: Get an option to remove it at this time
- if runCommandFG("mv -f %s %s.delete" % (volumeDirName, volumeDirName), root=True) != 0:
- return False
- if runCommandFG("rm -f %s/%s/volumes/%s" % (Globals.GLUSTER_LUN_DIR, partitionUuid, volumeName), root=True) != 0:
- return False
- return True
-
-
-def createExportDirectory(serverList, volumeName, volumeUuid):
- thisServerName = getCurrentServerName()
- tempVolumeNameFile = getTempFileName()
-
- try:
- fp = open(tempVolumeNameFile, "w")
- fp.write("VOLUME_NAME=%s\n" % volumeName)
- fp.write("VOLUME_UUID=%s\n" % volumeUuid)
- fp.close()
- except IOError, e:
- log("failed to create temporary file for volume-name: %s" % (volumeName, str(e)))
+ Utils.log("Failed to remove file %s: %s" % (volumeFile, str(e)))
return False
- for exportServer in serverList:
- serverName, partition = exportServer[0].split(":")
- if thisServerName != serverName:
- continue
- partitionUuid = getUuidByDiskPartition(getDevice(partition))
- if not partitionUuid:
- log("unable to find uuid of partition %s" % partition)
- return False
-
- volumeDirName = "%s/%s/%s" % (Globals.GLUSTER_LUN_DIR, partitionUuid, volumeUuid)
- ## Creating /data/PARTITION-UUID/VOLUME-UUID/
- if runCommandFG("mkdir %s" % volumeDirName, root=True) != 0:
- return False
-
- ## Creating /data/PARTITION-UUID/VOLUME-UUID/exports/
- ## Creating /data/PARTITION-UUID/VOLUME-UUID/exports/brick1/
- if runCommandFG("mkdir -p %s/exports/brick1" % volumeDirName, root=True) != 0:
- return False
-
- ## Creating /data/PARTITION-UUID/VOLUME-UUID/log/
- if runCommandFG("mkdir %s/log" % volumeDirName, root=True) != 0:
- return False
-
- ## Creating /data/PARTITION-UUID/VOLUME-UUID/config/
- if runCommandFG("mkdir %s/config" % volumeDirName, root=True) != 0:
- return False
-
- volumeLinkDirName = "%s/%s/volumes" % (Globals.GLUSTER_LUN_DIR, partitionUuid)
- if not os.path.exists(volumeLinkDirName):
- if runCommandFG("mkdir %s" % volumeLinkDirName, root=True) != 0:
- return False
-
- ## Creating symlink
- ## /data/PARTITION-UUID/volumes/VOLUME-NAME -> /data/PARTITION-UUID/VOLUME-UUID/
- command = "ln -fTs %s %s/%s" % (volumeDirName,
- volumeLinkDirName, volumeName)
- if runCommandFG(command, root=True) != 0:
- return False
-
- if runCommandFG("cp -f %s %s/config/volume-name" % (tempVolumeNameFile, volumeDirName), root=True) != 0:
- return False
-
- try:
- os.remove(tempVolumeNameFile)
- except OSError, e:
- log("Failed to remove file %s: %s" % (tempVolumeNameFile, str(e)))
-
- return True
-
-
-def getPartitionListByServerName(volumeDom, serverName, serverPartitionList=None):
- partitionList = {}
- if serverPartitionList:
- for partitionName in serverPartitionList:
- partitionUuid = getServerDiskPartitionUuid(serverName, partitionName)
- if not partitionUuid:
- log(syslog.LOG_ERR, "failed to get disk partition %s uuid of server %s" % (partitionName, serverName))
- return None
- partitionList[partitionName] = partitionUuid
- return partitionList
- for group in volumeDom.getElementsByTagRoute("topology.group"):
- for partitionTag in group.getElementsByTagName("partition"):
- nameE = partitionTag.getElementsByTagName("name")
- if not nameE:
- continue
- partition = XDOM.getText(nameE[0].childNodes)
- if not partition:
- continue
- server, partitionName = partition.split(":")
- if server != serverName:
- continue
- partitionUuid = getServerDiskPartitionUuid(serverName, partitionName)
- if not partitionUuid:
- log(syslog.LOG_ERR, "failed to get disk partition %s uuid of server %s" % (partitionName, serverName))
- return None
- partitionList[partitionName] = partitionUuid
- return partitionList
-
-
-def isVolumeRunning(volumeName):
- return Glusterd.isVolumeRunning(volumeName)
-
-def addVolumeMigrationDetails(sourcePartition, destinationPartition, volumeName):
- migrationDom = XDOM()
- if not os.path.exists(Globals.VOLUME_MIGRATION_LIST_FILE):
- migrationDom.appendTagRoute("volume-migration")
- else:
- if not migrationDom.parseFile(Globals.VOLUME_MIGRATION_LIST_FILE):
- log("Failed to load volume-migration.xml file")
- return None
- migrationList = migrationDom.getElementsByTagRoute("volume-migration.migration")
- for tagE in migrationList:
- dom = XDOM()
- dom.setDomObj(tagE)
- if dom.getTextByTagRoute("source-partition") == sourcePartition and \
- dom.getTextByTagRoute("destination-partition") == destinationPartition and \
- dom.getTextByTagRoute("volume-name") == volumeName:
- return False
- migrationTag = migrationDom.getElementsByTagRoute("volume-migration")
- if not migrationTag:
- return None
- partitionTag = migrationDom.createTag("migration")
- partitionTag.appendChild(migrationDom.createTag("source-partition", sourcePartition))
- partitionTag.appendChild(migrationDom.createTag("destination-partition", destinationPartition))
- partitionTag.appendChild(migrationDom.createTag("volume-name", volumeName))
- migrationTag[0].appendChild(partitionTag)
- if not migrationDom.writexml(Globals.VOLUME_MIGRATION_LIST_FILE):
- log("Unable to write disk migration details into %s/volume-migration.xml" % Globals.GLUSTER_BASE_DIR)
- return False
- return True
-
-
-def removeVolumeMigrationDetails(sourcePartition, destinationPartition, volumeName):
- migrationDom = XDOM()
- if not os.path.exists(Globals.VOLUME_MIGRATION_LIST_FILE):
- return None
- if not migrationDom.parseFile(Globals.VOLUME_MIGRATION_LIST_FILE):
- log("Failed to load volume-migration.xml file")
- return None
- migrationList = migrationDom.getElementsByTagRoute("volume-migration.migration")
- for tagE in migrationList:
- dom = XDOM()
- dom.setDomObj(tagE)
- if dom.getTextByTagRoute("source-partition") == sourcePartition and \
- dom.getTextByTagRoute("destination-partition") == destinationPartition and \
- dom.getTextByTagRoute("volume-name") == volumeName:
- migrationDom.getElementsByTagRoute("volume-migration")[0].removeChild(tagE)
- if not migrationDom.writexml(Globals.VOLUME_MIGRATION_LIST_FILE):
- log("Unable to write disk migration details into %s/volume-migration.xml" % Globals.GLUSTER_BASE_DIR)
- return False
- return True
-
-
-def addPartitionMigrationDetails(sourcePartition, destinationPartition, volumeList=None):
- migrationDom = XDOM()
- if not os.path.exists(Globals.MIGRATE_PARTITION_LIST_FILE):
- migrationDom.appendTagRoute("partition-migration")
- else:
- if not migrationDom.parseFile(Globals.MIGRATE_PARTITION_LIST_FILE):
- log("Failed to load migration.xml file")
- return None
- migrationList = migrationDom.getElementsByTagRoute("partition-migration.migration")
- for tagE in migrationList:
- dom = XDOM()
- dom.setDomObj(tagE)
- if dom.getTextByTagRoute("source-partition") == sourcePartition:
- return False
- if dom.getTextByTagRoute("destination-partition") == destinationPartition:
- return False
- migrationTag = migrationDom.getElementsByTagRoute("partition-migration")
- if not migrationTag:
- return None
- partitionTag = migrationDom.createTag("migration")
- partitionTag.appendChild(migrationDom.createTag("source-partition", sourcePartition))
- partitionTag.appendChild(migrationDom.createTag("destination-partition", destinationPartition))
- migrationTag[0].appendChild(partitionTag)
- if not migrationDom.writexml(Globals.MIGRATE_PARTITION_LIST_FILE):
- log("Unable to write disk migration details into %s/migration.xml" % Globals.GLUSTER_BASE_DIR)
- return False
- if volumeList:
- for volumeName in volumeList:
- addVolumeMigrationDetails(sourcePartition, destinationPartition, volumeName)
- return True
-
-
-def removePartitionMigrationDetails(sourcePartition, destinationPartition, volumeList=None):
- migrationDom = XDOM()
- if not os.path.exists(Globals.MIGRATE_PARTITION_LIST_FILE):
- return None
- if not migrationDom.parseFile(Globals.MIGRATE_PARTITION_LIST_FILE):
- log("Failed to load migration.xml file")
- return None
- migrationList = migrationDom.getElementsByTagRoute("partition-migration.migration")
- for tagE in migrationList:
- dom = XDOM()
- dom.setDomObj(tagE)
- if dom.getTextByTagRoute("source-partition") == sourcePartition and \
- dom.getTextByTagRoute("destination-partition") == destinationPartition:
- migrationDom.getElementsByTagRoute("partition-migration")[0].removeChild(tagE)
- if not migrationDom.writexml(Globals.MIGRATE_PARTITION_LIST_FILE):
- log("Unable to write disk migration details into %s/migration.xml" % Globals.GLUSTER_BASE_DIR)
- return False
- if volumeList:
- for volumeName in volumeList:
- removeVolumeMigrationDetails(sourcePartition, destinationPartition, volumeName)
- return True
-
-
-def isMigrationInProgress(partition):
- migrationDom = XDOM()
- if not os.path.exists(Globals.MIGRATE_PARTITION_LIST_FILE):
- return None
- if not migrationDom.parseFile(Globals.MIGRATE_PARTITION_LIST_FILE):
- log("Failed to load migration.xml file")
- return None
- migrationList = migrationDom.getElementsByTagRoute("partition-migration.migration")
- for tagE in migrationList:
- dom = XDOM()
- dom.setDomObj(tagE)
- if migrationDom.getTextByTagRoute("source-partition") == partition or \
- migrationDom.getTextByTagRoute("destination-partition") == partition:
- return True
- return False
-
-
-def getServerDiskPartitionUuid(serverName, partition):
- diskConfigDom = XDOM()
- if not diskConfigDom.parseFile("%s/%s/disk.xml" % (Globals.SERVER_CONF_DIR, serverName)):
- return None
- for disk in diskConfigDom.getElementsByTagRoute("disks.disk"):
- diskDom = XDOM()
- diskDom.setDomObj(disk)
- partitionList = diskDom.getElementsByTagRoute("partition")
- for tagE in partitionList:
- partitionDom = XDOM()
- partitionDom.setDomObj(tagE)
- if partitionDom.getTextByTagRoute("device") == partition:
- return partitionDom.getTextByTagRoute("uuid")
-
-
-def getVolumeServerList(requestDom, requestFlag=True):
- if requestFlag:
- serverGroupElementList = requestDom.getElementsByTagRoute("command.volume.topology.group")
- else:
- serverGroupElementList = requestDom.getElementsByTagRoute("volume.topology.group")
- if not serverGroupElementList:
- return None
- serverList = []
- partitionDom = XDOM()
- for group in serverGroupElementList:
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- partitionName = partitionDom.getTextByTagRoute("name")
- if not partitionName:
- continue
- serverPartition = partitionName.split(":")
- if not(len(serverPartition) > 1 and serverPartition[1]):
- return None
- if serverPartition[0] not in serverList:
- serverList.append(serverPartition[0])
- return serverList
-
-
-def getVolumeServerListByName(volumeName):
- serverList = []
- serverDom = XDOM()
- volumeDom = XDOM()
- if not os.path.exists("%s/%s.xml" % (Globals.VOLUME_CONF_DIR, volumeName)):
- return False
- if not volumeDom.parseFile("%s/%s.xml" % (Globals.VOLUME_CONF_DIR, volumeName)):
- return False
- return getVolumeServerList(volumeDom, False)
-
-
-def getMigrateVolumeServerPartitionInfo(volumeName):
- volumeMigrationDom = XDOM()
- if not volumeMigrationDom.parseFile(Globals.VOLUME_MIGRATION_LIST_FILE):
- Utils.log("Failed to parse file %s" % Globals.VOLUME_MIGRATION_LIST_FILE)
- return None
- volumeInfo = {}
- dom = XDOM()
- for tagE in volumeMigrationDom.getElementsByTagRoute("volume-migration.migration"):
- dom.setDomObj(tagE)
- if dom.getTextByTagRoute("volume-name") == volumeName:
- volumeInfo['Name'] = volumeName
- volumeInfo['SourcePartition'] = dom.getTextByTagRoute("source-partition")
- volumeInfo['DestinationPartition'] = dom.getTextByTagRoute("destination-partition")
- return volumeInfo
- return None
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/get_file.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_file.py
deleted file mode 100755
index 265823ab..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/get_file.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-
-import Globals
-import Utils
-from VolumeUtils import *
-from XmlHandler import ResponseXml
-
-
-def enumLogType(logCode):
- if "M" == logCode.upper():
- return "EMERGENCY"
- elif "A" == logCode.upper():
- return "ALERT"
- elif "C" == logCode.upper():
- return "CRITICAL"
- elif "E" == logCode.upper():
- return "ERROR"
- elif "W" == logCode.upper():
- return "WARNING"
- elif "N" == logCode.upper():
- return "NOTICE"
- elif "I" == logCode.upper():
- return "INFO"
- elif "D" == logCode.upper():
- return "DEBUG"
- elif "T" == logCode.upper():
- return "TRACE"
- else:
- return "UNKNOWN"
-##--end of enumLogType()
-
-
-def addLog(responseDom, logMessageTag, loginfo):
- logTag = responseDom.createTag("log", None)
- logTag.appendChild(responseDom.createTag("date", loginfo[0]))
- logTag.appendChild(responseDom.createTag("time", loginfo[1]))
- logTag.appendChild(responseDom.createTag("type", enumLogType(loginfo[2])))
- logTag.appendChild(responseDom.createTag("message", loginfo[3]))
- logMessageTag.appendChild(logTag)
- return True
-##--end of addLog()
-
-
-def logSplit(log):
- loginfo = log.strip().split(None, 3)
- loginfo[0] = loginfo[0][1:] #-- Remove '['
- loginfo[1] = loginfo[1][0:-1] #-- Remove ']'
- return loginfo
-##--end of logSplit()
-
-
-def getVolumeLog(volumeName, tailCount):
- rs = ResponseXml()
- if not volumeName:
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "No volume name given")
- return rs.toprettyxml()
-
- if not tailCount:
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "No tail count given")
- return rs.toprettyxml()
-
- thisServerName = getCurrentServerName()
- if not thisServerName:
- rs.appendTagRoute("status.code", "-2")
- rs.appendTagRoute("status.message", "Failed to get current server name")
- return rs.toprettyxml()
-
- volumeDom = XDOM()
- partitionList = getPartitionListByServerName(volumeDom, thisServerName)
- if not partitionList:
- rs.appendTagRoute("status.code", "-3")
- rs.appendTagRoute("status.message", "Failed to get server partition details")
- return rs.toprettyxml()
-
- pattern = '\[\d{4}-\d{2}-\d{2}\s{1}\d{2}:\d{2}:\d{2}.\d+\]\s{1}([MACEWNIDT]){1}\s+'
- logMessagesTag = rs.createTag("response.logMessages")
- for partitionName in partitionList:
- logMessageTag = rs.createTag("logMessage")
- logMessageTag.appendChild("disk", "%s:%s" % (thisServerName, partitionName))
-
- logDirectory = "%s/%s/%s/log" % (Globals.GLUSTER_LUN_DIR, partitionList[partitionName], volumeUuid)
- logFileName = "%s/%s-%s-%s-exports-brick1.log" % (logDirectory,
- Globals.GLUSTER_LUN_DIR[1:],
- partitionList[partitionName],
- volumeUuid)
- if not os.path.exists(logFileName):
- Utils.log("volume log file not found %s" % logFileName)
- continue
- fp = open(logFileName)
- lines = [line for line in fp if re.match(pattern, line)]
- fp.close()
- i = len(lines) - int(tailCount)
- if i < 0:
- i = 0
- for log in lines[i:]:
- loginfo = logSplit(log)
- addLog(rs, logMessageTag, loginfo)
- logMessagesTag.appendChild(logMessageTag)
- return rs.toprettyxml()
-##--end of getVolumeLog()
-
-def main():
- if len(sys.argv) != 3:
- print >> sys.stderr, "usage: %s <disk name> <volume name>" % sys.argv[0]
- sys.exit(-1)
-
- volumeName = sys.argv[1]
- tailCount = sys.argv[2]
- print getVolumeLog(volumeName, tailCount)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py
index ccd5815b..5c5b4c4a 100755
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py
@@ -15,6 +15,7 @@ import dbus
import socket
import re
import Utils
+import Protocol
import DiskUtils
from NetworkUtils import *
from Disk import *
@@ -22,10 +23,153 @@ from XmlHandler import ResponseXml
from optparse import OptionParser
+def getDiskDom():
+ diskInfo = DiskUtils.getDiskInfo()
+ if not diskInfo:
+ return None
+ procMdstat = DiskUtils.getProcMdstat()
+ diskDom = Protocol.XDOM()
+ disksTag = diskDom.createTag("disks", None)
+ diskTagDict = {}
+ raidDisksTag = diskDom.createTag("raidDisks", None)
+ for raidDiskName, raidDisk in procMdstat.iteritems():
+ raidDiskTag = diskDom.createTag("disk", None)
+ raidDiskTag.appendChild(diskDom.createTag("name", raidDiskName))
+ raidDiskTag.appendChild(diskDom.createTag("description", diskInfo[raidDiskName]['Description']))
+ raidDiskTag.appendChild(diskDom.createTag("uuid", diskInfo[raidDiskName]['Uuid']))
+ raidDiskTag.appendChild(diskDom.createTag("type", "UNKNOWN"))
+ raidDiskTag.appendChild(diskDom.createTag("mountPoint", diskInfo[raidDiskName]['MountPoint']))
+ raidDiskTag.appendChild(diskDom.createTag("fsType", diskInfo[raidDiskName]['FsType']))
+ if diskInfo[raidDiskName]['FsType']:
+ raidDiskTag.appendChild(diskDom.createTag("status", "INITIALIZED"))
+ else:
+ raidDiskTag.appendChild(diskDom.createTag("status", "UNINITIALIZED"))
+ raidDiskTag.appendChild(diskDom.createTag("interface"))
+ raidDiskTag.appendChild(diskDom.createTag("fsVersion"))
+ raidDiskTag.appendChild(diskDom.createTag("size", diskInfo[raidDiskName]['Size'] / 1024.0))
+ raidDiskTag.appendChild(diskDom.createTag("spaceInUse", diskInfo[raidDiskName]['SpaceInUse']))
+ raidDisksTag.appendChild(raidDiskTag)
+ for raidMember in raidDisk['Member']:
+ # Case1: Raid array member is a disk. The following code will add the disk details under a disk tag
+ if diskInfo.has_key(raidMember):
+ diskTag = diskDom.createTag("disk", None)
+ diskTag.appendChild(diskDom.createTag("name", raidMember))
+ diskTag.appendChild(diskDom.createTag("description", diskInfo[raidMember]["Description"]))
+ diskTag.appendChild(diskDom.createTag("uuid", diskInfo[raidMember]["Uuid"]))
+ if DiskUtils.isDiskInFormatting(raidMember):
+ diskTag.appendChild(diskDom.createTag("status", "INITIALIZING"))
+ else:
+ if diskInfo[raidMember]["FsType"]:
+ diskTag.appendChild(diskDom.createTag("status", "INITIALIZED"))
+ else:
+ diskTag.appendChild(diskDom.createTag("status", "UNINITIALIZED"))
+ diskTag.appendChild(diskDom.createTag("interface", diskInfo[raidMember]["Interface"]))
+ diskTag.appendChild(diskDom.createTag("mountPoint", diskInfo[raidMember]["MountPoint"]))
+ if diskInfo[raidMember]["FsType"]:
+ diskTag.appendChild(diskDom.createTag("type", "DATA"))
+ else:
+ diskTag.appendChild(diskDom.createTag("type", "UNKNOWN"))
+ diskTag.appendChild(diskDom.createTag("fsType", diskInfo[raidMember]["FsType"]))
+ diskTag.appendChild(diskDom.createTag("fsVersion", diskInfo[raidMember]["FsVersion"]))
+ diskTag.appendChild(diskDom.createTag("size", diskInfo[raidMember]["Size"] / 1024.0))
+ diskTag.appendChild(diskDom.createTag("spaceInUse", diskInfo[raidMember]["SpaceInUse"]))
+ raidDiskTag.appendChild(diskTag)
+ del diskInfo[raidMember]
+ continue
+ # Case2: Raid array member is a partition. The following code will add the partition and its corresponding disk its belong to.
+ for disk, item in diskInfo.iteritems():
+ if not item['Partitions'].has_key(raidMember):
+ continue
+ if not diskTagDict.has_key(disk):
+ diskTag = diskDom.createTag("disk", None)
+ diskTag.appendChild(diskDom.createTag("name", disk))
+ diskTag.appendChild(diskDom.createTag("description", item["Description"]))
+ diskTag.appendChild(diskDom.createTag("uuid", item["Uuid"]))
+ diskTag.appendChild(diskDom.createTag("status", "INITIALIZED"))
+ diskTag.appendChild(diskDom.createTag("interface", item["Interface"]))
+ diskTag.appendChild(diskDom.createTag("mountPoint"))
+ diskTag.appendChild(diskDom.createTag("type", "DATA"))
+ diskTag.appendChild(diskDom.createTag("fsType", item["FsType"]))
+ diskTag.appendChild(diskDom.createTag("fsVersion", item["FsVersion"]))
+ diskTag.appendChild(diskDom.createTag("size", item["Size"] / 1024.0))
+ diskTag.appendChild(diskDom.createTag("spaceInUse", item["SpaceInUse"]))
+ partitionsTag = diskDom.createTag("partitions", None)
+ diskTag.appendChild(partitionsTag)
+ raidDiskTag.appendChild(diskTag)
+ # Constructed disk tag will be added to the dictonary.
+ # This will be used to keep add all the corresponding partitions tags of the disk to the disk tag.
+ diskTagDict[disk] = {'diskTag': diskTag, 'partitionsTag': partitionsTag}
+ # adding partition details under this disk tag
+ partitionTag = diskDom.createTag("partition", None)
+ partitionTag.appendChild(diskDom.createTag("name", raidMember))
+ partitionTag.appendChild(diskDom.createTag("uuid", item['Partitions'][raidMember]["Uuid"]))
+ partitionTag.appendChild(diskDom.createTag("fsType", item['Partitions'][raidMember]["FsType"]))
+ if item['Partitions'][raidMember]["FsType"]:
+ partitionTag.appendChild(diskDom.createTag("status", "INITIALIZED"))
+ partitionTag.appendChild(diskDom.createTag("type", "DATA"))
+ else:
+ partitionTag.appendChild(diskDom.createTag("status", "UNINITIALIZED"))
+ partitionTag.appendChild(diskDom.createTag("type", "UNKNOWN"))
+ partitionTag.appendChild(diskDom.createTag("mountPoint", item['Partitions'][raidMember]['MountPoint']))
+ partitionTag.appendChild(diskDom.createTag("size", item['Partitions'][raidMember]["Size"] / 1024.0))
+ partitionTag.appendChild(diskDom.createTag("spaceInUse", item['Partitions'][raidMember]["SpaceInUse"]))
+ diskTagDict[disk]['partitionsTag'].appendChild(partitionTag)
+ # deleting partition entry of a raid member from diskInfo (item['Partitions'])
+ del item['Partitions'][raidMember]
+ del diskInfo[raidDiskName]
+ disksTag.appendChild(raidDisksTag)
+ for diskName, value in diskInfo.iteritems():
+ diskTag = diskDom.createTag("disk", None)
+ diskTag.appendChild(diskDom.createTag("name", diskName))
+ diskTag.appendChild(diskDom.createTag("description", value["Description"]))
+ diskTag.appendChild(diskDom.createTag("uuid", value["Uuid"]))
+ if DiskUtils.isDiskInFormatting(diskName):
+ status = "INITIALIZING"
+ else:
+ if value["FsType"]:
+ status = "INITIALIZED"
+ else:
+ status = "UNINITIALIZED"
+ diskTag.appendChild(diskDom.createTag("status", status))
+ diskTag.appendChild(diskDom.createTag("interface", value["Interface"]))
+ if value["MountPoint"] and value["MountPoint"] in ["/", "/boot"]:
+ diskTag.appendChild(diskDom.createTag("type", "BOOT"))
+ elif "UNINITIALIZED" == status:
+ diskTag.appendChild(diskDom.createTag("type", "UNKNOWN"))
+ else:
+ diskTag.appendChild(diskDom.createTag("type", "DATA"))
+ diskTag.appendChild(diskDom.createTag("fsType", value["FsType"]))
+ diskTag.appendChild(diskDom.createTag("fsVersion", value["FsVersion"]))
+ diskTag.appendChild(diskDom.createTag("mountPoint", value["MountPoint"]))
+ diskTag.appendChild(diskDom.createTag("size", value["Size"] / 1024.0))
+ diskTag.appendChild(diskDom.createTag("spaceInUse", value["SpaceInUse"]))
+ partitionsTag = diskDom.createTag("partitions", None)
+ diskTag.appendChild(partitionsTag)
+ for partName, partValues in value['Partitions'].iteritems():
+ partitionTag = diskDom.createTag("partition", None)
+ partitionTag.appendChild(diskDom.createTag("name", partName))
+ partitionTag.appendChild(diskDom.createTag("uuid", partValues["Uuid"]))
+ partitionTag.appendChild(diskDom.createTag("fsType", partValues["FsType"]))
+ if partValues["FsType"]:
+ partitionTag.appendChild(diskDom.createTag("status", "INITIALIZED"))
+ partitionTag.appendChild(diskDom.createTag("type", "DATA"))
+ else:
+ partitionTag.appendChild(diskDom.createTag("status", "UNINITIALIZED"))
+ partitionTag.appendChild(diskDom.createTag("type", "UNKNOWN"))
+ partitionTag.appendChild(diskDom.createTag("mountPoint", partValues['MountPoint']))
+ partitionTag.appendChild(diskDom.createTag("size", partValues["Size"] / 1024.0))
+ partitionTag.appendChild(diskDom.createTag("spaceInUse", partValues["SpaceInUse"]))
+ partitionsTag.appendChild(partitionTag)
+ continue
+ disksTag.appendChild(diskTag)
+ diskDom.addTag(disksTag)
+ return diskDom
+
+
def getServerDetails(listall):
serverName = socket.getfqdn()
- meminfo = getMeminfo()
- cpu = getCpuUsageAvg()
+ meminfo = Utils.getMeminfo()
+ cpu = Utils.getCpuUsageAvg()
nameServerList, domain, searchDomain = readResolvConfFile()
if not domain:
domain = [None]
@@ -57,7 +201,7 @@ def getServerDetails(listall):
deviceList[device["device"]] = device
try:
macAddress = open("/sys/class/net/%s/address" % device["device"]).read().strip()
- except IOError:
+ except IOError, e:
continue
interfaceTag = responseDom.createTag("networkInterface", None)
interfaceTag.appendChild(responseDom.createTag("name", device["device"]))
@@ -88,12 +232,7 @@ def getServerDetails(listall):
responseDom.appendTag(serverTag)
serverTag.appendChild(responseDom.createTag("numOfCPUs", int(os.sysconf('SC_NPROCESSORS_ONLN'))))
- try:
- diskDom = DiskUtils.getDiskDom()
- except dbus.dbus_bindings.DBusException, e:
- sys.stderr.write("%s. Please check if HAL services are running\n" % str(e))
- Utils.log("failed to get disk details :%s" % str(e))
- sys.exit(1)
+ diskDom = getDiskDom()
if not diskDom:
sys.stderr.write("No disk found!")
Utils.log("Failed to get disk details")
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_log.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_log.py
deleted file mode 100755
index c4c97a51..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_log.py
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-
-import os
-import sys
-p1 = os.path.abspath(os.path.dirname(sys.argv[0]))
-p2 = "%s/common" % os.path.dirname(p1)
-if not p1 in sys.path:
- sys.path.append(p1)
-if not p2 in sys.path:
- sys.path.append(p2)
-import Globals
-import Utils
-from VolumeUtils import *
-from XmlHandler import ResponseXml
-
-
-def enumLogType(logCode):
- if "M" == logCode.upper():
- return "EMERGENCY"
- elif "A" == logCode.upper():
- return "ALERT"
- elif "C" == logCode.upper():
- return "CRITICAL"
- elif "E" == logCode.upper():
- return "ERROR"
- elif "W" == logCode.upper():
- return "WARNING"
- elif "N" == logCode.upper():
- return "NOTICE"
- elif "I" == logCode.upper():
- return "INFO"
- elif "D" == logCode.upper():
- return "DEBUG"
- elif "T" == logCode.upper():
- return "TRACE"
- else:
- return "UNKNOWN"
-##--end of enumLogType()
-
-
-def addLog(responseDom, logMessageTag, loginfo):
- logTag = responseDom.createTag("log", None)
- logTag.appendChild(responseDom.createTag("date", loginfo[0]))
- logTag.appendChild(responseDom.createTag("time", loginfo[1]))
- logTag.appendChild(responseDom.createTag("type", enumLogType(loginfo[2])))
- logTag.appendChild(responseDom.createTag("message", loginfo[3]))
- logMessageTag.appendChild(logTag)
- return True
-##--end of addLog()
-
-
-def logSplit(log):
- loginfo = log.strip().split(None, 3)
- loginfo[0] = loginfo[0][1:] #-- Remove '['
- loginfo[1] = loginfo[1][0:-1] #-- Remove ']'
- return loginfo
-##--end of logSplit()
-
-
-def getVolumeLog(volumeName, tailCount):
- rs = ResponseXml()
- if not volumeName:
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "No volume name given")
- return rs.toprettyxml()
-
- if not tailCount:
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "No tail count given")
- return rs.toprettyxml()
-
- thisServerName = getCurrentServerName()
- if not thisServerName:
- rs.appendTagRoute("status.code", "-2")
- rs.appendTagRoute("status.message", "Failed to get current server name")
- return rs.toprettyxml()
-
- volumeDom = XDOM()
- partitionList = getPartitionListByServerName(volumeDom, thisServerName)
- if not partitionList:
- rs.appendTagRoute("status.code", "-3")
- rs.appendTagRoute("status.message", "Failed to get server partition details")
- return rs.toprettyxml()
-
- pattern = '\[\d{4}-\d{2}-\d{2}\s{1}\d{2}:\d{2}:\d{2}.\d+\]\s{1}([MACEWNIDT]){1}\s+'
- logMessagesTag = rs.createTag("response.logMessages")
- for partitionName in partitionList:
- logMessageTag = rs.createTag("logMessage")
- logMessageTag.appendChild("disk", "%s:%s" % (thisServerName, partitionName))
-
- logDirectory = "%s/%s/%s/log" % (Globals.GLUSTER_LUN_DIR, partitionList[partitionName], volumeUuid)
- logFileName = "%s/%s-%s-%s-exports-brick1.log" % (logDirectory,
- Globals.GLUSTER_LUN_DIR[1:],
- partitionList[partitionName],
- volumeUuid)
- if not os.path.exists(logFileName):
- Utils.log("volume log file not found %s" % logFileName)
- continue
- fp = open(logFileName)
- lines = [line for line in fp if re.match(pattern, line)]
- fp.close()
- i = len(lines) - int(tailCount)
- if i < 0:
- i = 0
- for log in lines[i:]:
- loginfo = logSplit(log)
- addLog(rs, logMessageTag, loginfo)
- logMessagesTag.appendChild(logMessageTag)
- return rs.toprettyxml()
-##--end of getVolumeLog()
-
-def main():
- if len(sys.argv) != 3:
- print >> sys.stderr, "usage: %s <disk name> <volume name>" % sys.argv[0]
- sys.exit(-1)
-
- volumeName = sys.argv[1]
- tailCount = sys.argv[2]
- print getVolumeLog(volumeName, tailCount)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_cpu_details.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_cpu_details.py
deleted file mode 100755
index 9f93b84b..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_cpu_details.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-
-import os
-import sys
-p1 = os.path.abspath(os.path.dirname(sys.argv[0]))
-p2 = "%s/common" % os.path.dirname(p1)
-if not p1 in sys.path:
- sys.path.append(p1)
-if not p2 in sys.path:
- sys.path.append(p2)
-from XmlHandler import ResponseXml
-import Utils
-
-def createMemData(file, step):
- rs = ResponseXml()
- command = ["rrdtool", "create", file, "--step=%s" % step,
- "DS:user:COUNTER:600:0:U",
- "DS:system:COUNTER:600:0:U",
- "DS:idle:COUNTER:600:0:U",
- "RRA:AVERAGE:0.5:1:576",
- "RRA:AVERAGE:0.5:6:672",
- "RRA:AVERAGE:0.5:24:732",
- "RRA:AVERAGE:0.5:144:1460"]
-
- rv = Utils.runCommand(command, output=True, root=True)
- message = Utils.stripEmptyLines(rv["Stdout"])
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message += "Error: [%s]" % (error)
- Utils.log("failed to create RRD file for cpu usages %s" % file)
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toxml()
- return None
-
-def updateMemData(file):
- rs = ResponseXml()
- user = None
- system = None
- idle = None
- for line in open("/proc/stat").readlines():
- if line.startswith("cpu"):
- cpudetails = line.split()
- if "cpu" == cpudetails[0]:
- user = cpudetails[1]
- system = cpudetails[3]
- idle = cpudetails[4]
- break
-
- if None == user:
- Utils.log("failed to fetch cpu details from /proc/stat")
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "failed to fetch cpu details")
- return rs.toxml()
-
- command = ["rrdtool", "update", file, "-t", "user:system:idle",
- "N:%s:%s:%s" % (user, system, idle)]
- rv = Utils.runCommand(command, output=True, root=True)
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message = "Error: [%s]" % (error)
- Utils.log("failed to update cpu usage into rrd file %s" % file)
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toxml()
- return None
-
-
-def main():
- cpuRrdFile = "/var/lib/rrd/cpu.rrd"
- if not os.path.exists(cpuRrdFile):
- status = createMemData(cpuRrdFile, 100)
- if status:
- print status
- status = updateMemData(cpuRrdFile)
- if status:
- print status
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_memory_details.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_memory_details.py
deleted file mode 100755
index 2639d490..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_memory_details.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-
-import os
-import sys
-p1 = os.path.abspath(os.path.dirname(sys.argv[0]))
-p2 = "%s/common" % os.path.dirname(p1)
-if not p1 in sys.path:
- sys.path.append(p1)
-if not p2 in sys.path:
- sys.path.append(p2)
-from XmlHandler import ResponseXml
-import Utils
-
-def createMemData(file, step):
- rs = ResponseXml()
- command = ["rrdtool", "create", file, "--step=%s" % step,
- "DS:memused:ABSOLUTE:600:0:U",
- "DS:memfree:ABSOLUTE:600:0:U",
- "DS:memcache:ABSOLUTE:600:0:U",
- "DS:swapused:ABSOLUTE:600:0:U",
- "DS:swapfree:ABSOLUTE:600:0:U",
- "RRA:AVERAGE:0.5:1:576",
- "RRA:AVERAGE:0.5:6:672",
- "RRA:AVERAGE:0.5:24:732",
- "RRA:AVERAGE:0.5:144:1460"]
-
- rv = Utils.runCommand(command, output=True, root=True)
- message = Utils.stripEmptyLines(rv["Stdout"])
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message += "Error: [%s]" % (error)
- Utils.log("failed to create RRD file for memory usages %s" % file)
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toxml()
- return None
-
-def updateMemData(file):
- rs = ResponseXml()
- command = ["free", "-b", "-o"]
- rv = Utils.runCommand(command, output=True, root=True)
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message += "Error: [%s]" % (error)
- Utils.log("failed to retrieve memory details")
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toxml()
-
- message = rv["Stdout"].split()
- command = ["rrdtool", "update", file, "-t", "memused:memfree:memcache:swapused:swapfree",
- "N:%s:%s:%s:%s:%s" % (message[8], message[9], message[12], message[14], message[15])]
- rv = Utils.runCommand(command, output=True, root=True)
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message += "Error: [%s]" % (error)
- Utils.log(syslog.LOG_ERR, "failed to update memory usage into rrd file %s" % file)
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toxml()
- return None
-
-
-def main():
- #if len(sys.argv) != 2:
- # print >> sys.stderr, "usage: %s <step>" % sys.argv[0]
- # sys.exit(-1)
- #step = sys.argv[1]
-
- memRrdFile = "mem.rrd"
- if not os.path.exists(memRrdFile):
- status = createMemData(memRrdFile, 100)
- if status:
- print status
- status = updateMemData(memRrdFile)
- if status:
- print status
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/common/Globals.py b/src/com.gluster.storage.management.gateway.scripts/src/common/Globals.py
index ea37fa92..26a74bfd 100644
--- a/src/com.gluster.storage.management.gateway.scripts/src/common/Globals.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/common/Globals.py
@@ -11,71 +11,33 @@ SERVER_PORT = 24731
DEFAULT_BACKLOG = 5
DEFAULT_TIMEOUT = 3
DEFAULT_ID_LENGTH = 16
-
GLUSTER_PLATFORM_VERSION = "3.2"
## System configuration constants
SYSCONFIG_NETWORK_DIR = "/etc/sysconfig/network-scripts"
-DNSMASQ_CONF_DIR = "/etc/dnsmasq.d"
-
FSTAB_FILE = "/etc/fstab"
-NFS_EXPORTS_FILE = "/etc/exports"
SAMBA_CONF_FILE = "/etc/samba/smb.conf"
-TIMEZONE_FILE = "/etc/timezone"
-ZONEINFO_DIR = "/usr/share/zoneinfo"
-LOCALTIME_FILE = "/etc/localtime"
-KERBEROS_CONF_FILE = "/etc/krb5.conf"
-NSSWITCH_CONF_FILE = "/etc/nsswitch.conf"
-NTP_CONF_FILE = "/etc/ntp.conf"
+REAL_SAMBA_CONF_FILE = "/etc/samba/real.smb.conf"
MODPROBE_CONF_FILE = "/etc/modprobe.d/bonding.conf"
-SYSCONFIG_NETWORK_FILE = "/etc/sysconfig/network"
RESOLV_CONF_FILE = "/etc/resolv.conf"
DNSMASQ_LEASE_FILE = "/var/tmp/dnsmasq.leases"
LIVE_MODE_FILE = "/etc/live"
-ADD_SERVER_COMPLETED_FILE = "/var/tmp/installation-completed"
-
-DNSMASQ_DNS_CONF_FILE = DNSMASQ_CONF_DIR + "/dns.conf"
+DNSMASQ_CONF_DIR = "/etc/dnsmasq.d"
DNSMASQ_DHCP_CONF_FILE = DNSMASQ_CONF_DIR + "/dhcp.conf"
-##
-
-## Base constants
-MAX_PARTITION_SIZE = 16777216 # 16 TB
-OS_PARTITION_SIZE = 4000 # 4 GB
-SESSION_TIMEOUT = 1800 # 30 minutes
-SERVER_AGENT_PORT = 50000
-
-BOOT_PARTITION_LABEL = "GLUSTEROS"
DATA_PARTITION_LABEL = "GLUSTERDATA"
VOLUME_USER_DESCRIPTION = "Gluster Volume User"
-SERVER_AGENT_RUN_USERNAME = "gluster"
+GLUSTER_BASE_DIR = "/etc/glustermg"
+REEXPORT_DIR = "/reexport"
+CIFS_EXPORT_DIR = "/cifs"
+GLUSTER_UPDATES_FILE = "updates.xml"
INSTALLER_SERVER_NAME = "$installer$"
-GLUSTER_BASE_DIR = "/etc/glustermg"
-GLUSTER_LUN_DIR = "/data"
-REEXPORT_DIR = "/reexport"
-NFS_EXPORT_DIR = "/nfs"
-CIFS_EXPORT_DIR = "/cifs"
-WEBDAV_DOCUMENT_ROOT_DIR = "/var/www/html"
-UPDATES_DIR = "/UPDATES"
-TRANSPORT_HOME_DIR = "/transport"
-GLUSTERFS_LOG_DIR = "/var/log/glusterfs"
-LOG_DIR = "/var/log/glustermg"
-
-GLUSTER_UPDATES_FILE = "updates.xml"
-INSTALLER_STATUS_FILE = "/var/log/install-server-status.log"
-INSTALL_PLATFORM_LOCK_FILE = "/var/lock/install-gluster-platform.lock"
-LAST_ACCESSED_NETWORK_FILE = "last-accessed-network"
-PREPARE_DATA_DISK_LOCK_FILE = "/var/tmp/prepare-data-disk.lock"
-##
-
## Derived constants
GLUSTER_CONF_DIR = GLUSTER_BASE_DIR + "/conf"
GLUSTER_TMP_DIR = GLUSTER_BASE_DIR + "/tmp"
VOLUME_CONF_DIR = GLUSTER_BASE_DIR + "/volumes"
SERVER_CONF_DIR = GLUSTER_BASE_DIR + "/servers"
DNS_RECORDS_DIR = GLUSTER_BASE_DIR + "/dns-records"
-INSTALLER_CONF_DIR = SERVER_CONF_DIR + "/" + INSTALLER_SERVER_NAME
-
GSN_USER_INFO_FILE = GLUSTER_BASE_DIR + "/gsn-user.info"
GLUSTER_VERSION_FILE = GLUSTER_BASE_DIR + "/version"
GLUSTER_UPDATE_SITE_FILE = GLUSTER_BASE_DIR + "/update-site"
@@ -86,37 +48,12 @@ SERVER_COUNT_FILE = GLUSTER_BASE_DIR + "/server-count"
SIGNATURE_FILE = GLUSTER_BASE_DIR + "/.signature"
GLUSTER_SERVER_POOL_FILE = GLUSTER_BASE_DIR + "/pool"
GLUSTER_ADMIN_FILE = GLUSTER_BASE_DIR + "/.password"
-
+INSTALLER_CONF_DIR = SERVER_CONF_DIR + "/" + INSTALLER_SERVER_NAME
VOLUME_SMBCONF_FILE = VOLUME_CONF_DIR + "/volumes.smbconf.list"
-
GLOBAL_NETWORK_FILE = INSTALLER_CONF_DIR + "/network.xml"
-INSTALL_SERVER_CONF_FILE = INSTALLER_CONF_DIR + "/installer.xml"
-INSTALLER_INFO_FILE = INSTALLER_CONF_DIR + "/installer.info"
INSTALLED_SERVER_COUNT_FILE = INSTALLER_CONF_DIR + "/installed-server-count"
-SESSION_FILE = GLUSTER_TMP_DIR + "/login.sessions"
-
-GENERAL_LOG_FILE = LOG_DIR + "/general.log"
-INSTALLER_LOG_FILE = LOG_DIR + "/installer.log"
-PEER_AGENT_LOG_FILE = LOG_DIR + "/peeragent.log"
-SERVER_AGENT_LOG_FILE = LOG_DIR + "/serveragent.log"
-TRANSPORT_AGENT_LOG_FILE = LOG_DIR + "/transport.log"
-##
-
-
-## Global variables
-## TODO: These should be removed
-DOWNLOAD_GLUSTER_UPDATE_PROCESS = None
-DOWNLOAD_GLUSTER_UPDATE_LEVEL = None
-DOWNLOAD_GLUSTER_CURRENT_UPDATE_LEVEL = None
-DOWNLOAD_GLUSTER_UPDATE_MD5SUM = None
-REQUEST_MAP = {}
-VERSION_DICTONARY = {}
-##
-
AWS_WEB_SERVICE_URL = "http://169.254.169.254/latest"
-REAL_SAMBA_CONF_FILE = "/etc/samba/real.smb.conf"
-
DEFAULT_UID = 1024000
CIFS_USER_FILE = "/opt/glustermg/etc/users.cifs"
CIFS_VOLUME_FILE = "/opt/glustermg/etc/volumes.cifs"
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/common/Protocol.py b/src/com.gluster.storage.management.gateway.scripts/src/common/Protocol.py
index a11164f7..9649e534 100644
--- a/src/com.gluster.storage.management.gateway.scripts/src/common/Protocol.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/common/Protocol.py
@@ -189,7 +189,7 @@ class XDOM:
self._domObj.writexml(fp, indent, addindent, newl)
fp.close()
return True
- except IOError:
+ except IOError, e:
return False
def toString(self, indent=" ", newl="\n", encoding = None):
@@ -210,7 +210,7 @@ class XDOM:
return None
try:
return self.getElementsByTagName("command")[0].getAttribute(attributeName)
- except IndexError:
+ except IndexError, e:
return False
def setAttribute(self, attributeName, attributeValue):
@@ -218,7 +218,7 @@ class XDOM:
return None
try:
return self.getElementsByTagName("command")[0].setAttribute(attributeName, attributeValue)
- except IndexError:
+ except IndexError, e:
return False
def getRequestCommand(self):
@@ -269,9 +269,9 @@ class RequestXml(XDOM):
self._domObj = MDOM.parse(requestString)
elif XML_STRING == type:
self._domObj = MDOM.parseString(requestString)
- except IOError:
+ except IOError, e:
XDOM.__init__(self)
- except xml.parsers.expat.ExpatError:
+ except xml.parsers.expat.ExpatError, e:
XDOM.__init__(self)
##--end of RequestXML
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py b/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py
index 03e7eb58..874acaa8 100644
--- a/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py
@@ -21,12 +21,8 @@ import time
import tempfile
import grp
import pwd
-import inspect
-from datetime import datetime
-import urllib
import Globals
-import Protocol
RUN_COMMAND_ERROR = -1024
LOG_SYSLOG = 1
@@ -35,116 +31,6 @@ LOG_FILE_NAME = None
LOG_FILE_OBJ = None
logOpened = False
-def _getLogCode(priority):
- if syslog.LOG_EMERG == priority:
- return "M"
- elif syslog.LOG_ALERT == priority:
- return "A"
- elif syslog.LOG_CRIT == priority:
- return "C"
- elif syslog.LOG_ERR == priority:
- return "E"
- elif syslog.LOG_WARNING == priority:
- return "W"
- elif syslog.LOG_NOTICE == priority:
- return "N"
- elif syslog.LOG_INFO == priority:
- return "I"
- elif syslog.LOG_DEBUG == priority:
- return "D"
- else: # UNKNOWN
- return "X"
-
-
-def setLogFile(fileName):
- global LOG_FILE_NAME
-
- if fileName:
- LOG_FILE_NAME = fileName
- return True
- return False
-
-
-def closeLog():
- global LOG_FILE_OBJ
- global SYSLOG_REQUIRED
-
- if SYSLOG_REQUIRED:
- syslog.closelog()
- SYSLOG_REQUIRED = False
- return True
-
- if LOG_FILE_OBJ:
- try:
- LOG_FILE_OBJ.close()
- LOG_FILE_OBJ = None
- except IOError, e:
- sys.stderr.write("Failed to close file: %s\n" % e)
- return False
- return True
-
-
-def openLog(fileName=None):
- global LOG_FILE_NAME
- global LOG_FILE_OBJ
- global SYSLOG_REQUIRED
-
- if fileName == LOG_SYSLOG:
- syslog.openlog(os.path.basename(sys.argv[0]))
- SYSLOG_REQUIRED = True
- return True
-
- if fileName:
- LOG_FILE_NAME = fileName
-
- if not LOG_FILE_NAME:
- return False
-
- closeLog()
-
- try:
- LOG_FILE_OBJ = open(LOG_FILE_NAME, "a")
- except IOError, e:
- sys.stderr.write("Failed to open file %s: %s\n" % (LOG_FILE_NAME, e))
- return False
- return True
-
-def record(priority, message=None):
- global LOG_FILE_OBJ
- global SYSLOG_REQUIRED
-
- stack = inspect.stack()[1]
- if stack[3] == "<module>":
- prefix = "%s:%s:%s" % (stack[1], stack[2], stack[3])
- else:
- prefix = "%s:%s:%s()" % (stack[1], stack[2], stack[3])
-
- if type(priority) == type("") or type(priority) == type(u""):
- logPriority = syslog.LOG_INFO
- logMessage = priority
- else:
- logPriority = priority
- logMessage = message
-
- if SYSLOG_REQUIRED:
- syslog.syslog(logPriority, "[%s]: %s" % (prefix, logMessage))
- return
-
- fp = sys.stderr
- if LOG_FILE_OBJ:
- fp = LOG_FILE_OBJ
-
- fp.write("[%s] %s [%s]: %s" % (str(datetime.now()), _getLogCode(logPriority), prefix, logMessage))
- if logMessage[-1] != '\n':
- fp.write("\n")
- fp.flush()
- return
-
-
-def trace(message):
- if message:
- log(syslog.LOG_DEBUG, message)
-
def isString(value):
return (type(value) == type("") or type(value) == type(u""))
@@ -260,22 +146,22 @@ def runCommandFG(command, stdout=False, stderr=False,
def IP2Number(ipString):
try:
return socket.htonl(struct.unpack("I", socket.inet_aton(ipString))[0])
- except socket.error:
+ except socket.error, e:
return None
- except TypeError:
+ except TypeError, e:
return None
- except struct.error:
+ except struct.error, e:
return None
def Number2IP(number):
try:
return socket.inet_ntoa(struct.pack("I", socket.ntohl(number)))
- except socket.error:
+ except socket.error, e:
return None
- except AttributeError:
+ except AttributeError, e:
return None
- except ValueError:
+ except ValueError, e:
return None
@@ -292,7 +178,7 @@ def computeHostName(hostName):
hostPrefix = hostName[:pos+1]
try:
hostIndex = int(hostName[pos+1:])
- except ValueError:
+ except ValueError, e:
hostIndex = 0
# TODO: Check the availablity of the (server) name
return "%s%s" % (hostPrefix, hostIndex + 1)
@@ -304,7 +190,7 @@ def daemonize():
if pid > 0:
# exit first parent
sys.exit(0)
- except OSError, e:
+ except OSError, e:
#sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
return False
@@ -339,7 +225,7 @@ def getDownloadStatus(fileName):
try:
lines = [line for line in open(fileName)
if "saved" in line or "%" in line]
- except IOError:
+ except IOError, e:
return 0
if not lines:
return 0
@@ -406,8 +292,8 @@ def getCpuUsageAvg():
def getLoadavg():
try:
loadavgstr = open('/proc/loadavg', 'r').readline().strip()
- except IOError:
- syslog.syslog(syslog.LOG_ERR, "failed to find cpu load")
+ except IOError, e:
+ syslog.syslog(syslog.LOG_ERR, "failed to find cpu load: %s" % str(e))
return None
data = map(float, loadavgstr.split()[1:])
@@ -439,173 +325,33 @@ def getInfinibandPortStatus():
return portkeys
-def getServerCount():
- try:
- return int(open(Globals.SERVER_COUNT_FILE).read().strip())
- except IOError:
- log("failed to read file %s" % Globals.SERVER_COUNT_FILE)
- return 1
- except ValueError:
- log("invalid number format in file %s" % Globals.SERVER_COUNT_FILE)
- return 1
-
-
-def setServerCount(count):
- try:
- open(Globals.SERVER_COUNT_FILE, "w").write("%s\n" % count)
- return True
- except IOError:
- log("failed to write file %s" % Globals.SERVER_COUNT_FILE)
- return False
-
-
-def getInstalledServerCount():
- try:
- return int(open(Globals.INSTALLED_SERVER_COUNT_FILE).read().strip())
- except IOError:
- log("failed to read file %s" % Globals.INSTALLED_SERVER_COUNT_FILE)
- return 1
- except ValueError:
- log("invalid number format in file %s" % Globals.INSTALLED_SERVER_COUNT_FILE)
- return 1
-
-
-def setInstalledServerCount(count):
- try:
- open(Globals.INSTALLED_SERVER_COUNT_FILE, "w").write("%s\n" % count)
- return True
- except IOError:
- log("failed to write file %s" % Globals.INSTALLED_SERVER_COUNT_FILE)
- return False
-
-
-def getLastInstalledServerIpList():
- ipList = {}
- networkDom = Protocol.XDOM()
- if not networkDom.parseFile(Globals.GLOBAL_NETWORK_FILE):
- log("failed to parse file %s" % Globals.GLOBAL_NETWORK_FILE)
- for tagE in networkDom.getElementsByTagRoute("server.interface"):
- interfaceDom = Protocol.XDOM()
- interfaceDom.setDomObj(tagE)
- ipAddress = interfaceDom.getTextByTagRoute("ipaddr")
- if ipAddress:
- ipList[interfaceDom.getTextByTagRoute("device")] = ipAddress
- return ipList
-
-
-def getFreeIpAddress(device=None):
- serverCount = getServerCount()
- installedServerCount = getInstalledServerCount()
- if serverCount == installedServerCount:
- return None
-
- availableServerCount = serverCount - installedServerCount
- ipList = getLastInstalledServerIpList()
-
- if not ipList:
- return None
-
- if device:
- if device not in ipList.keys():
- return None
- deviceIpAddress = ipList[device]
- else:
- deviceIpAddress = ipList.values()[0]
- ipNumber = IP2Number(deviceIpAddress)
-
- for i in range((ipNumber + availableServerCount), ipNumber, -1):
- ipAddress = Number2IP(i)
- if runCommandFG(["ping", "-qnc", "1", ipAddress]) != 0:
- return ipAddress
- return None
-
-
def getPasswordHash(userName):
try:
#return spwd.getspnam(userName).sp_pwd
return "Not implimented"
- except KeyError:
+ except KeyError, e:
return None
-def getTransactionKey():
- try:
- tokens = open(Globals.TRANSACTION_KEY_FILE).read().split(',')
- except IOError:
- return None, None
- return tokens
-
-
def generateSignature():
#return str(uuid.uuid4()) + ('--%f' % time.time())
return ('--%f' % time.time())
-def getSignature():
- try:
- return open(Globals.SIGNATURE_FILE).read().strip()
- except IOError:
- log(syslog.LOG_ERR, "unable to read signaure from %s file" % Globals.SIGNATURE_FILE)
- return False
-
-
-def storeSignature(signature, fileName=Globals.SIGNATURE_FILE):
- try:
- open(fileName, "w").write(signature + "\n")
- except IOError:
- log(syslog.LOG_ERR, "unable to write signature %s to %s file" % (signature, fileName))
- return False
- return True
-
-
def isUserExist(userName):
try:
grp.getgrnam(userName).gr_gid
return True
- except KeyError:
+ except KeyError, e:
pass
try:
pwd.getpwnam(userName).pw_uid
return True
- except KeyError:
+ except KeyError, e:
pass
return False
-def getGsnUserInfo(fileName=Globals.GSN_USER_INFO_FILE):
- userInfo = {}
- userInfo["UserId"] = None
- userInfo["Password"] = None
- try:
- for line in open(fileName):
- line = line.strip()
- k = line[:line.index("=")]
- v = line[line.index("=") + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- if k.upper() == "GSN_ID":
- userInfo["UserId"] = v
- if k.upper() == "GSN_PASSWORD":
- userInfo["Password"] = v
- except IOError, e:
- log("Failed to read file %s: %s" % (fileName, e))
- return userInfo
-
-
-def setGsnUserInfo(userInfo, fileName=Globals.GSN_USER_INFO_FILE):
- try:
- fp = open(fileName, "w")
- fp.write("GSN_ID=%s\n" % userInfo["UserId"])
- fp.write("GSN_PASSWORD=%s\n" % userInfo["Password"])
- fp.close()
- return True
- except IOError, e:
- log("Failed to write file %s: %s" % (fileName, e))
- return False
-
-
def getPlatformVersion(fileName=Globals.GLUSTER_VERSION_FILE):
versionInfo = {}
versionInfo["Version"] = None
@@ -625,7 +371,7 @@ def getPlatformVersion(fileName=Globals.GLUSTER_VERSION_FILE):
if k.upper() == "UPDATE":
versionInfo["Update"] = v
except IOError, e:
- log("Failed to read file %s: %s" % (fileName, e))
+ log("Failed to read file %s: %s" % (fileName, str(e)))
return versionInfo
@@ -649,42 +395,10 @@ def setPlatformVersion(versionInfo, fileName=Globals.GLUSTER_VERSION_FILE):
fp.close()
return True
except IOError, e:
- log("Failed to write file %s: %s" % (fileName, e))
+ log("Failed to write file %s: %s" % (fileName, str(e)))
return False
-def getGlusterUpdateDom(serverVersion):
- errorMessage = ""
- updateInfoDom = None
- try:
- baseUrl = open(Globals.GLUSTER_UPDATE_SITE_FILE).read().strip()
- except IOError, e:
- log("Failed to read file %s: %s" % (Globals.GLUSTER_UPDATE_SITE_FILE, e))
- errorMessage = "Failed to read update site file"
- return updateInfoDom, errorMessage
-
- try:
- url = "%s/%s/%s" % (baseUrl, serverVersion, Globals.GLUSTER_UPDATES_FILE)
- connection = urllib.urlopen(url)
- if connection.getcode() != 200:
- connection.close()
- errorMessage = "Error received from server to open URL %s" % url
- return updateInfoDom, errorMessage
- updateInfoString = connection.read()
- connection.close()
- except IOError, e:
- log("Failed to get update information from URL %s: %s" % (url, e))
- errorMessage = "Error getting update information"
- return updateInfoDom, errorMessage
-
- updateInfoDom = Protocol.XDOM()
- if not updateInfoDom.parseString(updateInfoString):
- log("XML parse error on update information content [%s]" % updateInfoString)
- errorMessage = "Parse error on update information"
- updateInfoDom = None
- return updateInfoDom, errorMessage
-
-
def removeFile(fileName, root=False):
if root:
if runCommand("rm %s" % fileName, root=True) == 0:
@@ -694,7 +408,7 @@ def removeFile(fileName, root=False):
os.remove(fileName)
return True
except OSError, e:
- log("Failed to remove file %s: %s" % (fileName, e))
+ log("Failed to remove file %s: %s" % (fileName, str(e)))
return False
@@ -711,9 +425,9 @@ def getIPIndex(indexFile):
line = fp.readline()
fp.close()
index = int(line)
- except IOError:
+ except IOError, e:
index = 0
- except ValueError:
+ except ValueError, e:
index = False
return index
@@ -722,34 +436,34 @@ def setIPIndex(index, indexFile):
fp = open(indexFile, "w")
fp.write(str(index))
fp.close()
- except IOError:
+ except IOError, e:
return False
return True
def IP2Number(ipString):
try:
return socket.htonl(struct.unpack("I", socket.inet_aton(ipString))[0])
- except socket.error:
+ except socket.error, e:
return None
- except TypeError:
+ except TypeError, e:
return None
- except struct.error:
+ except struct.error, e:
return None
def Number2IP(number):
try:
return socket.inet_ntoa(struct.pack("I", socket.ntohl(number)))
- except socket.error:
+ except socket.error, e:
return None
- except AttributeError:
+ except AttributeError, e:
return None
- except ValueError:
+ except ValueError, e:
return None
def hasEntryFoundInFile(searchString, dnsEntryFileName):
try:
addServerEntryList = open(dnsEntryFileName).read().split()
- except IOError:
+ except IOError, e:
return None
if searchString in addServerEntryList:
return True
@@ -765,8 +479,8 @@ def computeIpAddress(ipAddress, startIp, endIp):
while True:
nextIpNumber = nextIpNumber + 1
ipAddress = Number2IP(nextIpNumber)
- rv = runCommandFG(["ping", "-qnc", "1", ipAddress])
- if type(rv) == type(True):
+ rv = runCommand("ping -qnc 1 %s" % ipAddress, output=True)
+ if rv["Status"] != 0:
return False
if rv != 0:
break
@@ -778,8 +492,8 @@ def computeIpAddress(ipAddress, startIp, endIp):
while True:
ipAddress = Number2IP(nextIpNumber)
nextIpNumber = nextIpNumber + 1
- rv = runCommandFG(["ping", "-qnc", "1", ipAddress])
- if type(rv) == type(True):
+ rv = runCommand("ping -qnc 1 %s" % ipAddress, output=True)
+ if rv["Status"] != 0:
return False
if rv != 0:
break
@@ -795,7 +509,7 @@ def setHostNameAndIp(hostName, ipAddress, lastAddServerDetailFile):
fp.write("HOSTNAME=" + hostName + "\n")
fp.write("IPADDRESS=" + ipAddress);
fp.close()
- except IOError:
+ except IOError, e:
return False
return True
@@ -805,9 +519,9 @@ def getPort():
portString = fd.readline()
fd.close()
port = int(portString)
- except IOError:
+ except IOError, e:
port = Globals.DEFAULT_PORT - 2
- except ValueError:
+ except ValueError, e:
port = Globals.DEFAULT_PORT - 2
return port
@@ -816,84 +530,10 @@ def setPort(port):
fd = open(Globals.PORT_FILE, "w")
fd.write(str(port))
fd.close()
- except IOError:
+ except IOError, e:
return False
return True
-def getServerAgentCredentials():
- try:
- lines = open(Globals.SERVERAGENT_AUTH_FILE).readlines()
- except IOError:
- return None,None
-
- userName = None
- password = None
-
- for l in lines:
- if l[-1] == '\n':
- l = l[:-1]
- k = l[:l.index('=')]
- v = l[l.index('=') + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- if k.upper() == "AGENT_ID":
- userName = v
- if k.upper() == "AGENT_PASSWORD":
- password = v
-
- return userName, password
-
-def getGatewayAgentCredentials():
- try:
- lines = open(Globals.GATEWAYAGENT_AUTH_FILE).readlines()
- except IOError:
- return None
-
- #userName = None
- password = None
-
- for l in lines:
- if l[-1] == '\n':
- l = l[:-1]
- k = l[:l.index('=')]
- v = l[l.index('=') + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- #if k.upper() == "AGENT_ID":
- # userName = v
- if k.upper() == "AGENT_PASSWORD":
- password = v
-
- return password
-
-def getWebAgentCredentials():
- try:
- lines = open(Globals.WEBAGENT_AUTH_FILE).readlines()
- except IOError:
- return None,None
-
- userName = None
- password = None
-
- for l in lines:
- if l[-1] == '\n':
- l = l[:-1]
- k = l[:l.index('=')]
- v = l[l.index('=') + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- if k.upper() == "AGENT_ID":
- userName = v
- if k.upper() == "AGENT_PASSWORD":
- password = v
-
- return userName, password
def daemonize():
try:
@@ -931,37 +571,19 @@ def daemonize():
os.dup2(se.fileno(), sys.stderr.fileno())
return True
-def getFreeIpAddress():
- startRange, endRange = getStoragePoolInfo()
- if not (startRange and endRange):
- return None
-
- startIpNumber = IP2Number(startRange)
- endIpNumber = IP2Number(endRange)
-
- for ipNumber in range(endIpNumber, startIpNumber, -1):
- rv = runCommandFG(["ping", "-qnc", "1", Number2IP(ipNumber)])
- if type(rv) == type(True):
- return None
- if rv != 0:
- return Number2IP(ipNumber)
- return None
def getDhcpServerStatus():
- status = runCommandFG(["sudo", "service", "dnsmasq", " status"])
- if type(status) == type(True) or 0 != status:
+ if runCommand("service dnsmasq status", root=True) != 0:
return False
return True
def startDhcpServer():
- status = runCommandFG(["sudo", "service", "dnsmasq", " start"])
- if type(status) == type(True) or 0 != status:
+ if runCommand("service dnsmasq start", root=True) != 0:
return False
return True
def stopDhcpServer():
- status = runCommandFG(["sudo", "service", "dnsmasq", " stop"])
- if type(status) == type(True) or 0 != status:
+ if runCommand("service dnsmasq stop", root=True) != 0:
return False
return True
@@ -975,8 +597,8 @@ def getStoragePoolInfo():
startRange = tokens[1].strip()
if tokens[0] == "ENDRANGE":
endRange = tokens[1].strip()
- except IOError:
- log(syslog.LOG_ERR, "unable to read %s file" % Globals.GLUSTER_SERVER_POOL_FILE)
+ except IOError, e:
+ log(syslog.LOG_ERR, "unable to read %s file: %s" % (Globals.GLUSTER_SERVER_POOL_FILE, str(e)))
return startRange, endRange
def configureDnsmasq(serverIpAddress, dhcpIpAddress):
@@ -988,12 +610,12 @@ def configureDnsmasq(serverIpAddress, dhcpIpAddress):
if token[0] == "dhcp":
serverPortString = token[1]
break
- except IOError:
- log(syslog.LOG_ERR, "Failed to read /proc/cmdline. Continuing with default port 68")
+ except IOError, e:
+ log(syslog.LOG_ERR, "Failed to read /proc/cmdline. Continuing with default port 68: %s" % str(e))
try:
serverPort = int(serverPortString)
- except ValueError:
- log(syslog.LOG_ERR, "Invalid dhcp port '%s' in /proc/cmdline. Continuing with default port 68" % serverPortString)
+ except ValueError, e:
+ log(syslog.LOG_ERR, "Invalid dhcp port '%s' in /proc/cmdline. Continuing with default port 68: %s" % (serverPortString, str(e)))
serverPort = 68
try:
@@ -1010,11 +632,10 @@ def configureDnsmasq(serverIpAddress, dhcpIpAddress):
fp.write("server=%s\n" % serverIpAddress)
fp.write("dhcp-script=/usr/sbin/server-info\n")
fp.close()
- except IOError:
- log(syslog.LOG_ERR, "unable to write dnsmasq configuration %s" % dnsmasqConfFile)
+ except IOError, e:
+ log(syslog.LOG_ERR, "unable to write dnsmasq configuration %s: %s" % (dnsmasqConfFile, str(e)))
return False
- status = runCommandFG(["sudo", "cp", "-f", Globals.GLUSTER_CONF_CONF_DIR + "/dnsmasq.conf", Globals.DNSMASQ_CONF_FILE])
- if type(status) == type(True) or 0 != status:
+ if runCommand(["cp", "-f", Globals.GLUSTER_CONF_CONF_DIR + "/dnsmasq.conf", Globals.DNSMASQ_CONF_FILE], root=True) != 0:
log(syslog.LOG_ERR, "unable to copy dnsmasq configuration to " + Globals.DNSMASQ_CONF_FILE)
return False
return True
@@ -1084,3 +705,20 @@ def getCifsUserUid(userName):
if tokens[1] == userName:
return int(tokens[0])
return None
+
+def readFile(fileName, lines=False):
+ content = None
+ try:
+ fp = open(fileName)
+ if lines:
+ content = fp.readlines()
+ else:
+ content = fp.read()
+ fp.close()
+ return content
+ except IOError, e:
+ log("failed to read file %s: %s" % (fileName, str(e)))
+ if lines:
+ return []
+ else:
+ return ""
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/common/XmlHandler.py b/src/com.gluster.storage.management.gateway.scripts/src/common/XmlHandler.py
index beff388b..22c023cc 100644
--- a/src/com.gluster.storage.management.gateway.scripts/src/common/XmlHandler.py
+++ b/src/com.gluster.storage.management.gateway.scripts/src/common/XmlHandler.py
@@ -182,7 +182,7 @@ class XDOM:
self._domObj.writexml(fp, indent, addindent, newl)
fp.close()
return True
- except IOError:
+ except IOError, e:
return False
def toString(self, indent=" ", newl="\n", encoding = None):
@@ -218,9 +218,9 @@ class RequestXml(XDOM):
self._domObj = MDOM.parse(requestString)
elif XML_STRING == type:
self._domObj = MDOM.parseString(requestString)
- except IOError:
+ except IOError, e:
XDOM.__init__(self)
- except xml.parsers.expat.ExpatError:
+ except xml.parsers.expat.ExpatError, e:
XDOM.__init__(self)
##--end of RequestXML