Exemplo n.º 1
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 = 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
Exemplo n.º 2
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]
Exemplo n.º 3
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)