diff --git a/lib/rpc.py b/lib/rpc.py index 82405103559ae165a7652d042a1da3b3d7229dc7..11459d2ff949abc5b35eadfbf79cf33d8c318146 100644 --- a/lib/rpc.py +++ b/lib/rpc.py @@ -664,6 +664,10 @@ class RpcRunner(_RpcClientBase, rpc_defs.ED_INST_DICT_HVP_BEP: self._InstDictHvpBep, rpc_defs.ED_INST_DICT_OSP: self._InstDictOsp, + # Encoders annotating disk parameters + rpc_defs.ED_DISKS_DICT_DP: self._DisksDictDP, + rpc_defs.ED_SINGLE_DISK_DICT_DP: self._SingleDiskDictDP, + # Encoders with special requirements rpc_defs.ED_FILE_DETAILS: compat.partial(_PrepareFileUpload, _getents), }) @@ -732,6 +736,22 @@ class RpcRunner(_RpcClientBase, """ return self._InstDict(instance, osp=osparams) + def _DisksDictDP(self, (disks, instance)): + """Wrapper for L{AnnotateDiskParams}. + + """ + diskparams = self._cfg.GetInstanceDiskParams(instance) + return [disk.ToDict() + for disk in AnnotateDiskParams(instance.disk_template, + disks, diskparams)] + + def _SingleDiskDictDP(self, (disk, instance)): + """Wrapper for L{AnnotateDiskParams}. + + """ + (anno_disk,) = self._DisksDictDP(([disk], instance)) + return anno_disk + class JobQueueRunner(_RpcClientBase, _generated_rpc.RpcClientJobQueue): """RPC wrappers for job queue. diff --git a/lib/rpc_defs.py b/lib/rpc_defs.py index 669f79129dd53b63d2d6a9ebda5a809759dec7e5..60417743c950961b68783334ab4d2eb33f610127 100644 --- a/lib/rpc_defs.py +++ b/lib/rpc_defs.py @@ -71,7 +71,9 @@ ACCEPT_OFFLINE_NODE = object() ED_FILE_DETAILS, ED_FINALIZE_EXPORT_DISKS, ED_COMPRESS, - ED_BLOCKDEV_RENAME) = range(1, 12) + ED_BLOCKDEV_RENAME, + ED_DISKS_DICT_DP, + ED_SINGLE_DISK_DICT_DP) = range(1, 14) def _Prepare(calls):