Add --hotplug option. Only used in OpInstanceSetParams.
If this is omitted, modifications become effective after reboot.
Ask user confirmation in case NIC modify + hotplug because it will
be done via removing old NIC (and the corresponding tap) and adding
a new one in the same PCI slot.
Corresponding mods in haskell opcode definitions.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
"GLOBAL_FILEDIR_OPT",
"HID_OS_OPT",
"GLOBAL_SHARED_FILEDIR_OPT",
"GLOBAL_FILEDIR_OPT",
"HID_OS_OPT",
"GLOBAL_SHARED_FILEDIR_OPT",
"HVLIST_OPT",
"HVOPTS_OPT",
"HYPERVISOR_OPT",
"HVLIST_OPT",
"HVOPTS_OPT",
"HYPERVISOR_OPT",
default=False, action="store_true",
help="Include default values")
default=False, action="store_true",
help="Include default values")
+HOTPLUG_OPT = cli_option("--hotplug", dest="hotplug",
+ action="store_true", default=False,
+ help="Try to hotplug device")
+
#: Options provided by all commands
COMMON_OPTS = [DEBUG_OPT, REASON_OPT]
#: Options provided by all commands
COMMON_OPTS = [DEBUG_OPT, REASON_OPT]
allowed_values=[constants.VALUE_DEFAULT])
nics = _ConvertNicDiskModifications(opts.nics)
allowed_values=[constants.VALUE_DEFAULT])
nics = _ConvertNicDiskModifications(opts.nics)
+ for action, _, __ in nics:
+ if action == constants.DDM_MODIFY and opts.hotplug:
+ usertext = ("You are about to hot-modify a NIC. This will be done"
+ " by removing the exisiting and then adding a new one."
+ " Network connection might be lost. Continue?")
+ if not AskUser(usertext):
+ return 1
+
disks = _ParseDiskSizes(_ConvertNicDiskModifications(opts.disks))
if (opts.disk_template and
disks = _ParseDiskSizes(_ConvertNicDiskModifications(opts.disks))
if (opts.disk_template and
op = opcodes.OpInstanceSetParams(instance_name=args[0],
nics=nics,
disks=disks,
op = opcodes.OpInstanceSetParams(instance_name=args[0],
nics=nics,
disks=disks,
disk_template=opts.disk_template,
remote_node=opts.node,
pnode=opts.new_primary_node,
disk_template=opts.disk_template,
remote_node=opts.node,
pnode=opts.new_primary_node,
ToStdout("Modified instance %s", args[0])
for param, data in result:
ToStdout(" - %-5s -> %s", param, data)
ToStdout("Modified instance %s", args[0])
for param, data in result:
ToStdout(" - %-5s -> %s", param, data)
- ToStdout("Please don't forget that most parameters take effect"
- " only at the next (re)start of the instance initiated by"
- " ganeti; restarting from within the instance will"
- " not be enough.")
+ if not opts.hotplug:
+ ToStdout("Please don't forget that most parameters take effect"
+ " only at the next (re)start of the instance initiated by"
+ " ganeti; restarting from within the instance will"
+ " not be enough.")
DISK_TEMPLATE_OPT, SINGLE_NODE_OPT, OS_OPT, FORCE_VARIANT_OPT,
OSPARAMS_OPT, DRY_RUN_OPT, PRIORITY_OPT, NWSYNC_OPT, OFFLINE_INST_OPT,
ONLINE_INST_OPT, IGNORE_IPOLICY_OPT, RUNTIME_MEM_OPT,
DISK_TEMPLATE_OPT, SINGLE_NODE_OPT, OS_OPT, FORCE_VARIANT_OPT,
OSPARAMS_OPT, DRY_RUN_OPT, PRIORITY_OPT, NWSYNC_OPT, OFFLINE_INST_OPT,
ONLINE_INST_OPT, IGNORE_IPOLICY_OPT, RUNTIME_MEM_OPT,
- NOCONFLICTSCHECK_OPT, NEW_PRIMARY_OPT],
+ NOCONFLICTSCHECK_OPT, NEW_PRIMARY_OPT, HOTPLUG_OPT],
"<instance>", "Alters the parameters of an instance"),
"shutdown": (
GenericManyOps("shutdown", _ShutdownInstance), [ArgInstance()],
"<instance>", "Alters the parameters of an instance"),
"shutdown": (
GenericManyOps("shutdown", _ShutdownInstance), [ArgInstance()],
, pWaitForSync
, pOffline
, pIpConflictsCheck
, pWaitForSync
, pOffline
, pIpConflictsCheck
])
, ("OpInstanceGrowDisk",
[ pInstanceName
])
, ("OpInstanceGrowDisk",
[ pInstanceName
, pHvState
, pDiskState
, pIgnoreIpolicy
, pHvState
, pDiskState
, pIgnoreIpolicy
, pAllowRuntimeChgs
, pInstDisks
, pDiskTemplate
, pAllowRuntimeChgs
, pInstDisks
, pDiskTemplate
simpleField "diskparams" [t| GenericContainer DiskTemplate
UncheckedDict |]
simpleField "diskparams" [t| GenericContainer DiskTemplate
UncheckedDict |]
+-- | Whether to hotplug device.
+pHotplug :: Field
+pHotplug = defaultFalse "hotplug"
+
-- * Parameters for node resource model
-- | Set hypervisor states.
-- * Parameters for node resource model
-- | Set hypervisor states.
pure emptyJSObject <*> arbitrary <*> pure emptyJSObject <*>
arbitrary <*> genMaybe genNodeNameNE <*> genMaybe genNodeNameNE <*>
genMaybe genNameNE <*> pure emptyJSObject <*> arbitrary <*>
pure emptyJSObject <*> arbitrary <*> pure emptyJSObject <*>
arbitrary <*> genMaybe genNodeNameNE <*> genMaybe genNodeNameNE <*>
genMaybe genNameNE <*> pure emptyJSObject <*> arbitrary <*>
- arbitrary <*> arbitrary
+ arbitrary <*> arbitrary <*> arbitrary
"OP_INSTANCE_GROW_DISK" ->
OpCodes.OpInstanceGrowDisk <$> genFQDN <*> arbitrary <*>
arbitrary <*> arbitrary <*> arbitrary
"OP_INSTANCE_GROW_DISK" ->
OpCodes.OpInstanceGrowDisk <$> genFQDN <*> arbitrary <*>
arbitrary <*> arbitrary <*> arbitrary