From: Erlon R. Cruz <erlon.cruz@fit-tecnologia.org.br>
Date: Wed, 11 Mar 2015 14:30:28 +0000 (-0300)
Subject: Fix HNAS iSCSI driver error on LUN creation
X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=ef27c6beb7410d7007b867b8895178245fe4b7a4;p=openstack-build%2Fcinder-build.git

Fix HNAS iSCSI driver error on LUN creation

If chap_enabled is 'False', in the first initialization of the driver (before
the target is created on HNAS) the driver fails to create volumes. This patch
fix that by returning the right value when 'get_targetiqn' is called in this
situation.

Change-Id: I899717c0e7e4ff800cecc8ffa6e3a81a47e96e9f
Closes-Bug: #1430782
---

diff --git a/cinder/tests/test_hds_hnas_backend.py b/cinder/tests/test_hds_hnas_backend.py
index 2688c69ee..138ed544f 100644
--- a/cinder/tests/test_hds_hnas_backend.py
+++ b/cinder/tests/test_hds_hnas_backend.py
@@ -184,6 +184,10 @@ Authentication      : Enabled                                        \n\
 Logical units       : No logical units.                              \n\
 \n"
 
+HNAS_RESULT20 = "Target does not exist."
+
+HNAS_RESULT21 = "Target created successfully."
+
 HNAS_CMDS = {
     ('ssh', '0.0.0.0', 'supervisor', 'supervisor', 'evsfs', 'list'):
         ["%s" % HNAS_RESULT1, ""],
@@ -412,15 +416,31 @@ class HDSHNASBendTest(test.TestCase):
 
         self.assertIn('already deleted', out)
 
-    @mock.patch.object(hnas_backend.HnasBackend, 'run_cmd',
-                       side_effect=m_run_cmd)
-    def test_get_targetiqn(self, m_cmd):
+    @mock.patch.object(hnas_backend.HnasBackend, '_get_evs', return_value=0)
+    @mock.patch.object(hnas_backend.HnasBackend, 'run_cmd')
+    def test_get_targetiqn(self, m_cmd, m_get_evs):
+
+        m_cmd.side_effect = [[HNAS_RESULT12, '']]
         out = self.hnas_bend.get_targetiqn("ssh", "0.0.0.0", "supervisor",
                                            "supervisor", "test_iqn",
                                            "test_hdp", "test_secret")
 
         self.assertEqual('test_iqn', out)
 
+        m_cmd.side_effect = [[HNAS_RESULT20, ''], [HNAS_RESULT21, '']]
+        out = self.hnas_bend.get_targetiqn("ssh", "0.0.0.0", "supervisor",
+                                           "supervisor", "test_iqn2",
+                                           "test_hdp", "test_secret")
+
+        self.assertEqual('test_iqn2', out)
+
+        m_cmd.side_effect = [[HNAS_RESULT20, ''], [HNAS_RESULT21, '']]
+        out = self.hnas_bend.get_targetiqn("ssh", "0.0.0.0", "supervisor",
+                                           "supervisor", "test_iqn3",
+                                           "test_hdp", "")
+
+        self.assertEqual('test_iqn3', out)
+
     @mock.patch.object(hnas_backend.HnasBackend, 'run_cmd',
                        side_effect=m_run_cmd)
     def test_set_targetsecret(self, m_execute):
diff --git a/cinder/volume/drivers/hds/hnas_backend.py b/cinder/volume/drivers/hds/hnas_backend.py
index c548ef62f..65e3f8ff2 100644
--- a/cinder/volume/drivers/hds/hnas_backend.py
+++ b/cinder/volume/drivers/hds/hnas_backend.py
@@ -593,6 +593,8 @@ class HnasBackend(object):
                                         'iscsi-target', 'add',
                                         targetalias, secret,
                                         check_exit_code=True)
+            if "success" in out:
+                return targetalias
 
         lines = out.split('\n')
         # returns the first iqn