From 90668609eae4e235122c2364220488537142adaa Mon Sep 17 00:00:00 2001 From: smbaker Date: Mon, 7 Jan 2013 15:10:10 -0800 Subject: [PATCH] support passing a list of dicts as the slice interface tag to configure multiple interfaces --- plugins/interfaces.py | 88 +++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 41 deletions(-) diff --git a/plugins/interfaces.py b/plugins/interfaces.py index 8563696..45fd183 100644 --- a/plugins/interfaces.py +++ b/plugins/interfaces.py @@ -33,51 +33,57 @@ def GetSlivers(data, config=None, plc=None): slicename = sliver['name'] 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)) - 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 + 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 key, value in mydict.items(): - if key in ['bridge', 'vlan']: + 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,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 - contents += '%s="%s"\n' % (key, value) - if sha(contents).digest() == checksum(dest): - logger.log('interfaces (%s): no changes to %s' % (slicename, dest)) - continue + for key, value in mydict.items(): + if key in ['bridge', 'vlan']: + continue + contents += '%s="%s"\n' % (key, value) - logger.log('interfaces (%s): installing file %s' % (slicename, dest)) - try: - os.makedirs(os.path.dirname(dest)) - except OSError: - pass + if sha(contents).digest() == checksum(dest): + logger.log('interfaces (%s): no changes to %s' % (slicename, dest)) + continue - try: - f = open (dest, "w") - f.write(contents) - f.close() - except: - logger.log('interfaces (%s): error writing file %s' % (slicename, dest)) - continue + logger.log('interfaces (%s): installing file %s' % (slicename, dest)) + try: + os.makedirs(os.path.dirname(dest)) + except OSError: + pass - try: - subprocess.check_call(['/usr/sbin/lxcsu', slicename, '/sbin/service', - 'network', 'restart']) - except: - logger.log('interfaces (%s): error restarting network service' % slicename) + 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) -- 2.43.0