Pep8 was complaining about indentation, some I'm applying this interdiff:

diff --git a/lib/cmdlib/cluster.py b/lib/cmdlib/cluster.py
index 63f2a6f..c43f4bb 100644
--- a/lib/cmdlib/cluster.py
+++ b/lib/cmdlib/cluster.py
@@ -947,7 +947,7 @@ class LUClusterSetParams(LogicalUnit):
         instances = frozenset(
           [inst for inst in all_instances
            if compat.any(nuuid in group.members
-             for nuuid in self.cfg.GetInstanceNodes(inst.uuid))])
+           for nuuid in self.cfg.GetInstanceNodes(inst.uuid))])
         new_ipolicy = objects.FillIPolicy(self.new_ipolicy, group.ipolicy)
         ipol = masterd.instance.CalculateGroupIPolicy(cluster, group)
         new = ComputeNewInstanceViolations(ipol, new_ipolicy, instances,

Thanks,
Jose

On Apr 16 15:19, Ilias Tsitsimpis wrote:
> Use 'GetInstanceNodes' to get the nodes of an instance, instead of the
> 'all_nodes' Instance property.
> 
> Signed-off-by: Ilias Tsitsimpis <[email protected]>
> ---
>  lib/cmdlib/cluster.py             | 23 ++++++++++++++---------
>  lib/cmdlib/common.py              |  6 ++++--
>  lib/cmdlib/group.py               |  8 ++++----
>  lib/cmdlib/instance.py            | 28 ++++++++++++++++------------
>  lib/cmdlib/instance_operation.py  | 18 +++++++++++-------
>  lib/cmdlib/instance_query.py      |  3 ++-
>  lib/cmdlib/instance_storage.py    | 39 
> +++++++++++++++++++++++++++------------
>  lib/cmdlib/node.py                | 10 ++++++----
>  lib/config.py                     |  4 ++--
>  lib/objects.py                    | 29 -----------------------------
>  test/py/cmdlib/cmdlib_unittest.py |  5 +++++
>  11 files changed, 91 insertions(+), 82 deletions(-)
> 
> diff --git a/lib/cmdlib/cluster.py b/lib/cmdlib/cluster.py
> index 62fedb8..63f2a6f 100644
> --- a/lib/cmdlib/cluster.py
> +++ b/lib/cmdlib/cluster.py
> @@ -944,9 +944,10 @@ class LUClusterSetParams(LogicalUnit):
>        all_instances = self.cfg.GetAllInstancesInfo().values()
>        violations = set()
>        for group in self.cfg.GetAllNodeGroupsInfo().values():
> -        instances = frozenset([inst for inst in all_instances
> -                               if compat.any(nuuid in group.members
> -                                             for nuuid in inst.all_nodes)])
> +        instances = frozenset(
> +          [inst for inst in all_instances
> +           if compat.any(nuuid in group.members
> +             for nuuid in self.cfg.GetInstanceNodes(inst.uuid))])
>          new_ipolicy = objects.FillIPolicy(self.new_ipolicy, group.ipolicy)
>          ipol = masterd.instance.CalculateGroupIPolicy(cluster, group)
>          new = ComputeNewInstanceViolations(ipol, new_ipolicy, instances,
> @@ -2024,7 +2025,8 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors):
>  
>      for inst in self.my_inst_info.values():
>        if inst.disk_template in constants.DTS_INT_MIRROR:
> -        for nuuid in inst.all_nodes:
> +        inst_nodes = self.cfg.GetInstanceNodes(inst.uuid)
> +        for nuuid in inst_nodes:
>            if self.all_node_info[nuuid].group != self.group_uuid:
>              extra_lv_nodes.add(nuuid)
>  
> @@ -2378,7 +2380,8 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors):
>                    utils.CommaJoin(secondary_nodes),
>                    code=self.ETYPE_WARNING)
>  
> -    es_flags = rpc.GetExclusiveStorageForNodes(self.cfg, instance.all_nodes)
> +    inst_nodes = self.cfg.GetInstanceNodes(instance.uuid)
> +    es_flags = rpc.GetExclusiveStorageForNodes(self.cfg, inst_nodes)
>      if any(es_flags.values()):
>        if instance.disk_template not in constants.DTS_EXCL_STORAGE:
>          # Disk template not compatible with exclusive_storage: no instance
> @@ -2399,7 +2402,7 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors):
>                        " gnt-cluster repair-disk-sizes", idx)
>  
>      if instance.disk_template in constants.DTS_INT_MIRROR:
> -      instance_nodes = utils.NiceSort(instance.all_nodes)
> +      instance_nodes = utils.NiceSort(inst_nodes)
>        instance_groups = {}
>  
>        for node_uuid in instance_nodes:
> @@ -2436,7 +2439,7 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors):
>                    instance.name, "instance has offline secondary node(s) %s",
>                    utils.CommaJoin(self.cfg.GetNodeNames(inst_nodes_offline)))
>      # ... or ghost/non-vm_capable nodes
> -    for node_uuid in instance.all_nodes:
> +    for node_uuid in inst_nodes:
>        self._ErrorIf(node_image[node_uuid].ghost, 
> constants.CV_EINSTANCEBADNODE,
>                      instance.name, "instance lives on ghost node %s",
>                      self.cfg.GetNodeName(node_uuid))
> @@ -3136,7 +3139,8 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors):
>        instdisk[inst_uuid] = {}
>  
>      assert compat.all(len(statuses) == len(instanceinfo[inst].disks) and
> -                      len(nuuids) <= len(instanceinfo[inst].all_nodes) and
> +                      len(nuuids) <= len(
> +                        self.cfg.GetInstanceNodes(instanceinfo[inst].uuid)) 
> and
>                        compat.all(isinstance(s, (tuple, list)) and
>                                   len(s) == 2 for s in statuses)
>                        for inst, nuuids in instdisk.items()
> @@ -3333,7 +3337,8 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors):
>        if instance.admin_state == constants.ADMINST_OFFLINE:
>          i_offline += 1
>  
> -      for nuuid in instance.all_nodes:
> +      inst_nodes = self.cfg.GetInstanceNodes(instance.uuid)
> +      for nuuid in inst_nodes:
>          if nuuid not in node_image:
>            gnode = self.NodeImage(uuid=nuuid)
>            gnode.ghost = (nuuid not in self.all_node_info)
> diff --git a/lib/cmdlib/common.py b/lib/cmdlib/common.py
> index 7572a72..5e4dc52 100644
> --- a/lib/cmdlib/common.py
> +++ b/lib/cmdlib/common.py
> @@ -614,7 +614,8 @@ def ComputeIPolicyInstanceViolation(ipolicy, instance, 
> cfg,
>    be_full = cfg.GetClusterInfo().FillBE(instance)
>    mem_size = be_full[constants.BE_MAXMEM]
>    cpu_count = be_full[constants.BE_VCPUS]
> -  es_flags = rpc.GetExclusiveStorageForNodes(cfg, instance.all_nodes)
> +  inst_nodes = cfg.GetInstanceNodes(instance.uuid)
> +  es_flags = rpc.GetExclusiveStorageForNodes(cfg, inst_nodes)
>    if any(es_flags.values()):
>      # With exclusive storage use the actual spindles
>      try:
> @@ -856,7 +857,8 @@ def CheckInstancesNodeGroups(cfg, instances, 
> owned_groups, owned_node_uuids,
>  
>    """
>    for (uuid, inst) in instances.items():
> -    assert owned_node_uuids.issuperset(inst.all_nodes), \
> +    inst_nodes = cfg.GetInstanceNodes(inst.uuid)
> +    assert owned_node_uuids.issuperset(inst_nodes), \
>        "Instance %s's nodes changed while we kept the lock" % inst.name
>  
>      inst_groups = CheckInstanceNodeGroups(cfg, uuid, owned_groups)
> diff --git a/lib/cmdlib/group.py b/lib/cmdlib/group.py
> index 488aa6d..e974ead 100644
> --- a/lib/cmdlib/group.py
> +++ b/lib/cmdlib/group.py
> @@ -276,8 +276,7 @@ class LUGroupAssignNodes(NoHooksLU):
>  
>      self.cfg.AssignGroupNodes(mods)
>  
> -  @staticmethod
> -  def CheckAssignmentForSplitInstances(changes, node_data, instance_data):
> +  def CheckAssignmentForSplitInstances(self, changes, node_data, 
> instance_data):
>      """Check for split instances after a node assignment.
>  
>      This method considers a series of node assignments as an atomic 
> operation,
> @@ -310,12 +309,13 @@ class LUGroupAssignNodes(NoHooksLU):
>        if inst.disk_template not in constants.DTS_INT_MIRROR:
>          continue
>  
> +      inst_nodes = self.cfg.GetInstanceNodes(inst.uuid)
>        if len(set(node_data[node_uuid].group
> -                 for node_uuid in inst.all_nodes)) > 1:
> +                 for node_uuid in inst_nodes)) > 1:
>          previously_split_instances.add(inst.uuid)
>  
>        if len(set(changed_nodes.get(node_uuid, node_data[node_uuid].group)
> -                 for node_uuid in inst.all_nodes)) > 1:
> +                 for node_uuid in inst_nodes)) > 1:
>          all_split_instances.add(inst.uuid)
>  
>      return (list(all_split_instances - previously_split_instances),
> diff --git a/lib/cmdlib/instance.py b/lib/cmdlib/instance.py
> index 51342d6..04f71e1 100644
> --- a/lib/cmdlib/instance.py
> +++ b/lib/cmdlib/instance.py
> @@ -1629,7 +1629,7 @@ class LUInstanceCreate(LogicalUnit):
>                     osparams_private=self.op.osparams_private,
>                     osparams_secret=self.op.osparams_secret)
>  
> -    return self.cfg.GetNodeNames(list(iobj.all_nodes))
> +    return self.cfg.GetNodeNames(list(self.cfg.GetInstanceNodes(iobj.uuid)))
>  
>  
>  class LUInstanceRename(LogicalUnit):
> @@ -1662,7 +1662,8 @@ class LUInstanceRename(LogicalUnit):
>      """Build hooks nodes.
>  
>      """
> -    nl = [self.cfg.GetMasterNode()] + list(self.instance.all_nodes)
> +    nl = [self.cfg.GetMasterNode()] + \
> +      list(self.cfg.GetInstanceNodes(self.instance.uuid))
>      return (nl, nl)
>  
>    def CheckPrereq(self):
> @@ -1746,7 +1747,7 @@ class LUInstanceRename(LogicalUnit):
>      # update info on disks
>      info = GetInstanceInfoText(renamed_inst)
>      for (idx, disk) in enumerate(renamed_inst.disks):
> -      for node_uuid in renamed_inst.all_nodes:
> +      for node_uuid in self.cfg.GetInstanceNodes(renamed_inst.uuid):
>          result = self.rpc.call_blockdev_setinfo(node_uuid,
>                                                  (disk, renamed_inst), info)
>          result.Warn("Error setting info on node %s for disk %s" %
> @@ -1805,7 +1806,7 @@ class LUInstanceRemove(LogicalUnit):
>  
>      """
>      nl = [self.cfg.GetMasterNode()]
> -    nl_post = list(self.instance.all_nodes) + nl
> +    nl_post = list(self.cfg.GetInstanceNodes(self.instance.uuid)) + nl
>      return (nl, nl_post)
>  
>    def CheckPrereq(self):
> @@ -1841,7 +1842,7 @@ class LUInstanceRemove(LogicalUnit):
>  
>      assert (self.owned_locks(locking.LEVEL_NODE) ==
>              self.owned_locks(locking.LEVEL_NODE_RES))
> -    assert not (set(self.instance.all_nodes) -
> +    assert not (set(self.cfg.GetInstanceNodes(self.instance.uuid)) -
>                  self.owned_locks(locking.LEVEL_NODE)), \
>        "Not owning correct locks"
>  
> @@ -2679,7 +2680,8 @@ class LUInstanceSetParams(LogicalUnit):
>      """Build hooks nodes.
>  
>      """
> -    nl = [self.cfg.GetMasterNode()] + list(self.instance.all_nodes)
> +    nl = [self.cfg.GetMasterNode()] + \
> +        list(self.cfg.GetInstanceNodes(self.instance.uuid))
>      return (nl, nl)
>  
>    def _PrepareNicModification(self, params, private, old_ip, old_net_uuid,
> @@ -2894,9 +2896,9 @@ class LUInstanceSetParams(LogicalUnit):
>      """
>      self.diskparams = self.cfg.GetInstanceDiskParams(self.instance)
>  
> +    inst_nodes = self.cfg.GetInstanceNodes(self.instance.uuid)
>      excl_stor = compat.any(
> -      rpc.GetExclusiveStorageForNodes(self.cfg,
> -                                      self.instance.all_nodes).values()
> +      rpc.GetExclusiveStorageForNodes(self.cfg, inst_nodes).values()
>        )
>  
>      # Check disk modifications. This is done here and not in CheckArguments
> @@ -3060,7 +3062,7 @@ class LUInstanceSetParams(LogicalUnit):
>                                     errors.ECODE_STATE)
>  
>      assert pnode_uuid in self.owned_locks(locking.LEVEL_NODE)
> -    node_uuids = list(self.instance.all_nodes)
> +    node_uuids = list(self.cfg.GetInstanceNodes(self.instance.uuid))
>      pnode_info = self.cfg.GetNodeInfo(pnode_uuid)
>  
>      #_CheckInstanceNodeGroups(self.cfg, self.op.instance_name, owned_groups)
> @@ -3163,7 +3165,8 @@ class LUInstanceSetParams(LogicalUnit):
>          hvspecs = [(self.instance.hypervisor,
>                      self.cfg.GetClusterInfo()
>                        .hvparams[self.instance.hypervisor])]
> -        _CheckNodesPhysicalCPUs(self, self.instance.all_nodes,
> +        _CheckNodesPhysicalCPUs(self,
> +                                
> self.cfg.GetInstanceNodes(self.instance.uuid),
>                                  max_requested_cpu + 1,
>                                  hvspecs)
>  
> @@ -3739,7 +3742,7 @@ class LUInstanceSetParams(LogicalUnit):
>  
>      if self.op.disk_template:
>        if __debug__:
> -        check_nodes = set(self.instance.all_nodes)
> +        check_nodes = set(self.cfg.GetInstanceNodes(self.instance.uuid))
>          if self.op.remote_node_uuid:
>            check_nodes.add(self.op.remote_node_uuid)
>          for level in [locking.LEVEL_NODE, locking.LEVEL_NODE_RES]:
> @@ -3901,7 +3904,8 @@ class LUInstanceChangeGroup(LogicalUnit):
>      self.instance = self.cfg.GetInstanceInfo(self.op.instance_uuid)
>  
>      # Check if node groups for locked instance are still correct
> -    assert owned_nodes.issuperset(self.instance.all_nodes), \
> +    instance_all_nodes = self.cfg.GetInstanceNodes(self.instance.uuid)
> +    assert owned_nodes.issuperset(instance_all_nodes), \
>        ("Instance %s's nodes changed while we kept the lock" %
>         self.op.instance_name)
>  
> diff --git a/lib/cmdlib/instance_operation.py 
> b/lib/cmdlib/instance_operation.py
> index 3043032..823e89e 100644
> --- a/lib/cmdlib/instance_operation.py
> +++ b/lib/cmdlib/instance_operation.py
> @@ -86,7 +86,8 @@ class LUInstanceStartup(LogicalUnit):
>      """Build hooks nodes.
>  
>      """
> -    nl = [self.cfg.GetMasterNode()] + list(self.instance.all_nodes)
> +    nl = [self.cfg.GetMasterNode()] + \
> +        list(self.cfg.GetInstanceNodes(self.instance.uuid))
>      return (nl, nl)
>  
>    def CheckPrereq(self):
> @@ -108,8 +109,8 @@ class LUInstanceStartup(LogicalUnit):
>        filled_hvp.update(self.op.hvparams)
>        hv_type = hypervisor.GetHypervisorClass(self.instance.hypervisor)
>        hv_type.CheckParameterSyntax(filled_hvp)
> -      CheckHVParams(self, self.instance.all_nodes, self.instance.hypervisor,
> -                    filled_hvp)
> +      CheckHVParams(self, self.cfg.GetInstanceNodes(self.instance.uuid),
> +                    self.instance.hypervisor, filled_hvp)
>  
>      CheckInstanceState(self, self.instance, INSTANCE_ONLINE)
>  
> @@ -199,7 +200,8 @@ class LUInstanceShutdown(LogicalUnit):
>      """Build hooks nodes.
>  
>      """
> -    nl = [self.cfg.GetMasterNode()] + list(self.instance.all_nodes)
> +    nl = [self.cfg.GetMasterNode()] + \
> +      list(self.cfg.GetInstanceNodes(self.instance.uuid))
>      return (nl, nl)
>  
>    def CheckPrereq(self):
> @@ -275,7 +277,8 @@ class LUInstanceReinstall(LogicalUnit):
>      """Build hooks nodes.
>  
>      """
> -    nl = [self.cfg.GetMasterNode()] + list(self.instance.all_nodes)
> +    nl = [self.cfg.GetMasterNode()] + \
> +      list(self.cfg.GetInstanceNodes(self.instance.uuid))
>      return (nl, nl)
>  
>    def CheckPrereq(self):
> @@ -303,7 +306,7 @@ class LUInstanceReinstall(LogicalUnit):
>  
>    def _MergeValidateOsParams(self, instance):
>      "Handle the OS parameter merging and validation for the target instance."
> -    node_uuids = list(instance.all_nodes)
> +    node_uuids = list(self.cfg.GetInstanceNodes(instance.uuid))
>  
>      self.op.osparams = self.op.osparams or {}
>      self.op.osparams_private = self.op.osparams_private or {}
> @@ -434,7 +437,8 @@ class LUInstanceReboot(LogicalUnit):
>      """Build hooks nodes.
>  
>      """
> -    nl = [self.cfg.GetMasterNode()] + list(self.instance.all_nodes)
> +    nl = [self.cfg.GetMasterNode()] + \
> +      list(self.cfg.GetInstanceNodes(self.instance.uuid))
>      return (nl, nl)
>  
>    def CheckPrereq(self):
> diff --git a/lib/cmdlib/instance_query.py b/lib/cmdlib/instance_query.py
> index 1bfb2e4..2be0163 100644
> --- a/lib/cmdlib/instance_query.py
> +++ b/lib/cmdlib/instance_query.py
> @@ -207,7 +207,8 @@ class LUInstanceQueryData(NoHooksLU):
>  
>      cluster = self.cfg.GetClusterInfo()
>  
> -    node_uuids = itertools.chain(*(i.all_nodes for i in 
> self.wanted_instances))
> +    node_uuids = itertools.chain(*(self.cfg.GetInstanceNodes(i.uuid)
> +                                   for i in self.wanted_instances))
>      nodes = dict(self.cfg.GetMultiNodeInfo(node_uuids))
>  
>      groups = dict(self.cfg.GetMultiNodeGroupInfo(node.group
> diff --git a/lib/cmdlib/instance_storage.py b/lib/cmdlib/instance_storage.py
> index fdc6220..1850dd2 100644
> --- a/lib/cmdlib/instance_storage.py
> +++ b/lib/cmdlib/instance_storage.py
> @@ -226,7 +226,16 @@ def CreateDisks(lu, instance, to_skip=None, 
> target_node_uuid=None, disks=None):
>    info = GetInstanceInfoText(instance)
>    if target_node_uuid is None:
>      pnode_uuid = instance.primary_node
> -    all_node_uuids = instance.all_nodes
> +    # We cannot use config's 'GetInstanceNodes' here as 'CreateDisks'
> +    # is used by 'LUInstanceCreate' and the instance object is not
> +    # stored in the config yet.
> +    all_node_uuids = []
> +    for disk in instance.disks:
> +      all_node_uuids.extend(disk.all_nodes)
> +    all_node_uuids = set(all_node_uuids)
> +    # ensure that primary node is always the first
> +    all_node_uuids.discard(instance.primary_node)
> +    all_node_uuids = [pnode_uuid] + list(all_node_uuids)
>    else:
>      pnode_uuid = target_node_uuid
>      all_node_uuids = [pnode_uuid]
> @@ -610,7 +619,8 @@ class LUInstanceRecreateDisks(LogicalUnit):
>  
>      ial.Run(self.op.iallocator)
>  
> -    assert req.RequiredNodes() == len(self.instance.all_nodes)
> +    assert req.RequiredNodes() == \
> +      len(self.cfg.GetInstanceNodes(self.instance.uuid))
>  
>      if not ial.success:
>        raise errors.OpPrereqError("Can't compute nodes using iallocator '%s':"
> @@ -711,7 +721,8 @@ class LUInstanceRecreateDisks(LogicalUnit):
>      """Build hooks nodes.
>  
>      """
> -    nl = [self.cfg.GetMasterNode()] + list(self.instance.all_nodes)
> +    nl = [self.cfg.GetMasterNode()] + \
> +      list(self.cfg.GetInstanceNodes(self.instance.uuid))
>      return (nl, nl)
>  
>    def CheckPrereq(self):
> @@ -724,10 +735,11 @@ class LUInstanceRecreateDisks(LogicalUnit):
>      assert instance is not None, \
>        "Cannot retrieve locked instance %s" % self.op.instance_name
>      if self.op.node_uuids:
> -      if len(self.op.node_uuids) != len(instance.all_nodes):
> +      inst_nodes = self.cfg.GetInstanceNodes(instance.uuid)
> +      if len(self.op.node_uuids) != len(inst_nodes):
>          raise errors.OpPrereqError("Instance %s currently has %d nodes, but"
>                                     " %d replacement nodes were specified" %
> -                                   (instance.name, len(instance.all_nodes),
> +                                   (instance.name, len(inst_nodes),
>                                      len(self.op.node_uuids)),
>                                     errors.ECODE_INVAL)
>        assert instance.disk_template != constants.DT_DRBD8 or \
> @@ -787,7 +799,7 @@ class LUInstanceRecreateDisks(LogicalUnit):
>      if self.op.node_uuids:
>        node_uuids = self.op.node_uuids
>      else:
> -      node_uuids = instance.all_nodes
> +      node_uuids = self.cfg.GetInstanceNodes(instance.uuid)
>      excl_stor = compat.any(
>        rpc.GetExclusiveStorageForNodes(self.cfg, node_uuids).values()
>        )
> @@ -852,7 +864,8 @@ class LUInstanceRecreateDisks(LogicalUnit):
>  
>      # All touched nodes must be locked
>      mylocks = self.owned_locks(locking.LEVEL_NODE)
> -    assert mylocks.issuperset(frozenset(self.instance.all_nodes))
> +    inst_nodes = self.cfg.GetInstanceNodes(self.instance.uuid)
> +    assert mylocks.issuperset(frozenset(inst_nodes))
>      new_disks = CreateDisks(self, self.instance, to_skip=to_skip)
>  
>      # TODO: Release node locks before wiping, or explain why it's not 
> possible
> @@ -1471,7 +1484,8 @@ class LUInstanceGrowDisk(LogicalUnit):
>      """Build hooks nodes.
>  
>      """
> -    nl = [self.cfg.GetMasterNode()] + list(self.instance.all_nodes)
> +    nl = [self.cfg.GetMasterNode()] + \
> +      list(self.cfg.GetInstanceNodes(self.instance.uuid))
>      return (nl, nl)
>  
>    def CheckPrereq(self):
> @@ -1483,7 +1497,7 @@ class LUInstanceGrowDisk(LogicalUnit):
>      self.instance = self.cfg.GetInstanceInfo(self.op.instance_uuid)
>      assert self.instance is not None, \
>        "Cannot retrieve locked instance %s" % self.op.instance_name
> -    node_uuids = list(self.instance.all_nodes)
> +    node_uuids = list(self.cfg.GetInstanceNodes(self.instance.uuid))
>      for node_uuid in node_uuids:
>        CheckNodeOnline(self, node_uuid)
>      self.node_es_flags = rpc.GetExclusiveStorageForNodes(self.cfg, 
> node_uuids)
> @@ -1544,7 +1558,8 @@ class LUInstanceGrowDisk(LogicalUnit):
>                   utils.FormatUnit(self.target, "h")))
>  
>      # First run all grow ops in dry-run mode
> -    for node_uuid in self.instance.all_nodes:
> +    inst_nodes = self.cfg.GetInstanceNodes(self.instance.uuid)
> +    for node_uuid in inst_nodes:
>        result = self.rpc.call_blockdev_grow(node_uuid,
>                                             (self.disk, self.instance),
>                                             self.delta, True, True,
> @@ -1576,7 +1591,7 @@ class LUInstanceGrowDisk(LogicalUnit):
>  
>      # We know that (as far as we can test) operations across different
>      # nodes will succeed, time to run it for real on the backing storage
> -    for node_uuid in self.instance.all_nodes:
> +    for node_uuid in inst_nodes:
>        result = self.rpc.call_blockdev_grow(node_uuid,
>                                             (self.disk, self.instance),
>                                             self.delta, False, True,
> @@ -1992,7 +2007,7 @@ class TLReplaceDisks(Tasklet):
>      @return: True if they are activated, False otherwise
>  
>      """
> -    node_uuids = instance.all_nodes
> +    node_uuids = self.cfg.GetInstanceNodes(instance.uuid)
>  
>      for idx, dev in enumerate(instance.disks):
>        for node_uuid in node_uuids:
> diff --git a/lib/cmdlib/node.py b/lib/cmdlib/node.py
> index 1f69473..eb59f6f 100644
> --- a/lib/cmdlib/node.py
> +++ b/lib/cmdlib/node.py
> @@ -483,7 +483,7 @@ class LUNodeSetParams(LogicalUnit):
>  
>      """
>      return (instance.disk_template in constants.DTS_INT_MIRROR and
> -            self.op.node_uuid in instance.all_nodes)
> +            self.op.node_uuid in self.cfg.GetInstanceNodes(instance.uuid))
>  
>    def ExpandNames(self):
>      if self.lock_all:
> @@ -867,7 +867,9 @@ def _GetNodeInstances(cfg, node_uuid):
>  
>    """
>  
> -  return _GetNodeInstancesInner(cfg, lambda inst: node_uuid in 
> inst.all_nodes)
> +  return _GetNodeInstancesInner(cfg,
> +                                lambda inst: node_uuid in
> +                                  cfg.GetInstanceNodes(inst.uuid.uuid))
>  
>  
>  class LUNodeEvacuate(NoHooksLU):
> @@ -1459,7 +1461,7 @@ class LUNodeRemove(LogicalUnit):
>                                   " node is required", errors.ECODE_INVAL)
>  
>      for _, instance in self.cfg.GetAllInstancesInfo().items():
> -      if node.uuid in instance.all_nodes:
> +      if node.uuid in self.cfg.GetInstanceNodes(instance.uuid):
>          raise errors.OpPrereqError("Instance %s is still running on the 
> node,"
>                                     " please remove first" % instance.name,
>                                     errors.ECODE_INVAL)
> @@ -1558,7 +1560,7 @@ class LURepairNodeStorage(NoHooksLU):
>      for inst in _GetNodeInstances(self.cfg, self.op.node_uuid):
>        if not inst.disks_active:
>          continue
> -      check_nodes = set(inst.all_nodes)
> +      check_nodes = set(self.cfg.GetInstanceNodes(inst.uuid))
>        check_nodes.discard(self.op.node_uuid)
>        for inst_node_uuid in check_nodes:
>          self._CheckFaultyDisks(inst, inst_node_uuid)
> diff --git a/lib/config.py b/lib/config.py
> index 93c2900..6d84c8c 100644
> --- a/lib/config.py
> +++ b/lib/config.py
> @@ -1948,7 +1948,7 @@ class ConfigWriter(object):
>      if primary_only:
>        nodes = [instance.primary_node]
>      else:
> -      nodes = instance.all_nodes
> +      nodes = self._UnlockedGetInstanceNodes(instance.uuid)
>  
>      return frozenset(self._UnlockedGetNodeInfo(node_uuid).group
>                       for node_uuid in nodes)
> @@ -2217,7 +2217,7 @@ class ConfigWriter(object):
>      if primary_only:
>        nodes_fn = lambda inst: [inst.primary_node]
>      else:
> -      nodes_fn = lambda inst: inst.all_nodes
> +      nodes_fn = lambda inst: self._UnlockedGetInstanceNodes(inst.uuid)
>  
>      return frozenset(inst.uuid
>                       for inst in self._ConfigData().instances.values()
> diff --git a/lib/objects.py b/lib/objects.py
> index 4725b94..9d0f569 100644
> --- a/lib/objects.py
> +++ b/lib/objects.py
> @@ -1158,35 +1158,6 @@ class Instance(TaggableObject):
>      "serial_no",
>      ] + _TIMESTAMPS + _UUID
>  
> -  def _ComputeAllNodes(self):
> -    """Compute the list of all nodes.
> -
> -    Since the data is already there (in the drbd disks), keeping it as
> -    a separate normal attribute is redundant and if not properly
> -    synchronised can cause problems. Thus it's better to compute it
> -    dynamically.
> -
> -    """
> -    def _Helper(nodes, device):
> -      """Recursively computes nodes given a top device."""
> -      if device.dev_type in constants.DTS_DRBD:
> -        nodea, nodeb = device.logical_id[:2]
> -        nodes.add(nodea)
> -        nodes.add(nodeb)
> -      if device.children:
> -        for child in device.children:
> -          _Helper(nodes, child)
> -
> -    all_nodes = set()
> -    for device in self.disks:
> -      _Helper(all_nodes, device)
> -    # ensure that the primary node is always the first
> -    all_nodes.discard(self.primary_node)
> -    return (self.primary_node, ) + tuple(all_nodes)
> -
> -  all_nodes = property(_ComputeAllNodes, None, None,
> -                       "List of names of all the nodes of the instance")
> -
>    def MapLVsByNode(self, lvmap=None, devs=None, node_uuid=None):
>      """Provide a mapping of nodes to LVs this instance owns.
>  
> diff --git a/test/py/cmdlib/cmdlib_unittest.py 
> b/test/py/cmdlib/cmdlib_unittest.py
> index afb8682..499bf2a 100755
> --- a/test/py/cmdlib/cmdlib_unittest.py
> +++ b/test/py/cmdlib/cmdlib_unittest.py
> @@ -588,6 +588,9 @@ class _FakeConfigForComputeIPolicyInstanceViolation:
>        constants.ND_EXCLUSIVE_STORAGE: self.excl_stor,
>        }
>  
> +  def GetInstanceNodes(self, instance_uuid):
> +    return ("pnode_uuid", )
> +
>  
>  class TestComputeIPolicyInstanceViolation(unittest.TestCase):
>    def test(self):
> @@ -599,6 +602,7 @@ class 
> TestComputeIPolicyInstanceViolation(unittest.TestCase):
>      disks = [objects.Disk(size=512, spindles=13)]
>      cfg = _FakeConfigForComputeIPolicyInstanceViolation(beparams, False)
>      instance = objects.Instance(beparams=beparams, disks=disks, nics=[],
> +                                primary_node="pnode_uuid",
>                                  disk_template=constants.DT_PLAIN)
>      stub = _StubComputeIPolicySpecViolation(2048, 2, 1, 0, [512], 4,
>                                              constants.DT_PLAIN)
> @@ -606,6 +610,7 @@ class 
> TestComputeIPolicyInstanceViolation(unittest.TestCase):
>                                                   cfg, _compute_fn=stub)
>      self.assertEqual(ret, [])
>      instance2 = objects.Instance(beparams={}, disks=disks, nics=[],
> +                                 primary_node="pnode_uuid",
>                                   disk_template=constants.DT_PLAIN)
>      ret = common.ComputeIPolicyInstanceViolation(NotImplemented, instance2,
>                                                   cfg, _compute_fn=stub)
> -- 
> 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

Reply via email to