clustermanagerservice: add server-side commands for reservations
rpycservices: add RPCs for server-side reservations commands
git-svn-id: https://svn.apache.org/repos/asf/incubator/tashi/trunk@1375308 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/tashi/clustermanager/clustermanagerservice.py b/src/tashi/clustermanager/clustermanagerservice.py
index ff14c3d..a963555 100644
--- a/src/tashi/clustermanager/clustermanagerservice.py
+++ b/src/tashi/clustermanager/clustermanagerservice.py
@@ -604,6 +604,56 @@
return 'Host notes set to "%s".' % hostNotes
# extern
+ def addReservation(self, hostId, username):
+ hostNotes = notes
+ host = self.data.acquireHost(hostId)
+ msg = None
+ try:
+ if username not in host.reserved:
+ host.reserved.append(username)
+ msg = "%s added to reservations of host %s" % (username, host.name)
+ else:
+ msg = "%s already in reservations of host %s" % (username, host.name)
+ finally:
+ self.data.releaseHost(host)
+
+ if msg is not None:
+ return msg
+ else:
+ return "Sorry, an error occurred"
+
+ # extern
+ def delReservation(self, hostId, username):
+ hostNotes = notes
+ host = self.data.acquireHost(hostId)
+ msg = None
+ try:
+ if username not in host.reserved:
+ msg = "%s not in reservations of host %s" % (username, host.name)
+ else:
+ host.reserved.remove(username)
+ msg = "%s removed from reservations of host %s" % (username, host.name)
+ finally:
+ self.data.releaseHost(host)
+
+ if msg is not None:
+ return msg
+ else:
+ return "Sorry, an error occurred"
+
+ # extern
+ def getReservation(self, hostId):
+ host = self.data.getHost(hostId)
+ users = host.reserved
+
+ if len(users) == 0:
+ return 'Host %s is not reserved for any users'
+
+ usersstring = ', '.join(map(str, users))
+
+ return 'Host %s reserved for users %s.' % (host.name, usersstring)
+
+ # extern
def getNetworks(self):
networks = self.data.getNetworks()
for network in networks:
diff --git a/src/tashi/rpycservices/rpycservices.py b/src/tashi/rpycservices/rpycservices.py
index daa438d..0f760fc 100644
--- a/src/tashi/rpycservices/rpycservices.py
+++ b/src/tashi/rpycservices/rpycservices.py
@@ -19,7 +19,7 @@
from tashi.rpycservices.rpyctypes import Instance, Host, User
import cPickle
-clusterManagerRPCs = ['createVm', 'shutdownVm', 'destroyVm', 'suspendVm', 'resumeVm', 'migrateVm', 'pauseVm', 'unpauseVm', 'getHosts', 'getNetworks', 'getUsers', 'getInstances', 'vmmSpecificCall', 'registerNodeManager', 'vmUpdate', 'activateVm', 'registerHost', 'unregisterHost', 'getImages', 'copyImage', 'setHostState', 'setHostNotes']
+clusterManagerRPCs = ['createVm', 'shutdownVm', 'destroyVm', 'suspendVm', 'resumeVm', 'migrateVm', 'pauseVm', 'unpauseVm', 'getHosts', 'getNetworks', 'getUsers', 'getInstances', 'vmmSpecificCall', 'registerNodeManager', 'vmUpdate', 'activateVm', 'registerHost', 'unregisterHost', 'getImages', 'copyImage', 'setHostState', 'setHostNotes', 'addReservation', 'delReservation', 'getReservation']
nodeManagerRPCs = ['instantiateVm', 'shutdownVm', 'destroyVm', 'suspendVm', 'resumeVm', 'prepReceiveVm', 'prepSourceVm', 'migrateVm', 'receiveVm', 'pauseVm', 'unpauseVm', 'getVmInfo', 'listVms', 'vmmSpecificCall', 'getHostInfo', 'liveCheck']
accountingRPCs = ['record']