_CheckTargetNodeIPolicy: instance.primary_node is not objects.Node
authorRené Nussbaumer <rn@google.com>
Mon, 9 Jan 2012 14:38:50 +0000 (15:38 +0100)
committerRené Nussbaumer <rn@google.com>
Tue, 10 Jan 2012 12:34:36 +0000 (13:34 +0100)
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>

lib/cmdlib.py
test/ganeti.cmdlib_unittest.py

index 1cff98e..ea7dc48 100644 (file)
@@ -1146,7 +1146,8 @@ def _CheckTargetNodeIPolicy(lu, ipolicy, instance, node, ignore=False,
   @see: L{_ComputeIPolicySpecViolation}
 
   """
-  res = _compute_fn(ipolicy, instance, instance.primary_node.group, node.group)
+  primary_node = lu.cfg.GetNodeInfo(instance.primary_node)
+  res = _compute_fn(ipolicy, instance, primary_node.group, node.group)
 
   if res:
     msg = ("Instance does not meet target node group's (%s) instance"
index a5419b3..881e646 100755 (executable)
@@ -382,9 +382,10 @@ class TestClusterVerifyFiles(unittest.TestCase):
 
 
 class _FakeLU:
-  def __init__(self):
+  def __init__(self, cfg=NotImplemented):
     self.warning_log = []
     self.info_log = []
+    self.cfg = cfg
 
   def LogWarning(self, text, *args):
     self.warning_log.append((text, args))
@@ -678,11 +679,21 @@ class TestComputeIPolicyNodeViolation(unittest.TestCase):
     self.assertEqual(ret, [])
 
 
+class _FakeConfigForTargetNodeIPolicy:
+  def __init__(self, node_info=NotImplemented):
+    self._node_info = node_info
+
+  def GetNodeInfo(self, _):
+    return self._node_info
+
+
 class TestCheckTargetNodeIPolicy(unittest.TestCase):
   def setUp(self):
-    self.instance = objects.Instance(primary_node=objects.Node(group="foo"))
+    self.instance = objects.Instance(primary_node="blubb")
     self.target_node = objects.Node(group="bar")
-    self.lu = _FakeLU()
+    node_info = objects.Node(group="foo")
+    fake_cfg = _FakeConfigForTargetNodeIPolicy(node_info=node_info)
+    self.lu = _FakeLU(cfg=fake_cfg)
 
   def testNoViolation(self):
     compute_recoder = _CallRecorder(return_value=[])