From 065a61442ab24ee0dbde1bbf1700eec676347a0a Mon Sep 17 00:00:00 2001
From: Uggla <uggla@free.fr>
Date: Fri, 16 Oct 2015 00:40:36 +0200
Subject: [PATCH] Update redfish-client.py

---
 redfish-client/redfish-client.py | 93 +++++++++++++++++++++++++-------
 1 file changed, 73 insertions(+), 20 deletions(-)
 mode change 100644 => 100755 redfish-client/redfish-client.py

diff --git a/redfish-client/redfish-client.py b/redfish-client/redfish-client.py
old mode 100644
new mode 100755
index a6f9398..c1be6b6
--- a/redfish-client/redfish-client.py
+++ b/redfish-client/redfish-client.py
@@ -1,3 +1,5 @@
+#!/usr/bin/python
+
 # coding=utf-8
 
 """
@@ -19,7 +21,7 @@ Options:
   --conf_file FILE      Configuration file [default: ~/.redfish.conf].
 
 
-config commands manage the configuration file.  
+config commands manage the configuration file.
 
 """
 
@@ -32,17 +34,65 @@ import docopt
 
 class ConfigFile(object):
     def __init__(self, config_file):
+	self._config_file = config_file
         # read json file
-        try:    
-            with open(config_file) as json_data:
+        try:
+            with open(self._config_file) as json_data:
                 self.data = json.load(json_data)
                 json_data.close()
-        except IOError as e:
-            self.data = {"Nodes":{}}
+        except (ValueError, IOError):
+            self.data = {"Managers":{}}
+
+    def save(self):
+        try:
+            with open(self._config_file , 'w') as json_data:
+                json.dump(self.data, json_data)
+                json_data.close()
+        except IOError as e:
+	    print(e.msg)
+	    sys.exit(1)
+    
+    def add_manager(self, manager_name, url, login, password):
+        self.data['Managers'][manager_name] = {}
+        self.data['Managers'][manager_name]['url'] = url
+        if login != None:
+            self.data['Managers'][manager_name]['login'] = login
+        if password != None:
+            self.data['Managers'][manager_name]['password'] = password
+    
+    def get_managers(self):
+        managers = []
+        for manager in self.data['Managers']:
+                managers += [manager]
+        return(managers)
+    
+    def get_manager_info(self, manager):
+        info = {}
+        url=self.data['Managers'][manager]['url']
+        login=self.data['Managers'][manager]['login']
+        password=self.data['Managers'][manager]['password']
+        info={'url':url, 'login':login, 'password':password}
+        return(info)    
+
+class RedfishClientException(Exception):
+    """Base class for redfish client exceptions"""
+    def __init__(self, message=None, **kwargs):
+        self.kwargs = kwargs
+        self.message = message  
 
-  
 
 if __name__ == '__main__':
+    # Functions
+    def show_manager(all=False):
+        print("Managers configured :")
+        for manager in conf_file.get_managers():
+            print(manager)
+            if all == True:
+                info = conf_file.get_manager_info(manager)
+                print("\tUrl : {}".format(info['url']))
+                print("\tLogin : {}".format(info['login']))
+                print("\tPassword : {}".format(info['password']))
+    
     # Get $HOME environment.
     HOME = os.getenv('HOME')
 
@@ -52,22 +102,25 @@ if __name__ == '__main__':
 
     arguments = docopt.docopt(__doc__, version='redfish-client 0.1')
     print(arguments)
-    
+
     arguments['--conf_file'] = arguments['--conf_file'].replace('~', HOME)
-        
+
     conf_file = ConfigFile(arguments['--conf_file'])
-    
-    
+
+
     if arguments['config'] == True:
-        if arguments['showall'] == True:
-            pprint.pprint(conf_file.data)
+        if arguments['show'] == True:
+            show_manager()
+        elif arguments['showall'] == True:
+            show_manager(True)
         elif arguments['add'] == True:
-            conf_file.data['Nodes'][arguments['<manager_name>']] = {}
-            conf_file.data['Nodes'][arguments['<manager_name>']]['url'] = arguments['<manager_url>']
-            if arguments['<login>'] != None:
-                 conf_file.data['Nodes'][arguments['<manager_name>']]['login'] = arguments['<login>']
-            if arguments['<login>'] != None:
-                 conf_file.data['Nodes'][arguments['<manager_name>']]['password'] = arguments['<password>']
+            conf_file.add_manager(arguments['<manager_name>'],
+                                  arguments['<manager_url>'],
+                                  arguments['<login>'],
+                                  arguments['password'])
             pprint.pprint(conf_file.data)
-            
-    
\ No newline at end of file
+
+	conf_file.save()
+
+
+    sys.exit(0)