2.1 文档内容与版本管理
首先需要声明的是,版本管理并不限于网络工程师们常说的“设备软件版本的管理”。这里提到的版本管理包括网络规划、网络运维涉及的所有文档、代码和设备相关的软件。具体的内容会在后续进行详细的说明。本节从以下几点进行描述:
❑ 版本管理的重要性;
❑ 网络管理中哪些内容需要版本管理;
❑ 如何实施版本管理;
❑ 版本管理常用的工具。
2.1.1 版本管理的重要性
大家在进行网络维护的过程中,也许遇到过拿着一份错误的规划表对设备进行了配置,随后网络出现了故障;也许还遇到过相同角色的设备上存在着不一样的策略。例如,一对SR(Service Router,业务路由器)和RR(Route Reflector,路由反射器)之间建了BGPv4邻居。但是其中一台设备并没有发送BGP Community(BGP路由的一种属性),导致流量进行切换时发生了故障。这些问题都与版本管理有着密切的关系。
其实,版本管理在任何管理领域都是一项非常重要的内容。现代社会存在着大量协作,大家在互相沟通合作的时候需要确保信息的统一准确,因此信息的版本管理是非常重要的。即便是由一个人完成的工作,由于时间的关系也需要做好版本的管理工作。只要在过程中出现了信息变化,就需要有版本管理。版本管理存在着如下两个基本要素。
首先,版本管理需要有一个明确的位置来存放这些信息。在考虑了安全性之后,存放信息的位置应该是便于查询的。
其次,存放这些信息的地方需要有一个好的手段来知道它们的版本信息,既要方便知道最新的版本内容,也要方便查询历史的版本内容。图2-1所示就是一种非常糟糕的信息保存方法。单纯通过文件名的方式是比较难于管理的,但是这又恰恰是我们日常管理版本最常用的方法。
图2-1 设备配置文件名
2.1.2 需要管理哪些文档
网络管理通常可以分为三个阶段:网络规划、网络建设与网络运维,每个阶段都会产生很多的信息。这些信息很多是通过文档(这里说的文档指一类文件)的形式来体现的。部分公司会采用一些软件系统进行替代,将其保存在数据库中。表2-1列出了一些较为常见的文档类型及其常用格式类型。
表2-1 常见文档
除了上述的文件外,还有一种文件是二进制文件。它们通常由其他公司提供,并不是网络管理者自己产生的。对于这样的文件,通常只需要管理其版本信息即可。
上面描述的这些文档都是需要进行版本管理的。这些文档的类型基本上是Office文档的格式或者纯文本的格式。
2.1.3 如何实施版本管理
如果有一些系统能进行版本管理是最好的,但是很多时候并不具备此类完善的系统,这就需要网络工程师自己来管理这些文件和版本信息。管理好这些文件以及它们的版本信息是NetDevOps的基础。如何在没有管理系统帮助的情况下快速而有效地进行管理呢?首先,我们需要对这些文件按照格式进行分类。这些文件大体可以分为以下三类:
❑ 微软Office格式的文件,如规划与描述的文件;
❑ 纯文本文件,如设备配置与一些脚本文件;
❑ 二进制文件,如网络设备使用的软件操作系统。这一类文件并没有包含在表2-1中。这是因为这种文件通常是由设备厂商提供,并不是网络管理者自己产生的。
其次,笔者建议尽量使用纯文本的格式来编写文档。Office格式的文件通常使用文件名和文件中的版本信息来进行管理。例如,文件名为《XXX网络实施总体方案V1.2》。在文件的开头会有如图2-2所示的内容。这样的版本信息是比较常见的版本管理方法。通过阅读文件中的版本信息,我们可以非常清晰地了解这个文件的相关版本信息。它适合在不同的人员之间、不同的部门,乃至不同的公司之间进行单个文件的传递。虽然我们可以在“文档变更过程”这里找到一些文档修改的简要信息,不过采用这样的方式很难在文件中保留全部的历史细节信息。因此,一些公司会使用微软SharePoint(https://products.office.com/zh-cn/sharepoint/collaboration)工具来进行团队的文档管理。它可以提供历史版本的管理,以及不同版本之间的比较信息。
图2-2 文档版本信息
注意
在网络管理中常常会遇到网络拓扑图信息,这样的内容是比较难以管理的。这里笔者推荐大家使用DOT文件格式进行网络拓扑的绘制。DOT是一种描述图形的语言,它能用一种简单的方式来描述图形,而且能兼顾人和机器同时读取和处理。
例如,在代码清单2-1中描述一个简单的IDC的拓扑:
代码清单2-1 一个简单的拓扑
graph G { spine1 [label="核心1" color=blue] spine2 [label="核心2"] leaf1 [label="接入1"] leaf2 [label="接入2"] leaf3 [label="接入3"] leaf4 [label="接入4"] leaf5 [label="接入5"] leaf6 [label="接入6"] spine1 -- leaf1 [color=red]; spine1 -- leaf2; spine1 -- leaf3; spine1 -- leaf4; spine1 -- leaf5; spine1 -- leaf6; spine2 -- leaf1 [color=red]; spine2 -- leaf2; spine2 -- leaf3; spine2 -- leaf4; spine2 -- leaf5; spine2 -- leaf6; }
解析这个DOT文件在Chrome浏览器(需要安装DOT Lang Viewer插件)中的显示结果如图2-3所示。使用DOT语言可以借助文本的方式来保存一个网络拓扑图。http://www.graphviz.org提供了DOT的详细说明,读者可以参考。
图2-3 Chrome浏览器显示拓扑图
再者,对于纯文本的文件,建议读者学习和了解MarkDown的文件格式。MarkDown具有以下优点。
❑ 兼容性好。纯文本的文件格式兼容性非常好,任何平台下都可以完全兼容。
❑ 可以转化为其他格式。MarkDown可以很容易地转换为HTML、PDF等文件格式,并且经过了一定的排版和格式处理。
❑ 语法简单。MarkDown的语法非常简单,很容易学习和应用。
最后,二进制的文件相对不太好管理。建议大家最好保留每个二进制文件的MD5或者SHA的HASH值。Linux和MAC OSX很容易对此类系统文件进行MD5与SHA值的计算。例如:
$ md5 iosxrv-k9-demo-6.1.2.qcow2.tgz MD5 (iosxrv-k9-demo-6.1.2.qcow2.tgz) = 71d3be46fb68f8058b6c683f80a0f410
通过管理文件的HASH值可以确定一个文件的内容是否完整。即使文件名称被修改了,HASH值也不会发生变化。其值不变就可以认为是相同的文件。大家熟悉的云网盘也是通过这个方法进行海量文件管理的。
2.1.4 版本管理的工具
在版本管理部分,存在很多的工具。目前较为流行的一个工具是Git(https://git-scm.com)。Windows、Linux和MAC OSX都支持Git。Git是一个分布式的版本控制软件,由大名鼎鼎的Linux之父Linus Torvalds所开发,并于2005年以GPL方式发布,其最初目的是更好地管理Linux内核开发。现在这个工具几乎是最为流行的版本管理软件。目前GitHub(https://github.com)是一个通过Git进行版本控制的软件源代码托管服务中心。现在GitHub不单单有软件的源代码,很多软件的使用说明也通过GitHub进行管理。这些内容通常被放在Git Pages(https://github.io)中。对于本书的读者而言,掌握基本的Git工具是后续章节学习的基础。出于篇幅的考虑,这里不对Git的使用方法进行展开,读者可以参考http://rogerdudler.github.io/git-guide/index.zh.html,这个文档是一个非常简洁的Git入门教材,其还包括多语言的版本。本书的后续章节中也会遇到Git相关命令,本书后续会默认大家已经了解和熟悉Git的基本命令。