X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fomf_resctl.py;h=85824e189df7de5e94bff96e32e46ebea022db15;hb=185a2e3bf48406e5184c2d9259715adc9e6fd975;hp=f6c2a8ef9d0ab08681109ec60f135645d713d1d6;hpb=44ac56ce5b9083eb8120054c60ea9ca3f3c62517;p=nodemanager.git diff --git a/plugins/omf_resctl.py b/plugins/omf_resctl.py index f6c2a8e..85824e1 100644 --- a/plugins/omf_resctl.py +++ b/plugins/omf_resctl.py @@ -41,7 +41,7 @@ config_ple_template="""--- # the path where the config is expected from within the sliver yaml_slice_path="/etc/omf_rc/config.yml" # the path for the script that we call when a change occurs -omf_rc_trigger_script="/some/path/to/the/change/script" +omf_rc_trigger_script="plc_trigger_omf_rc" def GetSlivers(data, conf = None, plc = None): logger.log("omf_resctl.GetSlivers") @@ -56,8 +56,7 @@ def GetSlivers(data, conf = None, plc = None): raise Exception 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") + logger.log("omf_resctl: PLC_OMF config unsufficient (not enabled, or no server set), -- plugin exiting") return hostname = data['hostname'] @@ -81,17 +80,32 @@ def GetSlivers(data, conf = None, plc = None): try: os.makedirs(yaml_full_dir) except OSError: pass - changes=tools.replace_file_with_string(yaml_full_path,yaml_contents) - logger.log("yaml_contents length=%d, changes=%r"%(len(yaml_contents),changes)) - if changes: + config_changes=tools.replace_file_with_string(yaml_full_path,yaml_contents) + logger.log("yaml_contents length=%d, config_changes=%r"%(len(yaml_contents),config_changes)) + # would make sense to also check for changes to authorized_keys + # would require saving a copy of that some place for comparison + # xxx todo + keys_changes = False + if config_changes or keys_changes: # instead of restarting the service we call a companion script try: - sp=subprocess.Popen([omf_rc_trigger_script], - stdout=subprocess.PIPE,stderr=subprocess.STDOUT) - (output,retcod)=sp.communicate() - logger.log("omf_resctl: %s: called OMF rc control script (retcod=%r)"%(slicename,retcod)) - logger.log("omf_resctl: got output\n%s"%output) + # the trigger script actually needs to be run in the slice context of course + # xxx we might need to use + # slice_command=['bash','-l','-c',omf_rc_trigger_script] + slice_command = [omf_rc_trigger_script] + to_run = tools.command_in_slice (slicename, slice_command) + sp=subprocess.Popen(to_run, stdout=subprocess.PIPE,stderr=subprocess.STDOUT) + (out,err)=sp.communicate() + retcod=sp.returncode + # we don't wait for that, try to display a retcod for info purpose only + # might be None if that config script lasts or hangs whatever + logger.log("omf_resctl: %s: called OMF rc control script (imm. retcod=%r)"%(slicename,retcod)) + logger.log("omf_resctl: got stdout\n%s"%out) + logger.log("omf_resctl: got stderr\n%s"%err) except: - logger.log("omf_resctl: WARNING: Could not call trigger script %s"%omf_rc_trigger_script) + import traceback + traceback.print_exc() + logger.log_exc("omf_resctl: WARNING: Could not call trigger script %s"%\ + omf_rc_trigger_script, name=slicename) else: logger.log("omf_resctl: %s: omf_control'ed sliver has no change" % slicename)