LGTM. Thanks, Jose
On Apr 16 15:19, Ilias Tsitsimpis wrote: > Instance's 'disks' slot will contain a list of disk UUIDs. Create a new > slot named 'disks_info' which will be annotated with the disk objects' > during the RPC. > > Signed-off-by: Ilias Tsitsimpis <[email protected]> > --- > lib/backend.py | 14 +++++++------- > lib/objects.py | 4 +++- > lib/rpc/node.py | 2 +- > test/py/ganeti.rpc_unittest.py | 10 +++++----- > 4 files changed, 16 insertions(+), 14 deletions(-) > > diff --git a/lib/backend.py b/lib/backend.py > index f277732..aab5160 100644 > --- a/lib/backend.py > +++ b/lib/backend.py > @@ -1519,7 +1519,7 @@ def GetInstanceMigratable(instance): > if iname not in hyper.ListInstances(instance.hvparams): > _Fail("Instance %s is not running", iname) > > - for idx in range(len(instance.disks)): > + for idx in range(len(instance.disks_info)): > link_name = _GetBlockDevSymlinkPath(iname, idx) > if not os.path.islink(link_name): > logging.warning("Instance %s is missing symlink %s for disk %d", > @@ -1805,7 +1805,7 @@ def _GatherAndLinkBlockDevs(instance): > > """ > block_devices = [] > - for idx, disk in enumerate(instance.disks): > + for idx, disk in enumerate(instance.disks_info): > device = _RecursiveFindBD(disk) > if device is None: > raise errors.BlockDeviceError("Block device '%s' is not set up." % > @@ -1853,7 +1853,7 @@ def StartInstance(instance, startup_paused, reason, > store_reason=True): > except errors.BlockDeviceError, err: > _Fail("Block device error: %s", err, exc=True) > except errors.HypervisorError, err: > - _RemoveBlockDevLinks(instance.name, instance.disks) > + _RemoveBlockDevLinks(instance.name, instance.disks_info) > _Fail("Hypervisor error: %s", err, exc=True) > > > @@ -1929,7 +1929,7 @@ def InstanceShutdown(instance, timeout, reason, > store_reason=True): > except errors.HypervisorError, err: > logging.warning("Failed to execute post-shutdown cleanup step: %s", err) > > - _RemoveBlockDevLinks(iname, instance.disks) > + _RemoveBlockDevLinks(iname, instance.disks_info) > > > def InstanceReboot(instance, reboot_type, shutdown_timeout, reason): > @@ -2040,7 +2040,7 @@ def AcceptInstance(instance, info, target): > hyper.AcceptInstance(instance, info, target) > except errors.HypervisorError, err: > if instance.disk_template in constants.DTS_EXT_MIRROR: > - _RemoveBlockDevLinks(instance.name, instance.disks) > + _RemoveBlockDevLinks(instance.name, instance.disks_info) > _Fail("Failed to accept instance: %s", err, exc=True) > > > @@ -3178,13 +3178,13 @@ def OSEnvironment(instance, inst_os, debug=0): > result["INSTANCE_%s" % attr.upper()] = str(getattr(instance, attr)) > > result["HYPERVISOR"] = instance.hypervisor > - result["DISK_COUNT"] = "%d" % len(instance.disks) > + result["DISK_COUNT"] = "%d" % len(instance.disks_info) > result["NIC_COUNT"] = "%d" % len(instance.nics) > result["INSTANCE_SECONDARY_NODES"] = \ > ("%s" % " ".join(instance.secondary_nodes)) > > # Disks > - for idx, disk in enumerate(instance.disks): > + for idx, disk in enumerate(instance.disks_info): > real_disk = _OpenRealBD(disk) > result["DISK_%d_PATH" % idx] = real_disk.dev_path > result["DISK_%d_ACCESS" % idx] = disk.mode > diff --git a/lib/objects.py b/lib/objects.py > index 21890f4..0265bcd 100644 > --- a/lib/objects.py > +++ b/lib/objects.py > @@ -1152,6 +1152,7 @@ class Instance(TaggableObject): > "admin_state", > "nics", > "disks", > + "disks_info", > "disk_template", > "disks_active", > "network_port", > @@ -1193,7 +1194,7 @@ class Instance(TaggableObject): > if _with_private: > bo["osparams_private"] = self.osparams_private.Unprivate() > > - for attr in "nics", "disks": > + for attr in "nics", "disks", "disks_info": > alist = bo.get(attr, None) > if alist: > nlist = outils.ContainerToDicts(alist) > @@ -1217,6 +1218,7 @@ class Instance(TaggableObject): > obj = super(Instance, cls).FromDict(val) > obj.nics = outils.ContainerFromDicts(obj.nics, list, NIC) > obj.disks = outils.ContainerFromDicts(obj.disks, list, Disk) > + obj.disks_info = outils.ContainerFromDicts(obj.disks_info, list, Disk) > return obj > > def UpgradeConfig(self): > diff --git a/lib/rpc/node.py b/lib/rpc/node.py > index 7e8425c..19fc018 100644 > --- a/lib/rpc/node.py > +++ b/lib/rpc/node.py > @@ -887,7 +887,7 @@ class RpcRunner(_RpcClientBase, > idict["osparams"] = cluster.SimpleFillOS(instance.os, instance.osparams) > if osp is not None: > idict["osparams"].update(osp) > - idict["disks"] = self._DisksDictDP(node, (instance.disks, instance)) > + idict["disks_info"] = self._DisksDictDP(node, (instance.disks, instance)) > for nic in idict["nics"]: > nic["nicparams"] = objects.FillDict( > cluster.nicparams[constants.PP_DEFAULT], > diff --git a/test/py/ganeti.rpc_unittest.py b/test/py/ganeti.rpc_unittest.py > index 1fc61e2..82cf05c 100755 > --- a/test/py/ganeti.rpc_unittest.py > +++ b/test/py/ganeti.rpc_unittest.py > @@ -887,11 +887,11 @@ class TestRpcRunner(unittest.TestCase): > self.assertEqual(result["hvparams"][constants.HT_KVM], { > constants.HV_BOOT_ORDER: "xyz", > }) > - del result["disks"][0]["ctime"] > - del result["disks"][0]["mtime"] > - del result["disks"][1]["ctime"] > - del result["disks"][1]["mtime"] > - self.assertEqual(result["disks"], [{ > + del result["disks_info"][0]["ctime"] > + del result["disks_info"][0]["mtime"] > + del result["disks_info"][1]["ctime"] > + del result["disks_info"][1]["mtime"] > + self.assertEqual(result["disks_info"], [{ > "dev_type": constants.DT_PLAIN, > "dynamic_params": {}, > "size": 4096, > -- > 1.9.1 > -- Jose Antonio Lopes Ganeti Engineering Google Germany GmbH Dienerstr. 12, 80331, München Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg Geschäftsführer: Graham Law, Christine Elizabeth Flores Steuernummer: 48/725/00206 Umsatzsteueridentifikationsnummer: DE813741370
