2 Configure interfaces inside a container by pulling down files via URL.
10 from hashlib import sha1 as sha
18 try: return sha(f.read()).digest()
24 logger.log("interfaces: plugin starting up...")
26 def GetSlivers(data, config=None, plc=None):
28 if 'slivers' not in data:
29 logger.log_missing_data("interfaces.GetSlivers",'slivers')
32 for sliver in data['slivers']:
33 slicename = sliver['name']
34 for tag in sliver['attributes']:
35 if tag['tagname'] == 'interface':
36 mydict = eval(tag['value'])
38 # First look for filename/url combination for custom config files
39 if 'filename' in mydict and 'url' in mydict:
40 dest = "/vservers/%s/%s" % (slicename, mydict['filename'])
43 contents = curlwrapper.retrieve(url)
44 except xmlrpclib.ProtocolError,e:
45 logger.log('interfaces (%s): failed to retrieve %s' % (slicename, url))
48 # Otherwise generate /etc/sysconfig/network-scripts/ifcfg-<device>
50 dest = "/vservers/%s/etc/sysconfig/network-scripts/ifcfg-%s" % (slicename, mydict['DEVICE'])
52 logger.log('interfaces (%s): no DEVICE specified' % slicename)
55 for key, value in mydict.items():
56 if key in ['bridge', 'vlan']:
58 contents += '%s="%s"\n' % (key, value)
60 if sha(contents).digest() == checksum(dest):
61 logger.log('interfaces (%s): no changes to %s' % (slicename, dest))
64 logger.log('interfaces (%s): installing file %s' % (slicename, dest))
66 os.makedirs(os.path.dirname(dest))
75 logger.log('interfaces (%s): error writing file %s' % (slicename, dest))
79 subprocess.check_call(['/usr/sbin/lxcsu', slicename, '/sbin/service',
80 'network', 'restart'])
82 logger.log('interfaces (%s): error restarting network service' % slicename)