配置工作流

此功能仅受 "高级脚本执行"模式的配置命令支持。为了提供此功能,我们为高级脚本执行模式配置命令中定义的<command>标记引入了一些附加属性。附加属性如下所述。

  • 序列:序列用作命令的标识符,可以从同一配置命令中定义的任何其他命令中引用。序列ID用于根据接收到对特定命令的响应来指导命令执行流程。我们对这个属性有一组约束:序列ID在配置命令中应该是唯一的。序列ID为1的命令将作为配置命令执行工作流程的起点。如果没有命令的序列ID为1,则将第一个命令作为配置命令执行工作流程的起点。

  • 注意:每个命令都应该有序列属性,因为它是命令的标识符。序列号不必按排序顺序,可以按任何顺序定义。

  1. 条件:此属性指定在响应该特定命令时应满足的条件。它可以接受包含不包含等于仅一次的值,这些将应用于具有在同一命令中定义值属性的响应。该属性是一个可选字段,只能使用属性来实现。如果指定的条件属性而没有属性,则会在保存配置命令时对其进行验证。

  2. 值:此属性将值作为正则表达式/字符串,可在检查条件时用作操作数。如果没有条件属性,这不应该存在。如果它没有条件属性而存在,则将在保存配置命令时对其进行验证。基于这些属性,流将被引导到定义为成功或者失败属性的任何一条路径。

  3. 成功:此属性采用配置命令中任一命令内定义的序列号。它必须与条件属性一起指定。如果没有,它将在保存配置命令时进行验证。如果指定的条件 与当前命令响应中的匹配,则应使用成功中定义的序列ID执行下一个命令。如果未提供此属性且条件为成功,则将执行顺序中的下一条命令。

  4. 失败:此属性采用配置命令中任一命令中定义的序列号。这与成功属性具有相似的特征。不同的是这是一个可选的属性。如果用户指定的条件不匹配,则使用失败中定义的序列ID执行下一个命令。如果未指定,则视为结束,在失败情况下将停止执行。

  5. 错误代码:错误字符串是一个不同的属性,可用于根据提供的字符串确定配置命令 执行失败的状态。这种失败不同于之前被定义为失败的属性。如果命令响应包含错误字符串,则该特定设备的总体执行状态将被标记为失败

执行:

命令执行从序列号为1的命令开始,然后继续执行流程。如果没有指定条件值,那么它的工作方式与现有实现中的相同。如果在命令中指定了条件属性,则从结果中获取命令响应,并根据条件和值属性决定成功或失败。如果成功则从成功属性中获取下一个要执行的命令。如果条件失败,则从失败属性中获取下一个命令。如果未指定失败,则将停止执行。流可以在任何方向上转向,包括正向和反向两种不同的方向。

注意

  • 在任何情况下,如果没有为最后一个命令指定条件,则将其视为最终命令并结束执行。

  • 对于那些没有条件值的命令,将按照它们定义的顺序执行流,而不是基于序列号。序列号仅用作标识符,不用于流序列。

用户还可以通过将值指定为"end"/"END"来停止任何成功和失败条件的执行。在以下情况下,通常使用配置命令的高级脚本执行模式。

自动循环检测:如果命令流趋于无限循环,NCM不会自动检测到。用户需要注意避免此类无限循环情况。如果用户在某些特定情况下面临循环问题,并且他/她希望NCM负责自动循环检测,则可以选择启用此功能。在客户端/服务器设置页面中,启用 在高级脚本执行命令模式配置中启用自动循环检测  复选框来处理自动循环检测。如果启用此选项,当同一命令行执行三次以上时,配置命令执行工作流程将终止。

 

用户输入示例和超时

 

<command prompt=']?'>copy tftp: flash:</command>

<command prompt=']?'>%TFTP_SERVER_IP%</command>

<command prompt=']?'>%SOURCE_FILE_NAME%</command>

<command prompt='confirm'>%DESTINATION_FILE_NAME%</command>

<command timeout='120' suffix='$NO_ENTER'>y</command>

 


以上是从TFTP服务器上传os映像文件到cisco ios设备的示例配置命令。

 

让我们来看下第一个命令,<command prompt=']?'>copy tftp: flash:</command>。这描述了,当您执行命令copy tftp: flash:时,它会提示输入以[hostname]? 结尾的tftp主机名。这也确定了在看到提示符后是否可以发送下一个命令(TFTP_SERVER_IP)。

让我们来看看第四个命令,<command prompt='confirm'> %DESTINATION_FILE_NAME% </command>。这表明一旦您发送了一个目标文件名,它将提示您进行确认。

在最后一个命令中,我们使用了suffix='$NO_ENTER' ,这意味着对应的命令没有后缀。默认情况下,我们会在每个命令的末尾附加一个换行符。对于像这样的确认命令,我们不需要发送换行符,一旦我们输入'y',它将继续下一步。所以我们可以使用suffix='$NO_ENTER'标签来忽略换行。

 

我们可以将相同的格式用于提示更改,如配置模式。所有配置模式命令的提示符都与平常不同。

 

确定执行状态

 

要根据命令的响应确定执行状态,我们需要为该命令添加"错误代码"属性,如下所示。考虑下面的配置命令脚本,将sflow从brocade交换机导出到任何Flow分析工具。

 

<command>sflow enable</command>

<command>sflow destination %NETFLOW_IP% 9996</command>

<command>sflow polling-interval 60</command>

<command>sflow agent-ip %LOOPBACK_IFNAME%</command>

<command>sflow sample %SAMPLING_NUMBER%</command>

<command>interface %IF_NAME%</command>

<command>sflow-forwarding</command>

 

如果特定系列不支持上述命令,将无法正常执行。正如最初提到的,我们无法根据响应来确定错误,并且执行结果被确定为成功,即使它最初在设备中失败。请参阅下面的屏幕截图。



用户可以提供错误代码标签来决定整个执行失败并停止执行。在这种情况下,错误代码将是未知的命令。请参阅以下带有错误处理的配置命令。

 

<command ErrorString="unknown command">sflow enable</command>

<command>sflow destination %NETFLOW_IP% 9996</command>

<command>sflow polling-interval 60</command>

<command>sflow agent-ip %LOOPBACK_IFNAME%</command>

<command>sflow sample %SAMPLING_NUMBER%</command>

<command>interface %IF_NAME%</command>

<command>sflow-forwarding</command>

 

对应的执行结果截图如下。这里执行结果被判定为失败。

 



 

确定执行流程

 

考虑相同的导出sflow示例。我们可以根据当前的响应来确定接下来应该执行哪个命令。例如,如果响应包含"未知的命令" 字符串,那么我们可以执行最后一个命令并停止执行。如果没有错误代码,我们可以依次执行下一个命令。请参阅以下配置命令。

 

<command Sequence="1" Condition="contains" Value="unknown command" Success="8" Failure="2">sflow enable</command>

<command Sequence="2" >sflow destination %NETFLOW_IP% 9996</command>

<command Sequence="3" >sflow polling-interval 60</command>

<command Sequence="4" >sflow agent-ip %LOOPBACK_IFNAME%</command>

<command Sequence="5" >sflow sample %SAMPLING_NUMBER%</command>

<command Sequence="6" >interface %IF_NAME%</command>

<command Sequence="7" >sflow-forwarding</command>

<command Sequence="8" >exit</command>

 

我们可以将此配置命令工作流用于其他情况,例如在配置之前检查接口启动/关闭状态,在启用新程序之前检查为流导出配置的ips数量等。如果它没有反映在配置中,我们可以再次执行相同的循环来确保我们不会错过配置更新。这里的序列号可以是任何顺序。在任何时候,您都可以通过在成功或失败值中给出“End”来停止执行流程。如果未定义成功或失败,则将执行顺序中的下一个命令。

 

Back to Top