在此页面上
为 Junos OS 事件配置 Salt 反应器
Salt 反应器提供了针对 Salt 事件总线上的特定事件采取措施的能力。Salt Reactor 系统监视 Salt 事件总线上的事件,并根据配置的规则触发匹配事件的操作。您可以启用 Junos 系统日志引擎(适用于 Salt),将事件从运行 Junos OS 的受管理设备发布到 Salt 事件总线。然后,您可以配置现有或自定义反应器以对这些事件采取措施。这使您能够创建事件驱动型基础架构 (EDI),以实时实现闭环自动化。
如何配置盐反应器
在使用 Salt 反应器响应 Junos OS 事件之前,必须先启用 Junos 系统日志引擎以将 Junos OS 事件发布到 Salt 事件总线,并将运行 Junos OS 的受管理设备配置为将系统日志消息发送到运行引擎的服务器。有关更多信息,请参阅 Junos Syslog Engine for Salt。启用 Junos 系统日志引擎后,您可以配置为响应某些 Junos OS 事件而自动触发的 Salt 反应器。
要配置对特定事件做出反应的反应器:
定义将触发操作的事件和相应的事件标记。
在 Salt 主服务器上创建一个或多个反应器 SLS 文件,并定义发生特定事件时要执行的操作。
在 Salt 主配置文件中,定义
reactor
选项,并将每个事件标记与一个或多个反应器文件相关联。重新启动 Salt 主节点以应用更新的配置。
以下各节将更详细地介绍这些步骤:
如何定义事件和事件标记
Junos 系统日志引擎使用以下默认事件标记字符串将 Junos OS 事件发布到 Salt 事件总线。该标记包括目标的主机名和 Junos OS 系统日志事件名称。
jnpr/syslog/hostname/event
要定义要从 Salt 事件总线匹配的事件标记,请指定主机名和将触发反应的事件。您可以使用星号 (*) 匹配所有主持人的活动。有关 Junos OS 系统日志消息的详细信息,请参阅 系统日志资源管理器。
例如,要匹配 UI_COMMIT_COMPLETED
来自任何运行 Junos OS 的受管设备的事件,可以使用以下事件标记:
jnpr/syslog/*/UI_COMMIT_COMPLETED
如果您通过在配置中engines
配置topic
参数来自定义事件代码,则匹配的事件代码必须反映相同的字段。
在 Salt 主配置文件中配置反应器时,将引用此事件标记。
如何创建反应器 SLS 文件
反应器 SLS 文件定义发生特定事件时要执行的操作。反应器SLS文件与其他Salt SLS文件相似,因为它们使用YAML格式并支持使用Jinja。通常,文件存储在单独的目录中,例如 / srv/reactor 或 / srv/salt/reactor。反应器文件可以使用事件中的数据,对 Salt 主节点或工作节点执行操作,并将状态应用于目标等。有关写入反应器文件的详细信息,请参阅官方 Salt 文档。
例如,以下反应器文件将 junos_backup_config
状态应用于目标设备。在这种情况下,目标是与事件数据中的值匹配 hostname
的代理 ID。
saltuser@salt-master~$ cat /srv/reactor/junos_backup_on_commit.sls Backup config for commit complete event: local.state.apply: - tgt: {{ data['hostname'] }} - arg: - junos_backup_config
如何配置反应器
要配置反应器,请在 Salt 主配置文件中定义 reactor
选项。定义触发操作的事件和要执行的操作。对于要匹配并执行操作的每个事件,请将该事件的事件标记与一个或多个反应器 SLS 文件相关联。在事件总线上触发事件时,它会自动触发文件中定义的操作。
reactor: - 'event-tag1': - reactor-file1 - 'event-tag2': - reactor-file2 - reactor-file3
例如,每当运行 Junos OS 并配置为将系统日志事件发送到 Junos 系统日志引擎的任何受管设备发生事件时,以下UI_COMMIT_COMPLETED
反应器配置将调用 junos_backup_on_commit.sls 反应器文件:
reactor: - 'jnpr/syslog/*/UI_COMMIT_COMPLETED': - /srv/reactor/junos_backup_on_commit.sls
要应用反应器配置,必须使用适用于您的操作系统的命令重新启动 Salt 主服务器。例如:
saltuser@salt-master~$ sudo killall salt-master saltuser@salt-master~$ sudo salt-master -d
示例:响应 Junos OS 提交事件
此示例演示了一个简单的 Salt 反应器,每次运行 Junos OS 的受管设备提交配置时,该反应器都会生成一个备份配置文件。
要求
此示例使用以下硬件和软件组件:
运行启用了 NETCONF 的 Junos OS 的设备
盐师具有以下要求:
盐版本 3001(钠)或更高版本
可以在运行 Junos OS 的设备上执行 ping 和执行操作
概述
此示例在每次运行 Junos OS 的受管设备提交配置时生成一个备份配置文件。该示例将 Salt Reactor 系统配置为在与事件匹配 UI_COMMIT_COMPLETED
时触发操作。此处显示了一个示例事件以供参考:
jnpr/syslog/router1/UI_COMMIT_COMPLETED { "_stamp": "2019-08-30T00:05:39.293342", "daemon": "mgd", "event": "UI_COMMIT_COMPLETED", "facility": 23, "hostip": "198.51.100.2", "hostname": "router1", "message": "commit complete", "pid": "60883", "priority": 188, "raw": "<188>Aug 29 17:05:57 router1 mgd[60883]: UI_COMMIT_COMPLETED: commit complete", "severity": 4, "timestamp": "2019-08-30 00:05:39"
在此示例中,首先在 Salt 主服务器上启用 Junos 系统日志引擎,并将运行 Junos OS 的设备配置为将系统日志消息发送到 Salt 主服务器端口 9999。应用配置后,设备开始向 Junos 系统日志引擎发送事件,后者在 Salt 事件总线上发布这些事件。
然后创建一个反应器 SLS 文件 junos_backup_on_commit,该文件将状态 junos_backup_config
应用于由事件数据中的键值 hostname
标识的目标。相应的状态文件使用该函数执行 junos.rpc
RPC, get_config
以文本格式从目标设备检索配置。然后,它将配置保存在代理工作节点服务器上参数指定的 dest
文件路径中。该 dest
参数引用 id
粒度和当前时间,以生成包含设备 ID 和时间戳的唯一文件名。
然后,通过在 Salt 主配置文件中定义 reactor
选项来配置反应器,该选项将事件标记与反应器文件相关联。重新启动 Salt 主节点以应用配置后,Salt Reactor 系统将在事件发生时调用相应的反应器文件。因此,当运行由 Salt 主站管理的 Junos OS 的设备上发生提交完成事件时,Junos 系统日志引擎会在事件总线上发布该事件,而 Salt Reactor 系统会调用反应器文件。
配置
启用 Junos 系统日志引擎
分步过程
要启用 Junos 系统日志引擎,请执行以下操作:
在 Salt 主配置文件中配置 Junos 系统日志引擎。
engines: - junos_syslog: port: 9999
重新启动 Salt 主节点以应用配置,例如:
saltuser@salt-master~$ sudo killall salt-master saltuser@salt-master~$ sudo salt-master -d
将运行 Junos OS 的设备配置为将系统日志事件转发到 Salt 主服务器上的同一端口。
[edit] saltuser@router1# set system syslog host 198.51.100.1 port 9999 any any saltuser@router1# commit
创建状态文件
分步过程
要创建在应用状态时为目标节点生成备份配置文件的状态文件,请执行以下操作:
在 Salt 主服务器上,创建一个名为 / srv/salt/junos_backup_config.sls 的新状态文件。
定义检索配置并将其保存到唯一命名文件的状态。
saltuser@salt-master~$ cat /srv/salt/junos_backup_config.sls {% set curtime = None | strftime("%Y-%m-%d-%H-%M-%S") %} get_config: junos.rpc: - dest: /var/log/salt/backup-configs/{{ grains['id'] }}-config-{{ curtime }}.conf - format: text
注意:如果代理 ID 和主机名不相同,则可以通过替换
{{ grains['junos_facts']['hostname'] }}
{{ grains['id'] }}
来引用主机名。
创建反应器文件
分步过程
要创建反应器 SLS 文件:
在 Salt 主服务器上,创建一个名为 / srv/reactor/junos_backup_on_commit.sls 的新反应堆 SLS 文件。
配置反应器文件以将状态应用于
junos_backup_config
目标。如果代理 ID 与设备主机名相同,则可以在事件数据中引用主机名作为目标。
saltuser@salt-master~$ cat /srv/reactor/junos_backup_on_commit.sls Backup config for commit complete event: local.state.apply: - tgt: {{ data['hostname'] }} - arg: - junos_backup_config
如果代理 ID 与设备主机名不同,则可以通过引用粒度的值
junos_facts:hostname
将主机名映射到代理 ID。saltuser@salt-master~$ cat /srv/reactor/junos_backup_on_commit.sls Backup config for commit complete event: local.state.apply: - tgt: junos_facts:hostname:{{ data['hostname'] }} - tgt_type: grain - arg: - junos_backup_config
配置反应器
分步过程
要配置反应器:
在 Salt 主配置文件中,配置
reactor
选项并指定事件和反应器文件:reactor: - 'jnpr/syslog/*/UI_COMMIT_COMPLETED': - /srv/reactor/junos_backup_on_commit.sls
重新启动 Salt 主节点以应用配置,例如:
saltuser@salt-master~$ sudo killall salt-master saltuser@salt-master~$ sudo salt-master -d
结果
在运行 Junos OS 的设备上提交配置时,Salt Reactor 系统会匹配事件并调用反应器。反应器将状态应用于设备,设备检索并保存配置。
验证
验证盐反应器是否正常工作
目的
当运行 Junos OS 的设备提交配置时,验证 Salt 反应器是否应用了状态并将 junos_backup_config
备份配置文件保存到代理工作节点服务器。
行动
在运行 Junos OS 的设备上提交配置后,请查看 /var/log/salt/backup-configs 代理工作节点服务器上的目录以验证是否已生成备份配置文件。
saltuser@minion:~$ ls /var/log/salt/backup-configs router1-config-2019-08-30-19-24-57.conf
saltuser@minion:~$ cat /var/log/salt/backup-configs/router1-config-2019-08-30-19-24-57.conf ## Last commit: 2019-08-15 09:56:10 PDT by saltuser version 18.4R1.8; groups { re0 { system { host-name router1; } ...
意义
配置将以文本格式保存到代理工作节点服务器上的指定文件中。