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 的資源是相同的,且同時視為自我參考。

叢集計數索引

語法:

count.index

範例:

${count.index == 0 ? "master" : "slave"} (傳回叢集化資源的節點類型)。

限制:

不支援將 count.index 用於資源配置。例如,下列容量運算式參考在輸入時建立的磁碟陣列中的位置時會失敗。

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
    properties:
      capacityGb: '${input.disks[count.index].size}'
      count: '${length(input.disks)}'

條件

語法:

  • 等號比較運算子為 ==!=
  • 關係運算子為 < > <=>=
  • 邏輯運算子為 && ||!
  • 條件式使用模式:

    condition-expression ? true-expression : false-expression

範例:

${input.count < 5 && input.size == 'small'}

${input.count < 2 ? "small" : "large"}

算術運算子

語法:

運算子為 + / *%

範例:

${(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) 絕對數值
floor(number) 傳回小於或等於引數且等於數學整數的最大 (最接近正無限大) 值
ceil(number) 傳回大於或等於引數且等於數學整數的最小 (最接近無限大的負數) 值
to_lower(str) 將字串轉換為小寫
to_upper(str) 將字串轉換為大寫
contains(array, value) 檢查陣列是否包含值
contains(string, value) 檢查字串是否包含值
join(array, delim) 加入含分隔符號的字串陣列,並傳回字串
split(string, delim) 分割含分隔符號的字串,並傳回字串陣列
slice(array, begin, end) 傳回從開始索引到結束索引的陣列配量
reverse(array) 反向陣列項目
starts_with(subject, prefix) 檢查主體字串是否以前置詞字串開頭
ends_with(subject, suffix) 檢查主體字串是否以後置詞字串結尾
replace(string, target, replacement) 將包含目標字串的字串取代為目標字串
substring(string, begin, end) 傳回從開始索引到結束索引的字串的子字串
format(format, values...) 傳回使用 Java 類 Formatter 格式的格式化字串和值。
keys(map) 傳回對應的索引鍵
values(map) 傳回對應的值
merge(map, map) 傳回合併的對應
length(string) 傳回字串長度
length(array) 傳回陣列長度
max(array) 傳回數字陣列中的最大值
min(array) 傳回數字陣列中的最小值
sum(array) 傳回數字陣列中所有值的總和
avg(array) 傳回數字陣列中所有值的平均值
digest(value, type) 傳回使用支援類型 (md5、sha1、sha256、sha384、sha512) 的值的摘要
to_string(value) 傳回值的字串表示法
to_number(string) 以數字剖析字串
not_null(array) 返回不為 Null 的第一個項目
base64_encode(string) 傳回 base64 編碼值
base64_decode(string) 傳回解碼的 base64 值
now() 以 ISO-8601 格式傳回目前時間
uuid() 傳回隨機產生的 UUID
from_json(string) 剖析 json 字串
to_json(value) 將值序列化為 json 字串
json_path(value, path) 使用 XPath for JSON 根據值評估路徑。
matches(string, regex) 檢查字串是否符合 regex 運算式
url_encode(string) 使用 url 編碼規格對字串進行編碼
trim(string) 移除前置空格和尾端空格