X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=conf_files.py;h=24d5509d2a3f07eeffc603d5c1d557e106df6900;hb=9ce0d803975411f43ded4f8844c6eed314d670e1;hp=a7d70e87cb4bb06f1db3347de1b719e5425aef5f;hpb=b553d99a3e28444c6d65df1085ac06b1ba8f2d7d;p=nodemanager.git diff --git a/conf_files.py b/conf_files.py index a7d70e8..24d5509 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): @@ -29,7 +29,7 @@ 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) + return tools.fork_as(None, os.system, cmd) else: return 0 def update_conf_file(self, cf_rec): @@ -39,10 +39,22 @@ class conf_files: 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']) - contents = curlwrapper.retrieve(url, self.config.cacert) + try: + contents = curlwrapper.retrieve(url, self.config.cacert) + 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): return if self.system(cf_rec['preinstall_cmd']): @@ -92,7 +104,7 @@ if __name__ == '__main__': parser = optparse.OptionParser() parser.add_option('-f', '--config', action='store', dest='config', default='/etc/planetlab/plc_config', help='PLC configuration file') parser.add_option('-k', '--session', action='store', dest='session', default='/etc/planetlab/session', help='API session key (or file)') - parser.add_option('--noscripts', action='store', dest='noscripts', default=False, help='Do not run pre- or post-install scripts') + parser.add_option('--noscripts', action='store_true', dest='noscripts', default=False, help='Do not run pre- or post-install scripts') (options, args) = parser.parse_args() # Load /etc/planetlab/plc_config