運算式語法會在 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_xself.property_nameresource.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)}

表 1. 函數
函數 說明
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)

僅傳回通過篩選作業的陣列項目

filter_by([1,2,3,4], x => x >= 2 && x <= 3)

傳回 [2, 3]

filter_by({'key1':1, 'key2':2}, (k,v) => v != 1)

傳回 [{"key2": 2}]

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_by([1,2], x => x * 10)

傳回 [10, 20]

map_by([1,2], x => to_string(x))

傳回 ["1", "2"]

map_by({'key1':1, 'key2':2}, (k,v) => {k:v*10})

傳回 [{"key1":10},{"key2":20}]

map_to_object(array, keyname)

傳回與另一個陣列的值配對的指定索引鍵名稱的 key:value 配對陣列

map_to_object(resource.Disk[*].id, "source")

傳回將名為 source 的索引鍵欄位與磁碟識別碼字串配對的 key:value 配對陣列

請注意

map_by(resource.Disk[*].id, id => {'source':id})

傳回相同的結果

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) 傳回對應的值