一种配置回滚方法及装置与流程

文档序号:17002055发布日期:2019-03-02 01:51阅读:228来源:国知局
一种配置回滚方法及装置与流程

本申请涉及网络技术领域,具体涉及一种配置回滚方法及装置。



背景技术:

随着互联网的高速发展,防火墙、路由器等网络设备配置指令表项、条数的数量级可高达10万,这种规模的配置量依靠人工维护变得越来越不现实。配置回滚功能是一种通过配置回滚到指定配置文件中配置状态,实现对设备配置快速添加、删除、恢复的自动化管理手段,其解决了如何自动批量配置问题。

但在相关技术中,当配置回滚涉及到向当前配置文件中添加缺少的配置指令时,由于该缺少的配置指令被直接添加至当前配置文件的末端,因而会产生与指定配置文件中命令顺序不一致的问题,导致配置回滚失败。



技术实现要素:

有鉴于此,本申请提供一种配置回滚方法及装置,保证了配置指令插入当前配置文件中的正确位置,使得所插入的配置指令能够正常与其他配置指令配合生效。

为实现上述目的,本申请提供技术方案如下:

接收配置回滚请求,所述配置回滚请求用于指示按照指定配置文件实施配置回滚;

当所述指定配置文件中的第一配置指令未存在于当前配置文件中,且所述第一配置指令为所属模块中的非首条指令时,根据所述第一配置指令与所述指定配置文件中的其他配置指令之间的顺序关系,将所述第一配置指令插入所述当前配置文件中;

依次执行所述当前配置文件中的配置指令。

根据本申请的第二方面,提出了一种配置回滚装置,包括:

接收单元,接收配置回滚请求,所述配置回滚请求用于指示按照指定配置文件实施配置回滚;

第一配置单元,当所述指定配置文件中的第一配置指令未存在于当前配置文件中,且所述第一配置指令为所属模块中的非首条指令时,根据所述第一配置指令与所述指定配置文件中的其他配置指令之间的顺序关系,将所述第一配置指令插入所述当前配置文件中;

执行单元,依次执行所述当前配置文件中的配置指令。

由以上技术方案可见,本申请依据指定配置文件中所读取的配置指令与其他配置指令之间的顺序关系,将该配置指令插入到当前配置文件中指定位置,使得所插入的配置指令能够正常与其他配置指令配合生效。

附图说明

图1是根据本申请一示例性实施例中的配置回滚的方法的流程图;

图2是根据本申请一示例性实施例中的另一种配置回滚方法的流程图;

图3是根据本申请一示例性实施例中的一种电子设备的示意结构图;

图4是根据本申请一示例性实施例中的一种配置回滚装置的框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

配置回滚是将当前配置文件回退到指定配置文件中的配置状态,实现对设备配置的自动化批量管理,但相关技术中直接将当前配置文件中缺少的配置指令添加到末端的方式,会产生与指定配置文件中配置指令顺序不一致的问题,例如,以包过滤策略为例,指定配置文件中包过滤策略有3条配置指令:security-policytest1、security-policytest2、security-policytest3,当前配置文件对应模块的配置指令为:security-policytest1、security-policytest3、security-policytest4,因而使用现有技术中的配置回滚方法,首先逐条读取当前包过滤策略模块中的配置指令,与指定配置文件中配置指令进行比对,删除当前配置文件该模块中多余的配置指令得到配置后的指令为:security-policytest1、security-policytest3,再逐条读取指定配置文件中配置指令,补充当前配置文件中缺少的配置指令,得到配置后当前配置文件中包过滤模块的配置指令为:security-policytest1、security-policytest3、security-policytest2,而指定配置文件中包过滤模块的配置指令为:security-policytest1、security-policytest2、security-policytest3,显然相关技术中的配置回滚的方式造成了当前配置文件的各模块中配置指令顺序错乱的问题,导致当前配置文件中的功能模块配置回滚失败。

有鉴于此,本申请提供一种配置回滚优化方法,解决配置回滚后配置顺序与指定配置文件的配置顺序不一致的问题。

下面结合附图,对本申请的具体实施方案进行详细阐述。

为对本申请进行进一步说明,提供下列实施例:

图1是本申请一示例性实施例提供的一种配置回滚方法的流程图,如图1所示,该方法可以包括以下步骤:

步骤101,接收配置回滚请求,所述配置回滚请求用于指示按照指定配置文件实施配置回滚。

在一实施例中,配置文件由命令行可执行命令组成,可以是有效的.cfg文件。指定配置文件可以使用手工/自动备份功能的方式生成,也可以是使用configurationrollbacksave命令生成,或者是其他设备的可兼容的配置文件,本申请对配置文件的来源并不进行限定。

步骤102,当所述指定配置文件中的第一配置指令未存在于当前配置文件中,且所述第一配置指令为所属模块中的非首条指令时,根据所述第一配置指令与所述指定配置文件中的其他配置指令之间的顺序关系,将所述第一配置指令插入所述当前配置文件中。

鉴于正常运行配置文件依赖于配置文件各模块中准确的命令语言及严格的命令行顺序,因而本申请技术方案依据指定配置文件中所读取的配置指令与其他配置指令之间的顺序关系,将该配置指令插入到当前配置文件中指定位置,保证了配置指令插入当前配置文件中的正确位置,使得所插入的配置指令能够正常与其他配置指令配合生效。

在一实施例中,在指定配置文件中获取配置指令及其前一配置指令,对两条指令进行解析,如果解析结果确定两者属于同一模块,则所获取的配置指令为所属模块中的非首条指令;相反,若解析结果确定两者不属于同一模块,则所获取的配置指令为所述模块中的首条指令。

在一实施例中,当所读取的配置指令未存在于当前配置文件中,且该配置指令为所属模块中的非首条指令时,根据该配置指令与前一条配置指令之间的顺序关系,将所读取的配置指令插入当前配置文件中,进一步的,依据指定配置文件中获取第一配置指令前一条第二配置指令,在当前配置文件中确定与第二配置指令相同的第三配置指令,并在第三配置指令之后插入所述第一配置指令。

例如,对于上述举例中涉及的包过滤策略,基于上述实施例可使指定配置文件中的security-policytest2指令被插入当前配置文件中的security-policytest1与security-policytest3之间,区别于相关技术中将security-policytest2直接插入到配置文件的末尾。具体的,本申请中先获取指定配置文件中security-policytest2指令及其前一条指令security-policytest1,当该security-policytest1指令与security-policytest2指令属于同一模块时,在当前配置文件中确认security-policytest1的位置,并在security-policytest1命令后插入security-policytest2,得到配置回滚后的配置指令为:security-policytest1、security-policytest2、security-policytest3,可以确保严格按照命令间顺序插入配置指令,所以本申请技术方案克服了相关技术中配置回滚后配置文件中配置指令在所属模块中的命令顺序与指定配置文件中对应的命令顺序不一致的问题。

在一实施例中,当所读取的指定配置文件中首条配置指令未存在于当前配置文件中时,将所述首条配置指令所属模块的配置指令依次与当前配置文件中的配置指令进行比对,直至所述首条配置指令所属模块中的任一配置指令被确定为存在于所述当前配置文件中;

在所述当前配置文件中与所述任一配置指令相同的配置指令之前插入所述首条配置指令。

在一实施例中,当所读取的指定配置文件中模块的首条配置指令未存在于当前配置文件中时,将所述模块的首条配置指令所属模块的配置指令依次与当前配置文件中的配置指令进行比对,直至该模块的首条配置指令所属模块中的任一配置指令被确定为存在于所述当前配置文件中;

在所述当前配置文件中与所述任一配置指令相同的配置指令之前插入所述模块首条配置指令。

在本实施例中,由于配置文件中模块与模块之间顺序颠倒,仍可以保证配置文件的回滚生效,所以,配置文件中模块与模块之间的配置指令不需要保证严格的先后顺序,模块的首条配置指令插入到配置文件首端或者末端的位置并不会对其所属模块中其他指令的配置回滚正常生效产生干扰,当然,配置文件的首条配置指令必然为所属模块中的第一条配置指令,所以首条配置指令亦可插入到当前配置文件中首端或末端中的任一位置,而不需要考量首条配置指令在所述模块中的位置。

在一实施例中,当读取到指定配置文件中的最后一条配置指令时,逐条读取当前配置文件中的配置指令,对于所读取的配置指令在当前配置文件中查找是否存在相同指令,若存在,则不做任何处理,若不存在,则将当前配置文件中所读取的配置指令删除;例如,可以对当前配置文件中的配置指令进行反向配置,即可在当前配置文件中删除该配置指令。

步骤103,依次执行所述当前配置文件中的配置指令。

通过上述实施例,在接收到配置回滚请求后,依据指定配置文件中所读取的配置指令与其他配置指令之间的顺序关系,对当前配置文件中的配置指令进行配置回滚,保证了在配置回滚后当前配置文件中的指令顺序的正确性,使得执行当前配置文件后各配置指令能够正常配合生效,克服了相关技术中因配置回滚后配置指令顺序错乱导致配置回滚失效的缺点。

为了便于理解,下面以nginx配置文件中两个连续配置模块fastcgi模块与http_proxy模块为例,对本申请的具体实施方案进行详细阐述。为方便进行说明,下文中将fastcgi模块中的配置指令抽象为:fastcgi_a、fastcgi_b,将http_proxy模块中的配置指令抽象为:proxy_a、proxy_c;相应地,假定指定配置文件中的配置指令依次为fastcgi_a、fastcgi_b、proxy_a、proxy_c,而当前配置文件中的配置指令依次为fastcgi_d、fastcgi_e、proxy_b、proxy_c、proxy_d。那么,通过本申请的技术方案,可以在基于指定配置文件对当前配置文件进行配置回滚时,确保各模块中的各条配置指令之间符合对应的排列顺序,而不会出现相关技术中顺序出错的问题。下面结合图2对该配置回滚过程进行描述;其中,图2是根据本申请一示例性实施例中的另一种配置回滚方法的流程图。如图2所示,该方法可以包括:

步骤201,接收配置回滚请求。

步骤202,判断是否存在尚未被读取的配置指令,若是则执行步骤203,否则执行步骤213。

步骤203,逐条读取指定配置文件中配置指令z。

步骤204,判断所读取的配置指令z1在当前配置文件中是否存在,若存在执行步骤202,否则执行步骤205。

步骤205,判断所读取的配置指令z1是否为指定配置文件的第一条配置指令,若是,执行步骤206,否则执行步骤208。

步骤206,将该配置指令z1所属模块中的任一配置指令依次与当前配置文件中的配置指令进行比对,判断当前配置文件中是否存在与配置指令z1所属模块中的任一配置指令相同的配置指令d1,若不存在,将该配置指令z1插入当前配置文件首端或者末端,并在完成后返回步骤202,若存在,执行步骤207。

步骤207,在所述当前配置文件中的配置指令d1之前插入所述配置指令z1,返回步骤202。

在一实施例中,配置指令z用于表征指定配置文件中所包含的配置指令;其中,在逐条读取指定配置文件中的配置指令时,配置指令z1用于表征每一条被读取到的配置指令。

例如,假定被读取到的配置指令z1为fastcgi_a,由于当前配置文件中不存在fastcgi_a,且fastcgi_a为指定配置文件的第一条配置指令,则将配置指令z1所属模块中的任一配置指令依次与当前配置文件中的配置指令进行比对,而fastcgi_a所属模块中的fastcgi_a、fastcgi_b命令在当前配置文件中均不存在相同配置指令,因而可以直接将fastcgi_a插入到当前配置文件的首端或者末端,若以插入首端为例,则当前配置文件被更新为:fastcgi_a、fastcgi_d、fastcgi_e、proxy_b、proxy_c、proxy_d。

步骤208,在指定配置文件中获取所读取配置指令z1的前一条配置指令z2。

步骤209,解析配置指令z2与配置指令z1,根据解析结果判断两个配置指令是否属于同一模块,若不是,则执行步骤210,否则执行步骤212。

步骤210,将配置指令z1所属模块中的任一配置指令依次与当前配置文件中的配置指令进行比对,判断当前配置文件中是否存在与配置指令z1所属模块中的任一配置指令相同的配置指令d2,若不存在,将该配置指令z1插入到当前配置文件的首端或末端,并在完成后返回步骤202,若存在执行步骤211。

步骤211,在当前配置文件中的配置指令d2之前插入配置指令z1,并在完成后返回步骤202。

步骤212,在当前配置文件中确定与配置指令z2相同的配置指令d3,将所述配置指令z1插入到所述配置指令d3之后,并在完成后执行步骤202。

在一实施例中,当配置指令z1为上述的fastcgi_b时,配置指令z2为指定配置文件中位于fastcgi_b之前的一条配置指令,即fastcgi_a命令。假定通过解析确认fastcgi_b命令与fastcgi_a命令均属于同一模块(即fastcgi模块),可以在当前配置文件中确认到与配置指令z2相同的配置指令d1,比如此时的配置指令d1为fastcgi_a,然后将fastcgi_b插入到当前配置文件中的fastcgi_a之后,使得当前配置文件被更新为:fastcgi_a、fastcgi_b、fastcgi_d、fastcgi_e、proxy_b、proxy_c、proxy_d。

进一步的,返回步骤202,读取指定配置文件中下一条配置指令,此时所读取的配置指令z1为proxy_a,由于配置指令proxy_a在当前配置文件中不存在,且配置指令proxy_a并非指定配置文件中的第一条配置指令,因而可以获取指定配置文件中位于proxy_a之前的一条配置指令,即fastcgi_b命令。假定通过解析确定proxy_a与fastcgi_b并不属于同一模块,则表明proxy_a为所属模块(即http_proxy模块)中的第一条配置指令,可以将配置指令proxy_a所属的http_proxy模块中的任一配置指令依次与当前配置文件中的配置指令进行比对,通过比对确认http_proxy模块中存在proxy_c与当前配置文件中的配置指令proxy_c相同,此时配置指令d2为proxy_c,因此,在当前配置文件的proxy_c命令前插入配置指令proxy_a,使得当前配置文件更新为:fastcgi_a、fastcgi_b、fastcgi_d、fastcgi_e、proxy_b、proxy_a、proxy_c、proxy_d。

进一步的,返回步骤202,读取指定配置文件中proxy_a命令的下一条配置指令,此时所读取的配置指令z1为proxy_c命令,由于当前配置文件中存在相同的proxy_c命令,因此直接返回步骤202,由于proxy_c命令为指定配置文件中的最后一条命令,则指定配置文件中不存在尚未被读取的配置指令,跳转步骤213且此时配置更新后的当前配置文件为fastcgi_a、fastcgi_b、fastcgi_d、fastcgi_e、proxy_b、proxy_a、proxy_c、proxy_d。

步骤213,逐条读取当前配置文件中的配置指令d,执行步骤214。

步骤214,判断是否存在尚未被读取的配置指令,若不存在,则配置回滚结束,否则执行步骤215。

步骤215,判断所读取的配置指令d4在指定配置文件中是否存在,若存在,则直接返回步骤213,否则执行步骤216。

步骤216,若不存在,则删除所读取的配置文件d4,返回步骤213。

在一个实施例中,配置指令d用于表征当前配置文件中所包含的配置指令;其中,在逐条读取当前配置文件中的配置指令时,配置指令d2用于表征每一条被读取到的配置指令。

例如,经过步骤201~步骤212后当前配置文件更新为:fastcgi_a、fastcgi_b、fastcgi_d、fastcgi_e、proxy_b、proxy_a、proxy_c、proxy_d,逐条读取当前配置文件中的配置指令,与指定配置文件中的配置指令进行比对,即命令:fastcgi_a、fastcgi_b、proxy_a、proxy_c。假定被读取到的配置指令d2为proxy_a,由于指定配置文件中存在proxy_a,则返回步骤213,读取当前配置文件中的下一条配置指令。

再例如,假定被读取到的配置指令d2为fastcgi_d,判断其在指定配置文件中不存在,则对该指令进行删除,即反向操作命令。

具体的,在一实施例中,反向操作命令中反向操作字段可以为no,在另一实施例中,反向操作字段可以为undo。此外,反向操作命令的获取方式有多种,在一实施例中,可以在待回滚的配置命令的开始位置添加反向操作字段,得到该配置指令对应的反向操作命令,在又一实施例中,可以在本地查询预先注册与待回滚的配置命令匹配的回滚命令,确定待回滚配置命令的反向操作命令,本申请对此不做限定。

类似的,当前配置文件中的fastcgi_d、fastcgi_e、proxy_b、proxy_d均在指定配置文件中不存在,所以均应被执行删除操作。在完成上述步骤后,识别到当前配置文件中不存在尚未被读取的配置文件后,配置回滚结束,当前配置文件更新为fastcgi_a、fastcgi_b、proxy_a、proxy_c,配置回滚后的当前配置文件中的各模块的配置指令与指定配置文件中的fastcgi_a、fastcgi_b、proxy_a、proxy_c相同,因此,当前配置文件可以按照配置回滚后的配置指令正常生效。

在上述实施例中,将指定配置文件中存在而当前配置文件中不存在的配置指令,按照与其在指定配置文件的所属模块中的其他配置指令的先后顺序,插入当前配置文件中,同时将当前配置文件中的多余配置指令删除,使得实现将当前配置文件中配置指令回滚到指定配置文件中的命令配置状态,且回滚后的当前配置文件中命令严格按照其在指定配置文件模块中命令间顺序,使得回滚后配置文件可以正常生效。

在另一实施例中,可以先对当前配置文件中的配置指令进行遍历,删除指定配置文件中不存在的配置指令,再读取指定配置文件中的配置指令,对于当前配置文件中不存在的配置指令,依据其在指定配置文件中的命令间顺序插入到当前配置文件中的对应位置,具体细节与上述实施例类似,更多相同的细节不再一一赘述。

图3是根据本申请一示例性实施例中的一种电子设备的示意结构图。请参考图3,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成配置回滚装置。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

请参考图4,在软件实施方式中,该配置回滚装置可以包括:

接收单元401,接收配置回滚请求,所述配置回滚请求用于指示按照指定配置文件实施配置回滚;

第一配置单元402,当所述指定配置文件中的第一配置指令未存在于当前配置文件中,且所述第一配置指令为所属模块中的非首条指令时,根据所述第一配置指令与所述指定配置文件中的其他配置指令之间的顺序关系,将所述第一配置指令插入所述当前配置文件中;

执行单元403,依次执行所述当前配置文件中的配置指令。

可选的,所述第一配置单元402具体用于:

获取所述指定配置文件中的第二配置指令,所述第二配置指令位于所述第一配置指令之前,且与所述第一配置指令相邻;

在所述当前配置文件中确定与所述第二配置指令相同的第三配置指令;

在所述第三配置指令之后插入所述第一配置指令。

可选的,还包括:

第二配置单元404,当所述指定配置文件中的第四配置指令未存在于所述当前配置文件中,且所述第四配置指令为所述指定配置文件中的首条配置指令时,将第四配置指令所属模块的配置指令依次与当前配置文件中的配置指令进行比对,直至所述第四配置指令所属模块中的任一配置指令被确定为存在于所述当前配置文件中;

在所述当前配置文件中与所述任一配置指令相同的第五配置指令之前插入所述第四配置指令。

可选的,还包括:

第三配置单元405,当所述指定配置文件中的第六配置指令未存在于当前配置文件中,且所述第六配置指令为所属模块中的首条指令时,将第六配置指令所属模块的配置指令依次与当前配置文件中的配置指令进行比对,直至第六配置指令所属模块中的任一配置指令被确定为存在于所述当前配置文件中;

在所述当前配置文件中与所述任一配置指令相同的第七配置指令之前插入所述第六配置指令。

可选的,还包括:

第四配置单元406,当所述当前配置文件中的任一配置指令未存在于所述指定配置文件时,从所述当前配置文件中删除所述任一配置指令。

所述装置与上述方法相对应,更多相同的细节不再一一赘述。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

虽然本说明书包含许多具体实施细节,但是这些不应被解释为限制任何发明的范围或所要求保护的范围,而是主要用于描述特定发明的具体实施例的特征。本说明书内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1