r554 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2010-06-16 21:14:36 +0000 (Wed, 16 Jun 2010)
New Revision: 554
Modified:
trunk/v7/daemon.py
Log:
568518 - FEAT: add a BMC fencing testing
Modified: trunk/v7/daemon.py
===================================================================
--- trunk/v7/daemon.py 2010-06-15 17:30:40 UTC (rev 553)
+++ trunk/v7/daemon.py 2010-06-16 21:14:36 UTC (rev 554)
@@ -93,26 +93,53 @@
taskOutFile.close()
else:
print "unsupported command: " + line
-
- def serverTest(self, line):
- """ run server-side test code per client/SUT request """
+ def __parseRequest(self, line):
args = dict()
word=line.split()[3:]
i = 0
while i+1 < len(word):
args[word[i][2:]] = word[i+1]
- i += 1
+ i += 2
+ return args
+
+ def openLogFile(self, args, mode):
+ logFileName = "v7-daemon-"
+ for (key, value) in args.items():
+ if key != "results":
+ logFileName = logFileName + "%s=%s_"
+ log = open(os.path.join(self.environment.getLogDirectory(), logFileName), mode)
+ return log
+
+ def serverTest(self, line):
+ """ run server-side test code per client/SUT request """
+ args = self.__parseRequest(line)
+ # if it's a results request, find the log
+ try:
+ if len(args["results"]) > 0:
+ log = self.openLogFile(args, "r")
+ taskOutFile = open(self.environment.getTaskFilePath()+ ".out", 'w')
+ for line in log:
+ taskOutFile.write(line + "\n")
+ taskOutFile.close()
+ log.close()
+ return True
+ except Exception, e:
+ pass
+
+ # otherwise, queue he request
taskOutFile = open(self.environment.getTaskFilePath()+ ".out", 'w')
- taskOutFile.write("Running test " + args["test"] + "\n")
+ taskOutFile.write("Queuing request for test " + args["test"] + "\n")
+ taskOutFile.close()
result = True
try:
test = self.planner.getTest(args["test"])
- test.runOnServer(args, taskOutFile)
+ log = self.openLogFile(args, "w")
+ test.runOnServer(args, log)
+ log.close()
except KeyError:
print "Error: test not found"
result = False
- taskOutFile.close()
return result
\ No newline at end of file
13 years, 11 months
r553 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2010-06-15 17:30:40 +0000 (Tue, 15 Jun 2010)
New Revision: 553
Modified:
trunk/v7/documentbase.py
Log:
FEAT: add a reboot test
Modified: trunk/v7/documentbase.py
===================================================================
--- trunk/v7/documentbase.py 2010-06-15 17:28:47 UTC (rev 552)
+++ trunk/v7/documentbase.py 2010-06-15 17:30:40 UTC (rev 553)
@@ -93,8 +93,10 @@
return time.strftime(Constants.DATETIMEFORMAT, theTime)
def durationData(self, startTime, stopTime):
- start = datetime.datetime.strptime(startTime, Constants.DATETIMEFORMAT)
- stop = datetime.datetime.strptime(stopTime, Constants.DATETIMEFORMAT)
+ # start = datetime.datetime.strptime(startTime, Constants.DATETIMEFORMAT)
+ start = datetime.datetime(*(time.strptime(startTime, Constants.DATETIMEFORMAT)[0:5]))
+ # stop = datetime.datetime.strptime(stopTime, Constants.DATETIMEFORMAT)
+ stop = datetime.datetime(*(time.strptime(stopTime, Constants.DATETIMEFORMAT)[0:5]))
return stop - start
def duration(self, startTime, stopTime):
13 years, 11 months
r552 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2010-06-15 17:28:47 +0000 (Tue, 15 Jun 2010)
New Revision: 552
Modified:
trunk/v7/test.py
Log:
568518 - FEAT: add a BMC fencing testing
Modified: trunk/v7/test.py
===================================================================
--- trunk/v7/test.py 2010-06-15 17:28:36 UTC (rev 551)
+++ trunk/v7/test.py 2010-06-15 17:28:47 UTC (rev 552)
@@ -432,5 +432,8 @@
self.markSummary(result)
self.closeOutput()
return result
+
+ def runOnServer(self, args, outFile):
+ outFile.write("Server side test for %s not implemented\n" % self.Name())
13 years, 11 months
r551 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2010-06-15 17:28:36 +0000 (Tue, 15 Jun 2010)
New Revision: 551
Modified:
trunk/v7/environment.py
Log:
568518 - FEAT: add a BMC fencing testing
Modified: trunk/v7/environment.py
===================================================================
--- trunk/v7/environment.py 2010-06-15 17:28:26 UTC (rev 550)
+++ trunk/v7/environment.py 2010-06-15 17:28:36 UTC (rev 551)
@@ -112,9 +112,16 @@
dataDirectoryElement = self.findOrCreateElement(self._getFilesystemElement(), Tags.data_directory)
return dataDirectoryElement.getAttribute(Attributes.lock_file)
+ def getTaskFile(self):
+ dataDirectoryElement = self.findOrCreateElement(self._getFilesystemElement(), Tags.data_directory)
+ return dataDirectoryElement.getAttribute(Attributes.task_file)
+
def getResultsPath(self):
return "%s/%s" % (self.getDataDirectory(), self.getResultsFileName())
+ def getTaskFilePath(self):
+ return "%s/%s" % (self.getDataDirectory(), self.getTaskFile())
+
def getGuestImageDirectory(self):
guestImageElement = self.findOrCreateElement(self._getFilesystemElement(), Tags.guest_image_directory)
return self.getTextNode(guestImageElement).data
13 years, 11 months
r550 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2010-06-15 17:28:26 +0000 (Tue, 15 Jun 2010)
New Revision: 550
Modified:
trunk/v7/hardwaretest.py
Log:
568518 - FEAT: add a BMC fencing testing
Modified: trunk/v7/hardwaretest.py
===================================================================
--- trunk/v7/hardwaretest.py 2010-06-15 17:28:18 UTC (rev 549)
+++ trunk/v7/hardwaretest.py 2010-06-15 17:28:26 UTC (rev 550)
@@ -43,6 +43,7 @@
from v7.command import Command, V7CommandException
from v7.resultsengine import ResultsEngine
from v7.redhatrelease import RedHatRelease
+from v7.daemon import V7Daemon
class HardwareTestHarness(Controller):
@@ -176,7 +177,7 @@
# do the command
try:
self.commands[self.command]()
- except KeyError:
+ except KeyError, e:
print "unknown command: " + self.command
self.releaseLock()
return result
@@ -192,7 +193,7 @@
command = self.options.command
if command == "print":
self.doPrint(format="html")
- elif (command == 'run'):
+ elif (command == 'run' or command == 'server' or command == 'daemon'):
result = self.addTask()
elif command == "status":
self.doWebStatus()
@@ -418,7 +419,8 @@
subcommand = "start"
if subcommand == "daemon":
- return self.doDaemon()
+ daemon = V7Daemon(self.environment, self.options)
+ return daemon.run()
planner = Planner(self.options, virtualization=None)
@@ -431,53 +433,39 @@
if rv != 0:
result = rv
return result
-
- def doDaemon(self):
- while True:
- if self.Debugging != Constants.off:
- print "checking for tasks"
- try:
- taskFile = open(self.environment.getTaskFilePath())
- for line in taskFile.readlines():
- if not line:
- break
- try:
- print "\"" + line.strip() + "\""
- if line.strip() == "shutdown":
- print "v7 daemon shutdown"
- # delete the lines from the file
- open(self.environment.getTaskFilePath(), "w").close()
- return 0
- # otherwise
- # only run v7 - nothing else
- if line.split()[0] == "v7" and ";" not in line:
- print "Running: " + line
- task = Command(line)
- task.echo()
- else:
- print "unsupported command: " + line
- except V7CommandException, e:
- print "Error: " + e.message
- taskFile.close()
- # delete the lines from the file
- open(self.environment.getTaskFilePath(), "w").close()
- time.sleep(10)
- except IOError, e:
- print e/v7/results.xml
- return False
-
+
def addTask(self):
print "<pre>"
- command = "v7 " + self.webOptions["command"] + " "
- for option in self.webOptions.keys():
- if option != "command" and self.webOptions[option]:
- command += "--" + option + " " + self.webOptions[option] + " "
- command += "\n"
- print "Adding Task: " + command
+ command = None
+ try:
+ command = "v7 " + self.webOptions["command"] + " " + self.webOptions["subcommand"] + " "
+ except KeyError, e:
+ print "Error: missing URL parameter:"
+ print e
+ if command:
+ for option in self.webOptions.keys():
+ if "command" not in option and self.webOptions[option]:
+ command += "--" + option + " " + self.webOptions[option] + " "
+ command += "\n"
+ print "Adding Task: " + command
+ sys.stdout.flush()
+ taskInFile = os.open(self.environment.getTaskFilePath() + ".in", os.O_WRONLY)
+ print "opened task file"
+ sys.stdout.flush()
+ os.write(taskInFile, command)
+ os.write(taskInFile, "\n")
+ os.close(taskInFile)
+ print "Reading Results"
+ taskOutFile = open(self.environment.getTaskFilePath()+".out", "r")
+ while True:
+ line = taskOutFile.readline()
+ if line:
+ print line
+ else:
+ break
+ taskOutFile.close()
+ print "done"
sys.stdout.flush()
- taskFile = open(self.environment.getTaskFilePath(), "a")
- taskFile.write(command)
- taskFile.close()
print "</pre>"
def doWebStatus(self):
@@ -745,10 +733,12 @@
requestedTests.append(mandatoryTest)
# reboot test is a special case - really needs to run last
- reboot = requestedTestDict["reboot"]
- if reboot:
+ try:
+ reboot = requestedTestDict["reboot"]
requestedTests.remove(reboot)
requestedTests.append(reboot)
+ except:
+ pass
return requestedTests
13 years, 11 months
r549 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2010-06-15 17:28:18 +0000 (Tue, 15 Jun 2010)
New Revision: 549
Added:
trunk/v7/daemon.py
Log:
568518 - FEAT: add a BMC fencing testing
Added: trunk/v7/daemon.py
===================================================================
--- trunk/v7/daemon.py (rev 0)
+++ trunk/v7/daemon.py 2010-06-15 17:28:18 UTC (rev 549)
@@ -0,0 +1,118 @@
+# Copyright (c) 2006 Red Hat, Inc. All rights reserved. This copyrighted material
+# is made available to anyone wishing to use, modify, copy, or
+# redistribute it subject to the terms and conditions of the GNU General
+# Public License v.2.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Author: Greg Nichols
+#
+
+import os, time, subprocess, sys
+
+from v7.controller import Controller
+from v7.tags import Tags, Attributes, Constants
+from v7.environment import Environment
+from v7.command import Command, V7CommandException
+from v7.test import Test
+from v7.planner import Planner
+
+
+class V7Daemon(Controller):
+
+
+ def __init__(self, environment, options):
+ Controller.__init__(self)
+ self.options = options
+ self.environment = environment
+ self.planner = Planner(self.options, virtualization=None)
+ self.planner.analyse(self.environment.getSourceDirectory())
+
+ def __clearPipes(self):
+ try:
+ os.remove(self.environment.getTaskFilePath()+ ".in")
+ except OSError, e:
+ if self.options.debug != Constants.off:
+ print "Warning: "
+ print e
+ pass # ignore
+ try:
+ os.remove(self.environment.getTaskFilePath()+ ".out")
+ except OSError, e:
+ if self.options.debug != Constants.off:
+ print "Warning: "
+ print e
+ pass # ignore
+ mask = os.umask(0111)
+ os.mkfifo(self.environment.getTaskFilePath()+ ".in", 0666)
+ os.mkfifo(self.environment.getTaskFilePath()+ ".out", 0666)
+ os.umask(mask)
+
+
+ def run(self):
+ self.__clearPipes()
+ while True:
+ if self.options.debug != Constants.off:
+ print "checking for tasks"
+ sys.stdout.flush()
+ taskInFile = open(self.environment.getTaskFilePath()+ ".in", 'r')
+ line = taskInFile.readline()
+ taskInFile.close()
+ if len(line.strip()) is 0:
+ continue
+ else:
+ print "\"" + line.strip() + "\""
+
+ if line.strip() == "shutdown":
+ print "v7 daemon shutdown"
+ # delete the lines from the file
+ taskOutFile = open(self.environment.getTaskFilePath()+ ".out", 'w')
+ taskOutFile.write("v7 shutdown")
+ taskOutFile.close()
+ return 0
+ # otherwise
+ # only run v7 - nothing else
+ words = line.split()
+ if len(words) > 0 and words[0] == "v7" and ";" not in line:
+ if words[1] == "daemon" and words[2] =="run":
+ self.serverTest(line)
+ else: # run local vi subprocess
+ print "Running: " + line
+ taskOutFile = open(self.environment.getTaskFilePath()+ ".out", 'w')
+ pipe = subprocess.Popen(line, shell=True,
+ stdin=subprocess.PIPE,
+ stdout=taskOutFile,
+ stderr=taskOutFile,)
+ (output, errors) = pipe.communicate()
+ taskOutFile.close()
+ else:
+ print "unsupported command: " + line
+
+ def serverTest(self, line):
+ """ run server-side test code per client/SUT request """
+ args = dict()
+ word=line.split()[3:]
+ i = 0
+ while i+1 < len(word):
+ args[word[i][2:]] = word[i+1]
+ i += 1
+
+ taskOutFile = open(self.environment.getTaskFilePath()+ ".out", 'w')
+ taskOutFile.write("Running test " + args["test"] + "\n")
+ result = True
+ try:
+ test = self.planner.getTest(args["test"])
+ test.runOnServer(args, taskOutFile)
+ except KeyError:
+ print "Error: test not found"
+ result = False
+ taskOutFile.close()
+ return result
+
+
\ No newline at end of file
13 years, 11 months
r548 - in trunk/tests: . fencing
by gnichols@fedoraproject.org
Author: gnichols
Date: 2010-06-15 17:27:31 +0000 (Tue, 15 Jun 2010)
New Revision: 548
Added:
trunk/tests/fencing/
trunk/tests/fencing/Makefile
trunk/tests/fencing/fencing.py
trunk/tests/fencing/runtest.sh
Log:
568518 - FEAT: add a BMC fencing testing
Added: trunk/tests/fencing/Makefile
===================================================================
--- trunk/tests/fencing/Makefile (rev 0)
+++ trunk/tests/fencing/Makefile 2010-06-15 17:27:31 UTC (rev 548)
@@ -0,0 +1,44 @@
+# V7
+TOPLEVEL_NAMESPACE=/V7
+
+# The name of the package under test:
+PACKAGE_NAME=v7
+
+# The path of the test below the package:
+RELATIVE_PATH=fencing
+
+# Version of the Test. Used with make tag.
+export TESTVERSION=1.0
+
+# The compiled namespace of the test.
+export TEST=$(TOPLEVEL_NAMESPACE)/$(PACKAGE_NAME)/$(RELATIVE_PATH)
+
+.PHONY: all install download clean
+
+FILES=$(METADATA) runtest.sh fencing.py
+
+run: $(FILES) build
+ ./runtest.sh
+
+build: $(BUILT_FILES)
+ chmod a+x ./runtest.sh ./fencing.py
+
+clean:
+ rm -f $(BUILT_FILES) $(METADATA)
+
+# Include Common Makefile
+include $(DESTDIR)/usr/share/v7/lib/v7-make.include
+
+# Generate the testinfo.desc here:
+$(METADATA): Makefile
+ @touch $(METADATA)
+ @echo "Owner: Greg Nichols <gnichols(a)redhat.com>" > $(METADATA)
+ @echo "Name: $(TEST)" >> $(METADATA)
+ @echo "Path: $(TEST_DIR)" >> $(METADATA)
+ @echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
+ @echo "Description: HW Cert Fencing test ">> $(METADATA)
+ @echo "TestTime: 5m" >> $(METADATA)
+ @echo "RunFor: $(PACKAGE_NAME)" >> $(METADATA)
+ @echo "Requires: $(PACKAGE_NAME)" >> $(METADATA)
+ @echo "X-RunForDevice: info.product == 'Computer' " >> $(METADATA)
+ @echo "X-Interactive: yes" >> $(METADATA)
Added: trunk/tests/fencing/fencing.py
===================================================================
--- trunk/tests/fencing/fencing.py (rev 0)
+++ trunk/tests/fencing/fencing.py 2010-06-15 17:27:31 UTC (rev 548)
@@ -0,0 +1,117 @@
+#!/usr/bin/python
+# Copyright (c) 2008 Red Hat, Inc. All rights reserved. This copyrighted material
+# is made available to anyone wishing to use, modify, copy, or
+# redistribute it subject to the terms and conditions of the GNU General
+# Public License v.2.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Author: Greg Nichols <gnichols(a)redhat.com>
+
+import os, string, sys, time, syslog, urllib2
+
+from v7.tags import Constants, DeviceClass
+from v7.test import Test
+from v7.command import Command, V7CommandException
+from v7.controller import Controller
+from v7.environment import Environment
+from v7.documentbase import DocumentWrapper
+
+
+class FencingTest(Test):
+
+ def __init__(self):
+ Test.__init__(self, name="fencing")
+ self.interactive = False # will prompt in --mode normal, but runs ok in --mode auto
+ self.deviceClass = DeviceClass.system
+ self.v7Controller = Controller()
+ self.environment = Environment()
+ self.documentWrapper = DocumentWrapper() # used for time utilities
+ self.rebootTimeLimit = 10 # minutes
+ self.priority = 1001 # run last
+ self.url = "/v7/cgi/v7web.py?command=daemon&subcommand=run&test=fencing"
+
+ def setInitConfig(self):
+ chkconfig = Command("chkconfig --add v7")
+ chkconfig.echo()
+ # get a timestamo, save it
+ theTime = time.gmtime(time.time())
+ runTimeStamp = self.documentWrapper.timeToString(theTime)
+ # save it off to the side
+ timestamp = open(os.path.join(self.environment.getDataDirectory(), "bootprint"), "w")
+ timestamp.write(runTimeStamp + "\n")
+ timestamp.close()
+ # mark the log with this run time
+ markerName = "%s-%s" % (self.Name(), runTimeStamp)
+ syslog.syslog(self.v7Controller.getSystemLogMarker(markerName, "begin", pid=False))
+
+ def removeInitConfig(self):
+ chkconfig = Command("chkconfig --del v7")
+ chkconfig.echo()
+
+ def sendFencingRequest(self):
+ request = self.url
+ agentIPAddress = ""
+ agentType = ""
+ request + request + "&agentIP=" + agentIPAddress + "&agentType=" + agentType
+ print "Sending Request:"
+ print request
+ request = urllib2.Request('http://%s%s' % (self.getTestServer(), request))
+ opener = urllib2.build_opener()
+ response = opener.open(request).readlines()
+ print "%s response: --------------------------------------------" % self.getTestServer()
+ for line in response: sys.stdout.write(line)
+ print "---------------------------------------------------------"
+ print "Please wait for test to continue"
+ sys.stdout.flush()
+ while True:
+ # wait here for reboot
+ waitTime = 60 #sec
+ print "Waiting for shutdown..."
+ sys.stdout.flush()
+ time.sleep(waitTime)
+
+ def getResults(self):
+ request = self.url
+ agentIPAddress = ""
+ agentType = ""
+ request + request + "&agentIP=" + agentIPAddress + "&agentType=" + agentType + "&results=1"
+ print "Sending Request:"
+ print request
+ request = urllib2.Request('http://%s%s' % (self.getTestServer(), request))
+ opener = urllib2.build_opener()
+ response = opener.open(request).readlines()
+ print response
+
+ def run(self):
+ PASSED = 0
+ FAILED = 1
+
+ if self.getTestServer() == None or self.getTestServer() == "unknown":
+ print "Error: No test server was set, test abort"
+ return FAILED
+ print "using test server %s" % self.getTestServer()
+
+ if self.incomplete:
+ result = self.getResults()
+ self.removeInitConfig()
+ else:
+ self.setInitConfig()
+ result = self.sendFencingRequest()
+
+ if result: return PASSED
+
+ # otherwise
+ return FAILED
+
+
+if __name__ == "__main__":
+ test = FencingTest()
+ returnValue = test.do(sys.argv)
+ sys.exit(returnValue)
Added: trunk/tests/fencing/runtest.sh
===================================================================
--- trunk/tests/fencing/runtest.sh (rev 0)
+++ trunk/tests/fencing/runtest.sh 2010-06-15 17:27:31 UTC (rev 548)
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+v7-run-simple-test ${TEST:-$(basename $PWD)} ./fencing.py
Property changes on: trunk/tests/fencing/runtest.sh
___________________________________________________________________
Name: svn:executable
+ *
13 years, 11 months
r547 - trunk/tests
by gnichols@fedoraproject.org
Author: gnichols
Date: 2010-06-15 17:27:19 +0000 (Tue, 15 Jun 2010)
New Revision: 547
Modified:
trunk/tests/Makefile
Log:
568518 - FEAT: add a BMC fencing testing
Modified: trunk/tests/Makefile
===================================================================
--- trunk/tests/Makefile 2010-06-15 17:26:48 UTC (rev 546)
+++ trunk/tests/Makefile 2010-06-15 17:27:19 UTC (rev 547)
@@ -15,7 +15,7 @@
.PHONY: clean install
-SUBDIRS := audio bluray cdrom dvd core floppy info memory network pccard storage tape usb video battery suspend lid expresscard cpuscaling profiler fv_core fv_memory fv_network fv_storage rteval hwlatdetect reboot
+SUBDIRS := audio bluray cdrom dvd core floppy info memory network pccard storage tape usb video battery suspend lid expresscard cpuscaling profiler fv_core fv_memory fv_network fv_storage rteval hwlatdetect reboot fencing
clean:
for i in $(SUBDIRS); do $(MAKE) -C $$i clean; done
13 years, 11 months
r546 - trunk
by gnichols@fedoraproject.org
Author: gnichols
Date: 2010-06-15 17:26:48 +0000 (Tue, 15 Jun 2010)
New Revision: 546
Modified:
trunk/Makefile
Log:
r8
Modified: trunk/Makefile
===================================================================
--- trunk/Makefile 2010-06-11 19:55:56 UTC (rev 545)
+++ trunk/Makefile 2010-06-15 17:26:48 UTC (rev 546)
@@ -14,7 +14,7 @@
# Author: Greg Nichols
V7_VERSION := 1.2
-V7_RELEASE := 7
+V7_RELEASE := 8
V7_VERSION_RELEASE := $(V7_VERSION)-$(V7_RELEASE)
V7_VERSION_PY := v7/version.py
V7_SVN_MODULE := svn+ssh://svn.fedorahosted.org/svn/v7
13 years, 11 months
r545 - in tags: . v7-V1-2R7/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2010-06-11 19:55:56 +0000 (Fri, 11 Jun 2010)
New Revision: 545
Added:
tags/v7-V1-2R7/
tags/v7-V1-2R7/v7/version.py
Log:
tag version
Copied: tags/v7-V1-2R7 (from rev 544, trunk)
Copied: tags/v7-V1-2R7/v7/version.py (from rev 335, trunk/v7/version.py)
===================================================================
--- tags/v7-V1-2R7/v7/version.py (rev 0)
+++ tags/v7-V1-2R7/v7/version.py 2010-06-11 19:55:56 UTC (rev 545)
@@ -0,0 +1,5 @@
+
+# v7/version.py is automatically-generated - DO NOT EDIT
+version = '1.2'
+release = '7'
+rhel_version = '5'
13 years, 11 months