自动化改造总体方案设计

好,咱们进入第二章。上一章我们梳理了设备注册的现状和痛点,说白了就是「人肉操作太多,容易出错,效率还低」。那这一章,我就聊聊怎么从架构层面去解决这些问题。

我个人习惯,做任何自动化方案之前,先想清楚三件事:设计原则是什么、用什么技术、整体怎么串起来。这三件事定了,后面写代码、配流程才不会跑偏。

架构设计原则

我在项目中遇到过不少「自动化搞到一半发现跑不动」的情况。后来我总结了几条铁律,分享给你。

  • 解耦与分层:别把注册逻辑和底层硬件驱动写死在一起。我见过一个项目,换了个交换机型号,整个注册脚本都得重写。所以,一定要把「设备发现」「信息采集」「配置下发」「状态校验」拆成独立模块。每个模块只干一件事,出了问题也好排查。
  • 幂等性:这是自动化的命根子。什么叫幂等?就是同一个操作执行一次和一百次,结果是一样的。比如注册一台设备,如果它已经注册过了,再次执行应该直接返回「已注册」,而不是报错或者重复插入数据。我曾经因为没注意这个,导致CMDB里一台设备出现了三条记录,排查了一下午。
  • 可观测性:自动化跑起来之后,你不能两眼一抹黑。每一步执行了什么、花了多久、成功还是失败,都得有日志和指标。我建议从一开始就把日志结构定义好,别等出问题了再补。
  • 渐进式替换:别想着一天之内把所有设备都切到自动化。先挑一个机房、一种设备类型试点,跑顺了再推广。这个原则帮我避免了好几次「上线即回滚」的尴尬。

核心原则速览

原则一句话解释我的经验
解耦与分层模块独立,各司其职换硬件不用改主流程
幂等性重复执行结果不变避免CMDB数据脏乱
可观测性每一步都有迹可循日志结构提前定好
渐进式替换小范围试点再推广降低回滚风险

技术选型

技术选型这块,我踩过不少坑。选对了,事半功倍;选错了,后面全是坑。我的建议是:用成熟的、社区活跃的、团队熟悉的技术。

Ansible:配置下发与编排引擎

为什么选Ansible?说白了,它无代理,不需要在设备上装客户端,通过SSH就能干活。这对网络设备来说太重要了。你想想看,几百台交换机,每台都装agent,运维成本和安全隐患都很大。

我习惯用Ansible做两件事:

  • 设备初始化:比如配置管理IP、开启SNMP、设置NTP。这些是注册的前置条件。
  • 配置合规性检查:注册完成后,用Ansible的assert模块检查关键配置是否到位。
# 一个简单的设备初始化Playbook示例
- name: 设备初始化 - 设置管理IP和SNMP
  hosts: network_devices
  gather_facts: no
  tasks:
    - name: 配置管理接口IP
      ios_config:
        lines:
          - interface Vlan1
          - ip address 10.0.0.1 255.255.255.0
          - no shutdown

    - name: 启用SNMP只读社区
      ios_config:
        lines:
          - snmp-server community public RO

Python:胶水代码与复杂逻辑

Ansible擅长编排,但遇到复杂的逻辑判断、数据处理、API调用,还是得Python上场。我一般用Python写自定义模块和调度脚本。

举个例子,设备注册时可能需要从Excel导入IP列表,或者调用内部工单系统的API。这些Ansible做起来比较别扭,但Python一行requests就搞定了。

我的小技巧:把Python脚本封装成Ansible的custom module,这样既能享受Ansible的编排能力,又能用Python处理复杂逻辑。两全其美。

CMDB:配置管理数据库

CMDB是整个自动化的数据核心。所有设备注册的信息最终都要落到CMDB里。我建议选一个支持API、有资产模型、能自定义字段的CMDB。比如开源的iTop或者商业的ServiceNow。

CMDB里至少要有这些字段:

  • 设备唯一标识:序列号或MAC地址
  • 管理IP:用于后续运维
  • 设备类型:交换机、路由器、防火墙
  • 注册状态:待注册、已注册、注册失败
  • 注册时间:方便追溯

注意:CMDB的数据质量决定了自动化的上限。如果CMDB里都是脏数据,自动化跑得再快也是白搭。我建议在注册流程中加入数据校验环节,比如IP格式检查、序列号唯一性检查。

整体流程图设计

好了,原则定了,技术选型也明确了。接下来就是怎么把它们串起来。下面这张图是我设计的整体流程,你可以参考一下。

设备注册自动化整体流程图 开始:触发注册 步骤1:设备发现(Ansible扫描) 步骤2:信息采集(Python脚本) 步骤3:数据校验(Python) 步骤4:写入CMDB(API调用) 结束:注册完成 说明 1. 每一步都有日志输出 2. 失败时自动重试3次 3. 重试失败则告警

这个流程看起来简单,但每个步骤都有讲究。我挑几个关键点说说。

  • 设备发现:我习惯用Ansible的ping模块先扫一遍IP段,能ping通的设备才进入下一步。这样可以避免浪费时间在不可达的设备上。
  • 信息采集:用Python通过SNMP或SSH获取设备的序列号、型号、固件版本。这里要注意,不同厂商的MIB库不一样,需要写适配器。
  • 数据校验:校验采集到的信息是否完整、格式是否正确。比如序列号不能为空,IP不能是0.0.0.0。我曾经因为没做校验,把一堆空数据写进了CMDB,后来清理了整整两天。
  • 写入CMDB:通过CMDB的REST API写入数据。这里要保证事务性,要么全部写入成功,要么全部回滚。我一般用Python的requests库配合重试机制。

避坑指南:我曾经在写入CMDB时没做去重,导致同一台设备被注册了两次。后来我在写入前加了一步「查询设备是否已存在」,如果存在则更新,不存在则插入。这个逻辑虽然简单,但能避免很多麻烦。

嗯,到这里,总体方案设计就聊完了。你可能会问,这些模块怎么部署?怎么保证高可用?别急,这些内容我会在后面的章节里详细展开。这一章你只要记住:原则是骨架,技术选型是肌肉,流程图是血脉。三者缺一不可。