Oxidized是一個使用 Ruby 編寫的開源網(wǎng)絡(luò)設(shè)備配置備份工具,是 RANCID(思科的一個工具) 的替代品,輕量級且可擴(kuò)展的 Oxidized 支持 130 多種操作系統(tǒng)。
體驗一下它的功能以及各種實現(xiàn),看如何能與現(xiàn)有的系統(tǒng)進(jìn)行整合,或者用 Python 造個簡單的輪子。
結(jié)論:
-
整體使用感受:作為一個專門的配置備份軟件,可以說把一個功能做到了比較高的水平!
-
亮點功能:可以支持監(jiān)聽設(shè)備上報的 syslog 日志中的配置改動來觸發(fā)配置文件備份,對我來說是一個新的思路。
目前支持 ios、junos、eos、nsos、aruba,后面有時間可以驗證一次。
- 很多實現(xiàn)細(xì)節(jié)沒有體驗,大致過了一遍文檔
安裝過程
拉取鏡像
dockerpulloxidized/oxidized
配置文件相關(guān)
創(chuàng)建目錄,用來存放配置文件、備份的配置、運(yùn)行日志、主機(jī)清單文件等等
mkdir/etc/oxidized
運(yùn)行一次容器,讓程序自動生成初始配置文件,--rm
參數(shù)為容器退出后自動刪除該容器:
dockerrun--rm-v/etc/oxidized:/root/.config/oxidized-p8888:8888/tcp-toxidized/oxidized:latestoxidized
回顯信息為:edit ~/.config/oxidized/config
,說明已經(jīng)生成了默認(rèn)的配置文件。
編輯配置文件,oxidized 的配置文件是 yaml 格式的,詳細(xì)的配置項Configuration,提供了多種靈活的數(shù)據(jù)繼承的方法,即可以為每臺、每組、每種設(shè)備等等進(jìn)行不同的配置。
---
username:oxidized#值隨意,以數(shù)據(jù)庫為準(zhǔn)
password:S3cr3tx#值隨意,以數(shù)據(jù)庫為準(zhǔn)
model:junos#值隨意,以數(shù)據(jù)庫為準(zhǔn)
interval:3600#配置備份的間隔時間
log:~/.config/oxidized/log#日志文件
debug:false
threads:30#線程
timeout:20#超時時間
retries:3#失敗重試次數(shù)
prompt:!ruby/regexp/^([w.@-]+[#>]s?)$/#登錄設(shè)備后的提示符判斷
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格式的主機(jī)數(shù)據(jù)庫
delimiter:!ruby/regexp/:/
map:
name:0#CSV里面的值映射關(guān)系
ip:1
model:2
username:3
password:4
group:6
vars_map:
enable:5
groups:#為每個組進(jìn)行單獨(dú)的配置
mikrotik:
username:admin
password:blank
ubiquiti:
username:ubnt
password:ubnt
model_map:#為每種設(shè)備類型進(jìn)行單獨(dú)的配置
cisco:ios
username:admin
password:password
juniper:junos
ironware:
username:admin
password:password
vars:
enable:enablepassword
router.db
主機(jī)數(shù)據(jù)庫,默認(rèn)是 CSV 格式,也支持通過 SQL 、SQLite、HTTP 等方式來拉取,最終的數(shù)據(jù)結(jié)構(gòu)根據(jù)不同的來源進(jìn)行處理,然后重點是主機(jī)清單里面的數(shù)據(jù),要通過 map
和 var_map
建立對應(yīng)的映射關(guān)系,這里是配置文件可以靈活制定的關(guān)鍵。
以 CSV 格式為例,應(yīng)當(dāng)是以下格式,默認(rèn)是以 :
為分隔符,最終結(jié)果是個列表,然后映射值時根據(jù)下標(biāo):
r1comwareNetDevops@01group1
r2comwareNetDevops@01group2
r3comwareNetDevops@01group2
運(yùn)行
運(yùn)行容器,將本地數(shù)據(jù)卷映射到容器內(nèi)的指定目錄,容器內(nèi)部默認(rèn)監(jiān)聽 8888 端口:
dockerrun-td
--nameoxidized_1
--restart=always
-v/etc/oxidized:/root/.config/oxidized
-p8888:8888/tcp
oxidized/oxidized:latest
oxidized
程序輸出
配置輸出:
- 以文件的方式存儲
需要手動創(chuàng)建父目錄 configs
,每個設(shè)備一個配置文件,只保留最新的配置,不會保存歷史配置。
默認(rèn)為每個組建立一個文件夾。
每次會在原文件的基礎(chǔ)上更新文件,不會保存歷史。
-
以 git 的方式存儲,默認(rèn)為每個組創(chuàng)建一個 git 倉庫,可以通過
single_repo: true
來配置使用同一個倉庫,此時每個組為一個文件夾。
oxidized 默認(rèn)創(chuàng)建的的是bare repo,相當(dāng)于一個私有的 git 倉庫,里面沒有 git 的工作目錄,只有版本文件,每次備份配置后會進(jìn)行一次提交;本地的私有倉庫,可以通過克隆來查看具體的備份文件。
例如,我這里有一個 default.git 的目錄,是上面 router.db 里面幾臺主機(jī)的配置備份信息:
如果要查看具體的文件,可以克隆這個倉庫:
gitclone/etc/oxidized/default.gitmy_config
如果要把文件提交到遠(yuǎn)程倉庫,可以在配置文件中添加 hooks 來實現(xiàn),例如:
hooks:
push_to_remote:
type:githubrepo
events:[post_store]#發(fā)生改變時觸發(fā)操作
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
上面的配置會在備份的配置發(fā)生改變時,把三個本地倉庫分別推送到遠(yuǎn)程倉庫,遠(yuǎn)端倉庫使用密鑰認(rèn)證。
注意事項
-
修改配置文件需要重啟 docker 的時候,不會自動刪除 pid 文件,會導(dǎo)致無法啟動,需要手動刪除解決。
rm-rf/etc/oxidized/pid&&dockerrestartoxidized_1
前端界面展示
首頁:
查看配置:
基于 git 方式時,查看版本:
查看版本差異:
審核編輯 :李倩
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6859瀏覽量
123499 -
網(wǎng)絡(luò)設(shè)備
+關(guān)注
關(guān)注
0文章
317瀏覽量
29706 -
python
+關(guān)注
關(guān)注
56文章
4801瀏覽量
84857
原文標(biāo)題:這個網(wǎng)絡(luò)設(shè)備配置備份工具絕了,開源、輕量、擴(kuò)展,支持130多種操作系統(tǒng)!
文章出處:【微信號:網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號:網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論