Exemplo n.º 1
0
 def run(self):
     import lease
     self.dbthr.postinit()
     for thr in [ self.svrthr, self.sslsvrthr, self.dbthr, self.httpsvrthr ]:
         thr.start()
     heartbeat = 0
     gm = gmetric.gmetric()
     gaddr = self.conf.gangliaaddr
     gport = self.conf.gangliaport
     gheartbeat = self.conf.gangliaheartbeat
     nodemgr_tag = self.conf.nodemgr_tag
     leases_tag = self.conf.leases_tag
     slivers_tag = self.conf.slivers_tag
     while 1:
         now = time.asctime(time.gmtime())
         leases = ""
         for leasedata in self.dbthr.getleases():
             l = lease.lease(leasedata)
             leases = leases + " " + l.slice
         leases = leases.strip()
         slivers = ""
         for s in self.dbthr.getslivers():
             slivers = slivers + " " + s
         slivers = slivers.strip()
         gm.sendsimple(gaddr, gport, nodemgr_tag, `heartbeat`, gheartbeat, gheartbeat)
         if leases != "": 
             gm.send(gaddr, gport, leases_tag, leases, gheartbeat, gheartbeat, self.ip)
         if slivers != "": 
             gm.send(gaddr, gport, slivers_tag, slivers, gheartbeat, gheartbeat, self.ip)
         time.sleep(gheartbeat)
         heartbeat += 1
Exemplo n.º 2
0
 def lookupsliver(self, slice):
     self.nodemgr.rlock.acquire()
     if slice in self.sliverdb.keys():
         l = lease.lease(self.sliverdb[slice])
     else:
         l = None
     self.nodemgr.rlock.release()
     return l
Exemplo n.º 3
0
 def lookupsliver(self, slice):
     self.nodemgr.rlock.acquire()
     if slice in self.sliverdb.keys():
         l = lease.lease(self.sliverdb[slice])
     else:
         l = None
     self.nodemgr.rlock.release()
     return l
Exemplo n.º 4
0
 def getleases(self, args, flags):
     ip = args[0]
     principle = digest.sha1file(self.clientconf.pubkey)
     leasesdata = nodemgrproxy.nodemgrproxy(ip, nodemgr.PORT).getleases()
     for leasedata in leasesdata:
         l = lease.lease(leasedata)
         if re.match(principle, l.principle):
             print leasedata
     return 0
Exemplo n.º 5
0
 def getleases(self, args, flags):
     ip = args[0]
     principle = digest.sha1file(self.clientconf.pubkey)
     leasesdata = nodemgrproxy.nodemgrproxy(ip, nodemgr.PORT).getleases()
     for leasedata in leasesdata:
         l = lease.lease(leasedata)
         if re.match(principle, l.principle):
             print leasedata
     return 0
Exemplo n.º 6
0
 def cleanleases(self, dir, now):
     expiredleaseips = []
     for ip in os.listdir(dir):
         f = open("%s/%s" % (dir, ip))
         leasedata = f.read()
         f.close()
         l = lease.lease(leasedata)
         if calendar.timegm(now) > calendar.timegm(l.end):
             expiredleaseips.append(ip)
     self.deleteleases(dir, expiredleaseips)
Exemplo n.º 7
0
 def cleanleases(self, dir, now):
     expiredleaseips = []
     for ip in os.listdir(dir):
         f = open("%s/%s" % (dir, ip))
         leasedata = f.read()
         f.close()
         l = lease.lease(leasedata)
         if calendar.timegm(now) > calendar.timegm(l.end):
             expiredleaseips.append(ip)
     self.deleteleases(dir, expiredleaseips)
Exemplo n.º 8
0
 def postinit(self):
     for slice in self.leasedb.keys():
         leasedata = self.leasedb[slice]
         l = lease.lease(leasedata)
         expiration = calendar.timegm(time.strptime(l.end_time, "%Y-%m-%d %H:%M:%S"))
         sslsvr = self.nodemgr.sslsvrthr.server
         e = event.leaseexpevent(expiration, leasedata, sslsvr)
         self.events[leasedata] = e
         self.eventqueue.put(e)
         self.nodemgr.logfile.log("Adding a lease expiration for slice %s at %s"
                                  % (l.slice, expiration))
Exemplo n.º 9
0
 def _deleteleases(self, leasesdata):
     import lease
     try:
         self.nodemgr.rlock.acquire()
         for leasedata in leasesdata:
             l = lease.lease(leasedata)
             if self.nodemgr.dbthr.lookupsliver(l.slice):
                 self.nodemgr.deletesliver(l.slice)
                 self.dbthr.removesliver(l.slice)
             self.dbthr.removelease(leasedata)
     finally:
         self.nodemgr.rlock.release()
Exemplo n.º 10
0
 def removelease(self, leasedata):
     self.nodemgr.rlock.acquire()
     l = lease.lease(leasedata)
     if not l.slice in self.leasedb.keys():
         self.nodemgr.rlock.release()
         return
     del self.leasedb[l.slice]
     self.leasedb.sync()
     del self.events[leasedata]
     self.nodemgr.rlock.release()
     self.nodemgr.logfile.log("Removed lease (%d seconds) for slice %s" %
                              (l.leaselen, l.slice))
Exemplo n.º 11
0
 def removelease(self, leasedata):
     self.nodemgr.rlock.acquire()
     l = lease.lease(leasedata)
     if not l.slice in self.leasedb.keys():
         self.nodemgr.rlock.release()
         return
     del self.leasedb[l.slice]
     self.leasedb.sync()
     del self.events[leasedata]
     self.nodemgr.rlock.release()
     self.nodemgr.logfile.log("Removed lease (%d seconds) for slice %s" %
                              (l.leaselen, l.slice))
Exemplo n.º 12
0
 def _deleteleases(self, leasesdata):
     import lease
     try:
         self.nodemgr.rlock.acquire()
         for leasedata in leasesdata:
             l = lease.lease(leasedata)
             if self.nodemgr.dbthr.lookupsliver(l.slice):
                 self.nodemgr.deletesliver(l.slice)
                 self.dbthr.removesliver(l.slice)
             self.dbthr.removelease(leasedata)
     finally:
         self.nodemgr.rlock.release()
Exemplo n.º 13
0
 def expirations(self, args, flags):
     """Print expiration times for slivers in slice."""
     slice = args[0]
     self.setdirs(slice)
     if not os.path.exists(self.vmsdir):
         sys.stderr.write("No slivers for slice %s\n" % slice)
         return
     ips = os.listdir(self.vmsdir)
     for ip in ips:
         leasefile = "%s/%s" % (self.vmsdir, ip)
         l = lease.lease(open(leasefile).read())
         print "Sliver for slice %s expires %s UTC on %s" % (l.slice, l.end_time, ip)
     return 0
Exemplo n.º 14
0
 def newvm(self, principle, subject, args):
     import lease
     try:
         self.nodemgr.rlock.acquire()
         l = lease.lease(args[0]["leasedata"])
         privatekey = args[0]["privatekey"]
         publickey = args[0]["publickey"]
         self.newvm_checkargs(principle, l)
         self.nodemgr.createsliver(l.slice, privatekey, publickey)
         self.nodemgr.dbthr.addsliver(l.slice, l.data, subject)
     finally:
         self.nodemgr.rlock.release()
     return 1
Exemplo n.º 15
0
 def newvm(self, principle, subject, args):
     import lease
     try:
         self.nodemgr.rlock.acquire()
         l = lease.lease(args[0]["leasedata"])
         privatekey = args[0]["privatekey"]
         publickey = args[0]["publickey"]
         self.newvm_checkargs(principle, l)
         self.nodemgr.createsliver(l.slice, privatekey, publickey)
         self.nodemgr.dbthr.addsliver(l.slice, l.data, subject)
     finally:
         self.nodemgr.rlock.release()
     return 1
Exemplo n.º 16
0
 def postinit(self):
     for slice in self.leasedb.keys():
         leasedata = self.leasedb[slice]
         l = lease.lease(leasedata)
         expiration = calendar.timegm(
             time.strptime(l.end_time, "%Y-%m-%d %H:%M:%S"))
         sslsvr = self.nodemgr.sslsvrthr.server
         e = event.leaseexpevent(expiration, leasedata, sslsvr)
         self.events[leasedata] = e
         self.eventqueue.put(e)
         self.nodemgr.logfile.log(
             "Adding a lease expiration for slice %s at %s" %
             (l.slice, expiration))
Exemplo n.º 17
0
 def addlease(self, leasedata, subject):
     self.nodemgr.rlock.acquire()
     l = lease.lease(leasedata)
     self.leasedb[l.slice] = leasedata
     self.leasedb.sync()
     expiration = calendar.timegm(time.strptime(l.end_time, "%Y-%m-%d %H:%M:%S"))
     sslsvr = self.nodemgr.sslsvrthr.server
     e = event.leaseexpevent(expiration, leasedata, sslsvr)
     self.events[leasedata] = e
     self.eventqueue.put(e)
     self.nodemgr.rlock.release()
     self.wakeup()
     self.nodemgr.logfile.log("Added lease (%d seconds) for slice %s for \"%s\"" %
                              (l.leaselen, l.slice, subject))
Exemplo n.º 18
0
 def expirations(self, args, flags):
     """Print expiration times for slivers in slice."""
     slice = args[0]
     self.setdirs(slice)
     if not os.path.exists(self.vmsdir):
         sys.stderr.write("No slivers for slice %s\n" % slice)
         return
     ips = os.listdir(self.vmsdir)
     for ip in ips:
         leasefile = "%s/%s" % (self.vmsdir, ip)
         l = lease.lease(open(leasefile).read())
         print "Sliver for slice %s expires %s UTC on %s" % (l.slice,
                                                             l.end_time, ip)
     return 0
Exemplo n.º 19
0
 def addlease(self, leasedata, subject):
     self.nodemgr.rlock.acquire()
     l = lease.lease(leasedata)
     self.leasedb[l.slice] = leasedata
     self.leasedb.sync()
     expiration = calendar.timegm(
         time.strptime(l.end_time, "%Y-%m-%d %H:%M:%S"))
     sslsvr = self.nodemgr.sslsvrthr.server
     e = event.leaseexpevent(expiration, leasedata, sslsvr)
     self.events[leasedata] = e
     self.eventqueue.put(e)
     self.nodemgr.rlock.release()
     self.wakeup()
     self.nodemgr.logfile.log(
         "Added lease (%d seconds) for slice %s for \"%s\"" %
         (l.leaselen, l.slice, subject))
Exemplo n.º 20
0
 def setleases(self):
     import lease
     self.doc.append(HTMLgen.Heading(3, "Leases"))
     self.doc.append(HTMLgen.P())
     leasesdata = self.nodemgr.dbthr.getleases()
     if len(leasesdata) == 0:
         self.doc.append("No leases.")
         return
     table = HTMLgen.TableLite(border = "1", cellpadding = "2", cellspacing = "2")
     tr = HTMLgen.TR(HTMLgen.TD("Slice"), HTMLgen.TD("IP"), HTMLgen.TD("StartTime"),
                     HTMLgen.TD("EndTime"))
     table.append(tr)
     for leasedata in leasesdata:
         t = lease.lease(leasedata)
         tr = HTMLgen.TR(HTMLgen.TD(t.slice), HTMLgen.TD(t.ip),
                         HTMLgen.TD(t.start_time + " UTC"),
                         HTMLgen.TD(t.end_time + " UTC"))
         table.append(tr)
     self.doc.append(table, HTMLgen.P())
Exemplo n.º 21
0
 def newvms(self, args, flags):
     """Create set of distributed VMs using leases on nodes."""
     slice = args[0]
     self.setdirs(slice)
     leasefiles = args[1:]
     ips = []
     inargs = {}
     outargs = {}
     privatekeyfile = "%s/identity" % self.slicekeypairdir
     publickeyfile = "%s/identity.pub" % self.slicekeypairdir        
     privatekey = open(privatekeyfile).read()
     publickey = open(publickeyfile).read()
     for leasefile in leasefiles:
         leasedata = open(leasefile).read()
         l = lease.lease(leasedata)
         ips.append(l.ip)
         inargs[l.ip] = (leasedata, privatekey, publickey)
     rval = self.doparallel(ips, "newvm", inargs, outargs, flags)
     self.renameleases(self.leasesdir, self.vmsdir, outargs.keys())
     return rval
Exemplo n.º 22
0
 def newvms(self, args, flags):
     """Create set of distributed VMs using leases on nodes."""
     slice = args[0]
     self.setdirs(slice)
     leasefiles = args[1:]
     ips = []
     inargs = {}
     outargs = {}
     privatekeyfile = "%s/identity" % self.slicekeypairdir
     publickeyfile = "%s/identity.pub" % self.slicekeypairdir
     privatekey = open(privatekeyfile).read()
     publickey = open(publickeyfile).read()
     for leasefile in leasefiles:
         leasedata = open(leasefile).read()
         l = lease.lease(leasedata)
         ips.append(l.ip)
         inargs[l.ip] = (leasedata, privatekey, publickey)
     rval = self.doparallel(ips, "newvm", inargs, outargs, flags)
     self.renameleases(self.leasesdir, self.vmsdir, outargs.keys())
     return rval
Exemplo n.º 23
0
 def saveleases(self, leasesdata):
     for leasedata in leasesdata:
         l = lease.lease(leasedata)
         f = open("%s/%s" % (self.leasesdir, l.ip), "w")
         f.write(leasedata)
         f.close()
Exemplo n.º 24
0
 def saveleases(self, leasesdata):
     for leasedata in leasesdata:
         l = lease.lease(leasedata)
         f = open("%s/%s" % (self.leasesdir, l.ip), "w")
         f.write(leasedata)
         f.close()