Honor disks_active of instance when adding disks
[ganeti-local] / lib / luxi.py
index bfebbc1..0de9185 100644 (file)
@@ -1,7 +1,7 @@
 #
 #
 
 #
 #
 
-# Copyright (C) 2006, 2007, 2011 Google Inc.
+# Copyright (C) 2006, 2007, 2011, 2012 Google Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -34,13 +34,14 @@ import collections
 import time
 import errno
 import logging
 import time
 import errno
 import logging
-import warnings
 
 
+from ganeti import compat
 from ganeti import serializer
 from ganeti import constants
 from ganeti import errors
 from ganeti import utils
 from ganeti import objects
 from ganeti import serializer
 from ganeti import constants
 from ganeti import errors
 from ganeti import utils
 from ganeti import objects
+from ganeti import pathutils
 
 
 KEY_METHOD = "method"
 
 
 KEY_METHOD = "method"
@@ -54,21 +55,46 @@ REQ_SUBMIT_MANY_JOBS = "SubmitManyJobs"
 REQ_WAIT_FOR_JOB_CHANGE = "WaitForJobChange"
 REQ_CANCEL_JOB = "CancelJob"
 REQ_ARCHIVE_JOB = "ArchiveJob"
 REQ_WAIT_FOR_JOB_CHANGE = "WaitForJobChange"
 REQ_CANCEL_JOB = "CancelJob"
 REQ_ARCHIVE_JOB = "ArchiveJob"
-REQ_AUTOARCHIVE_JOBS = "AutoArchiveJobs"
+REQ_CHANGE_JOB_PRIORITY = "ChangeJobPriority"
+REQ_AUTO_ARCHIVE_JOBS = "AutoArchiveJobs"
 REQ_QUERY = "Query"
 REQ_QUERY_FIELDS = "QueryFields"
 REQ_QUERY_JOBS = "QueryJobs"
 REQ_QUERY_INSTANCES = "QueryInstances"
 REQ_QUERY_NODES = "QueryNodes"
 REQ_QUERY_GROUPS = "QueryGroups"
 REQ_QUERY = "Query"
 REQ_QUERY_FIELDS = "QueryFields"
 REQ_QUERY_JOBS = "QueryJobs"
 REQ_QUERY_INSTANCES = "QueryInstances"
 REQ_QUERY_NODES = "QueryNodes"
 REQ_QUERY_GROUPS = "QueryGroups"
+REQ_QUERY_NETWORKS = "QueryNetworks"
 REQ_QUERY_EXPORTS = "QueryExports"
 REQ_QUERY_CONFIG_VALUES = "QueryConfigValues"
 REQ_QUERY_CLUSTER_INFO = "QueryClusterInfo"
 REQ_QUERY_TAGS = "QueryTags"
 REQ_QUERY_EXPORTS = "QueryExports"
 REQ_QUERY_CONFIG_VALUES = "QueryConfigValues"
 REQ_QUERY_CLUSTER_INFO = "QueryClusterInfo"
 REQ_QUERY_TAGS = "QueryTags"
-REQ_QUERY_LOCKS = "QueryLocks"
-REQ_QUEUE_SET_DRAIN_FLAG = "SetDrainFlag"
+REQ_SET_DRAIN_FLAG = "SetDrainFlag"
 REQ_SET_WATCHER_PAUSE = "SetWatcherPause"
 
 REQ_SET_WATCHER_PAUSE = "SetWatcherPause"
 
+#: List of all LUXI requests
+REQ_ALL = compat.UniqueFrozenset([
+  REQ_ARCHIVE_JOB,
+  REQ_AUTO_ARCHIVE_JOBS,
+  REQ_CANCEL_JOB,
+  REQ_CHANGE_JOB_PRIORITY,
+  REQ_QUERY,
+  REQ_QUERY_CLUSTER_INFO,
+  REQ_QUERY_CONFIG_VALUES,
+  REQ_QUERY_EXPORTS,
+  REQ_QUERY_FIELDS,
+  REQ_QUERY_GROUPS,
+  REQ_QUERY_INSTANCES,
+  REQ_QUERY_JOBS,
+  REQ_QUERY_NODES,
+  REQ_QUERY_NETWORKS,
+  REQ_QUERY_TAGS,
+  REQ_SET_DRAIN_FLAG,
+  REQ_SET_WATCHER_PAUSE,
+  REQ_SUBMIT_JOB,
+  REQ_SUBMIT_MANY_JOBS,
+  REQ_WAIT_FOR_JOB_CHANGE,
+  ])
+
 DEF_CTMO = 10
 DEF_RWTO = 60
 
 DEF_CTMO = 10
 DEF_RWTO = 60
 
@@ -392,7 +418,7 @@ class Client(object):
 
     """
     if address is None:
 
     """
     if address is None:
-      address = constants.MASTER_SOCKET
+      address = pathutils.MASTER_SOCKET
     self.address = address
     self.timeouts = timeouts
     self.transport_class = transport
     self.address = address
     self.timeouts = timeouts
     self.transport_class = transport
@@ -446,20 +472,20 @@ class Client(object):
                           version=constants.LUXI_VERSION)
 
   def SetQueueDrainFlag(self, drain_flag):
                           version=constants.LUXI_VERSION)
 
   def SetQueueDrainFlag(self, drain_flag):
-    return self.CallMethod(REQ_QUEUE_SET_DRAIN_FLAG, (drain_flag, ))
+    return self.CallMethod(REQ_SET_DRAIN_FLAG, (drain_flag, ))
 
   def SetWatcherPause(self, until):
     return self.CallMethod(REQ_SET_WATCHER_PAUSE, (until, ))
 
   def SubmitJob(self, ops):
     ops_state = map(lambda op: op.__getstate__(), ops)
 
   def SetWatcherPause(self, until):
     return self.CallMethod(REQ_SET_WATCHER_PAUSE, (until, ))
 
   def SubmitJob(self, ops):
     ops_state = map(lambda op: op.__getstate__(), ops)
-    return self.CallMethod(REQ_SUBMIT_JOB, ops_state)
+    return self.CallMethod(REQ_SUBMIT_JOB, (ops_state, ))
 
   def SubmitManyJobs(self, jobs):
     jobs_state = []
     for ops in jobs:
       jobs_state.append([op.__getstate__() for op in ops])
 
   def SubmitManyJobs(self, jobs):
     jobs_state = []
     for ops in jobs:
       jobs_state.append([op.__getstate__() for op in ops])
-    return self.CallMethod(REQ_SUBMIT_MANY_JOBS, jobs_state)
+    return self.CallMethod(REQ_SUBMIT_MANY_JOBS, (jobs_state, ))
 
   def CancelJob(self, job_id):
     return self.CallMethod(REQ_CANCEL_JOB, (job_id, ))
 
   def CancelJob(self, job_id):
     return self.CallMethod(REQ_CANCEL_JOB, (job_id, ))
@@ -467,9 +493,12 @@ class Client(object):
   def ArchiveJob(self, job_id):
     return self.CallMethod(REQ_ARCHIVE_JOB, (job_id, ))
 
   def ArchiveJob(self, job_id):
     return self.CallMethod(REQ_ARCHIVE_JOB, (job_id, ))
 
+  def ChangeJobPriority(self, job_id, priority):
+    return self.CallMethod(REQ_CHANGE_JOB_PRIORITY, (job_id, priority))
+
   def AutoArchiveJobs(self, age):
     timeout = (DEF_RWTO - 1) / 2
   def AutoArchiveJobs(self, age):
     timeout = (DEF_RWTO - 1) / 2
-    return self.CallMethod(REQ_AUTOARCHIVE_JOBS, (age, timeout))
+    return self.CallMethod(REQ_AUTO_ARCHIVE_JOBS, (age, timeout))
 
   def WaitForJobChangeOnce(self, job_id, fields,
                            prev_job_info, prev_log_serial,
 
   def WaitForJobChangeOnce(self, job_id, fields,
                            prev_job_info, prev_log_serial,
@@ -540,6 +569,9 @@ class Client(object):
   def QueryGroups(self, names, fields, use_locking):
     return self.CallMethod(REQ_QUERY_GROUPS, (names, fields, use_locking))
 
   def QueryGroups(self, names, fields, use_locking):
     return self.CallMethod(REQ_QUERY_GROUPS, (names, fields, use_locking))
 
+  def QueryNetworks(self, names, fields, use_locking):
+    return self.CallMethod(REQ_QUERY_NETWORKS, (names, fields, use_locking))
+
   def QueryExports(self, nodes, use_locking):
     return self.CallMethod(REQ_QUERY_EXPORTS, (nodes, use_locking))
 
   def QueryExports(self, nodes, use_locking):
     return self.CallMethod(REQ_QUERY_EXPORTS, (nodes, use_locking))
 
@@ -551,8 +583,3 @@ class Client(object):
 
   def QueryTags(self, kind, name):
     return self.CallMethod(REQ_QUERY_TAGS, (kind, name))
 
   def QueryTags(self, kind, name):
     return self.CallMethod(REQ_QUERY_TAGS, (kind, name))
-
-  def QueryLocks(self, fields, sync):
-    warnings.warn("This LUXI call is deprecated and will be removed, use"
-                  " Query(\"%s\", ...) instead" % constants.QR_LOCK)
-    return self.CallMethod(REQ_QUERY_LOCKS, (fields, sync))