内置函数(Builtin-Functions)

OOS提供了多个内置函数,使您更加方便的处理模板的参数及输出。

函数说明

  • Fn::Base64Encode:返回输入字符串的Base64编码结果。

  • Fn::Base64Decode:返回输入字符串的Base64解码结果。

  • Fn::MergeMapToList:将多个Map合并成一个以Map为元素的列表。

  • Fn::MergeMap:将列表中多个Map合并成一个Map。

  • Fn::Join:将一组值连接起来,用特定分隔符隔开。

  • Fn::Select:数据元容器通过查询索引返回的单个数据元。

  • Fn::Split:通过指定分隔符对字符串进行切片,并返回所有切片组成的列表。

  • Fn::Replace:将字符串中指定子字符串用新字符串替换。

  • Fn::Min:返回列表中最小元素。

  • Fn::Max:返回列表中最大元素。

  • Fn::First:返回列表中第一个元素。

  • Fn::Last:返回列表中最后一个元素。

  • Fn::ListJoin:将多个参数转换成列表。

  • Fn::Equals:比较两个值是否相等。

  • Fn::If:根据判断条件真假返回不同的值。

  • Fn::Not:对值取否操作。

  • Fn::AddHour:对一个UTC时间向后推移N小时。

  • Fn::FormatUTCTime:按不同单位精度进行格式化UTC时间。

  • Fn::Eval:执行字符串中的单行表达式,并返回执行结果。

  • Fn::CalculateTimeByOpsWindow:当指定一个时间窗口后,该函数会根据函数的执行时间点,产生下一个在窗口区间的时间点。

  • Fn::And:逻辑与。

  • Fn::Or: 逻辑或。

  • Fn::Intersection:取多个数组的交集。

  • Fn::Union:取多个数组的并集。

  • Fn::Difference:取多个数组的并集与交集的差集。

  • Fn::Jq:对JSON对象进行筛选,获取目标属性值。

  • Fn::MapJoin:将两个List组合成一个Map,组合时,会把第一个List内的所有值,作为Map中每个键值对的键,会把第二个List内的值,作为Map中每个键值对。

  • Fn::IsIpInCIDR:判断指定的IP是否在指定的CIDR网段内。

  • Fn::Sub:将输入字符串中的变量替换为指定的值。

  • Fn::DurationBetween:返回两个时间点之间的时长。

  • Fn::Escape:转义字符串。

  • Fn::ConvertMapToList:转化JSON对象为Key、Value格式的列表。

使用函数

内建函数的使用主要由内置函数名和待处理参数组成。调用函数的声明表达式即表示函数处理参数后返回的结果,且表达式作为函数返回的结果可以像其他参数一样被引用。

Fn::Base64Encode

返回输入字符串的Base64编码结果。

声明

{"Fn::Base64Encode": "StringToBeBase64"}        

参数

StringToBeBase64:要进行Base64编码的String。

返回值

Base64方式表示的原始字符串。

示例

{"Fn::Base64Encode": "hello"}        

示例返回

"aGVsbG8="

Fn::Base64Decode

返回Base64字符串的解码结果。

声明

{"Fn::Base64Decode": "Base64ToBeString"}

参数

Base64ToBeString:Base64编码方式表示的String。

返回值

Base64解码后的原始String。

示例

{"Fn::Base64Decode": "aGVsbG8="}        

示例返回

"hello"

Fn::MergeMapToList

将多个Map合并成一个以Map为元素的列表。

声明

{"Fn::MergeMapToList": "aListConatinsDicts"}

参数

aListConatinsDicts:含有多个映射的List。

返回值

一个以Map为元素的List。

示例1

{
  "Fn::MergeMapToList": [
    {
      "key_1": [
        "key_1_item_1",
        "key_1_item_2"
      ]
    },
    {
      "key_2": [
        "key_2_item_1",
        "key_2_item_2"
      ]
    },
    {
      "key_3": [
        "key_3_item_1",
        "key_3_item_2"
      ]
    }
  ]
}

示例1返回

[
  {
    "key_1": "key_1_item_1",
    "key_2": "key_2_item_1",
    "key_3": "key_3_item_1"
  },
  {
    "key_1": "key_1_item_2",
    "key_2": "key_2_item_2",
    "key_3": "key_3_item_2"
  }
]

示例2

{
  "Fn::MergeMapToList": [
    {
      "key_1": [
        "key_1_item_1",
        "key_1_item_2"
      ]
    },
    {
      "key_2": [
        "key_2_item_1",
        "key_2_item_2",
        "key_2_item_3"
      ]
    },
    {
      "key_3": [
        "key_3_item_1",
        "key_3_item_2"
      ]
    }
  ]
}

示例2返回

[  
   {
      "key_1": "key_1_item_1", 
      "key_2": "key_2_item_1",
      "key_3": "key_3_item_1"
    },
    {
      "key_1": "key_1_item_2", 
      "key_2": "key_2_item_2",
      "key_3": "key_3_item_2"
    },
    {
      "key_1": "key_1_item_2", 
      "key_2": "key_2_item_3",
      "key_3": "key_3_item_2"
    }
]  

Fn::MergeMap

将列表中多个Map合并成一个Map。

声明

{  "Fn::MergeMap": "aListConatinsDicts"}

参数

aListConatinsDicts:含有多个映射的List。

返回值

List中多个Map合并成的一个Map。

示例

{
  "Fn::MergeMap": [
    {
      "key_1": "value_1"
    },
    {
      "key_2": "value_2"
    }
  ]
}

示例返回

{"key_1": "value_1","key_2": "value_2"}

Fn::Join

将一组值连接起来,用特定分隔符隔开。

声明

{"Fn::Join": ["Connector","aListContainsString"]}                

参数

Connector:作为连接符String。

aListContainsString:包含字符串的List。

返回值

List内多个元素连接后的字符串。

示例

{
  "Fn::Join": [
    ",",
    [
      "a",
      "b",
      "c"
    ]
  ]
}

示例返回

"a,b,c"

Fn::Select

数据元容器通过查询索引返回的单个数据元。

声明

{"Fn::Select": ["Index","Container"]}

参数

Index:被查询Container的索引String或Number。

Container:被查询的List或Map。

返回值

查询指定索引返回的结果。

示例1

{
  "Fn::Select": [
    "IpAddress",
    {
      "IpAddress": [
        "192.168.1.123",
        "192.168.1.234"
      ]
    }
  ]
}

示例1返回

["192.168.1.123","192.168.1.234"]

示例2

{
  "Fn::Select": [
    "1",
    [
      "192.168.1.123",
      "192.168.1.234"
    ]
  ]
}

示例2返回

"192.168.1.234"

Fn::Split

通过指定分隔符对字符串进行切片,并返回所有切片组成的列表。

声明

{"Fn::Split": ["Separator","StringToSeprate"]}

参数

Separator:作为分隔符的String。

StringToSeparate:将被按分隔符分成一个List的String。

返回值

StringToSeparate按分隔符分成的一个List。

示例

{
  "Fn:: Split": [",","a,b,c"]
}

示例返回

[
  "a",
  "b",
  "c"
]

Fn::Replace

将字符串中指定子字符串用新字符串替换。

声明

{  "Fn::Replace": [{"$varName": "StringToReplaceWith"}, "StringToReplace"]}

参数

$varName:占位符,以$开始后面连接普通参数名即可,其中$后面参数名命名要求同模板参数名。

StringToReplaceWith:占位符将被替换成的值。

StringToReplace:将被替换的值(含占位符),如"$varName is foo"。

返回值

若参数StringToReplaceWith是"baz",则返回为"baz is foo"。

示例

{  "Fn::Replace": [{"$varName": "baz"},    "$varName is foo"  ]}

示例返回

"baz is foo"

Fn::Min

返回列表中最小元素。

声明

{"Fn::Min": "aList"}

参数

aList:一个含有元素的List;List中元素类型可以为string,int,datetime,None,各元素必须为同一类型。

返回值

忽略值为None的元素,返回List中最小的元素,若集合元素全部为None则返回None。

示例

{
  "Fn::Min": ["123","234"]
}

示例返回

"123"

Fn::Max

返回列表中最大元素。

声明

{"Fn::Max": "aList"}

参数

aList:一个含有元素的List;List中元素类型可以为string、int、datetime、None,各元素必须为同一类型。

返回值

忽略值为None的元素,返回List中最大的元素,若集合元素全部为None则返回None。

示例

{
  "Fn::Max": ["123","234"]
}

示例返回

"234"

Fn::First

返回列表中第一个元素。

声明

{  "Fn::First": "aList"}

参数

aList:一个含有元素的List;List中元素类型不限。

返回值

输出为集合中迭代返回的第一个元素;对loop来说,按照Items中迭代返回的Item生成的task execution id进行排序。

示例

{
  "Fn::First": ["123","234"]
}

示例返回

"123"

Fn::Last

返回列表中最后一个元素。

声明

{"Fn::Last": "aList"}

参数

aList:一个含有元素的List;List中元素类型不限。

返回值

输出为集合中迭代返回的最后一个元素;对loop来说,按照Items中迭代返回的Item生成的task execution id进行排序。

示例

{
  "Fn::Last": ["123","234"]
}

示例返回

"234"

Fn::ListJoin

将多个参数转换成列表。

声明

{"Fn::ListJoin": "IterableContainer"}

参数

IterableContainer是一个可迭代的集合,集合中元素类型不限。

返回值

将集合转换成List输出。

示例

{"Fn::ListJoin": ["a",2, 3]}

示例返回

["a",2,3]

Fn::Equals

比较两个值是否相等。如果两个值相等,则返回true;如果不相等,则返回false。

声明

{  "Fn::Equals": ["parameter1", "parameter2"]}

参数

parameter1,parameter2为两个任意类型值。

返回值

如果两个值相等,则返回true;如果不相等,则返回false。

示例

{  "Fn::Equals": ["Running","Stopped"]}

示例返回

false

Fn::If

如果指定的条件计算为true,则返回一个值;如果指定的条件计算为false,则返回另一个值。

声明

{
  "Fn::If": [
    "condition",
    "value_if_true",
    "value_if_false"
  ]
}

参数

condition_name:待判断的条件参数。

value_if_true:当指定的条件计算为true时,返回此值。

value_if_false:当指定的条件计算为false时,返回此值。

返回值

当条件计算为true时,返回value_if_true。

当条件计算为false时,返回value_if_false。

示例

{"Fn::If": [false,"Stopped","Running"]}

示例返回

"Running"

Fn::Or

逻辑或操作。

声明

{"Fn::Or": ["condition1","condition2"]}

参数

condition1、condition2:将进行逻辑或的条件。

返回值

当condition1和condition2均为false时,返回false;否则,返回true。

示例

{"Fn::Or": [true,false]}

示例返回

true

Fn::And

逻辑或操作。

声明

{"Fn::And": [ "condition1", "condition2"]}

参数

condition1、condition2:将要进行逻辑与的条件。

返回值

当condition1和condition2均为true时,返回true;否则,返回false。

示例

{"Fn::And": [true,false]}

示例返回

false

Fn::Not

对值取否操作。

声明

{"Fn::Not": "condition"}

参数

condition:将要取否的条件。

返回值

当condition为true时,返回false;当condition为false时,返回true。

示例

{"Fn::Not": true}

示例返回

false

Fn::AddHour

表示对一个UTCT时间向后推移N小时,使其成为一个新的UTC时间。

声明

{"Fn::AddHour": ["utc_time", "hours_count"  ]}

参数

utc_time:一个要向后推移的UTC时间。

hours_count:要向后推移的小时数,限取整数。

返回值

utc_time被推移hours_count小时后的新UTC时间。

示例

{  "Fn::AddHour": ["2019-06-01T02:12:45Z", 6]}

示例返回

"2019-06-01T08:12:45Z"

Fn::FormatUTCTime

表示对一个UTC时间按不同单位精度进行格式化,生成的新时间其精度只保留到需要的时间单位。

声明

Fn::FormatUTCTime: ["utc_time", "to_be_utc_time_format"]        

参数

utc_time:待被格式化的UTC时间。

to_be_utc_time_format:将要把utc_time格式化成的新时间格式。

返回值

新格式的时间。

示例

{  "Fn::FormatUTCTime": ["2019-06-01T02:12:45Z","%Y-%m-%dT%H:%MZ"]}

示例返回

"2019-06-01T02:12Z"

Fn::Eval

表示执行一个字符串中的表达式(不支持表达式中含换行),并返回执行结果。 声明

{
  "Fn::Eval": [
    "expression"
  ]
}

参数

expression:被执行的表达式(如运算式)。

返回值

表达式执行结果。

示例

{  "Fn::Eval": ["1+3*2+3%2+1"]}

示例返回

9

Fn::CalculateTimeByOpsWindow

表示您指定了24h中的一个时间段后,Fn::CalculateTimeByOpsWindow会根据函数的执行时间点,产生下一个在该时间段中的时间点。具体时间点产生规则为,当函数执行的时间点恰好在当天的时间段中时,产生的时间点将是函数执行时间+1min对应的时间点;当函数执行的时间点不在当天时间段中,且早于当天时间段的开始时间,则产生的时间点将是函数执行的当天时间段中的某个随机时间点;当函数执行的时间点不在当天时间段中,且晚于当天时间段的结束时间,则产生的时间点将是函数执行当天的下一天对应时间段中的某个随机时间点。

声明

Fn::CalculateTimeByOpsWindow: [ "startTime", "endTime" ]

参数

startTime:24h中某时间段的开始时间(如01:00:00Z)。

endTime:24h中某时间段的结束时间(如03:00:00Z)。

返回值

下一个在指定时间段中的UTC时间点字符串。

示例

{  "Fn::CalculateTimeByOpsWindow": ["01:00:00Z", "03:00:00Z"]}

示例返回

"2019-09-24T01:01:00Z"

Fn::Jq

对JSON对象进行筛选,返回其中的某部分。

声明

{  "Fn::Jq": [ "type", "jqSelector", "jsonObject" ]}                

参数

type:可选"First"或"All",其中First表示只返回第一个结果,All表示返回所有结果。

jqSelector:jq筛选语句,详细可参考https://yq.aliyun.com/articles/714479

jsonObject:被筛选的JSON对象。

返回值

JSON对象经jq表达式筛选后返回的结果。

示例1

{
  "Fn::Jq": [
    "First",".PrivateIpAddress.IpAddress",
{
  "PrivateIpAddress": {
    "IpAddress": [
      "192.168.1.123", "192.168.1.234"
    ]
  },
  "VpcId": "vpc-xzxbamns",
  "VSwitchId": "vsw-zxcdsa"
}
}

示例1返回

"192.168.1.123"

示例2

{
  "Fn::Jq": [
    "All",".PrivateIpAddress.IpAddress",
{
  "PrivateIpAddress": {
    "IpAddress": [
      "192.168.1.123", "192.168.1.234"
    ]
  },
  "VpcId": "vpc-xzxbamns",
  "VSwitchId": "vsw-zxcdsa"
}
}

示例2返回

["192.168.1.123", "192.168.1.234"]

Fn::Intersection

对多个数组取交集,返回共同包含的值。

声明

{  "Fn::Intersection": [ list1, list2]}                

参数

list1、list2:要取交集的数组。

返回值

一个数组,其中的元素是多个数组共同包含的值。

示例

{  "Fn::Intersection": [["i-1","i-2"],["i-1","i-3"]]}

示例返回

["i-1"]

Fn::Union

对多个数组中的元素去重后合并为一个数组,返回合并后的新数组。

声明

{  "Fn::Union": [ list1, list2]}                

参数

list1、list2:要合并的数组。

返回值

一个数组,其中的元素是多个数组的并集。

示例

{
  "Fn::Union": [
    [
      "i-1",
      "i-2"
    ],
    [
      "i-1",
      "i-3"
    ]
  ]
}

示例返回

["i-1","i-2","i-3"]

Fn::Difference

查看多个数组的并集与交集的差集,返回包含差集结果的新数组。

声明

{  "Fn::Difference": [ list1, list2]}                

参数

list1、list2:要筛选存在不同元素的数组。

返回值

一个数组,其元素是多个数组的并集与交集的差集。

示例

{
  "Fn::Difference": [
    ["i-1","i-2"],
    ["i-1"]]
}

示例返回

["i-2"]

Fn::MapJoin

将两个List组合成一个Map,组合时,会把第一个List内的所有值,作为Map中每个键值对的键,会把第二个List内的值,作为Map中每个键值对的值。

声明

{'Fn::MapJoin': [List1, List2] } 

参数

aListConatinsDicts:含有多个映射的List。

返回值

一个Map,其中每个键值对的键是List1的对应元素,每个键值对的值是List2的对应元素。

示例

{'Fn::MapJoin': [['i-1', 'i-2', 'i-3'], [1, 2, 3]] } 

示例返回

{'i-1': 1, 'i-2': 2, 'i-3': 3}

Fn::IsIpInCIDR

判断指定的IP是否在指定的CIDR网段内。

声明

{'Fn::IsIpInCIDR': [Ip, CIDR] } 

参数

Ip、CIDR

返回值

true or false

示例1

{'Fn::IsIpInCIDR': ["10.0.1.159", "192.168.0.0/16"] } 

示例1返回

false

示例2

{'Fn::IsIpInCIDR': ["192.168.255.0", "192.168.0.0/16"] } 

示例2返回

true

Fn::Sub

将输入字符串中的变量替换为指定的值。

声明

{'Fn::Sub': [TargetString, JSON]} 

参数

TargetString、JSON

返回值

String

示例

{
    "Fn::Sub": [
        "Var1: ${Var1}, Var2: ${Var2}",
        {
            "Var1": "Var1Value",
            "Var2": "Var2Value"
        }
    ]
}

示例返回

"Var1: Var1Value, Var2: Var2Value"

Fn::DurationBetween

返回两个时间点之间的时长。

声明

{'Fn::DurationBetween': [DateTime_1, DateTime_2]} 

参数

DateTime_1、DateTime_2

返回值

String

示例

{
    "Fn::DurationBetween": [
        "12:00:00",
        "13:00:00"
    ]
}

示例返回

PT3600S

Fn::Escape

转义字符串。

声明

{'Fn::Escape': [String, ShellType] } 

参数

String、ShellType

说明

ShellType目前仅支持PowerShell

返回值

String

示例

{
    "Fn::Sub": [
        '{"ACS:File":{"Collection":"Enabled","Filters":"[{\\"Path\\": \\"/home/admin/test\\",\\"Pattern\\":[\\"*\\"],\\"Recursive\\":false}]"},"ACS:Application":{"Collection":"Enabled"}, "ACS:Network":{"Collection":"Enabled"}}',
        'PowerShell'
    ]
}

示例返回

'{\\"ACS:File\\":{\\"Collection\\":\\"Enabled\\",\\"Filters\\":\\"[{\\\\\\"Path\\\\\\": \\\\\\"/home/admin/test\\\\\\",\\\\\\"Pattern\\\\\\":[\\\\\\"*\\\\\\"],\\\\\\"Recursive\\\\\\":false}]\\"},\\"ACS:Application\\":{\\"Collection\\":\\"Enabled\\"}, \\"ACS:Network\\":{\\"Collection\\":\\"Enabled\\"}}'

Fn::ConvertMapToList

转化JSON对象为Key、Value格式的列表。

声明

{'Fn::ConvertMapToList': [JSON/JSONString] } 

参数

JSON

返回值

List

示例1

{
    "Fn::ConvertMapToList": [
        {
            "key1": "value1",
            "key2": "value2"
        }
    ]
}

示例1返回

[
  {
    "Key": "key1",
    "Value": "value1"
  },
  {
    "Key": "key2",
    "Value": "value2"
  }
]

示例2

{
    "Fn::ConvertMapToList": [
        "{\"key1\": \"value1\", \"key2\": \"value2\"}"
    ]
}

示例2返回

[
  {
    "Key": "key1",
    "Value": "value1"
  },
  {
    "Key": "key2",
    "Value": "value2"
  }
]