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']