Oxidized是一个使用 Ruby 编写的开源网络设备配置备份工具,是 RANCID(思科的一个工具) 的替代品,轻量级且可扩展的 Oxidized 支持 130 多种操作系统。
体验一下它的功能以及各种实现,看如何能与现有的系统进行整合,或者用 Python 造个简单的轮子。
结论:
-
整体使用感受:作为一个专门的配置备份软件,可以说把一个功能做到了比较高的水平!
-
亮点功能:可以支持监听设备上报的 syslog 日志中的配置改动来触发配置文件备份,对我来说是一个新的思路。
目前支持 ios、junos、eos、nsos、aruba,后面有时间可以验证一次。
- 很多实现细节没有体验,大致过了一遍文档
安装过程
拉取镜像
dockerpulloxidized/oxidized
配置文件相关
创建目录,用来存放配置文件、备份的配置、运行日志、主机清单文件等等
mkdir/etc/oxidized
运行一次容器,让程序自动生成初始配置文件,--rm
参数为容器退出后自动删除该容器:
dockerrun--rm-v/etc/oxidized:/root/.config/oxidized-p8888:8888/tcp-toxidized/oxidized:latestoxidized
回显信息为:edit ~/.config/oxidized/config
,说明已经生成了默认的配置文件。
编辑配置文件,oxidized 的配置文件是 yaml 格式的,详细的配置项Configuration,提供了多种灵活的数据继承的方法,即可以为每台、每组、每种设备等等进行不同的配置。
---
username:oxidized#值随意,以数据库为准
password:S3cr3tx#值随意,以数据库为准
model:junos#值随意,以数据库为准
interval:3600#配置备份的间隔时间
log:~/.config/oxidized/log#日志文件
debug:false
threads:30#线程
timeout:20#超时时间
retries:3#失败重试次数
prompt:!ruby/regexp/^([w.@-]+[#>]s?)$/#登录设备后的提示符判断
crash:
directory:~/.config/oxidized/crashes
hostnames:false
rest:0.0.0.0:8888#前端界面
pid:~/.config/oxidized/oxidized.pid
input:#连接方式
default:ssh,telnet
debug:false
ssh:
secure:false
output:
default:git#以git方式存储
git:
user:Oxidized
email:oxidized@example.com
repo:"~/.config/oxidized/oxidized.git"
source:
default:csv
csv:
file:~/.config/oxidized/router.db#CSV格式的主机数据库
delimiter:!ruby/regexp/:/
map:
name:0#CSV里面的值映射关系
ip:1
model:2
username:3
password:4
group:6
vars_map:
enable:5
groups:#为每个组进行单独的配置
mikrotik:
username:admin
password:blank
ubiquiti:
username:ubnt
password:ubnt
model_map:#为每种设备类型进行单独的配置
cisco:ios
username:admin
password:password
juniper:junos
ironware:
username:admin
password:password
vars:
enable:enablepassword
router.db
主机数据库,默认是 CSV 格式,也支持通过 SQL 、SQLite、HTTP 等方式来拉取,最终的数据结构根据不同的来源进行处理,然后重点是主机清单里面的数据,要通过 map
和 var_map
建立对应的映射关系,这里是配置文件可以灵活制定的关键。
以 CSV 格式为例,应当是以下格式,默认是以 :
为分隔符,最终结果是个列表,然后映射值时根据下标:
r1comwareNetDevops@01group1
r2comwareNetDevops@01group2
r3comwareNetDevops@01group2
运行
运行容器,将本地数据卷映射到容器内的指定目录,容器内部默认监听 8888 端口:
dockerrun-td
--nameoxidized_1
--restart=always
-v/etc/oxidized:/root/.config/oxidized
-p8888:8888/tcp
oxidized/oxidized:latest
oxidized
程序输出
配置输出:
- 以文件的方式存储
需要手动创建父目录 configs
,每个设备一个配置文件,只保留最新的配置,不会保存历史配置。
默认为每个组建立一个文件夹。
每次会在原文件的基础上更新文件,不会保存历史。
-
以 git 的方式存储,默认为每个组创建一个 git 仓库,可以通过
single_repo: true
来配置使用同一个仓库,此时每个组为一个文件夹。
oxidized 默认创建的的是bare repo,相当于一个私有的 git 仓库,里面没有 git 的工作目录,只有版本文件,每次备份配置后会进行一次提交;本地的私有仓库,可以通过克隆来查看具体的备份文件。
例如,我这里有一个 default.git 的目录,是上面 router.db 里面几台主机的配置备份信息:
![6b468f94-80dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9E/54/wKgZomToFceAUuRHAACZ8xB-6Zk675.png)
如果要查看具体的文件,可以克隆这个仓库:
gitclone/etc/oxidized/default.gitmy_config
![6b650910-80dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9E/54/wKgZomToFceAEFrkAABm3yMqKrQ611.png)
如果要把文件提交到远程仓库,可以在配置文件中添加 hooks 来实现,例如:
hooks:
push_to_remote:
type:githubrepo
events:[post_store]#发生改变时触发操作
remote_repo:
routers:git@git.intranet:oxidized/routers.git
switches:git@git.intranet:oxidized/switches.git
firewalls:git@git.intranet:oxidized/firewalls.git
publickey:/root/.ssh/id_rsa.pub
privatekey:/root/.ssh/id_rsa
上面的配置会在备份的配置发生改变时,把三个本地仓库分别推送到远程仓库,远端仓库使用密钥认证。
注意事项
-
修改配置文件需要重启 docker 的时候,不会自动删除 pid 文件,会导致无法启动,需要手动删除解决。
rm-rf/etc/oxidized/pid&&dockerrestartoxidized_1
前端界面展示
首页:
![6b88d962-80dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9E/54/wKgZomToFciADoWzAAGIwEjP82s215.png)
查看配置:
![6bbe96ba-80dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9E/54/wKgZomToFciAEigGAAJCCKLn6W8489.png)
基于 git 方式时,查看版本:
![6bea796a-80dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9E/54/wKgZomToFciAK7GFAAEZffR942o915.png)
查看版本差异:
![6c01156c-80dd-11ed-8abf-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9E/54/wKgZomToFciAX1OCAAHEIPP4usM969.png)
审核编辑 :李倩
-
操作系统
+关注
关注
37文章
6909浏览量
123880 -
网络设备
+关注
关注
0文章
321浏览量
29841 -
python
+关注
关注
56文章
4811浏览量
85117
原文标题:这个网络设备配置备份工具绝了,开源、轻量、扩展,支持130多种操作系统!
文章出处:【微信号:网络技术干货圈,微信公众号:网络技术干货圈】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
云服务器计算池的运维团队需要掌握的网络工具
如何配置ptp网络设备
使用Python批量连接华为网络设备
思科网络设备常用show命令
IR615如何实现VPN链路备份?
请问如何将esp32-idf内部的应用层网络协议关联到自己写的网络设备上?
AC/DC电源模块在通信与网络设备中的应用研究
![AC/DC电源模块在通信与<b class='flag-5'>网络设备</b>中的应用研究](https://file1.elecfans.com/web2/M00/E0/78/wKgZomY4ae-Aeu4fAAK_x8d7c1s170.png)
评论