運算式語法會在 Cloud Assembly 範本中公開運算式的所有可用功能。
僅在Cloud Assembly 運算式顯示的範例中部分表示以下語法。
文字
支援下列文字:
- 布林值 (true 或 false)
- 整數
- 浮點
- 字串
反斜線逸出雙引號、單引號和反斜線本身:
"
逸出為\"
'
逸出為\'
\
逸出為\\
只需要在用相同類型的引號括住的字串內逸出引號,如下列範例所示。
"I am a \"double quoted\" string inside \"double quotes\"."
- Null
環境變數
環境名稱:
- orgId
- projectId
- projectName
- deploymentId
- deploymentName
- blueprintId
- blueprintVersion
- blueprintName
- requestedBy (使用者)
- requestedAt (時間)
語法:
env.ENV_NAME
範例:
${env.blueprintId}
資源變數
使用資源變數可繫結至來自其他資源的資源內容。
語法:
resource.RESOURCE_NAME.PROPERTY_NAME
資源名稱不能包含破折號或點。允許使用底線。
範例:
${resource.db.id}
${resource.db.networks[0].address}
${resource.app.id}
(傳回非叢集化資源的字串,未指定計數。傳回叢集化資源的陣列)。${resource.app[0].id}
(傳回叢集化資源的第一個項目)。
資源本身變數
僅允許對支援配置階段的資源使用資源本身變數。只有在配置階段完成後,才可使用資源本身變數 (或僅具有值集)。
語法:
self.property_name
範例:
${self.address}
(傳回配置階段期間指派的位址)。
請注意,對於名為 resource_x
、self.property_name
和 resource.resource_x.property_name
的資源是相同的,且同時視為自我參考。
條件
語法:
- 等號比較運算子為
==
和!=
。 - 關係運算子為
<
>
<=
和>=
。 - 邏輯運算子為
&&
||
和!
。 - 條件式使用模式:
condition-expression
?
true-expression :false-expression
範例:
${input.count < 5 && input.size == 'small'}
${input.count < 2 ? "small":"large"}
叢集計數索引
語法:
count.index
範例:
- 傳回叢集化資源的節點類型:
${count.index == 0 ? "primary":"secondary"}
- 在配置期間設定每個磁碟的大小:
inputs: disks: type: array minItems: 0 maxItems: 12 items: type: object properties: size: type: integer title: Size (GB) minSize: 1 maxSize: 2048 resources: Cloud_vSphere_Disk_1: type: Cloud.vSphere.Disk allocatePerInstance: true properties: capacityGb: '${input.disks[count.index].size}' count: '${length(input.disks)}'
- 如需更多範例,請參閱Cloud Assembly 中的機器和磁碟叢集。
算術運算子
語法:
運算子為 +
–
/
*
和 %
。
範例:
${(input.count + 5) * 2}
字串串連
語法:
${'ABC' + 'DEF'}
評估為 ABCDEF
。
運算子 [ ] 和 .
在統一處理 [ ] 和 . 運算子方面,運算式遵循 ECMAScript。
因此,expr.identifier
相當於 expr["identifier"]
。識別碼用來建構其值為 identifier 的文字,然後將 [ ] 運算子與該值搭配使用。
範例:
${resource.app.networks[0].address}
此外,如果內容中包含空格,請使用方括弧和雙引號進行分隔,而非使用點標記法。
不正確:
input.operating system
正確:
input["operating system"]
對應建構
語法:
${{'key1':'value1', 'key2':input.key2}}
陣列建構
語法:
${['key1','key2']}
範例:
${[1,2,3]}
函數
語法:
${function(arguments...)}
範例:
${to_lower(resource.app.name)}
函數 | 說明 |
---|---|
abs(number) | 絕對數值 |
avg(array) | 傳回數字陣列中所有值的平均值 |
base64_decode(string) | 傳回解碼的 base64 值 |
base64_encode(string) | 傳回 base64 編碼值 |
ceil(number) | 傳回大於或等於引數且等於數學整數的最小 (最接近無限大的負數) 值 |
contains(array, value) | 檢查陣列是否包含值 |
contains(string, value) | 檢查字串是否包含值 |
digest(value, type) | 傳回使用支援類型 (md5、sha1、sha256、sha384、sha512) 的值的摘要 |
ends_with(subject, suffix) | 檢查主體字串是否以後置詞字串結尾 |
filter_by(array, filter) | 僅傳回通過篩選作業的陣列項目
傳回
傳回 |
floor(number) | 傳回小於或等於引數且等於數學整數的最大 (最接近正無限大) 值 |
format(format, values...) | 傳回使用 Java 類 Formatter 格式的格式化字串和值。 |
from_json(string) | 剖析 json 字串 |
join(array, delim) | 加入含分隔符號的字串陣列,並傳回字串 |
json_path(value, path) | 使用 XPath for JSON 根據值評估路徑。 |
keys(map) | 傳回對應的索引鍵 |
length(array) | 傳回陣列長度 |
length(string) | 傳回字串長度 |
map_by(array, operation) | 傳回每個陣列項目以及對其套用的作業
傳回
傳回
傳回 |
map_to_object(array, keyname) | 傳回與另一個陣列的值配對的指定索引鍵名稱的 key:value 配對陣列
傳回將名為 source 的索引鍵欄位與磁碟識別碼字串配對的 key:value 配對陣列 請注意
傳回相同的結果 |
matches(string, regex) | 檢查字串是否符合 regex 運算式 |
max(array) | 傳回數字陣列中的最大值 |
merge(map, map) | 傳回合併的對應 |
min(array) | 傳回數字陣列中的最小值 |
not_null(array) | 返回不為 Null 的第一個項目 |
now() | 以 ISO-8601 格式傳回目前時間 |
range(start, stop) | 以 1 為增量傳回一系列數字,以起始數字開頭且在停止數字之前結束 |
replace(string, target, replacement) | 將包含目標字串的字串取代為目標字串 |
reverse(array) | 反向陣列項目 |
slice(array, begin, end) | 傳回從開始索引到結束索引的陣列配量 |
split(string, delim) | 分割含分隔符號的字串,並傳回字串陣列 |
starts_with(subject, prefix) | 檢查主體字串是否以前置詞字串開頭 |
substring(string, begin, end) | 傳回從開始索引到結束索引的字串的子字串 |
sum(array) | 傳回數字陣列中所有值的總和 |
to_json(value) | 將值序列化為 json 字串 |
to_lower(str) | 將字串轉換為小寫 |
to_number(string) | 以數字剖析字串 |
to_string(value) | 傳回值的字串表示法 |
to_upper(str) | 將字串轉換為大寫 |
trim(string) | 移除前置空格和尾端空格 |
url_encode(string) | 使用 url 編碼規格對字串進行編碼 |
uuid() | 傳回隨機產生的 UUID |
values(map) | 傳回對應的值 |
疑難排解
YAML 語言在索引鍵-值配對中使用冒號和空格 (": ") 作為索引鍵和值之間的分隔符號。運算式語法取決於 YAML,因此冒號後的空格有時會導致運算式失敗。
例如,在以下運算式中,"win" :
和 "lin"
之間的空格會導致失敗。
${contains(input.image,"(Windows") == true ? "win" : "lin"}
工作運算式省略了空格。
${contains(input.image,"(Windows") == true ? "win" :"lin"}
如果運算式仍然失敗,請嘗試用刻度標記將整個運算式括起來,如下所示。
ezOS: '${contains(input.image,"(Windows") == true ? "win" :"lin"}'