Revision 9d5ba39a
b/scripts/gnt-debug | ||
---|---|---|
30 | 30 |
from optparse import make_option |
31 | 31 |
|
32 | 32 |
from ganeti.cli import * |
33 |
from ganeti import cli |
|
33 | 34 |
from ganeti import opcodes |
34 | 35 |
from ganeti import constants |
35 | 36 |
from ganeti import utils |
... | ... | |
69 | 70 |
@return: the desired exit code |
70 | 71 |
|
71 | 72 |
""" |
73 |
cl = cli.GetClient() |
|
72 | 74 |
fname = args[0] |
73 | 75 |
op_data = simplejson.loads(open(fname).read()) |
74 | 76 |
op_list = [opcodes.OpCode.LoadOpCode(val) for val in op_data] |
75 |
job = opcodes.Job(op_list=op_list) |
|
76 |
jid = SubmitJob(job) |
|
77 |
jid = cli.SendJob(op_list, cl=cl) |
|
77 | 78 |
ToStdout("Job id: %s", jid) |
78 |
query = { |
|
79 |
"object": "jobs", |
|
80 |
"fields": ["status"], |
|
81 |
"names": [jid], |
|
82 |
} |
|
83 |
|
|
84 |
# wait for job to complete (either by success or failure) |
|
85 |
while True: |
|
86 |
jdata = SubmitQuery(query) |
|
87 |
if not jdata: |
|
88 |
# job not found, gone away! |
|
89 |
ToStderr("Job lost!") |
|
90 |
return 1 |
|
91 |
|
|
92 |
status = jdata[0][0] |
|
93 |
ToStdout(status) |
|
94 |
if status in (opcodes.Job.STATUS_SUCCESS, opcodes.Job.STATUS_FAIL): |
|
95 |
break |
|
96 |
|
|
97 |
# sleep between checks |
|
98 |
time.sleep(0.5) |
|
99 |
|
|
100 |
# job has finished, get and process its results |
|
101 |
query["fields"].extend(["op_list", "op_status", "op_result"]) |
|
102 |
jdata = SubmitQuery(query) |
|
103 |
if not jdata: |
|
104 |
# job not found, gone away! |
|
105 |
ToStderr("Job lost!") |
|
106 |
return 1 |
|
107 |
ToStdout(jdata[0]) |
|
108 |
status, op_list, op_status, op_result = jdata[0] |
|
109 |
for idx, op in enumerate(op_list): |
|
110 |
ToStdout("%s %s %s %s", idx, op.OP_ID, op_status[idx], op_result[idx]) |
|
79 |
cli.PollJob(jid, cl=cl) |
|
111 | 80 |
return 0 |
112 | 81 |
|
113 | 82 |
|
Also available in: Unified diff