ZStack Logo

ZStack AIOS

函数(Functions)

完整平台用户手册,包含基础云平台能力与 AIOS 相关章节。

资源编排提供多个内置函数,用于管理资源栈。可在定义资源(Resources)、输出(Outputs)和映射(Mappings)时,使用内置函数。

提供的内置函数列表:
  • Fn::Base64
  • Fn::FindInMap
  • Fn::GetAtt
  • Fn::Join
  • Fn::Split
  • Fn::Select
  • Ref
  • Fn::If
  • Fn::Equal
  • Fn::And
  • Fn::Not
  • Fn::Or

Fn::Base64

返回输入字符串的Base64编码结果。
  • 声明
    "Fn::Base64" : stringToEncode
  • 参数
    • stringToEncode:转换成Base64的字符串。
  • 示例
    "Fn::Base64" : "password"
  • 返回值

    用Base64表示的原始字符串。

    本例中,返回"cGFzc3dvcmQ=",即"password"的Base64编码结果。

Fn::FindInMap

返回与Mappings声明的双层映射中的键对应的值。
  • 声明
    "Fn::FindInMap" : ["MapName", "TopLevelKey", "SecondLevelKey"]
  • 参数
    • MapName:Mappings 中所声明映射的 ID,包含键和值。
    • TopLevelKey:第一级键,其值是一个键/值对列表。
    • SecondLevelKey:第二级键,其值是一个字符串或者数字。
  • 示例
    "Fn::FindInMap" : ["RegionMap", "cn-shanghai", "32"]
  • 返回值

    分配给SecondLevelKey的值。

    本例中,返回"RegionMap""cn-shanghai"对应的键/值对列表里,键为"32"对应的值。

  • 支持的函数
    可在Fn::FindInMap函数中嵌套使用以下函数:
    • Fn::FindInMap
    • Ref

Fn::GetAtt

返回模板中的资源的属性值。
  • 声明
    "Fn::GetAtt": ["resourceUuid", "attributeName"]
  • 参数
    • resourceUuid:目标资源的逻辑UUID。
    • attributeName:目标资源的属性名称。
  • 示例
    "Fn::GetAtt" : ["MyVMInstance", "ImageUuid"]
  • 返回值

    属性值。

    本例中,返回resourceUuid"MyVMInstance""ImageUuid"属性。

Fn::Join

将一组值连接起来,用特定分隔符隔开。
  • 声明
    "Fn::Join" : ["delimiter", ["string1", "string2", ...]]
  • 参数
    • delimiter:分隔符。分隔符可为空,可将所有的值直接连接起来。
    • ["string1", "string2", ...]:被连接起来的值列表示例。
  • 示例
    "Fn::Join" : ["-", ["a", "b", "c"]]
  • 返回值

    被连接起来的字符串。

    本例中,返回"a-b-c"

  • 支持的函数
    可在Fn::Join函数中嵌套使用以下函数:
    • Fn::Base64
    • Fn::GetAtt
    • Fn::Join
    • Fn::Select
    • Ref

Fn::Split

通过指定分隔符对字符串进行切片,并返回所有切片组成的列表。
  • 声明
    "Fn::Split" : ["delimiter", "original_string"]
  • 参数
    • delimiter:分隔符,例如:,;\n\t 等。
    • original_string:将要被切片的字符串。
  • 示例
    "Fn::Split": [";", "foo; bar; achoo"]
  • 返回值

    切片后所有字符串组成的列表。

    本例中,返回["foo", " bar", "achoo"]

  • 支持的函数
    可在Fn::Split函数中嵌套使用以下函数:
    • Fn::Base64
    • Fn::FindInMap
    • Fn::GetAtt
    • Fn::Join
    • Fn::Select
    • Ref

Fn::Select

通过索引返回数据元列表中的单个数据元。
  • 声明
    • 数据元列表可为一个数组:
      "Fn::Select" : ["index", ["value1", "value2", ...]]
    • 数据元列表可为一个映射表:
      "Fn::Select" : ["index", {"key1": "value1", ...}]
  • 参数
    • index:待检索数据元的索引。
      • 如果数据元列表是一个数组,则索引是0N-1之间的某个值,其中N代表阵列中元素的数量。
      • 如果数据元列表是一个映射表,则索引是映射表中的某个键。
      • 如果找不到索引对应的值,则返回空字符串。
  • 示例
    • 示例一:数据元列表是一个数组
      "Fn::Select" : ["2", ["foo", " bar", "achoo"]]
    • 示例二:数据元列表是一个映射表
      "Fn::Select" : ["shape", {"shape": "circle", "height": "80"}]
    • 示例三:数据元列表是一个CommaDelimitedList
      "Parameters" : {
      	"userParam": {
                 "Type": "CommaDelimitedList",
                 "Default": "10.0.100.0/24, 10.0.101.0/24, 10.0.102.0/24"
             }
      },
      "Resources": {
      	"resourceUuid": {
                 "Properties": {
                     "CidrBlock": {"Fn::Select" : [0, {"Ref":"userParam"}]}
                 }
             }
      }
    说明:
    • Fn::Select函数不嵌套使用函数,第一个参数为字符串,参见示例一("2")、示例二("shape");
    • Fn::Select函数嵌套使用函数,第一个参数为数字,参见示例三(0)。
  • 返回值
    选定的数据元。
    • 示例一:返回"achoo"
    • 示例二:返回"circle"
    • 示例三:返回"10.0.100.0/24"
  • 支持的函数
    • 对于Fn::Select索引值,可在Fn::Select函数中嵌套使用Ref函数。
    • 对于对象的Fn::Select列表,可在Fn::Select函数中嵌套使用以下函数:
      • Fn::Base64
      • Fn::FindInMap
      • Fn::GetAtt
      • Fn::Join
      • Fn::Select
      • Ref

Ref

返回指定参数或资源的值。
  • 如果指定参数是resourceUuid,则返回资源的值。
  • 否则系统将认为指定参数是参数,将尝试返回参数的值。
  • 声明
    "Ref":"logicalName"
  • 参数
    • logicalName:要引用的资源或参数的逻辑名称。
  • 示例
    diskOfferingParam被定义为:
    "diskOfferingParam": {
    	"allocatorStrategy": "DefaultPrimaryStorageAllocationStrategy",
           "diskSize": "21474836480",   
           "type": "DefaultDiskOfferingType",
           "sorkKey": "0"
    }
    "Ref":"diskOfferingParam"
  • 返回值

    资源的值或者参数的值。

    本例中,返回diskOfferingParam的值:
    {
    	"allocatorStrategy": "DefaultPrimaryStorageAllocationStrategy",
           "diskSize": "21474836480",   
           "type": "DefaultDiskOfferingType",
           "sorkKey": "0"
    }
  • 支持的函数

    不能在Ref函数中嵌套使用任何函数。必须指定为资源逻辑UUID的字符串。

Fn::If

如果指定的条件计算为true,则返回一个值;如果指定的条件计算为false,则返回另一个值。
  • 在模板ResourcesOutputs属性值中支持Fn::If内部函数。
  • 声明
    "Fn::If": ["condition_name", "value_if_true", "value_if_false"]
  • 参数
    • condition_nameConditions中条件对应的条件名称,通过条件名称引用条件。
    • value_if_true:当指定的条件计算为true时,返回此值。
    • value_if_false:当指定的条件计算为false时,返回此值。
  • 示例
    "Fn::If": ["condition16", "vm-true", "vm-false"]
  • 返回值

    根据指定条件计算的结果返回相应的参数值。

    本例中,若condition16的结果是true,则返回vm-true;若condition16的结果是false,则返回vm-false

  • 支持的函数
    可在Fn::If函数中嵌套使用以下函数:
    • Fn::FindInMap
    • Ref
    • Fn::Equal
    • Fn::And
    • Fn::Not
    • Fn::Or

Fn::Equal

比较两个值是否相等。如果两个值相等,则返回true;如果不相等,则返回false
  • 声明
    "Fn::Equal": [value_1, value_2]
  • 参数
    • value:要比较的任意类型的值。
  • 示例
    "Fn::Equal": [true, false]
  • 返回值

    truefalse

    本例中,返回false

  • 支持的函数
    可在Fn::Equal函数中嵌套使用以下函数:
    • Fn::FindInMap
    • Ref
    • Fn::Equal
    • Fn::And
    • Fn::Not
    • Fn::Or

Fn::And

代表AND运算符,最少包含两个条件。如果所有指定条件计算为true,则返回true;如果任意条件计算为false,则返回false
  • 声明
    "Fn::And": [condition, ...]
  • 参数
    • condition:计算为truefalse的条件。
  • 示例
    "Fn::And": [true, false]
  • 返回值

    truefalse

    本例中,返回false

  • 支持的函数
    可在Fn::And函数中嵌套使用以下函数:
    • Fn::FindInMap
    • Ref
    • Fn::Equal
    • Fn::And
    • Fn::Not
    • Fn::Or

Fn::Not

代表NOT运算符。对计算为false的条件,返回true;对计算为true的条件,返回false
  • 声明
    "Fn::Not": condition
  • 参数
    • condition:计算为truefalse的条件。
  • 示例
    "Fn::Not": true
  • 返回值

    truefalse

    本例中,返回false

  • 支持的函数
    可在Fn::Not函数中嵌套使用以下函数:
    • Fn::FindInMap
    • Ref
    • Fn::Equal
    • Fn::And
    • Fn::Not
    • Fn::Or

Fn::Or

代表OR运算符,最少包含两个条件。如果任意一个指定条件计算为true,则返回true;如果所有条件都计算为false,则返回false
  • 声明
    "Fn::Or": [condition, ...]
  • 参数
    • condition:计算为truefalse的条件。
  • 示例
    "Fn::Or": [true, false]
  • 返回值

    truefalse

    本例中,返回true

  • 支持的函数
    可在Fn::Or函数中嵌套使用以下函数:
    • Fn::FindInMap
    • Ref
    • Fn::Equal
    • Fn::And
    • Fn::Not
    • Fn::Or