Revision d77490c5 scripts/gnt-backup

b/scripts/gnt-backup
99 99
def ImportInstance(opts, args):
100 100
  """Add an instance to the cluster.
101 101

  
102
  @param opts: the command line options selected by the user
103
  @type args: list
104
  @param args: should contain only one element, the new instance name
105
  @rtype: int
106
  @return: the desired exit code
102
  This is just a wrapper over GenericInstanceCreate.
107 103

  
108 104
  """
109
  instance = args[0]
110

  
111
  (pnode, snode) = SplitNodeOption(opts.node)
112

  
113
  hypervisor = None
114
  hvparams = {}
115
  if opts.hypervisor:
116
    hypervisor, hvparams = opts.hypervisor
117

  
118
  if opts.nics:
119
    try:
120
      nic_max = max(int(nidx[0])+1 for nidx in opts.nics)
121
    except ValueError, err:
122
      raise errors.OpPrereqError("Invalid NIC index passed: %s" % str(err))
123
    nics = [{}] * nic_max
124
    for nidx, ndict in opts.nics:
125
      nidx = int(nidx)
126
      if not isinstance(ndict, dict):
127
        msg = "Invalid nic/%d value: expected dict, got %s" % (nidx, ndict)
128
        raise errors.OpPrereqError(msg)
129
      nics[nidx] = ndict
130
  elif opts.no_nics:
131
    # no nics
132
    nics = []
133
  else:
134
    # default of one nic, all auto
135
    nics = [{}]
136

  
137
  if opts.disk_template == constants.DT_DISKLESS:
138
    if opts.disks or opts.sd_size is not None:
139
      raise errors.OpPrereqError("Diskless instance but disk"
140
                                 " information passed")
141
    disks = []
142
  else:
143
    if not opts.disks and not opts.sd_size:
144
      raise errors.OpPrereqError("No disk information specified")
145
    if opts.disks and opts.sd_size is not None:
146
      raise errors.OpPrereqError("Please use either the '--disk' or"
147
                                 " '-s' option")
148
    if opts.sd_size is not None:
149
      opts.disks = [(0, {"size": opts.sd_size})]
150
    try:
151
      disk_max = max(int(didx[0])+1 for didx in opts.disks)
152
    except ValueError, err:
153
      raise errors.OpPrereqError("Invalid disk index passed: %s" % str(err))
154
    disks = [{}] * disk_max
155
    for didx, ddict in opts.disks:
156
      didx = int(didx)
157
      if not isinstance(ddict, dict):
158
        msg = "Invalid disk/%d value: expected dict, got %s" % (didx, ddict)
159
        raise errors.OpPrereqError(msg)
160
      elif "size" not in ddict:
161
        raise errors.OpPrereqError("Missing size for disk %d" % didx)
162
      try:
163
        ddict["size"] = utils.ParseUnit(ddict["size"])
164
      except ValueError, err:
165
        raise errors.OpPrereqError("Invalid disk size for disk %d: %s" %
166
                                   (didx, err))
167
      disks[didx] = ddict
168

  
169
  utils.ForceDictType(opts.beparams, constants.BES_PARAMETER_TYPES)
170
  utils.ForceDictType(hvparams, constants.HVS_PARAMETER_TYPES)
171

  
172
  op = opcodes.OpCreateInstance(instance_name=instance,
173
                                disk_template=opts.disk_template,
174
                                disks=disks,
175
                                nics=nics,
176
                                mode=constants.INSTANCE_IMPORT,
177
                                pnode=pnode, snode=snode,
178
                                ip_check=opts.ip_check,
179
                                start=False,
180
                                src_node=opts.src_node, src_path=opts.src_dir,
181
                                wait_for_sync=opts.wait_for_sync,
182
                                file_storage_dir=opts.file_storage_dir,
183
                                file_driver=opts.file_driver,
184
                                iallocator=opts.iallocator,
185
                                hypervisor=hypervisor,
186
                                hvparams=hvparams,
187
                                beparams=opts.beparams)
188

  
189
  SubmitOpCode(op)
190
  return 0
105
  return GenericInstanceCreate(constants.INSTANCE_IMPORT, opts, args)
191 106

  
192 107

  
193 108
def RemoveExport(opts, args):
......
225 140
  FILESTORE_DIR_OPT,
226 141
  FILESTORE_DRIVER_OPT,
227 142
  HYPERVISOR_OPT,
143
  SUBMIT_OPT,
228 144
  ]
229 145

  
230 146
commands = {

Also available in: Unified diff