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