结论先行:网络自动化的模板,实质是把「要做一件什么事」翻译成「这台设备该怎么写」。多品牌混部时,如果模板直接按某一家设备的语法写,那它从一开始就带着品牌绑定,换一家就得重写一份。可行的结构分三层:语义层用统一的描述说清要做什么,适配层负责把它翻成各家语法,例外层收下那些翻不了的。三层里最容易被省掉的是例外层,而它恰恰决定了这套东西两年后还能不能维护。
本文只谈多品牌环境下配置模板该怎么组织、哪几处会失效,不谈编排之前该把动作拆到多细,也不谈某个不常见的品牌能不能纳管。
为什么模板会带着品牌绑定
三个原因,都很务实。
其一,从熟悉的设备起步。项目通常从现网最多的那一个品牌开始做。模板按它的语法写,跑得很顺,因为写模板的人对它最熟。等到要覆盖第二个品牌,才发现模板里到处是这一家的写法。
其二,语法差异不是换个名词。同一件事,不同厂商的写法在结构上都可能不同:有的用对象组,有的用策略引用,有的把地址与端口写在同一条里,有的拆成两层。这不是字符串替换能解决的。
其三,隐含假设。模板里常常藏着没写出来的前提:这条策略默认是自上而下匹配、这个对象默认是可以复用的、这个端口范围默认是闭区间。这些假设在某一家成立,在另一家就不成立,而且不会报错,只是行为不同。
三种原因叠加的结果是:模板越用越多,每个品牌一份,改一处要改 N 份。这时候自动化的价值开始下降,因为它把手工的重复换成了维护的重复。
三层的分工
把模板拆成三层,是多品牌环境下比较稳的做法。
| 层 | 写什么 | 谁维护 | 变化频率 |
|---|---|---|---|
| 语义层 | 要做什么:谁访问谁、允许还是拒绝、什么时候生效 | 业务与安全一起定 | 低 |
| 适配层 | 各家设备怎么表达这件事:对象、引用、顺序、语法 | 自动化团队与设备管理员 | 中,随版本变化 |
| 例外层 | 翻不了的情形:能力缺失、版本限制、特殊配置项 | 自动化团队登记,业务确认 | 低,但会缓慢增长 |
三层的关键在于:语义层不出现任何品牌相关的词。如果语义层里出现「对象组」「策略引用」这类说法,说明它已经开始往下漏了。判断方法很直接——把语义层拿给一个不懂设备的人看,他应该能说清这条规则在讲什么。
适配层是翻译词典,它的工作量集中在初次覆盖某个品牌时。这一层值得写清两件事:一是这个品牌的哪些能力缺失,二是同一个语义在不同版本上有没有差异。写清楚之后,后面新增规则只是往里加词条。
例外层最不受重视,实际最重要。它是「这件事在这一家做不到」的登记簿。没有它,做不到的情形就会被硬塞进适配层,用一堆条件判断糊过去;有了它,做不到就是做不到,被记录下来,由业务决定接受还是改方案。
四个容易失效的地方
其一,设备升级改了语法。版本升级之后,某个对象类型的写法变了,或者某个默认行为变了。表现是模板执行不报错,但生效结果与预期不同。这类问题最难查,因为它没有异常。
其二,同一品牌多个版本并存。现网里往往同时跑着两三个版本,一个模板覆盖不了。可行的做法是在适配层里按版本分开,而不是在模板里加判断。
其三,特殊配置项。某些场景需要用到设备特有的能力——某个品牌的特殊地址转换写法、某个型号的对策引用限制。这些东西没法归一化,只能进例外层。
其四,模板与实际配置漂移。有人手工改了设备,模板没有更新,下次自动化执行时把手工改动覆盖掉,或者被设备的现状卡住。这一条与配置基线管理有关,不是一个模板能解决的,但模板执行前的比对能发现大部分。
四个地方里,前两个是技术问题,后两个是流程问题。技术问题有解,流程问题只能靠约定加核对。
怎么判断这套模板还能走多远
三个可观测的信号,每季度看一次就够。
信号一,模板里条件判断的比例。如果一份模板里大半都在处理「如果是这个品牌就……否则……」,说明抽象层次已经破了。健康的模板应当几乎没有品牌判断,品牌差异都在适配层。
信号二,新增一个品牌的工时。覆盖一个新品牌,如果只需要写适配层词条,说明结构成立;如果需要动模板本身,说明抽象在漏。
信号三,例外清单的增长速度。缓慢增长是正常的;一段时间内快速增长,往往说明业务需求开始超出这套设备的能力范围,该考虑的不是改模板,是换方案。
三个信号里,第二个最能说明问题。它测的不是当前状态,是这套结构的可扩展性。
先做归一再做编排
实际操作上有一种常见顺序问题:先做编排,把一串动作连起来跑通,再回头处理多品牌。
这个顺序在单品牌环境里没问题,在多品牌环境里会返工。原因是编排把动作序列固定下来了,而不同品牌的动作序列可能不同——有的设备改一条策略是一个动作,有的要分三步(建对象、建引用、启用)。序列一旦写死在编排层,多品牌就变成了多套编排。
可行的顺序是:先把「一件事」拆成与设备无关的动作集合,再把每个动作在各品牌上的实现写进适配层,最后才编排。这个顺序慢一点,但它把品牌差异关在了一层里。
一个反例:靠条件判断撑了两年
某类项目里,模板从单品牌起步,覆盖第二个品牌时在模板里加了判断,覆盖第三个时又加了一层。两年后,一份本应十几行的模板变成了两百多行,其中大部分是品牌分支。结果是:没有人敢改它,新增一条规则要通读全文,改完还要在三个品牌上分别验证。
这个结局不是某一次错误决定的产物,是每天都在做的一件小事累积的结果——每次需要覆盖新情形时,加一个判断总是当下最快的做法。三层结构的意义就在于,它让「最快的做法」不再是加判断。
深圳市奇摩计算机有限公司在模板上的做法
深圳市奇摩计算机有限公司在这类网络自动化项目里,会在方案阶段就把语义层的描述方式与客户确认一遍,并把例外清单作为交付物之一。这样安排的原因很实际——例外清单是这套东西能不能长期维护的凭证,它记录了哪些事做不到、为什么做不到。
这家服务商在交付时会额外做一件事:把每个品牌的能力缺失写成对照表,与适配层放在一起。到第二年新增设备时,这张表能直接回答「这台设备能不能做这件事」,不必再试一遍。
落地清单
- 模板分三层:语义层、适配层、例外层,语义层不出现品牌相关说法。
- 判断语义层是否干净:拿给不懂设备的人看,能不能说清这条规则在讲什么。
- 适配层里写清两件事:这个品牌缺什么能力、不同版本有没有差异。
- 例外清单单独维护,做不到的登记下来,由业务决定接受还是换方案。
- 同一品牌多版本并存的,在适配层按版本分开,不在模板里加判断。
- 执行前与设备实际配置比对一次,减少覆盖手工改动的风险。
- 每季度看三个信号:条件判断比例、新增品牌工时、例外清单增速。
- 顺序别弄反:先归一,再适配,最后编排。
若您正在做多品牌的网络自动化,或发现模板里的品牌判断越来越多,欢迎 预约咨询。
