def update_conf_file(self, cf_rec): if not cf_rec['enabled']: return dest = cf_rec['dest'] err_cmd = cf_rec['error_cmd'] mode = string.atoi(cf_rec['file_permissions'], base=8) try: uid = pwd.getpwnam(cf_rec['file_owner'])[2] except: logger.log('conf_files: cannot find user %s -- %s not updated'%(cf_rec['file_owner'],dest)) return try: gid = grp.getgrnam(cf_rec['file_group'])[2] except: logger.log('conf_files: cannot find group %s -- %s not updated'%(cf_rec['file_group'],dest)) return url = 'https://%s/%s' % (self.config.PLC_BOOT_HOST, cf_rec['source']) # set node_id at the end of the request - hacky if tools.node_id(): if url.find('?') >0: url += '&' else: url += '?' url += "node_id=%d"%tools.node_id() else: logger.log('conf_files: %s -- WARNING, cannot add node_id to request'%dest) try: logger.verbose("conf_files: retrieving URL=%s"%url) contents = curlwrapper.retrieve(url, self.config.cacert) except xmlrpclib.ProtocolError,e: logger.log('conf_files: failed to retrieve %s from %s, skipping' % (dest, url)) return
def request(self, host, handler, request_body, verbose=0): self.verbose = verbose url='https://%s%s' % (host, handler) # this might raise an xmlrpclib.Protocolerror exception contents = curlwrapper.retrieve(url, cacert = self.cacert, postdata = request_body, timeout = self.timeout) return xmlrpclib.loads(contents)[0]
def request(self, host, handler, request_body, verbose=0): self.verbose = verbose url = 'https://%s%s' % (host, handler) # this might raise an xmlrpclib.Protocolerror exception contents = curlwrapper.retrieve(url, cacert=self.cacert, postdata=request_body, timeout=self.timeout) return xmlrpclib.loads(contents)[0]
def update_conf_file(self, cf_rec): if not cf_rec['enabled']: return dest = cf_rec['dest'] err_cmd = cf_rec['error_cmd'] mode = int(cf_rec['file_permissions'], base=8) try: uid = pwd.getpwnam(cf_rec['file_owner'])[2] except: logger.log('conf_files: cannot find user %s -- %s not updated' %(cf_rec['file_owner'], dest)) return try: gid = grp.getgrnam(cf_rec['file_group'])[2] except: logger.log('conf_files: cannot find group %s -- %s not updated' %(cf_rec['file_group'], dest)) return url = 'https://%s/%s' % (self.config.PLC_BOOT_HOST, cf_rec['source']) # set node_id at the end of the request - hacky if tools.node_id(): if url.find('?') > 0: url += '&' else: url += '?' url += "node_id=%d"%tools.node_id() else: logger.log('conf_files: %s -- WARNING, cannot add node_id to request' % dest) try: logger.verbose("conf_files: retrieving URL=%s"%url) contents = curlwrapper.retrieve(url, self.config.cacert) except xmlrpc.client.ProtocolError as e: logger.log('conf_files: failed to retrieve %s from %s, skipping' % (dest, url)) return if not cf_rec['always_update'] and sha(contents).digest() == self.checksum(dest): return if self.system(cf_rec['preinstall_cmd']): self.system(err_cmd) if not cf_rec['ignore_cmd_errors']: return logger.log('conf_files: installing file %s from %s' % (dest, url)) try: os.makedirs(os.path.dirname(dest)) except OSError: pass tools.write_file(dest, lambda f: f.write(contents.decode()), mode=mode, uidgid=(uid, gid)) if self.system(cf_rec['postinstall_cmd']): self.system(err_cmd)
def GetSlivers(data, config=None, plc=None): if 'slivers' not in data: 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': 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 xmlrpc.client.ProtocolError as e: logger.log('interfaces (%s): failed to retrieve %s' % (slicename, url)) continue else: # Otherwise generate /etc/sysconfig/network-scripts/ifcfg-<device> 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 list(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 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 # TD: Call lxcsu with '-r'. Otherwise, setns.drop_caps() would remove then required CAP_NET_ADMIN capability! result = logger.log_call(['/usr/sbin/lxcsu', '-r', slicename, '/sbin/service', 'network', 'restart']) if not result: logger.log('interfaces (%s): error restarting network service' % slicename)
def GetSlivers(data, config=None, plc=None): if 'slivers' not in data: logger.log_missing_data("interfaces.GetSlivers",'slivers') return for sliver in data['slivers']: slicename = sliver['name'] for tag in sliver['attributes']: if tag['tagname'] == 'interface': 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,e: logger.log('interfaces (%s): failed to retrieve %s' % (slicename, url)) continue else: # Otherwise generate /etc/sysconfig/network-scripts/ifcfg-<device> 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 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)
def GetSlivers(data, config=None, plc=None): if 'slivers' not in data: logger.log_missing_data("interfaces.GetSlivers", 'slivers') return for sliver in data['slivers']: slicename = sliver['name'] for tag in sliver['attributes']: if tag['tagname'] == 'interface': 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, e: logger.log( 'interfaces (%s): failed to retrieve %s' % (slicename, url)) continue else: # Otherwise generate /etc/sysconfig/network-scripts/ifcfg-<device> 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 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)