使用 Salt 检索 Junos OS 配置
瞻博网络支持使用 Salt 管理运行 Junos OS 的设备,Junos 执行和状态模块(适用于 Salt)定义使您能够从托管设备检索配置的功能。您可以使用 salt.modules.junos.rpc
执行函数或 salt.states.junos.rpc
状态函数执行 RPC, get_config
以便从运行 Junos OS 的设备检索配置数据。
可以使用 RPC 从 get_config
候选、提交或临时配置数据库中检索完整配置或配置子集。您可以返回继承前或继承后配置的数据。此外,您可以以几种不同的格式返回数据,并将数据保存到代理工作节点服务器上的文件中。
如何检索完整的候选配置
要从运行 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
参数,从提交的配置数据库或临时配置数据库中检索数据。
提交的配置数据库
要从提交的配置数据库中检索数据,请将参数committed
设置为database
等于 。例如:
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>
继承后候选配置中层次结构 <interface>
级别每个 <interfaces>
元素的元素:
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