- don't depend on plc_config, make sfa-config self-contained.
Barış Metin [Mon, 6 Jul 2009 16:34:47 +0000 (16:34 +0000)]
- report the index error on sfi list
- add empty __init__.py to be able to import modules in util

config/sfa-config-tty
config/sfa_config
sfa/__init__.py [new file with mode: 0644]
sfa/client/sfi.py
sfa/util/__init__.py [new file with mode: 0644]
sfa/util/config.py

index da23887..dc8355a 100755 (executable)
@@ -38,11 +38,19 @@ all_variables   = ["GENI_REGISTRY_ROOT_AUTH",
                    "GENI_PLC_USER",
                    "GENI_PLC_PASSWORD",    
                    "GENI_PLC_URL",
+                   "GENI_PLC_DB_NAME",
+                   "GENI_PLC_DB_HOST",
+                   "GENI_PLC_DB_PORT",
+                   "GENI_PLC_DB_USER",
+                   "GENI_PLC_DB_PASSWORD",
                    ]
 usual_variables = ["GENI_REGISTRY_ROOT_AUTH",
                    "GENI_REGISTRY_LEVEL1_AUTH",
                    "GENI_PLC_USER",
-                   "GENI_PLC_PASSWORD",    
+                   "GENI_PLC_PASSWORD",
+                   "GENI_PLC_API_HOST",
+                   "GENI_PLC_DB_USER",
+                   "GENI_PLC_DB_PASSWORD",
                    ]
 
 
@@ -129,14 +137,6 @@ def validate(changes):
 
 def get_defaults():
     sfa_config = Config()
-    plc_vars = {'PLC_API_MAINTENANCE_PASSWORD': 'GENI_PLC_PASSWORD',
-                'PLC_API_MAINTENANCE_USER': 'GENI_PLC_USER'
-               }
-    try:
-        from sfa.util.config import plcConfig
-        plc_config = plcConfig
-    except:
-        plc_config = None
     
     defaults = {}
     for var in dir(sfa_config):
@@ -144,12 +144,6 @@ def get_defaults():
             value = eval("sfa_config.%s" % var)
             defaults[var] = value
 
-    # some defaults come from plc_config
-    for var in dir(plc_config):
-        if var in plc_vars:
-            value = eval("plc_config.%s" % var)
-            defaults[plc_vars[var]] = value
-
     return defaults       
 
 def prompt_variable(variable, default_config):
index c72e80e..7c78b0f 100644 (file)
@@ -69,7 +69,7 @@ GENI_SM_PORT=12347
 
 GENI_PLC_USER='root@localhost.localdomain'
 
-# Passowrd
+# Password
 # Password for user account
 GENI_PLC_PASSWORD='root'
 
@@ -81,3 +81,18 @@ GENI_PLC_URL='https://localhost:443/PLCAPI/'
 # Path of PLC shell. This only applies if Geni interfaces and PLC interface are running on the same 
 # machine
 GENI_PLC_SHELL_PATH='/usr/share/plc_api'
+
+# PLC DB Name
+GENI_PLC_DB_NAME='planetlab5'
+
+# PLC DB Host
+GENI_PLC_DB_HOST='www.planet-lab.org'
+
+# PLC DB port
+GENI_PLC_DB_PORT=5432
+
+# PLC DB User
+GENI_PLC_DB_USER='pgsqluser'
+
+# PLC DB Password
+GENI_PLC_DB_PASSWORD=''
diff --git a/sfa/__init__.py b/sfa/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
index d3c320f..ffd63b6 100755 (executable)
@@ -397,7 +397,11 @@ def main():
 def list(opts, args):
    global registry
    user_cred = get_user_cred()
-   list = registry.list(user_cred, args[0])
+   try:
+      list = registry.list(user_cred, args[0])
+   except IndexError:
+      raise Exception, "Not enough parameters for the 'list' command"
+      
    # filter on person, slice, site, node, etc.  
    # THis really should be in the filter_records funct def comment...
    list = filter_records(opts.type, list)
diff --git a/sfa/util/__init__.py b/sfa/util/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
index cef2fdd..b832d8f 100644 (file)
@@ -22,63 +22,35 @@ import traceback
 
 from sfa.util.debug import log
 
-# xxx the path-search part could use a cleanup; 
-# why would anyone want to store the config in /usr/share/geniwrapper at all ?
-# also, if users want to use this, it might help to store stuff in ~/.sfirc or something
-
-# this would denote "/usr/share/geniwrapper/geni"
-# geni =  join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), "geni")
-
 class Config:
     """
     Parse the bash/Python/PHP version of the configuration file. Very
     fast but no type conversions.
     """
 
-    def __init__(self, filepath = "/etc/sfa/sfa_config"):
-        # Load plc_config
-
-        loaded = False
-        # path to config.py source - this would be '/usr/share/geniwrapper/geni/util'
-        path = os.path.dirname(os.path.abspath(__file__))
-        # parent directory of config.py source
-        self.basepath = os.path.dirname(path)
-        # path to actual config file
-        filename = os.path.basename(filepath)
-        alt_file = os.path.join(path, 'util', filename)
-        files = [filepath, alt_file]
-
-        for config_file in files:
-            try:
-                execfile(config_file, self.__dict__)
-                loaded = True
-                self.config_file = config_file
-                self.config_path = os.path.dirname(config_file)
-                break
-            except:
-                pass
+    def __init__(self, config_file = "/etc/sfa/sfa_config"):
+        self.config_file = None
+        self.config_path = None
+        self.load(config_file)
 
-        if not loaded:
-            raise Exception, "Could not find config in " + ", ".join(files)
-
-        # set up some useful variables
-
-    def load(self, filepath):
+    def load(self, config_file):
         try:
-            execfile(filepath, self.__dict__)
-        except:
-            raise Exception, "Could not find config in " + filepath
+            execfile(self.config_file, self.__dict__)
+            self.config_file = config_file
+            self.config_path = os.path.dirname(config_file)
+        except IOError, e:
+            raise IOError, "Could not find the configuration file: %s" % config_file
 
-plcConfig = Config("/etc/planetlab/plc_config")
 
 def get_default_dbinfo():
-    dbinfo={ 'dbname' : plcConfig.PLC_DB_NAME,
-    'address' : plcConfig.PLC_DB_HOST,
-    'port' : plcConfig.PLC_DB_PORT,
-    'user' : plcConfig.PLC_DB_USER,
-    'password' : plcConfig.PLC_DB_PASSWORD
-       }
-
+    config = Config()
+    dbinfo={
+        'dbname' : config.GENI_PLC_DB_NAME,
+        'address' : config.GENI_PLC_DB_HOST,
+        'port' : config.GENI_PLC_DB_PORT,
+        'user' : config.GENI_PLC_DB_USER,
+        'password' : config.GENI_PLC_DB_PASSWORD
+        }
     return dbinfo
 
 ##
@@ -92,10 +64,11 @@ def get_default_dbinfo():
 # field from the dictionary. 
 
 def get_pl_auth():
-    pl_auth = {'Username': plcConfig.PLC_API_MAINTENANCE_USER,
-               'AuthMethod': 'capability',
-               'AuthString':  plcConfig.PLC_API_MAINTENANCE_PASSWORD,
-               "Url": 'https://%s:%s%s' %(plcConfig.PLC_API_HOST, plcConfig.PLC_API_PORT, plcConfig.PLC_API_PATH)
-               }
-
+    config = Config()
+    pl_auth = {
+        'Username': config.GENI_PLC_USER,
+        'AuthMethod': 'capability',
+        'AuthString':  config.GENI_PLC_PASSWORD,
+        "Url": config.GENI_PLC_URL
+        }
     return pl_auth