使用配置组快速配置设备
使用配置组设置并应用在同一配置中重复使用的常用元素。
配置组概述
本主题提供"演化型"模型中的配置组和继承Junos OS概述CLI。
- 配置组如何工作
- 继承模型
- 配置配置组This 确实是一个任务主题。从这里到最后,您是如何做到的。这不是对事情如何发生的描述,而是指导用户配置配置组的短过程。我建议将这个主题分成另一个任务主题,并链接至概念主题。
配置组如何工作
您能够创建包含配置语句的组,并引导该组语句在其余配置中的继承。相同的组可以应用于配置的不同部分。一组配置语句的不同部分可以继承到配置的不同位置。
配置组使您能够创建更小、逻辑结构更合理的配置文件,从而更轻松地配置和维护瞻博网络设备。例如,您可以对配置中许多位置重复的语句进行分组,例如配置接口时。通过分组语句,您可以将配置更新限制为仅组。
您还可以在配置组中使用通配符。匹配通配符表达式的任何对象将继承组配置数据。
配置组机制独立于配置中其他位置使用的组机制,例如组BGP机制。配置组提供通用机制,您可以在整个配置中使用,但只有此CLI。执行配置所指示操作的个人软件进程接收扩展形式的配置;他们还没有配置组的知识
继承模型
配置组使用真正的继承,涉及配置数据源与该数据目标之间的动态、持续关系。目标会自动继承在配置组中更改的数据值。目标不需要包含继承的信息。但是,继承的值可以在目标中覆盖,而不会影响其继承来源。
此继承模型允许您仅看到特定于实例的信息,而不看到继承的详细信息。配置模式下的命令管道可让您显示继承的数据。
配置配置组
对于配置区域来继承配置语句,您必须先将 语句放入配置组中。然后,将该组应用于需要 语句的配置层次结构中的级别。
对于配置区域继承配置语句:
-
将 语句配置为配置组。要配置配置组和继承,您可以在 [edit] 层次结构级别中包括组语句:
[edit] groups {
group-name
{configuration-data
; } } -
将步骤 1 的配置组应用于需要语句的配置层次结构中的级别。
将
apply-groups [ group-names ]
语句包含在配置中需要配置组中包含的配置语句的任何位置。
创建配置组
使用 Junos OS演化 CLI可创建包含配置语句的可重新使用组。您可以将这些组应用于配置的不同部分,其中反复重复相同的配置语句。
在配置的不同部分中应用组时,该配置部分将继承在组内配置的语句。配置组遵循继承规则,其中在配置数据源与该数据目标之间设置动态、持续的关系。如果更改配置组中的数据值,继承的目标将自动反映更改。
如果需要,您可以覆盖目标配置中的值,这不会影响组中源。
此继承模型允许您仅看到特定于实例的信息,而不看到继承的详细信息。配置模式下的命令管道可让您显示继承的数据。例如,可能需要将所有接口配置为 et-0/0/1
1500 的MTU值。
要配置所有接口的 et-0/0/1
MTU 1500:
-
创建一个组,其MTU 1500:
[edit groups group-1] lab@vSRX3-05# show interfaces { et-0/0/1 { unit 0 { family inet { mtu 1500; } } } }
-
接下来,在接口配置中应用组。
[edit interfaces et-0/0/1] lab@vSRX3-05# set apply-groups group-1
-
查看继承的配置。
[edit] lab@vSRX3-05# show interfaces et-0/0/1 | display inheritance unit 0 { family inet { ## ## '1500' was inherited from group 'group-1' ## mtu 1500; address 5.0.0.254/24; } }
如果要为配置的不同MTU接口配置一个值,可以使用 选项 et-0/0/1
应用 group apply-groups
语句。如果手动操作,后来想要增加MTU,可能必须手动更改每个接口。如果您使用配置组,您可以更改组配置,从而自动更新所有关联的接口。
您还可以在配置组中使用通配符,以允许配置数据被匹配通配符表达式的任何对象继承。例如:
[edit groups group-1] lab@vSRX3-05# show interfaces { et-* { unit 0 { family inet { mtu 1500; } } } }
如何应用配置组
如果您希望一个瞻博网络配置从配置组继承语句,在 apply-groups
配置中包括 语句。
apply-groups [ group-names ];
如果指定多个组名称,则必须按继承优先级顺序列出名称。第一个组中配置数据优先于后续组的数据。
对于支持多个路由引擎的设备,您可以指定和 re0
re1
分组名称。仅在插槽 0 中当前 路由引擎时,在 组中指定的配置 re0
才应用。同样,仅在插槽 1 中当前 路由引擎 re1
时,才应用在组中指定的配置。因此,两个路由引擎使用相同的配置文件,每个路由引擎都只能使用适用于它的配置语句。每个 re0
re1
或组至少包含主机名和管理接口 ( ) 的配置 fxp0
。如果每个路由引擎使用不同的管理接口,组还应包含备份路由器和静态路由的配置。
在配置层次结构 apply-groups
的每个特定级别中,只能包含一个语句。特定 apply-groups
层级的 语句列出了要添加到 包含 语句的配置组列表的配置组。
在特定层次结构级别指定的值替代从配置组继承的值。
嵌套语句中所列的 apply-groups
组优先于外部语句中的组。以下示例中,邻接BGP先 10.0.0.1
从组继承配置 one
数据。随后,它会从组和组继承 two
配置数据 three
。组中配置数据 one
将覆盖任何其他组中数据。仅在任何其他 ten
组内未包含语句时,才使用来自组的数据。
apply-groups [ eight nine ten ]; protocols { apply-groups seven; bgp { apply-groups [ five six ]; group some-bgp-group { apply-groups four; neighbor 10.0.0.1 { apply-groups [ one two three ]; } } } }
根级别是默认逻辑系统。配置为根级别定义的组时,无法成功将组应用于层次结构级别下的非默认 [edit logical-systems logical-system-name]
逻辑系统。尽管设备接受提交(如果应用组,则配置组不会为非默认逻辑系统生效)。相反,您可以在根级别创建一个附加配置组,并应用于逻辑系统。或者,您可以修改原始组,以便包含默认和非默认逻辑系统层次结构级别的配置。
示例:创建和应用配置组
此示例说明了配置组的创建和应用。此示例将 SNMP 配置在组和正常配置层次结构 basic
之间分配。
通过将系统特定配置 (SNMP 联系人)放置在配置组中,您可以获得多个优势,从而将其与正常配置层次结构分离:
-
您可以使用 命令替换任一部分,而不丢弃另一节
load replace
的数据。 -
您可以为特定框设置联系人,因为组数据由设备特定数据隐藏。
[edit] groups { basic { # User-defined group name snmp { # This group contains some SNMP data contact "My Engineering Group"; community BasicAccess { authorization read-only; } } } } apply-groups basic; # Enable inheritance from group "basic" snmp { # Some normal (non-group) configuration location "West of Nowhere"; }
此配置等同于以下配置:
[edit] snmp { location "West of Nowhere"; contact "My Engineering Group"; community BasicAccess { authorization read-only; } }
示例:禁用配置组的继承
除层次结构顶层外,您可以在任何级别禁用配置组的继承。要禁用继承,您可以在配置 apply-groups-except
中包括 语句:
apply-groups-except [ group-names ];
当您在特定的层次结构级别使用 语句时,而且希望覆盖从特定参数的配置组继承的值,此 apply-group
语句也很有用。
示例:禁用接口 et-1/1/0 上的继承
在下面的示例中, apply-groups
语句在接口级别全局应用。 apply-groups-except
语句还将在接口上应用 et-1/1/0
,因此它将对 和 语句 hold-time
使用 link-mode
默认值。
[edit] groups { # "groups" is a top-level statement global { # User-defined group name interfaces { <*> { hold-time down 640; link-mode full-duplex; } } } } apply-groups global; interfaces { et-1/1/0 { apply-groups-except global; # Disables inheritance from group "global" # et-1/1/0 uses default value for “hold-time” # and "link-mode" } }
配置组可能给设备使用的实际值增加一些混淆,因为设备可以从配置组继承配置数据。要查看设备使用的实际值,您可以在 命令中的管道 ( | display inheritance
) 后使用 show
命令。此命令在继承语句的级别及其继承的组显示继承语句:
[edit]
user@host# show | display inheritance
snmp {
location "West of Nowhere";
##
## 'My Engineering Group' was inherited from group 'basic'
##
contact "My Engineering Group";
##
## 'BasicAccess' was inherited from group 'basic'
##
community BasicAccess {
##
## 'read-only' was inherited from group 'basic'
##
authorization read-only;
}
}
要显示不带 ## 行的扩展配置(配置,包括继承语句),您可以在命令中的 except
管道之后 show
使用 命令:
[edit]
user@host# show | display inheritance | except ##
snmp {
location "West of Nowhere";
contact "My Engineering Group";
community BasicAccess {
authorization read-only;
}
}
使用 display inheritance | except ##
选项将移除 与 的所有行 ##
。因此,您可能无法查看有关密码或其他使用位置的重要 ##
数据的信息。要查看包含所有信息的完整配置详细信息(没有用 标记的注释),您可使用 选项 ##
no-comments
与 display inheritance
命令:
[edit]
user@host# show | display inheritance no-comments
snmp {
location "West of Nowhere";
contact "My Engineering Group";
community BasicAccess {
authorization read-only;
}
}
示例:使用 junos-defaults
配置组
Junos OS Evolved 提供一个隐藏且不可变的配置组,称为此配置组 junos-defaults
可自动应用于设备的配置。组 junos-defaults
包含预配置的语句,其中包含常用应用程序的预定义值。部分语句必须引用方能生效,例如应用程序定义(例如 FTP 或 telnet 设置)。其他语句会自动应用,例如终端设置。
配置组中包含的许多 junos-defaults
标识符以名称开头 junos-
。由于名称开头的标识符保留供 junos-
瞻博网络,因此不能使用此名称定义任何配置对象。
语句中不能包含为 junos-defaults
配置组 apply-groups
名称。
要查看组的完整可用预设语句集,您可以在配置顶层发出配置模式 junos-defaults
show groups junos-defaults
命令。以下示例显示部分默认Junos列表:
user@host# show groups junos-defaults
# Make vt100 the default for the console port
system {
ports {
console type vt100;
}
}
applications {
# File Transfer Protocol
application junos-ftp {
application-protocol ftp;
protocol tcp;
destination-port 21;
}
# Trivial File Transfer Protocol
application junos-tftp {
application-protocol tftp;
protocol udp;
destination-port 69;
}
# RPC port mapper on TCP
application junos-rpc-portmap-tcp {
application-protocol rpc-portmap;
protocol tcp;
destination-port 111;
}
# RPC port mapper on UDP
}
要引用组提供的 junos-defaults
语句,请包括适用层级的选定 junos-
default-name
语句。
示例:对配置组使用通配符
您可以使用通配符标识名称,并允许一个语句为各种语句提供数据。
在正常配置数据中使用通配符的样式与传统 UNIX shell 通配符一致。在此样式中,您可以使用以下元组:
-
星号 (
*
)—匹配任意字符串。 -
问号 (
?
)—匹配任何单字符。 -
开放括号 (
[
)—引入字符类。 -
关闭括号 (
]
)—表示字符类的结束。如果缺少关闭托架,则开放式托架与开放式托架匹配[
,而不是引入字符类。 -
字符类匹配方括号之间的任意字符。在配置组内,您必须用引号将接口名称括起来,其中包含一个字符类。
-
连字符 (
-
)—指定一系列字符。 -
感叹点 ( )—您可以通过使一个感叹点成为字符类的第一个字符来补充
!
字符类。在字符类中包括关闭括号 ( ),请使其列为第一个字符]
(在 、!
(如果有)之后。要包含减号,请使其列出第一个或最后一个字符。
如果在层次结构内使用 groups
标识符,则先将标识符名称以 其他项作为开始 <
。但是,如果要定义通配符语句,您可以使用 ,因为 <
通配符语句必须结束 >
。
在配置组中使用通配符遵循与将其用于正常配置相同的规则。但是 <
, >
在层次结构下使用时,有一个特殊 groups
的含义。在层次结构中,您必须使用通配符模式或括号将其与配置文件中其他通配符<>括在尖括号 groups
pattern 中。
[edit] groups { sonet-default { interfaces { <et-*> { sonet-options { payload-scrambler; rfc-2615; } } } } }
通配符表达式与配置中的现有语句匹配(并提供配置数据),只匹配其表达式。在上一示例中,表达式 <et-*>
将语句 sonet-options
传递至与表达式匹配的任何接口 et-*
。
以下示例显示如何指定一系列接口:
[edit] groups { gigabit-ethernet-interfaces { interfaces { "<et-1/2/[5-8]>" { description "These interfaces reserved for Customer ABC"; } } } }
尖括号使您能够在无需修改的情况下传递常规通配符。在配置内的任何匹配中,不管是否使用通配符,在配置中遇到的第一个项都使用匹配项。以下示例中,来自通配符组BGP组的数据按列出组的顺序被继承。
- 中的优先级值
<*a*>
将覆盖<*b*>
中的优先级。 - 中的
p
值<*c*>
将覆盖<*d*>
来自以下任何组的数据值替代以下组的数据值 abcd
:
[edit] user@host#show
groups { one { protocols { bgp { group <*a*> { preference 1; } group <*b*> { preference 2; } group <*c*> { out-delay 3; } group <*d*> { out-delay 4; } group abcd { preference 10; hold-time 10; out-delay 10; } } } } } protocols { bgp { group abcd { apply-groups one; } } } [edit] user@host#show | display inheritance
protocols { bgp { group abcd { ## ## ’1’ was inherited from group ’one’ ## preference 1; ## ## ’10’ was inherited from group ’one’ ## hold-time 10; ## ## ’3’ was inherited from group ’one’ ## out-delay 3; } } }
如何使用配置组来增加提交时间
您可使用配置组跨其他层次结构应用配置,而无需重新输入配置数据。您可以指定配置组中每个配置详细信息。您还可以在配置组中使用通配符来配置数据范围,而无需详细介绍每一个配置行。使用配置组的另一种方式是创建包括要应用的长字符串配置的继承路径。
提交使用配置组的配置时,提交进程将扩展此组的所有配置数据并读取到存储器中,以按预期应用配置。如果应用了许多配置组,则提交性能可能会受到影响,特别是在配置组广泛使用通配符时。
如果系统使用许多使用通配符的配置组,您可以在层次结构级别配置语句 persist-groups-inheritance
[edit system commit]
以提高提交时间性能。
使用此选项使系统能够为数据库内的每个配置组(而非进程内存)构建继承路径。此变更可以提高提交时间性能。但是,它也可以增加数据库大小。
示例:使用配置组配置语句集
当配置组存在语句集时,将继承所有值。例如:
[edit] user@host#show
groups { basic { snmp { interface et-1/1/1.0; } } } apply-groups basic; snmp { interface et-0/0/0.0; } [edit] user@host#show | display inheritance
snmp { ## ## ’et-1/1/1.0’ was inherited from group ’basic’ ## interface [ et-0/0/0.0 et-1/1/1.0 ]; }
对于未在括号中显示的集,还将继承所有值。例如:
[edit] user@host#show
groups { worldwide { system { name-server { 10.0.0.100; 10.0.0.200; } } } } apply-groups worldwide; system { name-server { 10.0.0.1; 10.0.0.2; } } [edit] user@host#show | display inheritance
system { name-server { ## ## ’10.0.0.100’ was inherited from group ’worldwide’ ## 10.0.0.100; ## ## ’10.0.0.200’ was inherited from group ’worldwide’ ## 10.0.0.200; 10.0.0.1; 10.0.0.2; } }
示例:使用配置组为管理接口配置一致的 IP 地址
在有多个路由引擎的设备上,路由引擎配置了用于管理接口的单独 IP 地址。要访问主路由引擎,您必须知道哪路由引擎处于活动状态,并使用相应的 IP 地址。
对主设备进行一致访问的另一路由引擎是配置附加 IP 地址。然后,无论哪一个接口处于活动状态,都可以路由引擎地址。此附加 IP 地址仅在主设备的管理接口上路由引擎。在切换期间,地址将移动到新的主路由引擎。
此示例配置了两 10.17.40.131
个路由引擎的地址,并包括一 master-only
个语句。借助此配置, 10.17.40.131
地址仅在主设备上路由引擎。无论哪些服务处于活动状态,地址路由引擎一致。 10.17.40.132
地址分配至 re0:mgmt-0
, re0
并 10.17.40.133
分配至 re1:mgmt-0
re1
。
[edit groups re0 interfaces re0:mgmt-0] unit 0 { family inet { address 10.17.40.131/25 { master-only; } address 10.17.40.132/25; } } [edit groups re1 interfaces re1:mgmt-0] unit 0 { family inet { address 10.17.40.131/25 { master-only; } address 10.17.40.133/25; } }
此功能在包含双路由引擎的所有路由器上均可用。
-
您必须为专用接口和公共接口上具有重复地址的两个接口分配唯一 IP 地址。启用路由引擎切换 (GRES) 时,CLI如果发现相同的地址,将显示相应的提交错误消息。如果将相同的 IP 地址配置用于管理接口或内部接口(例如 )和外部物理接口(
re0:mgmt-0
如et-0/0/1
)。
示例:使用配置组配置对等实体
此示例将创建一个 some-isp
组,其中包含与另一 ISP 有关的配置数据。随后,它会在各个点插入语句,以允许配置层次结构中的这些位置 apply-group
继承此数据。
[edit] user@host#show
groups { some-isp { interfaces { <xe-*> { gigether-options { flow-control; } } } protocols { bgp { group <*> { neighbor <*> { remove-private; } } } pim { interface <*> { version 1; } } } } } interfaces { xe-0/0/0 { apply-groups some-isp; unit 0 { family inet { address 10.0.0.1/24; } } } } protocols { bgp { group main { neighbor 10.254.0.1 { apply-groups some-isp; } } } pim { interface xe-0/0/0.0 { apply-groups some-isp; } } } [edit] user@host#show | display inheritance
interfaces { xe-0/0/0 { ## ## "gigether-options" was inherited from group "some-isp" ## gigether-options { ## ## "flow-control" was inherited from group "some-isp" ## flow-control; } unit 0 { family inet { address 10.0.0.1/24; } } } } protocols { bgp { group main { neighbor 10.254.0.1 { ## ## "remove-private" was inherited from group "some-isp" ## remove-private; } } } pim { interface xe-0/0/0.0 { ## ## "1" was inherited from group "some-isp" ## version 1; } } }
示例:配置通配符配置组名称
通配符是配置组名称,可使用特殊字符来创建可应用于多个语句的模式。通配符可用于将一组配置选项复制到许多不同的配置组。您必须正确设置通配符名称,以确保通配符配置选项复制到相应的配置组。
此示例在 语句下配置 <*-major>
和 <*-minor>
通配符组的不同 label-switched-path
值。星号 ( ) *
表示通配符名称的一个部分,可匹配任何字符串。例如,下的配置选项将传递到其名称中包含 label-switched-path <*-major>
label-switched-path metro-major
label-switched-path
任何其他 -major
配置组。
[edit] user@host#show
groups { mpls-conf { protocols { mpls { label-switched-path <*-major> { retry-timer 5; bandwidth 155m; optimize-timer 60; } label-switched-path <*-minor> { retry-timer 15; bandwidth 64k; optimize-timer 120; } } } } } apply-groups mpls-conf; protocols { mpls { label-switched-path metro-major { to 10.0.0.10; } label-switched-path remote-minor { to 10.0.0.20; } } } [edit] user@host#show | display inheritance
protocols { mpls { label-switched-path metro-major { to 10.0.0.10; ## ## "5" was inherited from group "mpls-conf" ## retry-timer 5; ## "155m" was inherited from group "mpls-conf" ## bandwidth 155m; ## ## "60" was inherited from group "mpls-conf" ## optimize-timer 60; } label-switched-path remote-minor { to 10.0.0.20; ## ## "15" was inherited from group "mpls-conf" ## retry-timer 15; ## ## "64k" was inherited from group "mpls-conf" ## bandwidth 64k; ## ## "120" was inherited from group "mpls-conf" ## optimize-timer 120; } } }
示例:引用 Defaults 组中预设语句
以下示例是状态防火墙中可用于 FTP 的默认组中预设语句:
[edit] groups { junos-defaults { applications { application junos-ftp {# Use FTP default configuration application-protocol ftp; protocol tcp; destination-port 21; } } }
要引用默认组预设的默认语句,请包括适用 junos-default-name
层级的 语句。例如,要引用状态防火墙中 FTP 的默认语句,请包含层级的 junos-ftp
[edit services stateful-firewall rule my-rule term my-term from applications]
语句:
[edit] services { stateful-firewall { rule my-rule { term my-term { from { applications junos-ftp; #Reference predefined statement, junos-ftp } } } } }
示例:查看已应用于配置的默认语句
要查看已应用于设备配置的默认值,请发出 show | display inheritance defaults
命令。此示例在 层次结构级别显示继承 [edit system ports]
的默认值:
user@host# show system ports | display inheritance defaults
## ## 'console' was inherited from group 'junos-defaults'
## 'vt100' was inherited from group 'junos-defaults'
## console type vt100;
如果您选择不使用现有默认语句,可以手动创建自己的配置组。
要查看省略标记的任何注释的完整配置信息, ##
请使用 no-comments
命令选项 display inheritance
。
设置路由引擎组
在具有两个路由引擎的设备上,两个路由引擎应共享一个配置。此设置可确保两种路由引擎配置相同。在此配置中,创建两个路由引擎组,每个组一路由引擎。在这些组内,您可指定路由引擎特定参数。
要设置一个路由引擎组:
如何使用条件应用配置组
您可以在 层级使用 语句来定义应用配置 when
[edit groups group-name]
组的条件。
您可以配置组以根据机箱类型、型号或机箱类型、路由引擎成员、群集节点以及日期或日期的开始和可选结束时间进行应用。
例如,您可以使用 语句为每种节点类型创建通用配置组,然后基于某些节点属性(例如机箱或 when
型号)应用配置。