39 |
39 |
from ganeti import constants
|
40 |
40 |
from ganeti import errors
|
41 |
41 |
from ganeti import ht
|
|
42 |
from ganeti import objects
|
|
43 |
from ganeti import query
|
42 |
44 |
|
43 |
45 |
|
44 |
46 |
# Common opcode attributes
|
... | ... | |
198 |
200 |
ht.TItems([ht.TElemOf(constants.RS_ALL),
|
199 |
201 |
ht.TAny])))
|
200 |
202 |
|
|
203 |
_TQueryResult = ht.TListOf(_TQueryRow)
|
|
204 |
|
|
205 |
_TOldQueryRow = ht.TListOf(ht.TAny)
|
|
206 |
|
|
207 |
_TOldQueryResult = ht.TListOf(_TOldQueryRow)
|
|
208 |
|
|
209 |
|
201 |
210 |
_SUMMARY_PREFIX = {
|
202 |
211 |
"CLUSTER_": "C_",
|
203 |
212 |
"GROUP_": "G_",
|
... | ... | |
233 |
242 |
return "_".join(n.upper() for n in elems)
|
234 |
243 |
|
235 |
244 |
|
|
245 |
def _GenerateObjectTypeCheck(obj, fields_types):
|
|
246 |
"""Helper to generate type checks for objects.
|
|
247 |
|
|
248 |
@param obj: The object to generate type checks
|
|
249 |
@param fields_types: The fields and their types as a dict
|
|
250 |
@return: A ht type check function
|
|
251 |
|
|
252 |
"""
|
|
253 |
assert set(obj.GetAllSlots()) == set(fields_types.keys()), \
|
|
254 |
"%s != %s" % (set(obj.GetAllSlots()), set(fields_types.keys()))
|
|
255 |
return ht.TStrictDict(True, True, fields_types)
|
|
256 |
|
|
257 |
|
|
258 |
_TObjFdefs = \
|
|
259 |
_GenerateObjectTypeCheck(objects.QueryFieldDefinition, {
|
|
260 |
"name": ht.TRegex(query.FIELD_NAME_RE),
|
|
261 |
"title": ht.TRegex(query.TITLE_RE),
|
|
262 |
"kind": ht.TElemOf(constants.QFT_ALL),
|
|
263 |
"doc": ht.TRegex(query.DOC_RE),
|
|
264 |
})
|
|
265 |
|
|
266 |
|
236 |
267 |
def RequireFileStorage():
|
237 |
268 |
"""Checks that file storage is enabled.
|
238 |
269 |
|
... | ... | |
642 |
673 |
|
643 |
674 |
class OpClusterQuery(OpCode):
|
644 |
675 |
"""Query cluster information."""
|
|
676 |
OP_RESULT = ht.TDictOf(ht.TNonEmptyString, ht.TAny)
|
645 |
677 |
|
646 |
678 |
|
647 |
679 |
class OpClusterVerify(OpCode):
|
... | ... | |
887 |
919 |
("qfilter", None, ht.TOr(ht.TNone, ht.TListOf),
|
888 |
920 |
"Query filter"),
|
889 |
921 |
]
|
|
922 |
OP_RESULT = \
|
|
923 |
_GenerateObjectTypeCheck(objects.QueryResponse, {
|
|
924 |
"fields": ht.TListOf(_TObjFdefs),
|
|
925 |
"data": _TQueryResult,
|
|
926 |
})
|
890 |
927 |
|
891 |
928 |
|
892 |
929 |
class OpQueryFields(OpCode):
|
... | ... | |
902 |
939 |
("fields", None, ht.TMaybeListOf(ht.TNonEmptyString),
|
903 |
940 |
"Requested fields; if not given, all are returned"),
|
904 |
941 |
]
|
|
942 |
OP_RESULT = \
|
|
943 |
_GenerateObjectTypeCheck(objects.QueryFieldsResponse, {
|
|
944 |
"fields": ht.TListOf(_TObjFdefs),
|
|
945 |
})
|
905 |
946 |
|
906 |
947 |
|
907 |
948 |
class OpOobCommand(OpCode):
|
... | ... | |
919 |
960 |
"Time in seconds to wait between powering on nodes"),
|
920 |
961 |
]
|
921 |
962 |
# Fixme: Make it more specific with all the special cases in LUOobCommand
|
922 |
|
OP_RESULT = ht.TListOf(_TQueryRow)
|
|
963 |
OP_RESULT = _TQueryResult
|
923 |
964 |
|
924 |
965 |
|
925 |
966 |
# node opcodes
|
... | ... | |
993 |
1034 |
("names", ht.EmptyList, ht.TListOf(ht.TNonEmptyString),
|
994 |
1035 |
"Empty list to query all nodes, node names otherwise"),
|
995 |
1036 |
]
|
|
1037 |
OP_RESULT = _TOldQueryResult
|
996 |
1038 |
|
997 |
1039 |
|
998 |
1040 |
class OpNodeQueryvols(OpCode):
|
... | ... | |
1013 |
1055 |
("nodes", ht.EmptyList, ht.TListOf(ht.TNonEmptyString), "List of nodes"),
|
1014 |
1056 |
("name", None, ht.TMaybeString, "Storage name"),
|
1015 |
1057 |
]
|
|
1058 |
OP_RESULT = _TOldQueryResult
|
1016 |
1059 |
|
1017 |
1060 |
|
1018 |
1061 |
class OpNodeModifyStorage(OpCode):
|
... | ... | |
1402 |
1445 |
("names", ht.EmptyList, ht.TListOf(ht.TNonEmptyString),
|
1403 |
1446 |
"Empty list to query all instances, instance names otherwise"),
|
1404 |
1447 |
]
|
|
1448 |
OP_RESULT = _TOldQueryResult
|
1405 |
1449 |
|
1406 |
1450 |
|
1407 |
1451 |
class OpInstanceQueryData(OpCode):
|
... | ... | |
1414 |
1458 |
"Whether to only return configuration data without querying"
|
1415 |
1459 |
" nodes"),
|
1416 |
1460 |
]
|
|
1461 |
OP_RESULT = ht.TDictOf(ht.TNonEmptyString, ht.TDict)
|
1417 |
1462 |
|
1418 |
1463 |
|
1419 |
1464 |
def _TestInstSetParamsModList(fn):
|
... | ... | |
1546 |
1591 |
("names", ht.EmptyList, ht.TListOf(ht.TNonEmptyString),
|
1547 |
1592 |
"Empty list to query all groups, group names otherwise"),
|
1548 |
1593 |
]
|
|
1594 |
OP_RESULT = _TOldQueryResult
|
1549 |
1595 |
|
1550 |
1596 |
|
1551 |
1597 |
class OpGroupSetParams(OpCode):
|
... | ... | |
1602 |
1648 |
("names", ht.EmptyList, ht.TListOf(ht.TNonEmptyString),
|
1603 |
1649 |
"Which operating systems to diagnose"),
|
1604 |
1650 |
]
|
|
1651 |
OP_RESULT = _TOldQueryResult
|
1605 |
1652 |
|
1606 |
1653 |
|
1607 |
1654 |
# Exports opcodes
|