Juniper - автоматическое обновление prefix-list по AS и AS-SET

С помощью bgpq3 (http://snar.spb.ru/prog/bgpq3/) на удаленной машине формируем  prefix-list:
Пример скрипта - 
#!/bin/bash
/usr/bin/bgpq3 -l AS1 -J AS1 > /var/www/juniper-prefix/prefix.txt
/usr/bin/bgpq3 -l AS2 -J AS2 >> /var/www/juniper-prefix/prefix.txt
/usr/bin/bgpq3 -l AS3 -J AS3 >> /var/www/juniper-prefix/prefix.txt
/usr/bin/bgpq3 -l AS4 -J AS4 >> /var/www/juniper-prefix/prefix.txt

После выполнения prefix.txt будет иметь вид:
policy-options {
replace:
 prefix-list AS1 {
    4.36.110.0/24;
    10.0.0.0/24;
    10.0.1.0/24;
    10.0.2.0/24;
    10.0.3.0/24;
    10.0.4.0/24;
    10.0.5.0/24;
    10.0.6.0/24;
    10.0.7.0/24;
    10.0.8.0/24;
    10.0.9.0/24;
    10.0.10.0/24;
    186.65.112.0/20;
 }
}
policy-options {
replace:
 prefix-list AS2 {
    1.1.2.0/24;
    64.62.96.0/24;
    205.143.159.0/24;
 }
}
....
Т.е. это готовая часть конфигурационного файла. Как видим файл мы помещаем в www-директорию. Следует заметить, что доступ к файлу разрешен только с IP juniper. Для периодического формирования prefix-list добавляем запуск скрипта в крон:
crontab -e
0 1    * * *   user /user/scripts/juniper-prefix.sh > /dev/null 2>&1

С удаленной стороной мы закончили, переходим к Juniper.
Нам надо забрать и применить файл с конфигурацией. Для этого создаем следующий скрипт:

cat /var/home/user/as-set.sh
#!/bin/sh
   cd /var/home/user
    /usr/bin/fetch http://10.1.1.1/prefix.txt
  echo "Loading and committing changes:"
  {
    echo "configure dynamic"
    echo "load replace prefix.txt"
    echo "commit check"
    echo "commit comment cron-as-set"
    echo "exit"
  } | /usr/sbin/cli
  echo "Done."

И добавляем выполнение этого скрипта в cron:
crontab -e
1 2 * * *  sh /var/home/user/as-set.sh > /var/home/user/test.log

Как видно из скрипта - для хранения листа мы используем dynamic-db. Но следует учитывать, что при выключении, перезагрузке содержимое dynamic-db удаляется. Естественно, что мы не можем ждать до 2-х часов ночи, когда будет выполнятся скрипт. Поэтому добавляем следующий скрипт в /var/db/scripts/event/  и /var/db/scripts/op/ :
% cat /var/db/scripts/event/load-prefix.slax
version 1.0;

ns junos = "http://xml.juniper.net/junos/*/junos";
ns xnm = "http://xml.juniper.net/xnm/1.1/xnm";
ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0";

import "../import/junos.xsl";

match / {
    <op-script-results> {
        var $connection = jcs:open();
        var $conf-req = <rpc> {
                                <open-configuration> {
                                        <dynamic>;
                                }
                        }
     expr jcs:execute($connection, $conf-req);
     var $load-rpc = <load-configuration url="/var/home/user/prefix.txt" action="replace" format="ascii">; 
     var $load-results = jcs:execute( $connection, $load-rpc );
     if( jcs:empty( $load-results/..//xnm:error ) ) {
           var $commit-results = jcs:execute( $connection, "commit-configuration" );
           copy-of $commit-results;
           var $unlock-results = jcs:execute( $connection, "unlock-configuration" );
           copy-of $unlock-results;
           }
      else {
            copy-of $load-results;
            var $unlock-results = jcs:execute( $connection, "unlock-configuration" );
            copy-of $unlock-results;
           }
        expr jcs:close( $connection );
    }
}

и добавляем следующие конструкции в конфиг:
system {
    scripts {
        op {
            file load-prefix.slax;
        }
    }
}

и

event-options {
    policy LOAD-PREF {
        events [ snmpd_trap_cold_start snmpd_trap_warm_start ];
        then {
            event-script load-prefix.slax;
        }
    }
    event-script {
        file load-prefix.slax;
    }
}

Собственно, на этом можно и закончить.