X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Finterfaces.py;h=bc24b4e6cac67f91016391ba0e7f056dd03916b7;hb=ac6786141feadccdc48b819ab21a825a54881ded;hp=51c7cf216f09bcf1b58f5d44f9e4e4a8be670ecf;hpb=723c15893937e6350c620f63073a691e5a447a6a;p=nodemanager.git diff --git a/plugins/interfaces.py b/plugins/interfaces.py index 51c7cf2..bc24b4e 100644 --- a/plugins/interfaces.py +++ b/plugins/interfaces.py @@ -26,58 +26,75 @@ def start(): def GetSlivers(data, config=None, plc=None): if 'slivers' not in data: - logger.log_missing_data("interfaces.GetSlivers",'slivers') + logger.log_missing_data("interfaces.GetSlivers", 'slivers') return for sliver in data['slivers']: slicename = sliver['name'] + + if not os.path.exists("/vservers/%s" % slicename): + # Avoid creating slice directory if slice does not exist, as it + # breaks slice creation when sliver_lxc eventually gets around + # to creating the sliver. + logger.log("vserver %s does not exist yet. Skipping interfaces." % slicename) + continue + for tag in sliver['attributes']: if tag['tagname'] == 'interface': - mydict = eval(tag['value']) - contents="" - # First look for filename/url combination for custom config files - if 'filename' in mydict and 'url' in mydict: - dest = "/vservers/%s/%s" % (slicename, mydict['filename']) - url = mydict['url'] - try: - contents = curlwrapper.retrieve(url) - except xmlrpclib.ProtocolError,e: - logger.log('interfaces (%s): failed to retrieve %s' % (slicename, url)) + interfaces = eval(tag['value']) + + if not isinstance(interfaces, (list, tuple)): + # if interface is not a list, then make it into a singleton list + interfaces = [interfaces] + + for mydict in interfaces: + contents="" + # First look for filename/url combination for custom config files + if 'filename' in mydict and 'url' in mydict: + dest = "/vservers/%s/%s" % (slicename, mydict['filename']) + url = mydict['url'] + try: + contents = curlwrapper.retrieve(url) + except xmlrpclib.ProtocolError as e: + logger.log('interfaces (%s): failed to retrieve %s' % (slicename, url)) + continue + else: + # Otherwise generate /etc/sysconfig/network-scripts/ifcfg- + try: + dest = "/vservers/%s/etc/sysconfig/network-scripts/ifcfg-%s" % (slicename, mydict['DEVICE']) + except: + logger.log('interfaces (%s): no DEVICE specified' % slicename) + continue + + for key, value in mydict.items(): + if key in ['bridge', 'vlan']: + continue + contents += '%s="%s"\n' % (key, value) + + if sha(contents).digest() == checksum(dest): + logger.log('interfaces (%s): no changes to %s' % (slicename, dest)) continue - else: - # Otherwise generate /etc/sysconfig/network-scripts/ifcfg- + + logger.log('interfaces (%s): installing file %s' % (slicename, dest)) try: - dest = "/vservers/%s/etc/sysconfig/network-scripts/ifcfg-%s" % (slicename, mydict['DEVICE']) + os.makedirs(os.path.dirname(dest)) + except OSError: + pass + + try: + f = open (dest, "w") + f.write(contents) + f.close() except: - logger.log('interfaces (%s): no DEVICE specified' % slicename) + logger.log('interfaces (%s): error writing file %s' % (slicename, dest)) continue - for key, value in mydict.items(): - if key in ['bridge']: - continue - contents += '%s="%s"\n' % (key, value) - - if sha(contents).digest() == checksum(dest): - logger.log('interfaces (%s): no changes to %s' % (slicename, dest)) - continue - - logger.log('interfaces (%s): installing file %s' % (slicename, dest)) - try: - os.makedirs(os.path.dirname(dest)) - except OSError: - pass - - try: - f = open (dest, "w") - f.write(contents) - f.close() - except: - logger.log('interfaces (%s): error writing file %s' % (slicename, dest)) - continue - - try: - subprocess.check_call(['/usr/sbin/lxcsu', slicename, '/sbin/service', - 'network', 'restart']) - except: - logger.log('interfaces (%s): error restarting network service' % slicename) - + result = logger.log_call(['/usr/sbin/lxcsu', slicename, '/sbin/service', 'network', 'restart']) + if not result: + logger.log('interfaces (%s): error restarting network service' % slicename) +# try: +# subprocess.check_call(['/usr/sbin/lxcsu', slicename, '/sbin/service', +# 'network', 'restart']) +# except: +# logger.log('interfaces (%s): error restarting network service' % slicename) +