网络设备厂商众多,各种安全厂商,网络厂商,负载均衡厂商,如果想实现自动化备份配置,可以自己写python脚本。如果网络设备厂商多,自己写python 非常耗费时间精力。偶然在网上发现了oxidized 非常好用,支持120多种厂商,常见的思科,华为,f5,思杰,checkpoint 都支持。 我用docker 平台 +mysql 搭建了一套环境。



网络自动化运维第一篇 自动化备份网络配置_网络自动化运维 备份配置


docker 非常的轻便好用,与虚拟机的链接克隆原理有异曲同工之妙,通过‘写时复制原理’ 实现相同的系统库调用。首先每个企业自动化运维的第一步都是搭建自己的CMDB库,我搭建的主要是网络设备的,来存放网络设备的ip 地址,用户名,版本密码信息。作为自动化运维脚本或工具的数据源。


环境准备

Centos 7.2


第一步 安装yum 源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo



第二步 安装docker


yum -y install docker




第三步 搜索oxidized 和mysql 镜像


搜索oxidized 镜像

网络自动化运维第一篇 自动化备份网络配置_网络自动化运维 备份配置_02

搜索mysql镜像

网络自动化运维第一篇 自动化备份网络配置_网络自动化运维 备份配置_03


下载mysql8.0 和 oxidized 镜像


docker pull oxidized/oxidized:latest

docker pull mysql:8.0




第四步 启动mysql 镜像 

mysql 8.0 字符编码默认就是utf8 不用额外指定


docker run \
--name mysql \
-p 3306:3306 \
--restart=always \
-e MYSQL_ROOT_PASSWORD=shuaibi \
-v /date/mysql/:/var/lib/mysql/ \
-d mysql:8.0 \



-name 指定容器名字

-p 创建端口映射

-v 宿主机/date/mysql/目录挂载到/var/lib/mysql/

-e 指定root密码

-d 后台运行

--restart=always  docker 重启时 容器自动启动


利用docker ps 查看运行中的容器

网络自动化运维第一篇 自动化备份网络配置_网络自动化运维 备份配置_04



第五步 更改验证方式,允许root 用户 远程登录 并创建基础表结构


docker exec -it mysql /bin/bash

mysql -uroot -p***


由于恶心的mysql 8.0 更改里验证方式,很多调用报错,需要更改验证方式,


select host,user,plugin from mysql.user;


更改root的验证方式


ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'shuaibi';



第六步 创建基础表结构

CREATE TABLE `net_dev` (
  `id` int(10) UNSIGNED NOT NULL,
  `ipadd` text NOT NULL,
  `model` text NOT NULL,
  `username` text NOT NULL,
  `password` text NOT NULL,
  `enabled` char(64) 
) ;


model 用来存放设备厂商 如思科的ASA,F5的tmos,华三的comware等

ipadd 用来存放ip 地址

username 用来存放用户名

password 用来存放密码

enabled 是思科的enable密码


可以用Navicat 工具直接连入数据库 进行网络设备添加测试

华三设备

INSERT INTO `net_dev`(`ipadd`, `model`, `username`, `password`, `enable`) VALUES ('192.168.92.227', 'comware', 'admin', 'shuaibi', '');

思科设备

INSERT INTO `net_dev`(`ipadd`, `model`, `username`, `password`, `enable`) VALUES ('192.168.92.228', 'ios', 'cisco', 'shuaibi', 'shuaibi);

网络自动化运维第一篇 自动化备份网络配置_网络自动化运维 备份配置_05

查看mysql的容器ip地址 

运行 docker inspect mysql

网络自动化运维第一篇 自动化备份网络配置_网络自动化运维 备份配置_06



第七步骤 创建oxidized的配置文件   #可以直接复制我的配置文件


创建/date/oxidzied/ 目录 用来存放设备的配置,oxidized的配置文件


mkdir -p /date/oxidzied


vim  /date/oxidzied/config


---
username: xxx #
password: xxx #
model: nxos #
resolve_dns: true
interval: 604800  # 备份周期7天
use_syslog: false
debug: false  #初次安装时要开启
threads: 30
timeout: 20
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
rest: 0.0.0.0:8888
#rest: false
next_adds_job: false
vars:
 auth_methods: ["none", "publickey", "password", "keyboard-interactive"]  # 备份F5 时候要加上keyboard
groups: {}
models: {}
pid: /root/.config/oxidized/pid
stats:
  history_size: 10
input:
  default: ssh, telnet
  debug: false
  ssh:
    secure: false
  ftp:
    passive: true
  utf8_encoded: true
output:
  file:
    directory: /root/.config/oxidized/configs
source:
  default: sql
  sql:
    adapter: mysql2  #gem调用
    host: 172.17.0.3    #mysql 容器地址
    database: network   #存放数据的数据库
    table: net_dev   # 网络信息表
    user: root  #用户名
    password: niubi   #用户密码
    map:
      name: ipadd  #用户IP地址
      model: model  #设备版本信息
      username: username # 设备名称
      password: password  # 设备密码
vars_map:
   enable: enable   #思科的enable 密码
model_map:
  cisco: nxos
  juniper: junos
  f5: tmos



第八步 启动oxidized 镜像


docker run  --name='oxidized' -itd -v /data/oxidized:/root/.config/oxidized -p 8888:8888/tcp -t oxidized/oxidized


docker logs oxidized 查看报错


docker exec -it oxidized /bin/bash #进入到容器里


apt-get install libmysqlclient-dev  #安装mysql 客户端



 cat /var/lib/gems/2.5.0/gems/oxidized-0.26.3/lib/oxidized/source/sql.rb 可以查看sql.rb 对应的config 里面的变量名称

网络自动化运维第一篇 自动化备份网络配置_网络自动化运维 备份配置_07


注意在排错连接时 一定要开debug  




最后重启 oxidzied 

docker restart oxidized 


客户端打开界面测试 10.50.99.247:8888测试

网络自动化运维第一篇 自动化备份网络配置_网络自动化运维 备份配置_08




如遇到问题 请debug  看日志  所有日志保错写的很详细 docker los oxidized