Синтаксис выражений — это совокупность всех возможностей работы с выражениями в шаблонах Cloud Assembly.
Представленный ниже синтаксис частично представлен в примерах, приведенных в разделе Выражения Cloud Assembly.
Литералы
Поддерживаются следующие литералы.
- Логическое значение: истина или ложь
- Целое число
- Число с плавающей запятой
- Строка
Обратная косая черта используется в качестве escape-символа для одинарных и двойных кавычек, а также для самой себя.
Escape-последовательность для
"
выглядит как\"
Escape-последовательность для
'
выглядит как\'
Escape-последовательность для
\
выглядит как\\
Escape-последовательность для кавычек нужна только в строках, заключенных в кавычки того же типа, как показано в следующем примере.
"I am a \"double quoted\" string inside \"double quotes\"."
- NULL
Переменные сред
Имена сред:
- orgId
- projectId
- projectName
- deploymentId
- deploymentName
- blueprintId
- blueprintVersion
- blueprintName
- requestedBy (user)
- requestedAt (time)
Синтаксис
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
Переменные ресурсов self разрешены только для ресурсов, которые поддерживают стадию выделения. Переменные ресурсов self доступны только (или имеют только заданное значение) по окончании стадии выделения.
Синтаксис
self.property_name
Пример
${self.address}
(возвращает адрес, назначенный на стадии выделения)
Следует отметить, что для ресурса с именем resource_x
self.property_name
и resource.resource_x.property_name
являются одинаковыми и считаются рекурсивными ссылками.
Условия
Синтаксис
- В качестве операторов равенства используются
==
и!=
. - В качестве реляционных операторов используются
<
,>
,<=
и>=
. - В качестве логических операторов используются
&&
,||
и!
. - В условиях используется следующий шаблон:
выражение условия
?
выражение истины :выражение лжи
Примеры:
${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"]
. Идентификатор используется для создания литерала, значение которого равняется идентификатору, а затем оператор «[ ]» используется с этим значением.
Пример
${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) | Проверяет, заканчивается ли строка темы (subject) строкой суффикса (suffix) |
filter_by(array, filter) | Возвращает только записи массива, для которых успешно выполняется операция фильтрации
возвращает
возвращает |
floor(number) | Возвращает наибольшее значение (ближайшее к положительной бесконечности), которое меньше аргумента или равно ему и равно математическому целому значению |
format(format, values...) | Возвращает отформатированную строку с использованием формата и значений форматировщика класса Java. |
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) | Возвращает массив пар «ключ:значение» для указанного имени ключа в сочетании со значениями из другого массива
возвращает массив пар «ключ:значение», содержащий поле ключа, которое называется «source», вместе со строками идентификатора диска. Обратите внимание:
возвращает тот же результат |
matches(string, regex) | Проверяет, совпадает ли строка с регулярным выражением |
max(array) | Возвращает максимальное значение из массива чисел |
merge(map, map) | Возвращает объединенной сопоставление |
min(array) | Возвращает минимальное значение из массива чисел |
not_null(array) | Возвращает первую запись, которая не является пустой (null) |
now() | Возвращает текущее время в формате ISO-8601 |
range(start, stop) | Возвращает последовательность чисел с шагом 1, которая начинается с начального числа и заканчивается непосредственно перед конечным числом |
replace(string, target, replacement) | Заменяет строку, содержащую целевой элемент string, строкой target |
reverse(array) | Обращает записи в массиве |
slice(array, begin, end) | Возвращает фрагмент массива с начального (begin) до конечного (end) индекса |
split(string, delim) | Разбивает строку с помощью разделителя и возвращает массив строк |
starts_with(subject, prefix) | Проверяет, начинается ли строка темы (subject) со строки префикса (prefix) |
substring(string, begin, end) | Возвращает подстроку строки с начального (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() | Возвращает случайно сгенерированный универсальный уникальный идентификатор |
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"}'