From ff02b60f43426ad5bc4c05eee7c89451beb081b9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Nussbaumer?= <rn@google.com>
Date: Mon, 9 Jan 2012 15:38:50 +0100
Subject: [PATCH] _CheckTargetNodeIPolicy: instance.primary_node is not
 objects.Node
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: RenΓ© Nussbaumer <rn@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>
---
 lib/cmdlib.py                  |  3 ++-
 test/ganeti.cmdlib_unittest.py | 17 ++++++++++++++---
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 1cff98eb8..ea7dc481e 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -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"
diff --git a/test/ganeti.cmdlib_unittest.py b/test/ganeti.cmdlib_unittest.py
index a5419b3bf..881e64698 100755
--- a/test/ganeti.cmdlib_unittest.py
+++ b/test/ganeti.cmdlib_unittest.py
@@ -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=[])
-- 
GitLab