在工作流步骤中使用条件语句 - EC2 Image Builder
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在工作流步骤中使用条件语句

条件语句以 if 语句文档属性开头。if 语句的最终目的为确定是运行还是跳过该步骤操作。如果 if 语句解析为 true,则该步骤操作将运行。如果解析为 false,Image Builder 将跳过该步骤操作并在日志中记录 SKIPPED 的步骤状态。

if 语句支持分支语句(andor)和条件修饰符 (not)。其还支持以下比较运算符,这些运算符根据所比较的数据类型(字符串或数字)执行值比较(等于、小于、大于)。

支持的比较运算符
  • booleanEquals

  • numberEquals

  • numberGreaterThan

  • numberGreaterThanEquals

  • numberLessThan

  • numberLessThanEquals

  • stringEquals

分支语句和条件修饰符的规则

以下规则适用于分支语句(andor)和条件修饰符 (not)。

  • 分支语句和条件修饰符必须单独出现在某一行上。

  • 分支语句和条件修饰符必须遵循级别规则。

    • 父级别只能有一个语句。

    • 每个子分支或修饰符都会启动一个新级别。

    有关级别的更多信息,请参阅 条件语句中的嵌套级别

  • 每个分支语句必须至少包含一个子条件语句,但不能超过十个。

  • 条件修饰符仅对一个子条件语句执行操作。

条件语句中的嵌套级别

条件语句在自身部分中的多个级别上执行操作。例如,if 语句属性在工作流文档中与步骤名称和操作显示在同一级别。这是条件语句的基础。

您可以指定最多四个级别的条件语句,但父级别只能显示一个语句。所有其他分支语句、条件修饰符或条件运算符都从此处缩进,每个级别缩进一个。

以下概述显示了条件语句的最大嵌套级别数。

base: parent: - child (level 2) - child (level 3) child (level 4)
if 属性

if 属性将条件语句指定为文档属性。这是零级。

父级别

这是条件语句的第一级嵌套。此级别只能有一个语句。如果不需要分支或修饰符,则可以为没有子语句的条件运算符。除条件运算符外,此级别不使用连接号表示法。

子级别

二级到四级被视为子级别。子语句可以包括分支语句、条件修饰符或条件运算符。

示例:嵌套级别

以下示例演示了条件语句的最大级别数。

if: and: #first level - stringEquals: 'my_string' #second level value: 'my_string' - and: #also second level - numberEquals: '1' #third level value: 1 - not: #also third level stringEquals: 'second_string' #fourth level value: "diff_string"
嵌套规则
  • 子级的每个分支或修饰符都会启动一个新级别。

  • 每个级别都可缩进。

  • 最多可以有四个级别,包括父级别的一个语句、修饰符或运算符,以及最多三个其他级别。

条件语句示例

这组示例演示了条件语句的各个方面。

分支:and

and 分支语句对作为分支子级的表达式列表执行操作,所有这些表达式的计算结果都必须为 true。Image Builder 按照表达式在列表中出现的顺序计算表达式。如果任何表达式的计算结果为 false,则停止处理,该分支将视为 false

以下示例的计算结果为 true,因为两个表达式的计算结果均为 true

if: and: - stringEquals: 'test_string' value: 'test_string' - numberEquals: 1 value: 1
分支:or

or 分支语句对作为该分支子级的表达式列表执行操作,其中至少有一个表达式的计算结果必须为 true。Image Builder 按照表达式在列表中出现的顺序计算表达式。如果任何表达式的计算结果为 true,则停止处理,该分支将视为 true

即使第一个表达式为 false,以下示例的计算结果仍为 true

if: or: - stringEquals: 'test_string' value: 'test_string_not_equal' - numberEquals: 1 value: 1
条件修饰符:not

not 条件修饰符否定作为分支子级的条件语句。

not 修饰符否定 stringEquals 条件语句时,以下示例的计算结果为 true

if: not: - stringEquals: 'test_string' value: 'test_string_not_equal'
条件语句:booleanEquals

booleanEquals 比较运算符对布尔值进行比较,如果布尔值完全匹配,则返回 true。

以下示例可确定 collectImageScanFindings 是否启用。

if: - booleanEquals: true value: '$.imagebuilder.collectImageScanFindings'
条件语句:stringEquals

stringEquals 比较运算符对两个字符串进行比较,如果两个字符串完全匹配,则返回 true。如果其中一个值不是字符串,则 Image Builder 会在比较之前将其转换为字符串。

以下示例对平台系统变量进行了比较,以确定工作流是否在 Linux 平台上运行。

if: - stringEquals: 'Linux' value: '$.imagebuilder.Platform'
条件语句:numberEquals

numberEquals 比较运算符对两个数字进行比较,如果两个数字相等,则返回 true。要比较的数字必须为以下格式之一。

  • 整数

  • 浮点型

  • 与以下正则表达式模式相匹配的字符串:^-?[0-9]+(\.)?[0-9]+$

以下示例比较的计算结果均为 true

if: # Value provider as a number numberEquals: 1 value: '1' # Comparison value provided as a string numberEquals: '1' value: 1 # Value provided as a string numberEquals: 1 value: '1' # Floats are supported numberEquals: 5.0 value: 5.0 # Negative values are supported numberEquals: -1 value: -1