Alterar a configuração usando um script de eventos
Você pode configurar uma política de eventos para alterar a configuração em resposta a um evento. As políticas de eventos podem modificar a configuração invocando um script de evento que muda e confirma a configuração ou usando a change-configuration declaração para executar comandos de modo de configuração que mudam a configuração. Os scripts de eventos oferecem mais flexibilidade do que a change-configuration declaração ao modificar a configuração. Por exemplo, scripts de eventos permitem que você verifique se há condições específicas, forneça os dados de configuração em diferentes formatos e especifique como mesclar os dados com a configuração existente. Em certos casos, por exemplo, em dispositivos de mecanismo de roteamento duplo que tenham o roteamento ativo ininterrupto (NSR) habilitado, as políticas de eventos só podem usar scripts de eventos para modificar a configuração.
As seções a seguir discutem o uso de scripts de eventos para modificar a configuração.
Como alterar a configuração usando um script de eventos SLAX ou XSLT
Os scripts de eventos SLAX e XSLT podem chamar o jcs:load-configuration modelo para fazer alterações estruturadas na configuração do Junos OS. Você deve estabelecer uma conexão com o dispositivo-alvo antes de invocar o modelo para modificar a configuração. Para obter informações sobre o modelo, veja jcs:configuração de carga e altere a configuração usando scripts SLAX e XSLT.
O script de evento SLAX a seguir abre uma conexão com o dispositivo local, chama o jcs:load-configuration modelo para modificar e comprometer a configuração e, em seguida, fecha a conexão. Todos os valores necessários para o jcs:load-configuration modelo são definidos como variáveis, que são então passados para o modelo como argumentos.
version 1.2;
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 / {
<event-script-results> {
/* Open a connection to the local device */
var $connection = jcs:open();
/* Define configuration change */
var $configuration-change = <configuration> {
<routing-options> {
<static> {
<route> {
<name>"198.51.100.0/24";
<next-hop>"10.1.3.1";
}
}
}
}
/* Load and commit the configuration */
var $load-action = "merge";
var $options := {
<commit-options> {
<log> "Configuration modified through event script";
}
}
var $results := { call jcs:load-configuration($connection, $action=$load-action, $configuration=$configuration-change, $commit-options=$options); }
/* Close the connection */
var $close-results = jcs:close($connection);
}
}
Para configurar uma política de eventos que invoca o script de eventos SLAX para um determinado evento:
Como mudar a configuração usando um script de evento python
Os scripts de Python podem usar a biblioteca Junos PyEZ para fazer alterações na configuração em dispositivos que executam o Junos OS. O utilitário Junos PyEZ jnpr.junos.utils.config.Config oferece métodos de instância para bloquear, carregar, comprometer e desbloquear a configuração.
O script de evento do Python a seguir se conecta ao dispositivo local e atualiza e confirma a configuração.
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
import jcs
with Device() as dev:
with Config(dev) as cu:
cu.load("set routing-options static route 198.51.100.0/24 next-hop 10.1.3.1", format="set")
cu.commit(comment="Configuration modified through event script", timeout=300)
Para configurar uma política de eventos que invoca o script de eventos Python para um determinado evento:
Para obter mais informações sobre como usar o Junos PyEZ para configurar dispositivos em execução do Junos OS, consulte o Junos PyEZ Developer Guide.
Como mudar a configuração usando scripts de eventos em dispositivos que tenham o roteamento ativo ininterrupto habilitado
Quando você usa uma política de eventos para alterar a configuração em um dispositivo dual Routing Engine que tenha o roteamento ativo ininterrupto (NSR) habilitado, recomendamos que a política de eventos invoque um script de eventos que comprometa a configuração atualizada apenas no mecanismo de roteamento primário. Isso ajuda a garantir que a atualização para a configuração e a operação de confirmação subsequente sejam bem sucedidas em ambos os mecanismos de roteamento. A configuração é sincronizada automaticamente com o mecanismo de roteamento de backup, porque a commit synchronize declaração está configurada no [edit system] nível de hierarquia como parte da configuração do NSR. Alternativamente, se você usar a change-configuration declaração para modificar a configuração ou se o script do evento não confirmar a alteração apenas no mecanismo de roteamento primário, ambos os mecanismos de roteamento podem simultaneamente tentar adquirir um bloqueio no banco de dados de configuração, fazendo com que um ou ambos se comprometam a falhar.
Para criar um script de eventos que configure e comprometa apenas a configuração no mecanismo de roteamento primário, inclua a lógica que testa se o mecanismo de roteamento atual é o mecanismo de roteamento primário. Se o mecanismo de roteamento atual for o mecanismo de roteamento principal, atualize a configuração e a comprometa.
O script de eventos SLAX a seguir se conecta ao dispositivo local e verifica se o mecanismo de roteamento atual é o mecanismo de roteamento principal. Se for o mecanismo de roteamento principal, o script atualiza a configuração e depois a confirma.
version 1.2;
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 / {
<event-script-results> {
/* Retrieve chassis information */
var $rpc = <get-chassis-inventory>;
var $chassis_rpc = jcs:invoke($rpc);
var $current_state = $chassis_rpc/chassis/name;
/* Open a connection to the local device */
var $connection = jcs:open();
/* Define configuration change */
var $configuration-change = <configuration> {
<routing-options> {
<static> {
<route> {
<name>"198.51.100.0/24";
<next-hop>"10.1.3.1";
}
}
}
}
/* Load and commit the configuration */
var $load-action = "merge";
var $options := {
<commit-options> {
<log> "Configuration modified through event script";
}
}
if ($current_state == "Chassis") {
var $results := { call jcs:load-configuration($connection, $action=$load-action, $configuration = $configuration-change, $commit-options=$options); }
}
/* Close the connection */
var $close-results = jcs:close($connection);
}
}
Da mesma forma, o script de evento python a seguir se conecta ao dispositivo local e apenas atualiza e confirma a configuração se o mecanismo de roteamento atual for o mecanismo de roteamento principal:
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
import jcs
with Device() as dev:
if("master" in dev.facts["current_re"]):
with Config(dev) as cu:
cu.load("set routing-options static route 198.51.100.0/24 next-hop 10.1.3.1", format="set")
cu.commit(comment="Configuration modified through event script", timeout=300)