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 interfaces = eval(tag['value'])
38 if not isinstance(interfaces, (list,tuple)):
39 # if interface is not a list, then make it into a singleton list
40 interfaces = [interfaces]
42 for mydict in interfaces:
44 # First look for filename/url combination for custom config files
45 if 'filename' in mydict and 'url' in mydict:
46 dest = "/vservers/%s/%s" % (slicename, mydict['filename'])
49 contents = curlwrapper.retrieve(url)
50 except xmlrpclib.ProtocolError,e:
51 logger.log('interfaces (%s): failed to retrieve %s' % (slicename, url))
54 # Otherwise generate /etc/sysconfig/network-scripts/ifcfg-<device>
56 dest = "/vservers/%s/etc/sysconfig/network-scripts/ifcfg-%s" % (slicename, mydict['DEVICE'])
58 logger.log('interfaces (%s): no DEVICE specified' % slicename)
61 for key, value in mydict.items():
62 if key in ['bridge', 'vlan']:
64 contents += '%s="%s"\n' % (key, value)
66 if sha(contents).digest() == checksum(dest):
67 logger.log('interfaces (%s): no changes to %s' % (slicename, dest))
70 logger.log('interfaces (%s): installing file %s' % (slicename, dest))
72 os.makedirs(os.path.dirname(dest))
81 logger.log('interfaces (%s): error writing file %s' % (slicename, dest))
84 result = logger.log_call(['/usr/sbin/lxcsu', slicename, '/sbin/service network restart'])
86 logger.log('interfaces (%s): error restarting network service' % slicename)
88 # subprocess.check_call(['/usr/sbin/lxcsu', slicename, '/sbin/service',
89 # 'network', 'restart'])
91 # logger.log('interfaces (%s): error restarting network service' % slicename)