內(nèi)置函數(shù)(Builtin-Functions)
OOS提供了多個內(nèi)置函數(shù),使您更加方便的處理模板的參數(shù)及輸出。
函數(shù)說明
Fn::Base64Encode:返回輸入字符串的Base64編碼結(jié)果。
Fn::Base64Decode:返回輸入字符串的Base64解碼結(jié)果。
Fn::MergeMapToList:將多個Map合并成一個以Map為元素的列表。
Fn::MergeMap:將列表中多個Map合并成一個Map。
Fn::Join:將一組值連接起來,用特定分隔符隔開。
Fn::Select:數(shù)據(jù)元容器通過查詢索引返回的單個數(shù)據(jù)元。
Fn::Split:通過指定分隔符對字符串進行切片,并返回所有切片組成的列表。
Fn::Replace:將字符串中指定子字符串用新字符串替換。
Fn::Min:返回列表中最小元素。
Fn::Max:返回列表中最大元素。
Fn::First:返回列表中第一個元素。
Fn::Last:返回列表中最后一個元素。
Fn::ListJoin:將多個參數(shù)轉(zhuǎn)換成列表。
Fn::Equals:比較兩個值是否相等。
Fn::If:根據(jù)判斷條件真假返回不同的值。
Fn::Not:對值取否操作。
Fn::AddHour:對一個UTC時間向后推移N小時。
Fn::FormatUTCTime:按不同單位精度進行格式化UTC時間。
Fn::Eval:執(zhí)行字符串中的單行表達式,并返回執(zhí)行結(jié)果。
Fn::CalculateTimeByOpsWindow:當指定一個時間窗口后,該函數(shù)會根據(jù)函數(shù)的執(zhí)行時間點,產(chǎn)生下一個在窗口區(qū)間的時間點。
Fn::And:邏輯與。
Fn::Or: 邏輯或。
Fn::Intersection:取多個數(shù)組的交集。
Fn::Union:取多個數(shù)組的并集。
Fn::Difference:取多個數(shù)組的并集與交集的差集。
Fn::Jq:對JSON對象進行篩選,獲取目標屬性值。
Fn::MapJoin:將兩個List組合成一個Map,組合時,會把第一個List內(nèi)的所有值,作為Map中每個鍵值對的鍵,會把第二個List內(nèi)的值,作為Map中每個鍵值對。
Fn::IsIpInCIDR:判斷指定的IP是否在指定的CIDR網(wǎng)段內(nèi)。
Fn::Sub:將輸入字符串中的變量替換為指定的值。
Fn::DurationBetween:返回兩個時間點之間的時長。
Fn::Escape:轉(zhuǎn)義字符串。
Fn::ConvertMapToList:轉(zhuǎn)化JSON對象為Key、Value格式的列表。
使用函數(shù)
內(nèi)建函數(shù)的使用主要由內(nèi)置函數(shù)名和待處理參數(shù)組成。調(diào)用函數(shù)的聲明表達式即表示函數(shù)處理參數(shù)后返回的結(jié)果,且表達式作為函數(shù)返回的結(jié)果可以像其他參數(shù)一樣被引用。
Fn::Base64Encode
返回輸入字符串的Base64編碼結(jié)果。
聲明
{"Fn::Base64Encode": "StringToBeBase64"}
參數(shù)
StringToBeBase64:要進行Base64編碼的String。
返回值
Base64方式表示的原始字符串。
示例
{"Fn::Base64Encode": "hello"}
示例返回
"aGVsbG8="
Fn::Base64Decode
返回Base64字符串的解碼結(jié)果。
聲明
{"Fn::Base64Decode": "Base64ToBeString"}
參數(shù)
Base64ToBeString:Base64編碼方式表示的String。
返回值
Base64解碼后的原始String。
示例
{"Fn::Base64Decode": "aGVsbG8="}
示例返回
"hello"
Fn::MergeMapToList
將多個Map合并成一個以Map為元素的列表。
聲明
{"Fn::MergeMapToList": "aListConatinsDicts"}
參數(shù)
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"}
參數(shù)
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"]}
參數(shù)
Connector:作為連接符String。
aListContainsString:包含字符串的List。
返回值
List內(nèi)多個元素連接后的字符串。
示例
{
"Fn::Join": [
",",
[
"a",
"b",
"c"
]
]
}
示例返回
"a,b,c"
Fn::Select
數(shù)據(jù)元容器通過查詢索引返回的單個數(shù)據(jù)元。
聲明
{"Fn::Select": ["Index","Container"]}
參數(shù)
Index:被查詢Container的索引String或Number。
Container:被查詢的List或Map。
返回值
查詢指定索引返回的結(jié)果。
示例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"]}
參數(shù)
Separator:作為分隔符的String。
StringToSeparate:將被按分隔符分成一個List的String。
返回值
StringToSeparate按分隔符分成的一個List。
示例
{
"Fn:: Split": [",","a,b,c"]
}
示例返回
[
"a",
"b",
"c"
]
Fn::Replace
將字符串中指定子字符串用新字符串替換。
聲明
{ "Fn::Replace": [{"$varName": "StringToReplaceWith"}, "StringToReplace"]}
參數(shù)
$varName:占位符,以$開始后面連接普通參數(shù)名即可,其中$后面參數(shù)名命名要求同模板參數(shù)名。
StringToReplaceWith:占位符將被替換成的值。
StringToReplace:將被替換的值(含占位符),如"$varName is foo"。
返回值
若參數(shù)StringToReplaceWith是"baz",則返回為"baz is foo"。
示例
{ "Fn::Replace": [{"$varName": "baz"}, "$varName is foo" ]}
示例返回
"baz is foo"
Fn::Min
返回列表中最小元素。
聲明
{"Fn::Min": "aList"}
參數(shù)
aList:一個含有元素的List;List中元素類型可以為string,int,datetime,None,各元素必須為同一類型。
返回值
忽略值為None的元素,返回List中最小的元素,若集合元素全部為None則返回None。
示例
{
"Fn::Min": ["123","234"]
}
示例返回
"123"
Fn::Max
返回列表中最大元素。
聲明
{"Fn::Max": "aList"}
參數(shù)
aList:一個含有元素的List;List中元素類型可以為string、int、datetime、None,各元素必須為同一類型。
返回值
忽略值為None的元素,返回List中最大的元素,若集合元素全部為None則返回None。
示例
{
"Fn::Max": ["123","234"]
}
示例返回
"234"
Fn::First
返回列表中第一個元素。
聲明
{ "Fn::First": "aList"}
參數(shù)
aList:一個含有元素的List;List中元素類型不限。
返回值
輸出為集合中迭代返回的第一個元素;對loop來說,按照Items中迭代返回的Item生成的task execution id進行排序。
示例
{
"Fn::First": ["123","234"]
}
示例返回
"123"
Fn::Last
返回列表中最后一個元素。
聲明
{"Fn::Last": "aList"}
參數(shù)
aList:一個含有元素的List;List中元素類型不限。
返回值
輸出為集合中迭代返回的最后一個元素;對loop來說,按照Items中迭代返回的Item生成的task execution id進行排序。
示例
{
"Fn::Last": ["123","234"]
}
示例返回
"234"
Fn::ListJoin
將多個參數(shù)轉(zhuǎn)換成列表。
聲明
{"Fn::ListJoin": "IterableContainer"}
參數(shù)
IterableContainer是一個可迭代的集合,集合中元素類型不限。
返回值
將集合轉(zhuǎn)換成List輸出。
示例
{"Fn::ListJoin": ["a",2, 3]}
示例返回
["a",2,3]
Fn::Equals
比較兩個值是否相等。如果兩個值相等,則返回true;如果不相等,則返回false。
聲明
{ "Fn::Equals": ["parameter1", "parameter2"]}
參數(shù)
parameter1,parameter2為兩個任意類型值。
返回值
如果兩個值相等,則返回true;如果不相等,則返回false。
示例
{ "Fn::Equals": ["Running","Stopped"]}
示例返回
false
Fn::If
如果指定的條件計算為true,則返回一個值;如果指定的條件計算為false,則返回另一個值。
聲明
{
"Fn::If": [
"condition",
"value_if_true",
"value_if_false"
]
}
參數(shù)
condition_name:待判斷的條件參數(shù)。
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"]}
參數(shù)
condition1、condition2:將進行邏輯或的條件。
返回值
當condition1和condition2均為false時,返回false;否則,返回true。
示例
{"Fn::Or": [true,false]}
示例返回
true
Fn::And
邏輯或操作。
聲明
{"Fn::And": [ "condition1", "condition2"]}
參數(shù)
condition1、condition2:將要進行邏輯與的條件。
返回值
當condition1和condition2均為true時,返回true;否則,返回false。
示例
{"Fn::And": [true,false]}
示例返回
false
Fn::Not
對值取否操作。
聲明
{"Fn::Not": "condition"}
參數(shù)
condition:將要取否的條件。
返回值
當condition為true時,返回false;當condition為false時,返回true。
示例
{"Fn::Not": true}
示例返回
false
Fn::AddHour
表示對一個UTCT時間向后推移N小時,使其成為一個新的UTC時間。
聲明
{"Fn::AddHour": ["utc_time", "hours_count" ]}
參數(shù)
utc_time:一個要向后推移的UTC時間。
hours_count:要向后推移的小時數(shù),限取整數(shù)。
返回值
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"]
參數(shù)
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
表示執(zhí)行一個字符串中的表達式(不支持表達式中含換行),并返回執(zhí)行結(jié)果。 聲明
{
"Fn::Eval": [
"expression"
]
}
參數(shù)
expression:被執(zhí)行的表達式(如運算式)。
返回值
表達式執(zhí)行結(jié)果。
示例
{ "Fn::Eval": ["1+3*2+3%2+1"]}
示例返回
9
Fn::CalculateTimeByOpsWindow
表示您指定了24h中的一個時間段后,F(xiàn)n::CalculateTimeByOpsWindow會根據(jù)函數(shù)的執(zhí)行時間點,產(chǎn)生下一個在該時間段中的時間點。具體時間點產(chǎn)生規(guī)則為,當函數(shù)執(zhí)行的時間點恰好在當天的時間段中時,產(chǎn)生的時間點將是函數(shù)執(zhí)行時間+1min對應(yīng)的時間點;當函數(shù)執(zhí)行的時間點不在當天時間段中,且早于當天時間段的開始時間,則產(chǎn)生的時間點將是函數(shù)執(zhí)行的當天時間段中的某個隨機時間點;當函數(shù)執(zhí)行的時間點不在當天時間段中,且晚于當天時間段的結(jié)束時間,則產(chǎn)生的時間點將是函數(shù)執(zhí)行當天的下一天對應(yīng)時間段中的某個隨機時間點。
聲明
Fn::CalculateTimeByOpsWindow: [ "startTime", "endTime" ]
參數(shù)
startTime:24h中某時間段的開始時間(如01:00:00Z)。
endTime:24h中某時間段的結(jié)束時間(如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" ]}
參數(shù)
type:可選"First"或"All",其中First表示只返回第一個結(jié)果,All表示返回所有結(jié)果。
jqSelector:jq篩選語句,詳細可參考https://yq.aliyun.com/articles/714479。
jsonObject:被篩選的JSON對象。
返回值
JSON對象經(jīng)jq表達式篩選后返回的結(jié)果。
示例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
對多個數(shù)組取交集,返回共同包含的值。
聲明
{ "Fn::Intersection": [ list1, list2]}
參數(shù)
list1、list2:要取交集的數(shù)組。
返回值
一個數(shù)組,其中的元素是多個數(shù)組共同包含的值。
示例
{ "Fn::Intersection": [["i-1","i-2"],["i-1","i-3"]]}
示例返回
["i-1"]
Fn::Union
對多個數(shù)組中的元素去重后合并為一個數(shù)組,返回合并后的新數(shù)組。
聲明
{ "Fn::Union": [ list1, list2]}
參數(shù)
list1、list2:要合并的數(shù)組。
返回值
一個數(shù)組,其中的元素是多個數(shù)組的并集。
示例
{
"Fn::Union": [
[
"i-1",
"i-2"
],
[
"i-1",
"i-3"
]
]
}
示例返回
["i-1","i-2","i-3"]
Fn::Difference
查看多個數(shù)組的并集與交集的差集,返回包含差集結(jié)果的新數(shù)組。
聲明
{ "Fn::Difference": [ list1, list2]}
參數(shù)
list1、list2:要篩選存在不同元素的數(shù)組。
返回值
一個數(shù)組,其元素是多個數(shù)組的并集與交集的差集。
示例
{
"Fn::Difference": [
["i-1","i-2"],
["i-1"]]
}
示例返回
["i-2"]
Fn::MapJoin
將兩個List組合成一個Map,組合時,會把第一個List內(nèi)的所有值,作為Map中每個鍵值對的鍵,會把第二個List內(nèi)的值,作為Map中每個鍵值對的值。
聲明
{'Fn::MapJoin': [List1, List2] }
參數(shù)
aListConatinsDicts:含有多個映射的List。
返回值
一個Map,其中每個鍵值對的鍵是List1的對應(yīng)元素,每個鍵值對的值是List2的對應(yīng)元素。
示例
{'Fn::MapJoin': [['i-1', 'i-2', 'i-3'], [1, 2, 3]] }
示例返回
{'i-1': 1, 'i-2': 2, 'i-3': 3}
Fn::IsIpInCIDR
判斷指定的IP是否在指定的CIDR網(wǎng)段內(nèi)。
聲明
{'Fn::IsIpInCIDR': [Ip, CIDR] }
參數(shù)
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]}
參數(shù)
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]}
參數(shù)
DateTime_1、DateTime_2
返回值
String
示例
{
"Fn::DurationBetween": [
"12:00:00",
"13:00:00"
]
}
示例返回
PT3600S
Fn::Escape
轉(zhuǎn)義字符串。
聲明
{'Fn::Escape': [String, ShellType] }
參數(shù)
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
轉(zhuǎn)化JSON對象為Key、Value格式的列表。
聲明
{'Fn::ConvertMapToList': [JSON/JSONString] }
參數(shù)
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"
}
]