每个条件项的最外层函数都需要由Fn::And、Fn::Or、Fn::Not或Fn::Equals定义,在每个条件中都可以引用其他条件、参数值或者映射。您可以在模板的Tasks中,将条件与任务关联起来,条件和任务的关联可以通过Tasks的When字段实现。
语法
每个条件由条件名和条件组成,其中条件名为字符串类型,条件是由下列函数定义。在条件中可以引用其他条件,每个条件名不能重复。
可以在定义条件时使用内置函数(Builtin-Functions),但是最外层函数只能是上述四个函数。
用法示例
引用模板参数
直接引用模板Parameters已经声明的参数,示例引用了模板已声明的参数
buildType
Conditions: NewTemporaryEcs: Fn::Equals: - '{{ buildType }}' - NewTemporaryEcs
引用Task输出
引用前序任务的输出作为条件判断的一部分,示例引用了任务
checkPolicyExist
的输出参数existed
Conditions: createStack: Fn::Equals: - '{{ checkPolicyExist.existed }}' - 'false' Tasks: - Name: checkPolicyExist Action: ACS::CheckFor Description: en: Check for the inexistence of policy zh-cn: 判断自定义权限策略名称存在性 Properties: Service: RAM API: GetPolicy Parameters: PolicyType: 'Custom' PolicyName: '{{ policyName }}' DesiredValues: - 'true' - 'false' PropertySelector: '.DefaultPolicyVersion != null|tostring' Outputs: existed: Type: String ValueSelector: .DefaultPolicyVersion == null|tostring
注意:条件使用动态参数时,被引用参数的任务必须是条件对应任务的前序任务
多层嵌套函数
条件中的函数支持多层嵌套,以应对复杂的场景判断
Conditions: downloadWindowsFile: Fn::And: - Fn::Equals: - '{{ queryInstanceOSType.OSType }}' - windows - Fn::Not: Fn::Equals: - '{{ artifactsUrl }}' - ''
模板示例
关联Conditions和Tasks,本示例中,根据操作系统的值决定执行哪一项任务
FormatVersion: OOS-2019-06-01 Description: name-en: ACS::ECS::CleanUpDisk name-zh-cn: 清理磁盘 en: Cleanup disk by run command zh-cn: 通过执行命令清理磁盘 # 在Conditions模块设置条件内容 Conditions: Linux: Fn::Equals: - '{{ queryInstanceOSType.OSType }}' - linux Windows: Fn::Equals: - '{{ queryInstanceOSType.OSType }}' - windows Parameters: regionId: Description: en: The ID of region zh-cn: 地域ID Type: String Default: '{{ ACS::RegionId }}' instanceId: Description: en: The ID of ECS instance zh-cn: ECS实例ID Type: String Tasks: - Name: queryInstanceOSType Action: 'ACS::ExecuteApi' Description: en: Queries ECS instance OS type zh-cn: 获取实例操作系统类型 Properties: Service: ECS API: DescribeInstances Parameters: RegionId: '{{ regionId }}' InstanceIds: - '{{ instanceId }}' Outputs: OSType: Type: String ValueSelector: 'Instances.Instance[].OSType' - Name: cleanupLinuxInstanceDisk # 判断操作系统是否为Linux When: Linux Action: 'ACS::ECS::RunCommand' Description: en: Runs cleanup disk command on linux instance zh-cn: 在linux类型实例上执行清理磁盘命令 Properties: regionId: '{{ regionId }}' commandContent: |- #!/bin/bash cleanUpInfos="{{cleanUpInfos}}" # 运行清理磁盘命令 instanceId: '{{ instanceId }}' commandType: RunShellScript Outputs: result: Type: String ValueSelector: .invocationOutput - Name: cleanupWindowsInstanceDisk # 判断操作系统是否为Windows When: Windows Action: 'ACS::ECS::RunCommand' Description: en: Runs cleanup disk command on windows instance zh-cn: 在windowds类型实例上执行清理磁盘命令 Properties: regionId: '{{ regionId }}' commandContent: |- #!/bin/bash cleanUpInfos="{{cleanUpInfos}}" # 运行清理磁盘命令 instanceId: '{{ instanceId }}' commandType: RunPowerShellScript Outputs: result: Type: String ValueSelector: .invocationOutput Outputs: commandOutput: Type: String Value: 'Fn::If': - 'Fn::Equals': - linux - '{{ queryInstanceOSType.OSType }}' - '{{ cleanupLinuxInstanceDisk.result }}' - '{{ cleanupWindowsInstanceDisk.result }}'
文档内容是否对您有帮助?