Carga de archivos de configuración
La carga de archivos de configuración en el dispositivo es útil para cargar partes de archivos de configuración que pueden ser comunes en muchos dispositivos dentro de una red.
Ejemplos para cargar una configuración desde un archivo o el terminal
Puede crear un archivo que contenga datos de configuración para un dispositivo de Juniper Networks, copiar el archivo en el dispositivo local y, luego, cargarlo en la CLI. Después de cargar el archivo, puede confirmarlo para activar la configuración en el dispositivo, o bien puede editar la configuración de forma interactiva mediante la CLI y confirmar la configuración más adelante.
También puede crear una configuración mientras escribe en el terminal y luego cargar la configuración. La carga de una configuración desde el terminal resulta útil cuando se cortan partes existentes de la configuración y se pegan en otra parte de la configuración.
Para cargar un archivo de configuración existente que se encuentra en el dispositivo, use el comando del modo de load configuración:
[edit] user@host# load (factory-default | merge | override | patch | replace | set | update) filename <relative> <json>
Para cargar una configuración desde el terminal, utilice la siguiente versión del comando del load modo de configuración. Presione Ctrl-d para finalizar la entrada.
[edit] user@host# load (factory-default | merge | override | patch | replace | set | update) terminal <relative> <json>
Para reemplazar una configuración completa, especifique la override opción en cualquier nivel de la jerarquía. Una load override operación sustituye por completo la configuración candidata actual por el archivo que está cargando. Por lo tanto, si guardó una configuración completa, utilice esta opción.
Una override operación descarta la configuración candidata actual y carga la configuración en filename o la configuración que escriba en el terminal. Cuando usa esta override opción y confirma la configuración, todos los procesos del sistema vuelven a analizar la configuración.
Para reemplazar partes de una configuración, especifique la replace opción. La load replace operación busca replace: las etiquetas que agregó al archivo cargado. Luego, la operación reemplaza esas partes de la configuración candidata con lo que se especifica después de la etiqueta. Esto es útil cuando desea tener más control sobre exactamente lo que se está cambiando. Para que esta operación funcione, debe incluir replace: etiquetas en el archivo o la configuración que escriba en el terminal. El software busca las replace: etiquetas, elimina las instrucciones existentes con el mismo nombre, si las hay, y las sustituye por la configuración entrante. Si no existe ninguna instrucción con el mismo nombre, la replace operación agrega a la configuración las instrucciones marcadas con la replace: etiqueta.
Si, en una override operación o merge , especifica un archivo o escribe texto que contiene replace: etiquetas, las replace: etiquetas se omiten. En este escenario, la override operación o merge tiene prioridad y se realiza.
Si está realizando una replace operación y si el archivo especificado carece de replace: etiquetas, la replace operación se ejecuta como una merge operación. La replace operación también se ejecuta como una merge operación si el texto que escribe carece de replace: etiquetas. Esta información puede ser útil si está ejecutando scripts automatizados y no puede saber de antemano si los scripts necesitan realizar una replace operación o una merge operación. Los scripts pueden usar la replace operación para cubrir cualquiera de los casos.
La load merge operación fusiona la configuración del archivo o terminal guardado con la configuración candidata existente. Esta información es útil si va a agregar nuevas secciones de configuración. Por ejemplo, suponga que va a agregar una configuración de BGP al nivel de [edit protocols] jerarquía, donde antes no había ninguna configuración de BGP. Puede utilizar la load merge operación para combinar la configuración entrante con la configuración candidata existente. Si la configuración existente y la configuración entrante contienen instrucciones contradictorias, las instrucciones de la configuración entrante anulan las de la configuración existente.
Para reemplazar solo las partes de la configuración que han cambiado, especifique la update opción en cualquier nivel de la jerarquía. La load update operación compara la configuración candidata y los datos de configuración nueva. Esta operación solo cambia las partes de la configuración candidata que son diferentes de la nueva configuración. Usaría esta operación, por ejemplo, si existe una configuración de BGP y el archivo que está cargando la cambia de alguna manera.
Las mergeopciones , overridey update admiten la carga de datos de configuración en formato de notación de objetos JavaScript (JSON). Cuando cargue datos de configuración que utilicen formato JSON, debe especificar la json opción en el comando. Para cargar datos de configuración JSON que contienen entradas de lista desordenadas, es decir, entradas de lista en las que la clave de lista no es necesariamente el primer elemento de la entrada de lista, consulte Carga de datos de configuración JSON con entradas de lista desordenadas.
Para cambiar parte de la configuración con un archivo de parche, especifique la patch opción. La load patch operación carga un archivo o una entrada de terminal que contiene los cambios de configuración. Primero, en un dispositivo que ya tiene los cambios de configuración, escriba el show | compare comando para generar las diferencias entre dos configuraciones. Luego, puede cargar las diferencias en otro dispositivo. La ventaja del comando es que le evita tener que copiar fragmentos de diferentes niveles de jerarquía en un archivo de texto antes de cargarlos en el dispositivo de load patch destino. Esto puede ser útil para ahorrar tiempo si está configurando varios dispositivos con las mismas opciones. Por ejemplo, supongamos que configura una política de enrutamiento en el enrutador1 y desea replicar la configuración de la política en el enrutador2, el enrutador 3 y el enrutador4. Puede usar la load patch operación.
En este ejemplo, primero ejecute el show | compare comando.
Ejemplo:
user@router1# show | compare rollback 3
[edit protocols ospf]
+ export default-static;
- export static-default
[edit policy-options]
+ policy-statement default-static {
+ from protocol static;
+ then accept;
+ }
Continuando con este ejemplo, copie la salida del show | compare comando en el portapapeles y asegúrese de incluir los niveles de jerarquía. En el enrutador 2, el enrutador 3 y el enrutador 4, escriba load patch terminal y pegue el resultado. A continuación, presione Enter y presione Ctrl-d para finalizar la operación. Si la entrada de parche especifica valores diferentes para una instrucción existente, la entrada de parche anula la instrucción existente.
Para usar la mergeopción , replace, seto update sin especificar el nivel de jerarquía completo, especifique la relative opción. Esta opción carga la configuración entrante en relación con el punto de edición actual en la jerarquía de configuración.
Ejemplo:
[edit system]
user@host# show static-host-mapping
bob sysid 987.654.321ab
[edit system]
user@host# load replace terminal relative
[Type ^D at a new line to end input]
replace: static-host-mapping {
bob sysid 0123.456.789bc;
}
load complete
[edit system]
user@host# show static-host-mapping
bob sysid 0123.456.789bc;
Para cargar una configuración que contenga set comandos de modo de configuración, especifique la set opción. Esta opción ejecuta las instrucciones de configuración línea por línea a medida que se almacenan en un archivo o desde un terminal. Las instrucciones pueden contener cualquier comando de modo de configuración, como set, edit, exity top.
Para copiar un archivo de configuración de otro sistema de red al enrutador local, puede utilizar las utilidades SSH y Telnet, tal como se describe en el Explorador de CLI.
Si trabaja en un entorno de Common Criterios, los mensajes de registro del sistema se crean cada vez que se cambia un secret atributo (por ejemplo, cambios de contraseña o cambios en el secreto compartido de RADIUS). Estos cambios se registran durante las siguientes operaciones de carga de configuración:
load merge load replace load override load update
Cómo funciona la codificación de caracteres en dispositivos de Juniper Networks
Los datos de configuración y la salida del comando operativo de Junos OS evolucionado pueden contener caracteres no ASCII, que están fuera del juego de caracteres ASCII de 7 bits. Cuando se muestran datos operativos o de configuración en determinados formatos o dentro de un determinado tipo de sesión, el software escapa y codifica estos caracteres. El software escapa o codifica los caracteres utilizando la referencia de caracteres decimales UTF-8 equivalente.
La CLI intenta mostrar cualquier carácter no ASCII en los datos de configuración que se producen en formato de texto, conjunto o JSON. La CLI también intenta mostrar estos caracteres en la salida de comandos que se produce en formato de texto. En los casos excepcionales, la CLI muestra la referencia de caracteres decimales UTF-8 en su lugar. (Los casos de excepción incluyen los datos de configuración en formato XML y la salida de comandos en formato XML o JSON). En las sesiones de protocolo XML de NETCONF y Junos, verá un resultado similar si solicita datos de configuración o salida de comando que contiene caracteres que no son ASCII. En este caso, el servidor devuelve la referencia de caracteres decimales UTF-8 equivalente para esos caracteres para todos los formatos.
Por ejemplo, supongamos que la siguiente cuenta de usuario, que contiene la letra minúscula latina n con una tilde (ñ), está configurada en el dispositivo.
[edit] user@host# set system login user mariap class super-user uid 2007 full-name "Maria Peña"
Cuando se muestra la configuración resultante en formato de texto, la CLI imprime el carácter correspondiente.
[edit] user@host# show system login user mariap full-name "Maria Peña"; uid 2007; class super-user;
Cuando se muestra la configuración resultante en formato XML en la CLI, el carácter ñ se asigna a su referencia ñde caracteres decimales UTF-8 equivalente. El mismo resultado se produce si muestra la configuración en cualquier formato en una sesión de protocolo XML de NETCONF o Junos.
[edit]
user@host# show system login user mariap | display xml
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/17.2R1/junos">
<configuration junos:changed-seconds="1494033077" junos:changed-localtime="2017-05-05 18:11:17 PDT">
<system>
<login>
<user>
<name>mariap</name>
<full-name>Maria Peña</full-name>
<uid>2007</uid>
<class>super-user</class>
</user>
</login>
</system>
</configuration>
<cli>
<banner>[edit]</banner>
</cli>
</rpc-reply>
Cuando carga datos de configuración en un dispositivo, puede cargar caracteres que no sean ASCII utilizando sus referencias de caracteres decimales UTF-8 equivalentes.
Acerca de la especificación de instrucciones e identificadores
En este tema se proporcionan detalles acerca de las instrucciones de contenedor y las instrucciones leaf de la CLI para que sepa cómo deben especificarlas al crear archivos de configuración ASCII. En este tema también se describe cómo la CLI lleva a cabo la comprobación de tipos para comprobar que los datos especificados tienen el formato correcto.
Especificación de instrucciones
Las instrucciones se muestran de dos maneras, ya sea con llaves ({ }) o sin:
-
Nombre e identificador de la instrucción, con una o más instrucciones de nivel inferior entre llaves:
statement-name1 identifier-name { statement-name2; additional-statements; } -
Nombre de la instrucción, identificador y un único identificador:
statement-name identifier-name1 identifier-name2;
El statement-name es el nombre de la declaración. The identifier-name es un nombre u otra cadena que identifica de forma exclusiva una instancia de una instrucción. Utilice un identificador cuando una instrucción se puede especificar más de una vez en una configuración.
Al especificar una instrucción, debe especificar un nombre de instrucción, un nombre de identificador o ambos, según la jerarquía de instrucciones.
Los identificadores se especifican de una de las maneras siguientes:
-
identifier-name: es identifier-name una palabra clave que se utiliza para identificar de forma exclusiva una instrucción cuando una declaración se puede especificar más de una vez en una declaración.
-
identifier-name value: es identifier-name una palabra clave y es value una variable de opción obligatoria.
-
identifier-name [value1 value2 value3
...]—Es identifier-name una palabra clave que acepta varios valores. Los corchetes son necesarios cuando se especifica un conjunto de valores; sin embargo, son opcionales cuando se especifica solo un valor.
Los ejemplos siguientes ilustran cómo se especifican las instrucciones e identificadores en la configuración:
protocol { # Top-level statement (statement-name).
ospf { # Statement under "protocol" (statement-name).
area 0.0.0.0 { # OSPF area "0.0.0.0" (statement-name identifier-name),
interface et-0/0/0 { # which contains an interface named "et-0/0/0."
hello-interval 25; # Identifier and value (identifier-name value).
priority 2; # Identifier and value (identifier-name value).
disable; # Flag identifier (identifier-name).
}
interface et-0/0/1; # Another instance of "interface," named et-0/0/1,
} # this instance contains no data, so no braces
} # are displayed.
}
policy-options { # Top-level statement (statement-name).
term term1 { # Statement under "policy-options"
# (statement-name value).
from { # Statement under "term" (statement-name).
route-filter 10.0.0.0/8 orlonger reject; # One identifier ("route-filter") with
route-filter 127.0.0.0/8 orlonger reject; # multiple values.
route-filter 128.0.0.0/16 orlonger reject;
route-filter 149.20.64.0/24 orlonger reject;
route-filter 172.16.0.0/12 orlonger reject;
route-filter 191.255.0.0/16 orlonger reject;
}
then { # Statement under "term" (statement-name).
next term; # Identifier (identifier-name).
}
}
}
Cuando se crea un archivo de configuración ASCII, se especifican instrucciones e identificadores. Cada instrucción tiene un estilo preferido y la CLI lo utiliza cuando muestra la configuración en respuesta a un comando de modo show de configuración. Puede especificar instrucciones e identificadores de una de las siguientes maneras:
-
Declaración seguida de identificadores:
statement-name identifier-name [...] identifier-name value [...];
-
Declaración seguida de identificadores entre llaves:
statement-name { identifier-name; [...] identifier-name value; [...] } -
Para algunos identificadores repetidos, puede usar un conjunto de llaves para todas las instrucciones:
statement-name { identifier-name value1; identifier-name value2; }
Realización de la comprobación del tipo de CLI
Cuando se especifican identificadores y valores, la CLI comprueba el tipo para comprobar que los datos que ha introducido tienen el formato correcto. Por ejemplo, para una instrucción en la que debe especificar una dirección IP, la CLI requiere que escriba una dirección en un formato válido. De lo contrario, aparecerá un mensaje de error que indicará lo que debe escribir. enumera los tipos de datos que comprueba la CLI. Los siguientes son tipos de entrada de configuración de CLI:
| Tipo de datos |
Formato |
Ejemplos |
|---|---|---|
| Nombre de interfaz física (utilizado en la jerarquía [ |
|
Correct: Incorrect: |
| Nombre completo de la interfaz |
|
Correct: Incorrect: |
| Nombre de interfaz completo o abreviado (utilizado en lugares distintos de la jerarquía [ |
|
Correct: |
| Dirección IP |
|
Correct: Sample translations:
|
| Dirección IP (prefijo de destino) y longitud del prefijo |
|
Correct: Sample translations:
|
| Dirección de la Organización Internacional de Normalización (ISO) |
|
Correct: Sample translations:
|
| Identificador de área (ID) de OSPF |
|
Correct: Sample translations:
|
Acerca de la carga de una configuración desde un archivo
En los ejemplos siguientes se muestra el proceso de carga de una configuración desde un archivo.
| Configuración actual: interfaces {
Io0 {
unit 0 {
family inet {
address 127.0.0.1;
}
}
}
et-3/0/0 {
unit 0 {
family inet {
address 204.69.248.181/28;
}
}
}
} |
Contenido del archivo: interfaces {
replace:
et-3/0/0 {
unit 0 {
family inet {
address 10.0.0.1/8;
}
}
}
} |
load override ------------> |
Nuevos contenidos: interfaces {
et-3/0/0 {
unit 0 {
family inet {
address 10.0.0.1/8;
}
}
}
} |
| Configuración actual: interfaces {
Io0 {
unit 0 {
family inet {
address 127.0.0.1;
}
}
}
et-3/0/0 {
unit 0 {
family inet {
address 204.69.248.181/28;
}
}
}
} |
Contenido del archivo: interfaces {
replace:
et-3/0/0 {
unit 0 {
family inet {
address 10.0.0.1/8;
}
}
}
} |
load replace ------------> |
Nuevos contenidos: interfaces {
Io0 {
unit 0 {
family inet {
address 127.0.0.1;
}
}
}
et-3/0/0 {
unit 0 {
family inet {
address 10.0.0.1/8;
}
}
}
} |
| Configuración actual: interfaces {
Io0 {
unit 0 {
family inet {
address 127.0.0.1;
}
}
}
et-3/0/0 {
unit 0 {
family inet {
address 204.69.248.181/28;
}
}
}
} |
Contenido del archivo: interfaces {
replace:
et-3/0/0 {
unit 0 {
family inet {
address 10.0.0.1/8;
}
}
}
} |
load merge ------------> |
Nuevos contenidos: interfaces {
Io0 {
unit 0 {
family inet {
address 127.0.0.1;
}
}
}
et-3/0/0 {
unit 0 {
family inet {
address 10.0.0.1/8;
address 204.69.248.181/28;
}
}
}
} |
| Configuración actual: interfaces {
fxp0 {
unit 0 {
family inet {
address 192.168.6.193/24;
}
}
}
Io0 {
unit 0 {
family inet {
address 127.0.0.1/32;
}
}
}
} |
Contenido del archivo: {edit interfaces}
+ et-3/0/0 {
+ unit 0 {
+ family inet {
+ address 10.0.0.1/8;
+ }
+ }
+ } |
load patch ------------> |
Nuevos contenidos: interfaces {
et-0/0/0 {
unit 0 {
family inet {
address 10.0.0.1/8;
}
}
}
fxp0 {
unit 0 {
family inet {
address 192.168.6.193/24;
}
}
}
Io0 {
unit 0 {
family inet {
address 127.0.0.1/32;
}
}
}
} |
set
Cargar un archivo de configuración
Puede crear un archivo de configuración en el sistema local, copiar el archivo en el dispositivo y, luego, cargarlo en la CLI. Después de cargar el archivo de configuración, puede confirmarlo para activar la configuración en el dispositivo. También puede editar la configuración de forma interactiva con la CLI y confirmarla más adelante.
Para cargar un archivo de configuración desde el sistema local:
Para ver los resultados de los pasos de configuración antes de confirmar la configuración, escriba el show comando en el símbolo del usuario.
Para confirmar estos cambios en la configuración activa, escriba el commit comando en el símbolo del usuario. También puede editar la configuración de forma interactiva con la CLI y confirmarla más adelante.
Cargar datos de configuración JSON con entradas de lista desordenadas
El esquema de Junos define ciertos objetos de configuración como listas. En los datos de configuración JSON, una instancia de lista se codifica como un par nombre/matriz y los elementos de matriz son objetos JSON. Generalmente, el orden de los miembros en una entrada de lista codificada en JSON es arbitrario porque los objetos JSON son fundamentalmente colecciones desordenadas de miembros. Sin embargo, el esquema de Junos requiere que las claves de lista precedan a cualquier otro elemento del mismo nivel dentro de una entrada de lista y aparezcan en el orden especificado por el esquema.
Por ejemplo, el user objeto en el nivel de [edit system login] jerarquía es una lista donde name es la clave de lista que identifica de forma única a cada usuario.
list user {
key name;
description "Username";
uses login-user-object;
}
En los siguientes datos de configuración de ejemplo, la clave de lista (name) es el primer elemento para cada usuario. De forma predeterminada, cuando carga datos de configuración JSON, los dispositivos Junos requieren que las claves de lista precedan a cualquier otro elemento del mismo nivel dentro de una entrada de lista y aparezcan en el orden especificado por el esquema.
{
"configuration" : {
"system" : {
"login" : {
"user" : [
{
"name" : "operator",
"class" : "operator",
"uid" : 3001
},
{
"name" : "security-admin",
"class" : "super-user",
"uid" : 3002
}
]
}
}
}
}
Los dispositivos Junos proporcionan dos opciones para cargar datos de configuración JSON que contienen entradas de lista desordenadas, es decir, entradas de lista donde la clave de lista no es necesariamente el primer elemento.
-
Use el comando del
request system convert-json-configurationmodo operativo para generar datos de configuración JSON con entradas de lista ordenadas antes de cargar los datos en el dispositivo. -
Configure la
reorder-list-keysinstrucción en el nivel de[edit system configuration input format json]jerarquía. Después de configurar la instrucción, puede cargar datos de configuración JSON con entradas de lista desordenadas y el dispositivo reordena las claves de lista según lo requiera el esquema de Junos durante la operación de carga.
Cuando se configura la reorder-list-keys instrucción, la operación de carga puede tardar mucho más en analizar la configuración, dependiendo del tamaño de la configuración y del número de listas. Por lo tanto, para configuraciones grandes o configuraciones con muchas listas, recomendamos usar el request system convert-json-configuration comando en lugar de la reorder-list-keys instrucción.
Por ejemplo, supongamos que el user-data.json archivo contiene la siguiente configuración JSON. Si intenta cargar la configuración, el dispositivo emitirá un error de carga porque admin2 la clave name de lista no es el primer elemento de esa entrada de lista.
user@host> file show /var/tmp/user-data.json
{
"configuration" : {
"system" : {
"login" : {
"user" : [
{
"name" : "admin1",
"class" : "super-user",
"uid" : 3003
},
{
"class" : "super-user",
"name" : "admin2",
"uid" : 3004
}
]
}
}
}
}
Si usa el request system convert-json-configuration comando con el archivo anterior como entrada, el comando genera el archivo de salida especificado con datos de configuración JSON que el dispositivo Junos puede analizar durante la operación de carga.
user@host> request system convert-json-configuration /var/tmp/user-data.json output-filename user-data-ordered.json
user@host> file show user-data-ordered.json
{
"configuration":{
"system":{
"login":{
"user":[
{
"name":"admin1",
"class":"super-user",
"uid":3003
},
{
"name":"admin2",
"class":"super-user",
"uid":3004
}
]
}
}
}
}
Como alternativa, puede configurar la reorder-list-keys instrucción de configuración.
user@host# set system configuration input format json reorder-list-keys user@host# commit
Después de configurar la instrucción, puede cargar el archivo de configuración JSON original con entradas de lista desordenadas y el dispositivo controla las entradas de lista cuando analiza la configuración.
user@host# load merge json /var/tmp/user-data.json load complete