在工作流步骤中使用条件语句
条件语句以 if
语句文档属性开头。if
语句的最终目的为确定是运行还是跳过该步骤操作。如果 if
语句解析为 true
,则该步骤操作将运行。如果解析为 false
,Image Builder 将跳过该步骤操作并在日志中记录 SKIPPED
的步骤状态。
if
语句支持分支语句(and
、or
)和条件修饰符 (not
)。其还支持以下比较运算符,这些运算符根据所比较的数据类型(字符串或数字)执行值比较(等于、小于、大于)。
支持的比较运算符
-
booleanEquals
-
numberEquals
-
numberGreaterThan
-
numberGreaterThanEquals
-
numberLessThan
-
numberLessThanEquals
-
stringEquals
分支语句和条件修饰符的规则
以下规则适用于分支语句(and
、or
)和条件修饰符 (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