root / lib / rapi / rlib2.py @ c9e5c064
History | View | Annotate | Download (3.4 kB)
1 | 10b207d4 | Oleksiy Mishchenko | #
|
---|---|---|---|
2 | 10b207d4 | Oleksiy Mishchenko | #
|
3 | 10b207d4 | Oleksiy Mishchenko | |
4 | 10b207d4 | Oleksiy Mishchenko | # Copyright (C) 2006, 2007, 2008 Google Inc.
|
5 | 10b207d4 | Oleksiy Mishchenko | #
|
6 | 10b207d4 | Oleksiy Mishchenko | # This program is free software; you can redistribute it and/or modify
|
7 | 10b207d4 | Oleksiy Mishchenko | # it under the terms of the GNU General Public License as published by
|
8 | 10b207d4 | Oleksiy Mishchenko | # the Free Software Foundation; either version 2 of the License, or
|
9 | 10b207d4 | Oleksiy Mishchenko | # (at your option) any later version.
|
10 | 10b207d4 | Oleksiy Mishchenko | #
|
11 | 10b207d4 | Oleksiy Mishchenko | # This program is distributed in the hope that it will be useful, but
|
12 | 10b207d4 | Oleksiy Mishchenko | # WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 | 10b207d4 | Oleksiy Mishchenko | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14 | 10b207d4 | Oleksiy Mishchenko | # General Public License for more details.
|
15 | 10b207d4 | Oleksiy Mishchenko | #
|
16 | 10b207d4 | Oleksiy Mishchenko | # You should have received a copy of the GNU General Public License
|
17 | 10b207d4 | Oleksiy Mishchenko | # along with this program; if not, write to the Free Software
|
18 | 10b207d4 | Oleksiy Mishchenko | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
19 | 10b207d4 | Oleksiy Mishchenko | # 02110-1301, USA.
|
20 | 10b207d4 | Oleksiy Mishchenko | |
21 | 10b207d4 | Oleksiy Mishchenko | |
22 | 10b207d4 | Oleksiy Mishchenko | """Remote API version 2 baserlib.library.
|
23 | 10b207d4 | Oleksiy Mishchenko |
|
24 | 10b207d4 | Oleksiy Mishchenko | """
|
25 | 10b207d4 | Oleksiy Mishchenko | |
26 | 10b207d4 | Oleksiy Mishchenko | import ganeti.opcodes |
27 | 10b207d4 | Oleksiy Mishchenko | |
28 | 10b207d4 | Oleksiy Mishchenko | from ganeti import luxi |
29 | 10b207d4 | Oleksiy Mishchenko | |
30 | 38206f3c | Iustin Pop | from ganeti.rapi import baserlib |
31 | 10b207d4 | Oleksiy Mishchenko | |
32 | 51ee2f49 | Oleksiy Mishchenko | from ganeti.rapi.rlib1 import I_FIELDS, N_FIELDS |
33 | 51ee2f49 | Oleksiy Mishchenko | |
34 | 10b207d4 | Oleksiy Mishchenko | |
35 | 10b207d4 | Oleksiy Mishchenko | class R_2_jobs(baserlib.R_Generic): |
36 | 10b207d4 | Oleksiy Mishchenko | """/2/jobs resource.
|
37 | 10b207d4 | Oleksiy Mishchenko |
|
38 | 10b207d4 | Oleksiy Mishchenko | """
|
39 | 10b207d4 | Oleksiy Mishchenko | DOC_URI = "/2/jobs"
|
40 | 10b207d4 | Oleksiy Mishchenko | |
41 | 10b207d4 | Oleksiy Mishchenko | def GET(self): |
42 | 10b207d4 | Oleksiy Mishchenko | """Returns a dictionary of jobs.
|
43 | 10b207d4 | Oleksiy Mishchenko |
|
44 | 10b207d4 | Oleksiy Mishchenko | Returns:
|
45 | 10b207d4 | Oleksiy Mishchenko | A dictionary with jobs id and uri.
|
46 | 38206f3c | Iustin Pop |
|
47 | 10b207d4 | Oleksiy Mishchenko | """
|
48 | 10b207d4 | Oleksiy Mishchenko | fields = ["id"]
|
49 | 10b207d4 | Oleksiy Mishchenko | # Convert the list of lists to the list of ids
|
50 | 10b207d4 | Oleksiy Mishchenko | result = [job_id for [job_id] in luxi.Client().QueryJobs(None, fields)] |
51 | 10b207d4 | Oleksiy Mishchenko | return baserlib.BuildUriList(result, "/2/jobs/%s", uri_fields=("id", "uri")) |
52 | 10b207d4 | Oleksiy Mishchenko | |
53 | 10b207d4 | Oleksiy Mishchenko | |
54 | 10b207d4 | Oleksiy Mishchenko | class R_2_jobs_id(baserlib.R_Generic): |
55 | 10b207d4 | Oleksiy Mishchenko | """/2/jobs/[job_id] resource.
|
56 | 10b207d4 | Oleksiy Mishchenko |
|
57 | 10b207d4 | Oleksiy Mishchenko | """
|
58 | 10b207d4 | Oleksiy Mishchenko | DOC_URI = "/2/jobs/[job_id]"
|
59 | 10b207d4 | Oleksiy Mishchenko | |
60 | 10b207d4 | Oleksiy Mishchenko | def GET(self): |
61 | 10b207d4 | Oleksiy Mishchenko | """Returns a job status.
|
62 | 10b207d4 | Oleksiy Mishchenko |
|
63 | 38206f3c | Iustin Pop | Returns:
|
64 | 10b207d4 | Oleksiy Mishchenko | A dictionary with job parameters.
|
65 | 10b207d4 | Oleksiy Mishchenko |
|
66 | 10b207d4 | Oleksiy Mishchenko | The result includes:
|
67 | 10b207d4 | Oleksiy Mishchenko | id - job ID as a number
|
68 | 10b207d4 | Oleksiy Mishchenko | status - current job status as a string
|
69 | 38206f3c | Iustin Pop | ops - involved OpCodes as a list of dictionaries for each opcodes in
|
70 | 10b207d4 | Oleksiy Mishchenko | the job
|
71 | 10b207d4 | Oleksiy Mishchenko | opstatus - OpCodes status as a list
|
72 | 10b207d4 | Oleksiy Mishchenko | opresult - OpCodes results as a list of lists
|
73 | 38206f3c | Iustin Pop |
|
74 | 10b207d4 | Oleksiy Mishchenko | """
|
75 | 10b207d4 | Oleksiy Mishchenko | fields = ["id", "ops", "status", "opstatus", "opresult"] |
76 | 10b207d4 | Oleksiy Mishchenko | job_id = self.items[0] |
77 | 38206f3c | Iustin Pop | result = luxi.Client().QueryJobs([job_id, ], fields)[0]
|
78 | 10b207d4 | Oleksiy Mishchenko | return baserlib.MapFields(fields, result)
|
79 | 10b207d4 | Oleksiy Mishchenko | |
80 | 10b207d4 | Oleksiy Mishchenko | |
81 | 10b207d4 | Oleksiy Mishchenko | class R_2_nodes(baserlib.R_Generic): |
82 | 10b207d4 | Oleksiy Mishchenko | """/2/nodes resource.
|
83 | 10b207d4 | Oleksiy Mishchenko |
|
84 | 10b207d4 | Oleksiy Mishchenko | """
|
85 | 10b207d4 | Oleksiy Mishchenko | DOC_URI = "/2/nodes"
|
86 | 38206f3c | Iustin Pop | |
87 | 10b207d4 | Oleksiy Mishchenko | def GET(self): |
88 | 10b207d4 | Oleksiy Mishchenko | """Returns a list of all nodes.
|
89 | 38206f3c | Iustin Pop |
|
90 | 10b207d4 | Oleksiy Mishchenko | Returns:
|
91 | 10b207d4 | Oleksiy Mishchenko | A dictionary with 'name' and 'uri' keys for each of them.
|
92 | 10b207d4 | Oleksiy Mishchenko |
|
93 | 10b207d4 | Oleksiy Mishchenko | Example: [
|
94 | 10b207d4 | Oleksiy Mishchenko | {
|
95 | 10b207d4 | Oleksiy Mishchenko | "id": "node1.example.com",
|
96 | 10b207d4 | Oleksiy Mishchenko | "uri": "\/instances\/node1.example.com"
|
97 | 10b207d4 | Oleksiy Mishchenko | },
|
98 | 10b207d4 | Oleksiy Mishchenko | {
|
99 | 10b207d4 | Oleksiy Mishchenko | "id": "node2.example.com",
|
100 | 10b207d4 | Oleksiy Mishchenko | "uri": "\/instances\/node2.example.com"
|
101 | 10b207d4 | Oleksiy Mishchenko | }]
|
102 | 10b207d4 | Oleksiy Mishchenko |
|
103 | 38206f3c | Iustin Pop | If the optional 'bulk' argument is provided and set to 'true'
|
104 | 10b207d4 | Oleksiy Mishchenko | value (i.e '?bulk=1'), the output contains detailed
|
105 | 10b207d4 | Oleksiy Mishchenko | information about nodes as a list.
|
106 | 10b207d4 | Oleksiy Mishchenko |
|
107 | 10b207d4 | Oleksiy Mishchenko | Example: [
|
108 | 10b207d4 | Oleksiy Mishchenko | {
|
109 | 10b207d4 | Oleksiy Mishchenko | "pinst_cnt": 1,
|
110 | 10b207d4 | Oleksiy Mishchenko | "mfree": 31280,
|
111 | 10b207d4 | Oleksiy Mishchenko | "mtotal": 32763,
|
112 | 10b207d4 | Oleksiy Mishchenko | "name": "www.example.com",
|
113 | 10b207d4 | Oleksiy Mishchenko | "tags": [],
|
114 | 10b207d4 | Oleksiy Mishchenko | "mnode": 512,
|
115 | 10b207d4 | Oleksiy Mishchenko | "dtotal": 5246208,
|
116 | 10b207d4 | Oleksiy Mishchenko | "sinst_cnt": 2,
|
117 | 10b207d4 | Oleksiy Mishchenko | "dfree": 5171712
|
118 | 10b207d4 | Oleksiy Mishchenko | },
|
119 | 10b207d4 | Oleksiy Mishchenko | ...
|
120 | 10b207d4 | Oleksiy Mishchenko | ]
|
121 | 10b207d4 | Oleksiy Mishchenko |
|
122 | 10b207d4 | Oleksiy Mishchenko | """
|
123 | 10b207d4 | Oleksiy Mishchenko | op = ganeti.opcodes.OpQueryNodes(output_fields=["name"], names=[])
|
124 | 10b207d4 | Oleksiy Mishchenko | nodeslist = baserlib.ExtractField(ganeti.cli.SubmitOpCode(op), 0)
|
125 | 38206f3c | Iustin Pop | |
126 | 10b207d4 | Oleksiy Mishchenko | if 'bulk' in self.queryargs: |
127 | 51ee2f49 | Oleksiy Mishchenko | op = ganeti.opcodes.OpQueryNodes(output_fields=N_FIELDS, |
128 | 51ee2f49 | Oleksiy Mishchenko | names=nodeslist) |
129 | 51ee2f49 | Oleksiy Mishchenko | result = ganeti.cli.SubmitOpCode(op) |
130 | 51ee2f49 | Oleksiy Mishchenko | return baserlib.MapBulkFields(result, N_FIELDS)
|
131 | 10b207d4 | Oleksiy Mishchenko | |
132 | 38206f3c | Iustin Pop | return baserlib.BuildUriList(nodeslist, "/nodes/%s", |
133 | 38206f3c | Iustin Pop | uri_fields=("id", "uri")) |