op = opcodes.OpQueryConfigValues(output_fields=fields)
return self._Query(op)
+ elif method == luxi.REQ_QUEUE_SET_DRAIN_FLAG:
+ drain_flag = args
+ return queue.SetDrainFlag(drain_flag)
+
else:
raise ValueError("Invalid operation")
def ExpandNames(self):
self.needed_locks = {}
- static_fields = ["cluster_name", "master_node"]
+ static_fields = ["cluster_name", "master_node", "drain_flag"]
_CheckOutputFields(static=static_fields,
dynamic=[],
selected=self.op.output_fields)
values = []
for field in self.op.output_fields:
if field == "cluster_name":
- values.append(self.cfg.GetClusterName())
+ entry = self.cfg.GetClusterName()
elif field == "master_node":
- values.append(self.cfg.GetMasterNode())
+ entry = self.cfg.GetMasterNode()
+ elif field == "drain_flag":
+ entry = os.path.exists(constants.JOB_QUEUE_DRAIN_FILE)
else:
raise errors.ParameterError(field)
+ values.append(entry)
return values
"""
return os.path.exists(constants.JOB_QUEUE_DRAIN_FILE)
+ @staticmethod
+ def SetDrainFlag(drain_flag):
+ """Sets the drain flag for the queue.
+
+ This is similar to the function L{backend.JobQueueSetDrainFlag},
+ and in the future we might merge them.
+
+ """
+ if drain_flag:
+ utils.WriteFile(constants.JOB_QUEUE_DRAIN_FILE, data="", close=True)
+ else:
+ utils.RemoveFile(constants.JOB_QUEUE_DRAIN_FILE)
+ return True
+
@utils.LockedMethod
@_RequireOpenQueue
def SubmitJob(self, ops):
REQ_QUERY_NODES = "QueryNodes"
REQ_QUERY_EXPORTS = "QueryExports"
REQ_QUERY_CONFIG_VALUES = "QueryConfigValues"
+REQ_QUEUE_SET_DRAIN_FLAG = "SetDrainFlag"
DEF_CTMO = 10
DEF_RWTO = 60
return result
+ def SetQueueDrainFlag(self, drain_flag):
+ return self.CallMethod(REQ_QUEUE_SET_DRAIN_FLAG, drain_flag)
+
def SubmitJob(self, ops):
ops_state = map(lambda op: op.__getstate__(), ops)
return self.CallMethod(REQ_SUBMIT_JOB, ops_state)
def QueryConfigValues(self, fields):
return self.CallMethod(REQ_QUERY_CONFIG_VALUES, fields)
+
# TODO: class Server(object)
return 0
+def QueueOps(opts, args):
+ """Queue operations.
+
+ """
+ command = args[0]
+ client = GetClient()
+ if command in ("drain", "undrain"):
+ drain_flag = command == "drain"
+ client.SetQueueDrainFlag(drain_flag)
+ elif command == "info":
+ result = client.QueryConfigValues(["drain_flag"])
+ print "The drain flag is",
+ if result[0]:
+ print "set"
+ else:
+ print "unset"
+ return 0
+
# this is an option common to more than one command, so we declare
# it here and reuse it
node_option = make_option("-n", "--node", action="append", dest="nodes",
'search-tags': (SearchTags, ARGS_ONE,
[DEBUG_OPT], "", "Searches the tags on all objects on"
" the cluster for a given pattern (regex)"),
+ 'queue': (QueueOps, ARGS_ONE, [DEBUG_OPT],
+ "drain|undrain|info", "Change queue properties"),
'modify': (SetClusterParams, ARGS_NONE,
[DEBUG_OPT,
make_option("-g", "--vg-name", dest="vg_name",