import os
import re
-from subprocess import *
+import time
+import subprocess
from sfa.util.rspecHelper import RSpec
class SfaData:
- authority = "plc.princeton"
- user = "plc.princeton.acb"
- slice = "plc.princeton.sapan"
+ defaults = { 'SFI_AUTH' : None,
+ 'SFI_USER' : None,
+ 'SFI_SLICE' : None,
+ 'SFI_REGISTRY' : "http://www.planet-lab.org:12345",
+ 'SFI_SM' : "http://www.planet-lab.org:12346",
+ 'SFAUI_VERBOSE' : False,
+ }
def __init__(self):
- self.registry = None
- self.slicemgr = None
+ filename = os.path.expanduser("~/.sfi/sfi_config")
+ execfile(filename, SfaData.__dict__)
+ for (k,v) in SfaData.defaults.items():
+ if not hasattr(SfaData,k): setattr(SfaData,k,v)
+ if SfaData.SFAUI_VERBOSE:
+ print "After reading config from %s"%filename
+ for (k,v) in SfaData.defaults.items():
+ print "%-20s: %r"%(k,getattr(SfaData,k))
def getAuthority(self):
- return SfaData.authority
+ return SfaData.SFI_AUTH
def getUser(self):
- return SfaData.user
+ return SfaData.SFI_USER
def setUser(self, user):
- SfaData.user = user
+ SfaData.SFI_USER = user
# Should probably get authority from user record instead...
- a = SfaData.user.split('.')
- SfaData.authority = '.'.join(a[:len(a)-1])
+ a = user.split('.')
+ SfaData.SFI_AUTH = '.'.join(a[:len(a)-1])
def getSlice(self):
- return SfaData.slice
+ return SfaData.SFI_SLICE
def setSlice(self, slice):
- SfaData.slice = slice
+ SfaData.SFI_SLICE = slice
+
+ def registry(self):
+ return SfaData.SFI_REGISTRY
+
+ def slicemgr(self):
+ return SfaData.SFI_SM
+
+ def trace_command (self, command):
+ self._trace=time.time()
+ if self.SFAUI_VERBOSE:
+ print time.strftime('%M:%S'),'Invoking',' '.join(command)
+ def trace_end (self):
+ if self.SFAUI_VERBOSE:
+ print time.strftime('%M:%S'),"[%.3f s]"%(time.time()-self._trace),'Done'
def getRecord(self, hrn):
- text = Popen(["sfi.py", "-u", self.getUser(), "-a",
- self.getAuthority(), "-r", self.registry,
- "-s", self.slicemgr, "show", hrn],
- stdout=PIPE).communicate()[0]
+ command = ["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(),
+ "-r", self.registry(), "-s", self.slicemgr(), "show", hrn]
+ self.trace_command(command)
+ text = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0]
+ self.trace_end()
return text
def listChildren(self, hrn):
children = []
- text = Popen(["sfi.py", "-u", self.getUser(), "-a",
- self.getAuthority(), "-r", self.registry,
- "-s", self.slicemgr, "list", hrn],
- stdout=PIPE).communicate()[0]
+ command=["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(),
+ "-r", self.registry(), "-s", self.slicemgr(), "list", hrn]
+ self.trace_command(command)
+ text = subprocess.Popen(command, stdout=subprocess.PIPE).communicate()[0]
+ self.trace_end()
lines = text.split('\n')
for line in lines:
if line:
(hrn, kind) = line.split()
children.append((hrn, kind))
-
+
return children
def getRSpec(self):
slice = self.getSlice()
- call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(),
- "-r", self.registry, "-s", self.slicemgr, "resources",
- "-o", slice, slice])
+ # Write RSpec to file for testing.
filename = os.path.expanduser("~/.sfi/" + slice + ".rspec")
+ try:
+ os.remove(filename)
+ except:
+ pass
+ command=["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(),
+ "-r", self.registry(), "-s", self.slicemgr(), "resources",
+ "-o", filename, slice]
+ self.trace_command(command)
+ subprocess.call(command)
+ self.trace_end()
f = open(filename, "r")
xml = f.read()
f.close()
f = open(filename, "w")
f.write(xml)
f.close()
- call(["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(),
- "-r", self.registry, "-s", self.slicemgr, "create",
- slice, filename])
+ command=["sfi.py", "-u", self.getUser(), "-a", self.getAuthority(),
+ "-r", self.registry(), "-s", self.slicemgr(), "create", slice, filename]
+ self.trace_command(command)
+ subprocess.call(command)
+ self.trace_en()
class PlanetLabData(SfaData):
def __init__(self):
SfaData.__init__(self)
- self.registry = "http://www.planet-lab.org:12345"
- self.slicemgr = "http://www.planet-lab.org:12346"
self.rspec = None
def refreshRSpec(self):
class PLEData(PlanetLabData):
def __init__(self):
PlanetLabData.__init__(self)
- self.slicemgr = "http://www.planet-lab.eu:12346"
+ self.SFI_SM = "http://www.planet-lab.eu:12346"
class PLJData(PlanetLabData):
def __init__(self):
PlanetLabData.__init__(self)
- self.slicemgr = "http://www.planet-lab.jp:12346"
+ self.SFI_SM = "http://www.planet-lab.jp:12346"
class ViniData(PlanetLabData):
def __init__(self):
PlanetLabData.__init__(self)
- self.slicemgr = "http://www.vini-veritas.net:12346"
+ self.SFI_SM = "http://www.vini-veritas.net:12346"
class GpENIData(PlanetLabData):
def __init__(self):
PlanetLabData.__init__(self)
- self.slicemgr = "http://198.248.241.100:12346"
+ self.SFI_SM = "http://198.248.241.100:12346"
class OpenCirrusData(SfaData):
def __init__(self):
SfaData.__init__(self)
- self.registry = "http://www.planet-lab.org:12345"
- self.slicemgr = "http://www.planet-lab.org:12346"
+ self.SFI_REGISTRY = "http://198.55.37.29:12345"
+ self.SFI_SM = "http://198.55.37.29:12346"
+
+ def refreshRSpec(self):
+ xml = SfaData.getRSpec(self)
+ self.rspec = xml
+ def getRSpec(self):
+ if self.rspec is None:
+ self.refreshRSpec()
+ return self.rspec
+
+ def applyRSpec(self):
+ xml = self.rspec
+ SfaData.applyRSpec(self, xml)