Revision 1532b078 lib/cmdlib/cluster.py

b/lib/cmdlib/cluster.py
789 789
      enabled_disk_templates = cluster.enabled_disk_templates
790 790
    return (enabled_disk_templates, new_enabled_disk_templates)
791 791

  
792
  def _CheckIpolicy(self, cluster):
793
    """Checks the ipolicy.
794

  
795
    @type cluster: C{objects.Cluster}
796
    @param cluster: the cluster's configuration
797

  
798
    """
799
    if self.op.ipolicy:
800
      self.new_ipolicy = GetUpdatedIPolicy(cluster.ipolicy, self.op.ipolicy,
801
                                           group_policy=False)
802

  
803
      all_instances = self.cfg.GetAllInstancesInfo().values()
804
      violations = set()
805
      for group in self.cfg.GetAllNodeGroupsInfo().values():
806
        instances = frozenset([inst for inst in all_instances
807
                               if compat.any(nuuid in group.members
808
                                             for nuuid in inst.all_nodes)])
809
        new_ipolicy = objects.FillIPolicy(self.new_ipolicy, group.ipolicy)
810
        ipol = masterd.instance.CalculateGroupIPolicy(cluster, group)
811
        new = ComputeNewInstanceViolations(ipol, new_ipolicy, instances,
812
                                           self.cfg)
813
        if new:
814
          violations.update(new)
815

  
816
      if violations:
817
        self.LogWarning("After the ipolicy change the following instances"
818
                        " violate them: %s",
819
                        utils.CommaJoin(utils.NiceSort(violations)))
820

  
792 821
  def CheckPrereq(self):
793 822
    """Check prerequisites.
794 823

  
......
873 902
                            for name, values in svalues.items()))
874 903
             for storage, svalues in new_disk_state.items())
875 904

  
876
    if self.op.ipolicy:
877
      self.new_ipolicy = GetUpdatedIPolicy(cluster.ipolicy, self.op.ipolicy,
878
                                           group_policy=False)
879

  
880
      all_instances = self.cfg.GetAllInstancesInfo().values()
881
      violations = set()
882
      for group in self.cfg.GetAllNodeGroupsInfo().values():
883
        instances = frozenset([inst for inst in all_instances
884
                               if compat.any(nuuid in group.members
885
                                             for nuuid in inst.all_nodes)])
886
        new_ipolicy = objects.FillIPolicy(self.new_ipolicy, group.ipolicy)
887
        ipol = masterd.instance.CalculateGroupIPolicy(cluster, group)
888
        new = ComputeNewInstanceViolations(ipol, new_ipolicy, instances,
889
                                           self.cfg)
890
        if new:
891
          violations.update(new)
892

  
893
      if violations:
894
        self.LogWarning("After the ipolicy change the following instances"
895
                        " violate them: %s",
896
                        utils.CommaJoin(utils.NiceSort(violations)))
905
    self._CheckIpolicy(cluster)
897 906

  
898 907
    if self.op.nicparams:
899 908
      utils.ForceDictType(self.op.nicparams, constants.NICS_PARAMETER_TYPES)

Also available in: Unified diff