, DiskAccess(..)
, INicParams(..)
, IDiskParams(..)
+ , ISnapParams(..)
, RecreateDisksInfo(..)
, DdmOldChanges(..)
, SetParamsMods(..)
+ , SetSnapParams(..)
, ExportTarget(..)
, pInstanceName
, pInstances
, pHvState
, pDiskState
, pIgnoreIpolicy
+ , pHotplug
+ , pHotplugIfPossible
+ , pKeepDisks
, pAllowRuntimeChgs
, pInstDisks
+ , pInstSnaps
, pDiskTemplate
, pOptDiskTemplate
, pFileDriver
, pAddUids
, pRemoveUids
, pMaintainNodeHealth
+ , pModifyEtcHosts
, pPreallocWipeDisks
, pNicParams
, pInstNics
, pDependencies
, pComment
, pReason
- , pEnabledStorageTypes
+ , pEnabledDiskTemplates
, dOldQuery
, dOldQueryNoLocking
) where
, optionalField $ simpleField C.inicIp [t| String |]
, optionalField $ simpleField C.inicMode [t| NonEmptyString |]
, optionalField $ simpleField C.inicLink [t| NonEmptyString |]
+ , optionalField $ simpleField C.inicName [t| NonEmptyString |]
])
-- | Disk modification definition. FIXME: disksize should be VTYPE_UNIT.
, optionalField $ simpleField C.idiskAdopt [t| NonEmptyString |]
, optionalField $ simpleField C.idiskVg [t| NonEmptyString |]
, optionalField $ simpleField C.idiskMetavg [t| NonEmptyString |]
+ , optionalField $ simpleField C.idiskName [t| NonEmptyString |]
])
+-- | Disk snapshot definition.
+$(buildObject "ISnapParams" "idisk"
+ [ simpleField C.idiskSnapshotName [t| NonEmptyString |]])
+
-- | Disk changes type for OpInstanceRecreateDisks. This is a bit
-- strange, because the type in Python is something like Either
-- [DiskIndex] [DiskChanges], but we can't represent the type of an
showJSON (SetParamsNew v) = showJSON v
readJSON = readSetParams
+-- | Instance snapshot params
+data SetSnapParams a
+ = SetSnapParamsEmpty
+ | SetSnapParamsValid (NonEmpty (Int, a))
+ deriving (Eq, Show)
+
+readSetSnapParams :: (JSON a) => JSValue -> Text.JSON.Result (SetSnapParams a)
+readSetSnapParams (JSArray []) = return SetSnapParamsEmpty
+readSetSnapParams v =
+ case readJSON v::Text.JSON.Result [(Int, JSValue)] of
+ Text.JSON.Ok _ -> liftM SetSnapParamsValid $ readJSON v
+ _ -> fail "Cannot parse snapshot params."
+
+instance (JSON a) => JSON (SetSnapParams a) where
+ showJSON SetSnapParamsEmpty = showJSON ()
+ showJSON (SetSnapParamsValid v) = showJSON v
+ readJSON = readSetSnapParams
+
-- | Custom type for target_node parameter of OpBackupExport, which
-- varies depending on mode. FIXME: this uses an UncheckedList since
-- we don't care about individual rows (just like the Python code
simpleField "diskparams" [t| GenericContainer DiskTemplate
UncheckedDict |]
+-- | Whether to hotplug device.
+pHotplug :: Field
+pHotplug = defaultFalse "hotplug"
+
+pHotplugIfPossible :: Field
+pHotplugIfPossible = defaultFalse "hotplug_if_possible"
+
+-- | Whether to remove disks.
+pKeepDisks :: Field
+pKeepDisks = defaultFalse "keep_disks"
+
-- * Parameters for node resource model
-- | Set hypervisor states.
pInstDisks :: Field
pInstDisks = renameField "instDisks" $ simpleField "disks" [t| [IDiskParams] |]
+-- | List of instance snaps.
+pInstSnaps :: Field
+pInstSnaps =
+ renameField "instSnaps" $
+ simpleField "disks" [t| SetSnapParams ISnapParams |]
+
-- | Instance disk template.
pDiskTemplate :: Field
pDiskTemplate = simpleField "disk_template" [t| DiskTemplate |]
optionalField $
simpleField "enabled_hypervisors" [t| NonEmpty Hypervisor |]
--- | List of enabled storage methods.
-pEnabledStorageTypes :: Field
-pEnabledStorageTypes =
+-- | List of enabled disk templates.
+pEnabledDiskTemplates :: Field
+pEnabledDiskTemplates =
optionalField $
- simpleField "enabled_storage_types" [t| NonEmpty StorageType |]
+ simpleField "enabled_disk_templates" [t| NonEmpty DiskTemplate |]
-- | Selected hypervisor for an instance.
pHypervisor :: Field
pMaintainNodeHealth :: Field
pMaintainNodeHealth = optionalField $ booleanField "maintain_node_health"
+-- | Whether to modify and keep in sync the @/etc/hosts@ files of nodes.
+pModifyEtcHosts :: Field
+pModifyEtcHosts = optionalField $ booleanField "modify_etc_hosts"
+
-- | Whether to wipe disks before allocating them to instances.
pPreallocWipeDisks :: Field
pPreallocWipeDisks = optionalField $ booleanField "prealloc_wipe_disks"
pComment :: Field
pComment = optionalNullSerField $ stringField "comment"
--- | The description of the state change reason.
+-- | Reason trail field.
pReason :: Field
-pReason = simpleField "reason" [t| (InstReasonSrc, NonEmptyString) |]
+pReason = simpleField C.opcodeReason [t| ReasonTrail |]
-- * Entire opcode parameter list