使用 Salt 检索 Junos OS 配置
瞻博网络支持使用 Salt 管理运行 Junos OS 的设备,而 Junos 执行和状态模块(用于 Salt)可定义一些函数,使您能够从受管设备检索配置。可以使用 salt.modules.junos.rpc 执行函数或 salt.states.junos.rpc 状态函数执行 get_config RPC,以从运行 Junos OS 的设备检索配置数据。
您可以使用 get_config RPC 从候选配置数据库、提交配置数据库或临时配置数据库中检索完整配置或配置的子集。您可以返回继承前或继承后配置的数据。此外,还可以以多种不同的格式返回数据,并将数据保存到代理工作节点服务器上的文件中。
如何检索完整的候选配置
若要从运行 Junos OS 的设备检索完整的候选配置,请调用该 junos.rpc 函数并执行 get_config RPC。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config
router1:
----------
out:
True
rpc_reply:
----------
configuration:
----------
apply-groups:
- global
- re0
- re1
...
同样,您可以定义一个用于检索配置的 Salt 状态文件。以下示例状态文件以文本格式检索目标设备的完整候选配置:
saltuser@salt-master:~$ cat /srv/salt/junos_get_config.sls
get_config:
junos.rpc:
- format: text
应用该状态时,它将显示每个目标设备的候选配置。
saltuser@salt-master:~$ sudo salt 'router1' state.apply junos_get_config
router1:
----------
ID: get_config
Function: junos.rpc
Result: True
Comment:
Started: 20:15:20.409910
Duration: 973.546 ms
Changes:
----------
out:
True
rpc_reply:
## Last changed: 2019-08-06 11:38:21 PDT
version 18.4R1.8;
groups {
re0 {
system {
host-name router1;
}
...
Summary for router1
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
Total run time: 973.546 ms
如何为配置数据指定源数据库
默认情况下, get_config RPC 从候选配置数据库中检索配置数据。您还可以通过将参数与适当的值包含在 database 内,从已提交的配置数据库或临时配置数据库中检索数据。
已提交的配置数据库
要从提交的配置数据库中检索数据,请将 database 参数设置为等于 committed。例如:
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config database=committed
router1:
----------
out:
True
rpc_reply:
----------
configuration:
----------
apply-groups:
- global
- re0
- re1
...
临时配置数据库
您还可以使用 Salt 从支持此数据库的设备上的临时配置数据库中检索数据。从共享配置数据库检索配置数据时,默认情况下,结果不包括临时配置数据库中的数据。
要从临时配置数据库的默认实例中检索数据,请包含该 database 参数并将其设置为等于 ephemeral。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config database=ephemeral
要从临时配置数据库的用户定义实例中检索数据,请将 database 参数设置为等于 ephemeral,并将参数设置为 ephemeral-instance 临时实例的名称。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config database=ephemeral ephemeral-instance=eph1
router1:
-
out:
True
rpc_reply:
-
configuration:
-
protocols:
-
mpls:
-
label-switched-path:
-
name:
to-hastings
to:
192.0.2.1
如何指定要返回的配置数据的作用域
除了检索完整的 Junos OS 配置外, get_config RPC 还可以使用参数 filter 检索配置的子集。该 filter 参数采用一个字符串,其中包含子树过滤器,用于选择要返回的配置语句。子树筛选器返回与选择条件匹配的配置数据。
若要请求多个层次结构, filter 字符串必须包含 <configuration> 根元素。否则,的 filter 值必须表示从根 <configuration> 元素下开始一直到要显示的层次结构的所有级别。要选择子树,请包含该层次结构级别的空标记。若要返回特定对象,请包含一个内容匹配节点,该节点定义要匹配的元素和值。
以下命令检索并打印候选配置中的 [edit interfaces] 和 [edit protocols] 层次结构级别的配置:
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config filter='<configuration><interfaces/><protocols/></configuration>'
以下命令在 [edit system services] 层次结构级别检索并打印配置:
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config filter='<system><services/></system>'
以下状态文件检索<name>继承后候选配置中层次<interfaces>结构级别每个<interface>元素的元素:
saltuser@salt-master:~$ cat /srv/salt/junos_get_config_interface_names.sls
get_config:
junos.rpc:
- filter: <interfaces><interface><name/></interface></interfaces>
- inherit: inherit
应用状态将返回接口名称列表。
saltuser@salt-master:~$ sudo salt 'router1' state.apply junos_get_config_interface_names
router1:
----------
ID: get_config
Function: junos.rpc
Result: True
Comment:
Started: 22:11:24.430639
Duration: 1522.123 ms
Changes:
----------
out:
True
rpc_reply:
----------
configuration:
----------
interfaces:
----------
interface:
|_
----------
name:
ge-1/0/0
|_
----------
name:
ge-1/0/2
|_
----------
name:
ge-1/0/3
|_
----------
name:
ge-1/0/4
|_
----------
name:
lo0
|_
----------
name:
fxp0
Summary for router1
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
Total run time: 1.522 s
同样,以下示例检索 ge-1/0/1 接口的子树:
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config filter='<interfaces><interface><name>ge-1/0/1</name></interface></interfaces>' format=text
router1:
----------
out:
True
rpc_reply:
## Last changed: 2019-08-06 14:58:44 PDT
interfaces {
ge-1/0/1 {
unit 0 {
family inet {
address 10.1.1.1;
}
}
}
}
如何指定要返回的配置数据的格式
默认情况下,该 junos.rpc 函数为标准输出中显示的数据以及保存到目标文件的数据(如果指定)返回 XML 格式的 RPC 输出。若要指定输出格式,请包含 format 参数,并将值设置为等于所需格式。要请求文本格式或 Junos XML 元素,请分别使用 text 或 xml。要将配置数据以 JSON 格式保存到目标文件中,请指定 json。
以下命令会将配置数据保存到指定的文件中,并以文本格式在标准输出中显示该数据:
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config dest=/var/configs/router1_config.txt format=text
以下命令会将配置数据以 JSON 格式保存到指定的文件中:
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config dest=/var/configs/router1_config.xml format=json
如何指定继承和组选项
get_config RPC 从继承前配置中检索数据,其中<groups>、<apply-groups>、<apply-groups-except>和<interface-range>标记是配置输出中的独立元素。要从继承后配置中检索数据,该配置将从用户定义的组和范围继承的语句显示为继承语句的子级,可以包含该inherit=inherit参数。如果还包含参数,groups=groups则文本和 XML 格式的输出将指示从其继承语句的组。
例如,以下命令从继承后候选配置中检索层次结构级别的配置 [edit system services] 。在这种情况下,如果配置还包含在层次结构级别上配置 [edit groups global system services] 的语句,则这些语句将在继承后配置中在 [edit system services] 层次结构级别继承,并在配置数据中返回。
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config filter='<system><services/></system>' inherit=inherit groups=groups dest=/var/configs/router1-system-services.xml
在目标文件中,从组继承的元素包括该 group 属性。 group 属性值指示从其继承元素的组。
<configuration changed-seconds="1565131770" changed-localtime="2019-08-06 15:49:30 PDT"><system><services>
<ftp group="global"></ftp>
<ssh group="global"></ssh>
<netconf group="global"><ssh group="global">
</ssh><traceoptions group="global"><file group="global"><filename group="global">netconf.log</filename><size group="global">10m</size><files group="global">2</files></file><flag group="global"><name group="global">all</name></flag></traceoptions></netconf>
</services></system></configuration>
如何将检索到的配置数据保存到文件
执行 junos.rpc 该函数时,可以通过包含 dest 参数并指定目标文件的路径,将返回的数据保存在代理工作节点服务器上的文件中。如果未指定绝对路径,则该路径相对于顶级根 (/) 目录。如果目标输出文件已存在,则新文件将覆盖旧文件。
要从运行 Junos OS 的设备检索配置数据并将输出保存到文件中供以后参考,请执行 get_config RPC 并包含该 dest 参数。以下命令将检索完整配置,在标准输出中显示数据,并将数据保存在代理工作节点服务器上的指定文件中:
saltuser@salt-master:~$ sudo salt 'router1' junos.rpc get_config dest=/var/configs/router1_config.xml
router1:
----------
out:
True
rpc_reply:
----------
configuration:
----------
apply-groups:
- global
- re0
- re1
...
在代理工作节点服务器上,配置数据将保存到指定的文件中。
saltuser@minion:~$ ls /var/configs router1_config.xml
同样,您可以定义一个 Salt 状态,用于检索配置数据并将其保存在文件中。以下示例状态文件检索完整配置,并将数据写入标准输出和代理工作节点服务器上的指定文件:
saltuser@salt-master:~$ cat /srv/salt/junos_save_config.sls
get_config:
junos.rpc:
- dest: /var/configs/{{ grains['id'] }}_config.txt
- format: text
在这种情况下,存储在颗粒中的 id 代理标识符包含在目标文件名中,以便在将状态应用于多个目标时区分输出文件。当您将状态应用于与颗粒匹配 os_family:junos 的设备时,它会将每个设备的配置保存到代理工作节点服务器上各自的文件中。
saltuser@salt-master:~$ sudo salt -G 'os_family:junos' state.apply junos_save_config
router1:
----------
ID: get_config
Function: junos.rpc
Result: True
Comment:
Started: 20:58:25.705709
Duration: 284.552 ms
Changes:
----------
out:
True
rpc_reply:
## Last changed: 2019-08-05 17:24:18 PDT
...
每个设备配置都保存在代理工作节点服务器上的单独文件中。
saltuser@minion:~$ ls /var/configs router1_config.txt router2_config.txt