protect against missing tags in start
[nodemanager.git] / plugins / omf_resctl.py
index 87629aa..cbea3ac 100644 (file)
@@ -1,14 +1,12 @@
 #
 #
-# $Id$
-# $URL$
-#
 # NodeManager plugin - first step of handling omf_controlled slices
 # NodeManager plugin - first step of handling omf_controlled slices
+#
 
 """
 Overwrites the 'resctl' tag of slivers controlled by OMF so slivermanager.py does the right thing
 """
 
 
 """
 Overwrites the 'resctl' tag of slivers controlled by OMF so slivermanager.py does the right thing
 """
 
-import os
+import os, os.path
 import glob
 import subprocess
 
 import glob
 import subprocess
 
@@ -17,7 +15,7 @@ import logger
 
 priority = 50
 
 
 priority = 50
 
-def start(options, conf):
+def start():
     logger.log("omf_resctl: plugin starting up...")
 
 def GetSlivers(data, conf = None, plc = None):
     logger.log("omf_resctl: plugin starting up...")
 
 def GetSlivers(data, conf = None, plc = None):
@@ -27,9 +25,13 @@ def GetSlivers(data, conf = None, plc = None):
 
     try:
         xmpp_server=data['xmpp']['server']
 
     try:
         xmpp_server=data['xmpp']['server']
+        if not xmpp_server: 
+            # we have the key but no value, just as bad
+            raise Exception
     except:
         # disabled feature - bailing out
         # xxx might need to clean up more deeply..
     except:
         # disabled feature - bailing out
         # xxx might need to clean up more deeply..
+        logger.log("PLC config unsufficient (not enabled, or no server set), see the PLC_OMF category -- plugin exiting")
         return
 
     # as hrn is set only at AddNode-time, upgraded myplcs might still miss this
         return
 
     # as hrn is set only at AddNode-time, upgraded myplcs might still miss this
@@ -37,12 +39,15 @@ def GetSlivers(data, conf = None, plc = None):
     # for node in GetNodes(): UpdateNode(node['node_id'],{'hostname':node['hostname']})
     try:
         node_hrn = data['hrn']
     # for node in GetNodes(): UpdateNode(node['node_id'],{'hostname':node['hostname']})
     try:
         node_hrn = data['hrn']
-        if not hrn: raise Exception,"Empty hrn"
+        if not node_hrn: raise Exception
     except:
     except:
+        logger.log("Failed to read hrn from GetSlivers, using 'default' - *please upgrade PLCAPI*")
         node_hrn='default   # Failed to read hrn from GetSlivers, please upgrade PLCAPI'
 
     for sliver in data['slivers']:
         name=sliver['name']
         node_hrn='default   # Failed to read hrn from GetSlivers, please upgrade PLCAPI'
 
     for sliver in data['slivers']:
         name=sliver['name']
+        sliver_pub_key_dir=os.path.join("/home", name, ".ssh/")
+        sliver_private_key=os.path.join(sliver_pub_key_dir, "id_rsa")
         for chunk in sliver['attributes']:
             if chunk['tagname']=='omf_control':
                 # scan all versions of omf-resctl
         for chunk in sliver['attributes']:
             if chunk['tagname']=='omf_control':
                 # scan all versions of omf-resctl
@@ -63,8 +68,11 @@ def GetSlivers(data, conf = None, plc = None):
                     yaml_contents=template_contents\
                         .replace('@XMPP_SERVER@',xmpp_server)\
                         .replace('@NODE_HRN@',node_hrn)\
                     yaml_contents=template_contents\
                         .replace('@XMPP_SERVER@',xmpp_server)\
                         .replace('@NODE_HRN@',node_hrn)\
-                        .replace('@SLICE_NAME@',name)
+                        .replace('@SLICE_NAME@',name)\
+                        .replace('@SLIVER_PRIVATE_KEY@',sliver_private_key)\
+                        .replace('@SLIVER_PUB_KEY_DIR@',sliver_pub_key_dir)
                     changes=tools.replace_file_with_string(yaml,yaml_contents)
                     changes=tools.replace_file_with_string(yaml,yaml_contents)
+                    logger.log("yaml_contents length=%d, changes=%r"%(len(yaml_contents),changes))
                     if changes:
                         sp=subprocess.Popen(['vserver',name,'exec','service',service_name,'restart'],
                                             stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
                     if changes:
                         sp=subprocess.Popen(['vserver',name,'exec','service',service_name,'restart'],
                                             stdout=subprocess.PIPE,stderr=subprocess.STDOUT)