X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=conf_files.py;h=fd926a5c4da4960f283f322e6d1289fc12704096;hb=9ae0bc640aa7bd9f40b4ea755b89c878ce7de8cb;hp=5d1cb5614295dc194a368bb45ece322447e7c131;hpb=4462c5aa0fe45673f05a414d9cff10567c9fb3c1;p=nodemanager.git diff --git a/conf_files.py b/conf_files.py index 5d1cb56..fd926a5 100644 --- a/conf_files.py +++ b/conf_files.py @@ -10,7 +10,7 @@ import threading import curlwrapper import logger import tools - +import xmlrpclib class conf_files: def __init__(self, config, noscripts=False): @@ -28,23 +28,42 @@ class conf_files: def system(self, cmd): if not self.noscripts and cmd: - logger.log('conf_files: running command %s' % cmd) - return os.system(cmd) + logger.verbose('conf_files: running command %s' % cmd) + return tools.fork_as(None, os.system, cmd) else: return 0 def update_conf_file(self, cf_rec): if not cf_rec['enabled']: return dest = cf_rec['dest'] - # XXX Remove once old Node Manager is out of service - if dest == '/etc/proper/propd.conf': return err_cmd = cf_rec['error_cmd'] mode = string.atoi(cf_rec['file_permissions'], base=8) - uid = pwd.getpwnam(cf_rec['file_owner'])[2] - gid = grp.getgrnam(cf_rec['file_group'])[2] + try: + uid = pwd.getpwnam(cf_rec['file_owner'])[2] + except: + logger.log('conf_files: cannot find user %s -- %s not updated'%(cf_rec['file_owner'],dest)) + return + try: + gid = grp.getgrnam(cf_rec['file_group'])[2] + except: + logger.log('conf_files: cannot find group %s -- %s not updated'%(cf_rec['file_group'],dest)) + return url = 'https://%s/%s' % (self.config.PLC_BOOT_HOST, cf_rec['source']) + # set node_id at the end of the request - hacky + if tools.node_id(): + if url.find('?') >0: url += '&' + else: url += '?' + url += "node_id=%d"%tools.node_id() + else: + logger.log('%s -- WARNING, cannot add node_id to request'%dest) + # pass slicefamily as well, as stored in /etc/planetlab/slicefamily ont the node + if tools.slicefamily(): + if url.find('?') >0: url += '&' + else: url += '?' + url += "slicefamily=%s"%tools.slicefamily() try: + logger.verbose("retrieving URL=%s"%url) contents = curlwrapper.retrieve(url, self.config.cacert) - except curlwrapper.CurlException: + except xmlrpclib.ProtocolError,e: logger.log('conf_files: failed to retrieve %s from %s, skipping' % (dest, url)) return if not cf_rec['always_update'] and sha.new(contents).digest() == self.checksum(dest):