[deployment_handler] Add memory and cpu info to the nodes 59/28759/3
authorjose.lausuch <jose.lausuch@ericsson.com>
Wed, 15 Feb 2017 21:35:21 +0000 (22:35 +0100)
committerJose Lausuch <jose.lausuch@ericsson.com>
Thu, 16 Feb 2017 15:10:43 +0000 (15:10 +0000)
output: http://pastebin.com/raw/KtuvGPs1

Change-Id: Ie4eb33b041e9ac0ac992a615a29dd7aeab7d857f
Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com>
modules/opnfv/deployment/manager.py

index 43a7948..e1fd949 100644 (file)
@@ -27,7 +27,7 @@ class Deployment(object):
                  status,
                  openstack_version,
                  sdn_controller,
-                 nodes=[]):
+                 nodes=None):
 
         self.deployment_info = {
             'installer': installer,
@@ -116,9 +116,9 @@ class Node(object):
                  ip,
                  name,
                  status,
-                 roles=[],
+                 roles=None,
                  ssh_client=None,
-                 info={}):
+                 info=None):
         self.id = id
         self.ip = ip
         self.name = name
@@ -127,6 +127,16 @@ class Node(object):
         self.roles = roles
         self.info = info
 
+        self.cpu_info = 'unknown'
+        self.memory = 'unknown'
+        self.ovs = 'unknown'
+
+        if ssh_client:
+            sys_info = self.get_system_info()
+            self.cpu_info = sys_info['cpu_info']
+            self.memory = sys_info['memory']
+            self.ovs = self.get_ovs_info()
+
     def get_file(self, src, dest):
         '''
         SCP file from a node
@@ -184,15 +194,12 @@ class Node(object):
             'name': self.name,
             'status': self.status,
             'roles': self.roles,
+            'cpu_info': self.cpu_info,
+            'memory': self.memory,
+            'ovs': self.ovs,
             'info': self.info
         }
 
-    def get_attribute(self, attribute):
-        '''
-        Returns an attribute given the name
-        '''
-        return self.get_dict()[attribute]
-
     def is_controller(self):
         '''
         Returns if the node is a controller
@@ -216,21 +223,50 @@ class Node(object):
         cmd = "ovs-vsctl --version|head -1| sed 's/^.*) //'"
         return self.run_cmd(cmd)
 
+    def get_system_info(self):
+        '''
+        Returns the ovs version installed
+        '''
+        cmd = 'grep MemTotal /proc/meminfo'
+        memory = self.run_cmd(cmd).partition('MemTotal:')[-1].strip().encode()
+
+        cpu_info = {}
+        cmd = 'lscpu'
+        result = self.run_cmd(cmd)
+        for line in result.splitlines():
+            if line.startswith('CPU(s)'):
+                cpu_info['num_cpus'] = line.split(' ')[-1].encode()
+            elif line.startswith('Thread(s) per core'):
+                cpu_info['threads/core'] = line.split(' ')[-1].encode()
+            elif line.startswith('Core(s) per socket'):
+                cpu_info['cores/socket'] = line.split(' ')[-1].encode()
+            elif line.startswith('Model name'):
+                cpu_info['model'] = line.partition(
+                    'Model name:')[-1].strip().encode()
+            elif line.startswith('Architecture'):
+                cpu_info['arch'] = line.split(' ')[-1].encode()
+
+        return {'memory': memory, 'cpu_info': cpu_info}
+
     def __str__(self):
         return '''
-            name:   {name}
-            id:     {id}
-            ip:     {ip}
-            status: {status}
-            roles:  {roles}
-            ovs:    {ovs}
-            info:   {info}'''.format(name=self.name,
-                                     id=self.id,
-                                     ip=self.ip,
-                                     status=self.status,
-                                     roles=self.roles,
-                                     ovs=self.get_ovs_info(),
-                                     info=self.info)
+            name:    {name}
+            id:      {id}
+            ip:      {ip}
+            status:  {status}
+            roles:   {roles}
+            cpu:     {cpu_info}
+            memory:  {memory}
+            ovs:     {ovs}
+            info:    {info}'''.format(name=self.name,
+                                      id=self.id,
+                                      ip=self.ip,
+                                      status=self.status,
+                                      roles=self.roles,
+                                      cpu_info=self.cpu_info,
+                                      memory=self.memory,
+                                      ovs=self.ovs,
+                                      info=self.info)
 
 
 class DeploymentHandler(object):