예제 #1
0
    def _generate_config_file(self, template_type):
        """Load a template and write a file with the rended output.

        Args: 2-dimension dictionary with equipments information for template
              rendering equipment to render template to template type to load.

        Returns: filename with relative path to settings.TFTPBOOT_FILES_PATH
        """

        config_to_be_saved = ''
        request_id = getattr(local, 'request_id', NO_REQUEST_ID)

        filename_out = 'network_equip%s_config_%s' % (self.equipment.id,
                                                      request_id)

        filename_to_save = BGP_CONFIG_FILES_PATH + filename_out
        rel_file_to_deploy = BGP_CONFIG_TOAPPLY_REL_PATH + filename_out

        try:
            template_file = self._load_template_file(template_type)
            key_dict = self._generate_template_dict()
            config_to_be_saved += template_file.render(Context(key_dict))
        except KeyError, exception:
            log.error('Erro: %s ' % exception)
            raise exceptions.InvalidKeyException(exception)
예제 #2
0
    def _get_template_config(self, template_type, config):
        """Load template file and render values in VARs"""

        try:
            template_file = self._load_template_file(template_type)
            config_to_be_saved = template_file.render(Context(config))

        except KeyError as err:
            log.error('Error: %s', err)
            raise deploy_exc.InvalidKeyException(err)

        except Exception as err:
            log.error('Error: %s ' % err)
            raise self.exceptions.BGPTemplateException(err)
        return config_to_be_saved
예제 #3
0
def deploy_sync_copy_script_to_equipment(request, equipment_id):
    """
    Deploy configuration on equipment(s)
    Default source: TFTP SERVER
    Default destination: apply config (running-config)
    Default protocol: tftp
    Receives script
    """

    try:
        script = request.DATA['script_data']
        request_identifier = request.DATA['identifier']
        script_file = facade.create_file_from_script(
            script, USER_SCRIPTS_REL_PATH)
        equipment_id = int(equipment_id)
        lockvar = LOCK_EQUIPMENT_DEPLOY_CONFIG_USERSCRIPT % (equipment_id)
        data = dict()
        if request_identifier is not None:
            queue_manager = QueueManager(broker_vhost='tasks',
                                         queue_name='tasks.aclapi',
                                         exchange_name='tasks.aclapi',
                                         routing_key='tasks.aclapi')
            data = {'timestamp': int(time.time())}
            queue_manager.append({
                'action': queue_keys.BEGIN_DEPLOY_SYNC_SCRIPT,
                'identifier': request_identifier,
                'data': data})
            queue_manager.send()
        data['output'] = facade.deploy_config_in_equipment_synchronous(
            script_file, equipment_id, lockvar)
        data['status'] = 'OK'
        if request_identifier is not None:
            queue_manager = QueueManager(broker_vhost='tasks',
                                         queue_name='tasks.aclapi',
                                         exchange_name='tasks.aclapi',
                                         routing_key='tasks.aclapi')
            data = {'timestamp': int(time.time()), 'status': 'OK'}
            queue_manager.append({'action': queue_keys.END_DEPLOY_SYNC_SCRIPT,
                                  'identifier': request_identifier, 'data': data})
            queue_manager.send()
        return Response(data)

    except KeyError, key:
        log.error(key)
        raise exceptions.InvalidKeyException(key)
예제 #4
0
        # Check equipment permissions
        for id_equip in id_equips:
            # TODO
            pass

        output_data = dict()

        script_file = facade.create_file_from_script(
            script, USER_SCRIPTS_REL_PATH)
        for id_equip in id_equips:
            equipment_id = int(id_equip)
            lockvar = LOCK_EQUIPMENT_DEPLOY_CONFIG_USERSCRIPT % (equipment_id)
            output_data[equipment_id] = dict()
            try:
                output_data[equipment_id]['output'] = facade.deploy_config_in_equipment_synchronous(
                    script_file, equipment_id, lockvar)
                output_data[equipment_id]['status'] = 'OK'
            except Exception, e:
                log.error('Error applying script file to equipment_id %s: %s' % (
                    equipment_id, e))
                output_data[equipment_id]['output'] = str(e)
                output_data[equipment_id]['status'] = 'ERROR'

        return Response(output_data)
    except KeyError, key:
        log.error(key)
        raise exceptions.InvalidKeyException(key)
    except Exception, exception:
        log.error(exception)
        raise api_exceptions.NetworkAPIException()