Revision 0dbc732c lib/rapi/rlib2.py
b/lib/rapi/rlib2.py | ||
---|---|---|
922 | 922 |
return self.SubmitJob(ops) |
923 | 923 |
|
924 | 924 |
|
925 |
def _ParseInstanceReplaceDisksRequest(name, data): |
|
926 |
"""Parses a request for an instance export. |
|
927 |
|
|
928 |
@rtype: L{opcodes.OpInstanceReplaceDisks} |
|
929 |
@return: Instance export opcode |
|
930 |
|
|
931 |
""" |
|
932 |
override = { |
|
933 |
"instance_name": name, |
|
934 |
} |
|
935 |
|
|
936 |
# Parse disks |
|
937 |
try: |
|
938 |
raw_disks = data["disks"] |
|
939 |
except KeyError: |
|
940 |
pass |
|
941 |
else: |
|
942 |
if not ht.TListOf(ht.TInt)(raw_disks): # pylint: disable-msg=E1102 |
|
943 |
# Backwards compatibility for strings of the format "1, 2, 3" |
|
944 |
try: |
|
945 |
data["disks"] = [int(part) for part in raw_disks.split(",")] |
|
946 |
except (TypeError, ValueError), err: |
|
947 |
raise http.HttpBadRequest("Invalid disk index passed: %s" % str(err)) |
|
948 |
|
|
949 |
return baserlib.FillOpcode(opcodes.OpInstanceReplaceDisks, data, override) |
|
950 |
|
|
951 |
|
|
952 |
class R_2_instances_name_replace_disks(baserlib.ResourceBase): |
|
925 |
class R_2_instances_name_replace_disks(baserlib.OpcodeResource): |
|
953 | 926 |
"""/2/instances/[instance_name]/replace-disks resource. |
954 | 927 |
|
955 | 928 |
""" |
956 |
def POST(self): |
|
929 |
POST_OPCODE = opcodes.OpInstanceReplaceDisks |
|
930 |
|
|
931 |
def GetPostOpInput(self): |
|
957 | 932 |
"""Replaces disks on an instance. |
958 | 933 |
|
959 | 934 |
""" |
960 |
op = _ParseInstanceReplaceDisksRequest(self.items[0], self.request_body) |
|
935 |
data = self.request_body.copy() |
|
936 |
static = { |
|
937 |
"instance_name": self.items[0], |
|
938 |
} |
|
961 | 939 |
|
962 |
return self.SubmitJob([op]) |
|
940 |
# Parse disks |
|
941 |
try: |
|
942 |
raw_disks = data["disks"] |
|
943 |
except KeyError: |
|
944 |
pass |
|
945 |
else: |
|
946 |
if not ht.TListOf(ht.TInt)(raw_disks): # pylint: disable-msg=E1102 |
|
947 |
# Backwards compatibility for strings of the format "1, 2, 3" |
|
948 |
try: |
|
949 |
data["disks"] = [int(part) for part in raw_disks.split(",")] |
|
950 |
except (TypeError, ValueError), err: |
|
951 |
raise http.HttpBadRequest("Invalid disk index passed: %s" % err) |
|
952 |
|
|
953 |
return (data, static) |
|
963 | 954 |
|
964 | 955 |
|
965 | 956 |
class R_2_instances_name_activate_disks(baserlib.ResourceBase): |
Also available in: Unified diff