xci: Switch to functest-smoke for daily jobs
[releng.git] / modules / opnfv / deployment / fuel / adapter.py
index 3e6ef50..a217767 100644 (file)
@@ -66,7 +66,7 @@ class FuelAdapter(manager.DeploymentHandler):
         if options and options['cluster'] and len(self.nodes) > 0:
             n = []
             for node in self.nodes:
-                if node.info['cluster'] == options['cluster']:
+                if str(node.info['cluster']) == str(options['cluster']):
                     n.append(node)
             return n
 
@@ -114,7 +114,7 @@ class FuelAdapter(manager.DeploymentHandler):
                 index_ip = i
             elif "mac" in fields[i]:
                 index_mac = i
-            elif "roles " in fields[i]:
+            elif "roles " in fields[i] and "pending_roles" not in fields[i]:
                 index_roles = i
             elif "online" in fields[i]:
                 index_online = i
@@ -124,26 +124,36 @@ class FuelAdapter(manager.DeploymentHandler):
             fields = lines[i].rsplit(' | ')
             id = fields[index_id].strip().encode()
             ip = fields[index_ip].strip().encode()
-            status_node = fields[index_status].strip().encode()
+            status_node = fields[index_status].strip().encode().lower()
             name = fields[index_name].strip().encode()
-            roles = fields[index_roles].strip().encode()
+            roles_all = fields[index_roles].strip().encode().lower()
+
+            roles = [x for x in [manager.Role.CONTROLLER,
+                                 manager.Role.COMPUTE,
+                                 manager.Role.ODL] if x in roles_all]
 
             dict = {"cluster": fields[index_cluster].strip().encode(),
                     "mac": fields[index_mac].strip().encode(),
                     "status_node": status_node,
                     "online": fields[index_online].strip().encode()}
 
+            ssh_client = None
             if status_node == 'ready':
-                status = manager.Node.STATUS_OK
+                status = manager.NodeStatus.STATUS_OK
                 proxy = {'ip': self.installer_ip,
                          'username': self.installer_user,
                          'password': self.installer_pwd}
                 ssh_client = ssh_utils.get_ssh_client(hostname=ip,
                                                       username='root',
                                                       proxy=proxy)
+            elif 'error' in status_node:
+                status = manager.NodeStatus.STATUS_ERROR
+            elif 'off' in status_node:
+                status = manager.NodeStatus.STATUS_OFFLINE
+            elif 'discover' in status_node:
+                status = manager.NodeStatus.STATUS_UNUSED
             else:
-                status = manager.Node.STATUS_INACTIVE
-                ssh_client = None
+                status = manager.NodeStatus.STATUS_INACTIVE
 
             node = manager.Node(
                 id, ip, name, status, roles, ssh_client, dict)
@@ -160,26 +170,30 @@ class FuelAdapter(manager.DeploymentHandler):
         cmd = 'source openrc;nova-manage version 2>/dev/null'
         version = None
         for node in self.nodes:
-            if 'controller' in node.get_attribute('roles'):
+            if node.is_controller() and node.is_active():
                 version = node.run_cmd(cmd)
                 break
         return version
 
     def get_sdn_version(self):
-        cmd = "apt-cache show opendaylight|grep Version|sed 's/^.*\: //'"
+        cmd = "apt-cache policy opendaylight|grep Installed"
         version = None
         for node in self.nodes:
-            if 'controller' in node.get_attribute('roles'):
+            if manager.Role.ODL in node.roles and node.is_active():
                 odl_version = node.run_cmd(cmd)
                 if odl_version:
-                    version = 'OpenDaylight ' + odl_version
-                break
+                    version = 'OpenDaylight ' + odl_version.split(' ')[-1]
+                    break
         return version
 
     def get_deployment_status(self):
-        cmd = 'fuel env|grep operational'
+        cmd = "fuel env|tail -1|awk '{print $3}'"
         result = self.installer_node.run_cmd(cmd)
         if result is None or len(result) == 0:
-            return 'failed'
+            return 'unknown'
+        elif 'operational' in result:
+            return 'active'
+        elif 'deploy' in result:
+            return 'deploying'
         else:
             return 'active'