NetDevOps入门与实践
上QQ阅读APP看书,第一时间看更新

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的基本命令。