【VMvare ESXi】想在家里搭建一个Ansible执行环境~第3章:使用Ansible进行vMX的配置更改和与syslog的协作~
首先
由于之前成功使用Ansible获取了vMX的show命令,所以本次将使用Ansible进行vMX的配置更改。
此外,还将设置一个新的syslog服务器,并添加一个机制,使得vMX在执行Ansible时能够通知syslog服务器。
具体步骤如下:
1. 修改Ansible配置/添加模块
2. 配置syslog服务器
3. 向vMX添加配置
4. 创建用于配置更改的playbook(set-descr.yml)
5. 配置要发送到syslog服务器的日志
值得注意的是,Ubuntu版本为18.04.3。
1. 对 Ansible 进行配置更改/添加模块
为了进行vMX的配置更改,需要使用junos_config模块,但是需要将junos模块的连接类型更改为netconf(上一次是network_cli),因此需要将清单文件进行以下更改。
* 第2章的用于获取show命令的playbook(get-int.yml)也将在netconf中运行。
库存(主机)
[all:vars]
ansible_python_interpreter=/usr/bin/python3 # python3を使用
[junos]
junos_router_1 ansible_ssh_host=192.168.0.202
[junos:vars]
ansible_connection=netconf # ここを変更(前回はnetwork_cli)
ansible_network_os=junos
ansible_user=ansible # vMXにログインするユーザ
ansible_ssh_pass=password
为了通过netconf进行连接,您需要安装python-ncclient。如果没有安装,Ansible执行时会出现”Failed to import the required Python library (ncclient)”的错误消息。
sudo apt-get update
sudo apt-get install python-ncclient
2. 日志服务器的设置.

如果能够确认与其他设备的通信性,我们将继续进行syslog的设置。
在设置中,我们参考了以下网站:
Rsyslog:将日志传输到远程主机
rsyslog.conf的语法
添加以下配置,以允许从本地(192.168.0.0/24)接收syslog。本次允许同时使用TCP和UDP协议。
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")
$AllowedSender UDP, 127.0.0.1, 192.168.0.0/24
$AllowedSender TCP, 127.0.0.1, 192.168.0.0/24
为了每个主机都能获取日志文件,我们需要在以下位置添加配置。
在第二行的开头,我们可以使用Facility.Priority的格式来过滤syslog,但是由于我们希望在vMX端进行过滤,所以将其设置为接收全部日志。
$template All_log,"/var/log/auth.d/%fromhost%_%$year%%$month%%$day%.auth"
*.* -?All_log
3. 向vMX添加配置
vMX输出到syslog服务器的配置为:
set system syslog host <syslog服务器> <Severity(syslog级别)>
根据Facility和Severity可以过滤要发送的日志。
为了确认在Ansible执行时会生成什么样的日志,我们首先将Facility-Severity设置为any-any。
同时,也允许netconf连接。
set system services netconf ssh port
set system syslog host 192.168.0.203 any any
4. 创建用于更改设置的playbook(set-descr.yml)
使用junos_config模块进行设置更改。您可以在lines下输入多个命令以进行设置更改。
---
- name: descr TEST
hosts: junos
gather_facts: no
tasks:
- name: set descr
junos_config:
lines:
- set interfaces fxp0 description ansible_test
尝试执行playbook后,配置更改任务(set descr)的结果显示为已更改。
test@ubuntu201:~/ansible$ ansible-playbook -i hosts set-descr.yml
PLAY [descr TEST] ******************************************************************************************************
TASK [set descr] *******************************************************************************************************
changed: [junos_router_1] # changedになっている
PLAY RECAP *************************************************************************************************************
junos_router_1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
在syslog服务器上查看日志时,可以看到输出了从SSH登录到通过Ansible进行配置更改的日志。
由于日志很多,所以用grep命令部分摘录了一些。
这样,我们可以发现在使用Ansible进行配置更改时,会输出一个名为UI_NETCONF_CMD的日志。
test@testubuntu:/var/log/auth.d$ grep netconf /var/log/auth.d/192.168.0.202_20200924.auth
Sep 24 09:52:08 192.168.0.202 mgd[8317]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'get-software-information'
Sep 24 09:52:08 192.168.0.202 mgd[8317]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'lock cannot reconstruct arguments'
Sep 24 09:52:08 192.168.0.202 mgd[8317]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'get-configuration format="set"'
Sep 24 09:52:09 192.168.0.202 mgd[8317]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'load-configuration action="set" format="text"'
Sep 24 09:52:09 192.168.0.202 mgd[8317]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'validate cannot reconstruct arguments'
Sep 24 09:52:09 192.168.0.202 mgd[8317]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'get-configuration compare="rollback" format="text" rollback="0"'
Sep 24 09:52:10 192.168.0.202 mgd[8317]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'commit-configuration log=test'
Sep 24 09:52:10 192.168.0.202 mgd[8317]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'unlock cannot reconstruct arguments'
Sep 24 09:52:11 192.168.0.202 mgd[8317]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'close-session'
设置要发送到syslog服务器的日志
让我们调查一下从vMX发送的UI_NETCONF_CMD是什么样的。
当在vMX上输入”help syslog <syslog名>”时,我们就会知道。
然后,我们发现Facility为LOG_AUTH,Severity为info。
ansible> help syslog UI_NETCONF_CMD
Name: UI_NETCONF_CMD
Message: User '<username>' used NETCONF client to run command '<command>'
Help: User ran command using NETCONF API
Description: The indicated user ran the indicated command using the NETCONF
application programming interface (API).
Type: Event: This message reports an event, not an error
Severity: info
Facility: LOG_AUTH
设施:由于无法在vMX上进行LOG_AUTH设置,我在juniper:System Log Messages Reference中进行了搜索,发现netconf相关的设置被归类为interactive-commands。下图是在参考书的第74页上所写的内容。

实际上,vMX安装的设置如下:
设置为输出Facility:interactive-commands / Severity:info的日志,以及不输出除UI_NETCONF_CMD之外的大量日志。
delete system syslog host 192.168.0.203 any any
set system syslog host 192.168.0.203 interactive-commands info
set system syslog host 192.168.0.203 match "!(.*UI_COMMIT_PROGRESS.*|.*UI_CHILD.*|.*UI_CMDLINE_READ_LINE.*)"
Ansible执行后的日志变得简洁明了,如下所示。
Sep 24 11:02:51 192.168.0.202 mgd[21823]: UI_AUTH_EVENT: Authenticated user 'ansible' at permission level 'j-super-user'
Sep 24 11:02:51 192.168.0.202 mgd[21823]: UI_LOGIN_EVENT: User 'ansible' login, class 'j-super-user' [21823], ssh-connection '192.168.0.201 53240 192.168.0.202 22', client-mode 'cli'
Sep 24 11:02:51 192.168.0.202 mgd[21823]: UI_LOGOUT_EVENT: User 'ansible' logout
Sep 24 11:02:51 192.168.0.202 mgd[21822]: UI_AUTH_EVENT: Authenticated user 'ansible' at permission level 'j-super-user'
Sep 24 11:02:51 192.168.0.202 mgd[21822]: UI_LOGIN_EVENT: User 'ansible' login, class 'j-super-user' [21822], ssh-connection '192.168.0.201 53240 192.168.0.202 22', client-mode 'netconf'
Sep 24 11:02:51 192.168.0.202 mgd[21822]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'get-software-information'
Sep 24 11:02:52 192.168.0.202 mgd[21822]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'lock cannot reconstruct arguments'
Sep 24 11:02:52 192.168.0.202 mgd[21822]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'get-configuration format="set"'
Sep 24 11:02:52 192.168.0.202 mgd[21822]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'load-configuration action="set" format="text"'
Sep 24 11:02:52 192.168.0.202 mgd[21822]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'validate cannot reconstruct arguments'
Sep 24 11:02:53 192.168.0.202 mgd[21822]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'get-configuration compare="rollback" format="text" rollback="0"'
Sep 24 11:02:53 192.168.0.202 mgd[21822]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'commit-configuration log=test'
Sep 24 11:02:53 192.168.0.202 mgd[21822]: UI_COMMIT: User 'ansible' requested 'commit' operation (comment: test)
Sep 24 11:02:54 192.168.0.202 mgd[21822]: UI_COMMIT_COMPLETED: commit complete
Sep 24 11:02:54 192.168.0.202 mgd[21822]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'unlock cannot reconstruct arguments'
Sep 24 11:02:54 192.168.0.202 mgd[21822]: UI_NETCONF_CMD: User 'ansible' used NETCONF client to run command 'close-session'
Sep 24 11:02:54 192.168.0.202 mgd[21822]: UI_LOGOUT_EVENT: User 'ansible' logout
Sep 24 11:03:45 192.168.0.202 mgd[7133]: UI_DBASE_LOGOUT_EVENT: User 'ansible' exiting configuration mode
相关文章
【VMware ESXi】我想在家中创建一个Ansible执行环境 ~第1章:配置ubuntu服务器的DNS解析~
【VMware ESXi】我想在家中创建一个Ansible执行环境 ~第2章:引入Ansible和vMX~