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']
35 if not os.path.exists("/vservers/%s" % slicename):
36 # Avoid creating slice directory if slice does not exist, as it
37 # breaks slice creation when sliver_lxc eventually gets around
38 # to creating the sliver.
39 logger.log("vserver %s does not exist yet. Skipping interfaces." % slicename)
42 for tag in sliver['attributes']:
43 if tag['tagname'] == 'interface':
44 interfaces = eval(tag['value'])
46 if not isinstance(interfaces, (list, tuple)):
47 # if interface is not a list, then make it into a singleton list
48 interfaces = [interfaces]
50 for mydict in interfaces:
52 # First look for filename/url combination for custom config files
53 if 'filename' in mydict and 'url' in mydict:
54 dest = "/vservers/%s/%s" % (slicename, mydict['filename'])
57 contents = curlwrapper.retrieve(url)
58 except xmlrpclib.ProtocolError as e:
59 logger.log('interfaces (%s): failed to retrieve %s' % (slicename, url))
62 # Otherwise generate /etc/sysconfig/network-scripts/ifcfg-<device>
64 dest = "/vservers/%s/etc/sysconfig/network-scripts/ifcfg-%s" % (slicename, mydict['DEVICE'])
66 logger.log('interfaces (%s): no DEVICE specified' % slicename)
69 for key, value in mydict.items():
70 if key in ['bridge', 'vlan']:
72 contents += '%s="%s"\n' % (key, value)
74 if sha(contents).digest() == checksum(dest):
75 logger.log('interfaces (%s): no changes to %s' % (slicename, dest))
78 logger.log('interfaces (%s): installing file %s' % (slicename, dest))
80 os.makedirs(os.path.dirname(dest))
89 logger.log('interfaces (%s): error writing file %s' % (slicename, dest))
92 result = logger.log_call(['/usr/sbin/lxcsu', slicename, '/sbin/service', 'network', 'restart'])
94 logger.log('interfaces (%s): error restarting network service' % slicename)
96 # subprocess.check_call(['/usr/sbin/lxcsu', slicename, '/sbin/service',
97 # 'network', 'restart'])
99 # logger.log('interfaces (%s): error restarting network service' % slicename)