Revision da0aa302

b/lib/client/gnt_instance.py
395 395
    op = opcodes.OpInstanceReinstall(instance_name=instance_name,
396 396
                                     os_type=os_name,
397 397
                                     force_variant=opts.force_variant,
398
                                     osparams=opts.osparams)
398
                                     osparams=opts.osparams,
399
                                     osparams_private=opts.osparams_private,
400
                                     osparams_secret=opts.osparams_secret)
399 401
    jex.QueueJob(instance_name, op)
400 402

  
401 403
  results = jex.WaitOrShow(not opts.submit_only)
b/lib/cmdlib/instance_operation.py
292 292
                                 errors.ECODE_INVAL)
293 293
    CheckInstanceState(self, instance, INSTANCE_DOWN, msg="cannot reinstall")
294 294

  
295
    # Handle OS parameters
296
    self._MergeValidateOsParams(instance)
297

  
298
    self.instance = instance
299

  
300
  def _MergeValidateOsParams(self, instance):
301
    "Handle the OS parameter merging and validation for the target instance."
302

  
295 303
    if self.op.os_type is not None:
296 304
      # OS verification
297 305
      CheckNodeHasOS(self, instance.primary_node, self.op.os_type,
......
302 310

  
303 311
    node_uuids = list(instance.all_nodes)
304 312

  
305
    if self.op.osparams:
306
      i_osdict = GetUpdatedParams(instance.osparams, self.op.osparams)
307
      CheckOSParams(self, True, node_uuids, instance_os, i_osdict)
308
      self.os_inst = i_osdict # the new dict (without defaults)
309
    else:
310
      self.os_inst = None
313
    self.op.osparams = self.op.osparams or {}
314
    self.op.osparams_private = self.op.osparams_private or {}
315
    self.op.osparams_secret = self.op.osparams_secret or {}
311 316

  
312
    self.instance = instance
317
    # Handle the use of 'default' values.
318
    params_public = GetUpdatedParams(instance.osparams, self.op.osparams)
319
    params_private = GetUpdatedParams(instance.osparams_private,
320
                                        self.op.osparams_private)
321
    params_secret = self.op.osparams_secret
322

  
323
    cluster = self.cfg.GetClusterInfo()
324
    self.os_inst = cluster.SimpleFillOS(
325
      instance_os,
326
      params_public,
327
      os_params_private=params_private,
328
      os_params_secret=params_secret
329
    )
330

  
331
    CheckOSParams(self, True, node_uuids, instance_os, self.os_inst)
313 332

  
314 333
  def Exec(self, feedback_fn):
315 334
    """Reinstall the instance.
b/man/gnt-instance.rst
1297 1297
| **reinstall** [{-o|\--os-type} *os-type*] [\--select-os] [-f *force*]
1298 1298
| [\--force-multiple]
1299 1299
| [\--instance \| \--node \| \--primary \| \--secondary \| \--all]
1300
| [{-O|\--os-parameters} *OS\_PARAMETERS*] [\--submit] [\--print-job-id]
1300
| [{-O|\--os-parameters} *OS\_PARAMETERS*]
1301
| [--os-parameters-private} *OS\_PARAMETERS*]
1302
| [--os-parameters-secret} *OS\_PARAMETERS*]
1303
| [\--submit] [\--print-job-id]
1301 1304
| {*instance*...}
1302 1305

  
1303 1306
Reinstalls the operating system on the given instance(s). The
b/src/Ganeti/OpCodes.hs
474 474
     , pForceVariant
475 475
     , pInstOs
476 476
     , pTempOsParams
477
     , pTempOsParamsPrivate
478
     , pTempOsParamsSecret
477 479
     ],
478 480
     "instance_name")
479 481
  , ("OpInstanceRemove",
b/src/Ganeti/OpParams.hs
190 190
  , pInstTags
191 191
  , pMultiAllocInstances
192 192
  , pTempOsParams
193
  , pTempOsParamsPrivate
194
  , pTempOsParamsSecret
193 195
  , pTempHvParams
194 196
  , pTempBeParams
195 197
  , pIgnoreFailures
......
1210 1212
  renameField "TempOsParams" .
1211 1213
  optionalField $ simpleField "osparams" [t| JSObject JSValue |]
1212 1214

  
1215
pTempOsParamsPrivate :: Field
1216
pTempOsParamsPrivate =
1217
  withDoc "Private OS parameters for instance reinstalls" .
1218
  optionalField $
1219
  simpleField "osparams_private" [t| JSObject (Private JSValue) |]
1220

  
1221
pTempOsParamsSecret :: Field
1222
pTempOsParamsSecret =
1223
  withDoc "Secret OS parameters for instance reinstalls" .
1224
  optionalField $
1225
  simpleField "osparams_secret" [t| JSObject (Private JSValue) |]
1226

  
1213 1227
pShutdownTimeout :: Field
1214 1228
pShutdownTimeout =
1215 1229
  withDoc "How long to wait for instance to shut down" .
b/test/hs/Test/Ganeti/OpCodes.hs
301 301
      "OP_INSTANCE_REINSTALL" ->
302 302
        OpCodes.OpInstanceReinstall <$> genFQDN <*> return Nothing <*>
303 303
          arbitrary <*> genMaybe genNameNE <*> genMaybe (pure emptyJSObject)
304
          <*> genMaybe arbitraryPrivateJSObj <*> genMaybe arbitraryPrivateJSObj
304 305
      "OP_INSTANCE_REMOVE" ->
305 306
        OpCodes.OpInstanceRemove <$> genFQDN <*> return Nothing <*>
306 307
          arbitrary <*> arbitrary

Also available in: Unified diff