표현식 구문은 Cloud Assembly 템플릿에서 사용할 수 있는 모든 표현식 기능을 노출합니다.
Cloud Assembly 표현식에 표시된 예시에서 다음 구문은 일부만 표시됩니다.
리터럴
다음과 같은 리터럴이 지원됩니다.
- 부울(true 또는 false)
- 정수
- 부동 소수점
- String
백슬래시는 큰따옴표,작은따옴표 및 백슬래시 자체를 이스케이프합니다.
"
는\"
로 이스케이프됩니다.'
는\'
로 이스케이프됩니다.\
는\\
로 이스케이프됩니다.다음 예제와 같이 따옴표는 동일한 유형의 따옴표로 묶인 문자열 내에서만 이스케이프해야 합니다.
"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}
(count가 지정되지 않은 클러스터링되지 않은 리소스에 대해 문자열을 반환합니다. 클러스터링된 리소스에 대해서는 어레이를 반환합니다.)${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"]
에 해당합니다. 식별자는 값이 식별자인 리터럴을 구성하는 데 사용되며 [ ] 연산자가 해당 값과 함께 사용됩니다.
예:
${resource.app.networks[0].address}
또한 속성에 공백이 포함되어 있는 경우 점 표기법을 사용하는 대신 대괄호와 큰따옴표로 구분합니다.
틀림:
input.operating system
맞음:
input["operating system"]
맵 구성
구문:
${{'key1':'value1', 'key2':input.key2}}
어레이 구성
구문:
${['key1','key2']}
예:
${[1,2,3]}
함수
구문:
${함수(인수...)}
예:
${to_lower(resource.app.name)}
함수 | 설명 |
---|---|
abs(숫자) | 절대 숫자 값 |
avg(어레이) | 숫자 어레이에서 모든 값의 평균을 반환 |
base64_decode(문자열) | 디코딩된 base64 값을 반환 |
base64_encode(문자열) | base64로 인코딩된 값을 반환 |
ceil(숫자) | 인수 보다 크거나 같고 수학 정수와 동일한 최소(음의 무한대에 가장 가까움) 값을 반환 |
contains(어레이, 값) | 어레이에 값이 포함되어 있는지 확인 |
contains(문자열,값) | 문자열에 값이 포함되어 있는지 확인 |
digest(값, 유형) | 지원되는 유형(md5, sha1, sha256, sha384, sha512)을 사용하여 값의 다이제스트를 반환 |
ends_with(주체, 접미사) | 주체 문자열이 접미사 문자열로 끝나는지 확인 |
filter_by(어레이, 필터) | 필터 작업을 통과한 어레이 항목만 반환합니다.
|
floor(숫자) | 인수보다 작거나 같고 수학 정수와 동일한 최대(양의 무한대에 가장 가까움) 값을 반환 |
format(형식, 값 ...) | Java Class Formatter 형식 및 값을 사용하여 형식이 지정된 문자열을 반환 |
from_json(문자열) | json 문자열을 구문 분석 |
join(어레이, 구분 기호) | 구분 기호로 문자열 어레이를 연결하고 문자열을 반환 |
json_path(값, 경로) | XPath for JSON을 사용하여 값에 대해 경로를 평가 |
keys(맵) | 맵의 키를 반환 |
length(어레이) | 어레이 길이를 반환 |
length(문자열) | 문자열 길이를 반환 |
map_by(어레이, 작업) | 작업이 적용된 각 어레이 항목을 반환합니다.
|
map_to_object(어레이, 키 이름) | 다른 어레이의 값과 쌍으로 구성된 지정된 키 이름의 key:value 쌍의 어레이를 반환합니다.
디스크 ID 문자열과 쌍으로 구성된 source라는 키 필드가 있는 key:value 쌍의 어레이를 반환합니다. 다음
식은 동일한 결과를 반환합니다. |
matches(문자열, 정규식) | 문자열이 정규 표현식과 일치하는지 확인 |
max(어레이) | 숫자 어레이에서 최대값을 반환 |
merge(맵, 맵) | 병합된 맵을 반환 |
min(어레이) | 숫자 어레이에서 최소값을 반환 |
not_null(어레이) | null이 아닌 첫 번째 항목을 반환 |
now() | 현재 시간을 ISO-8601형식으로 반환 |
range(시작, 중지) | 시작 번호로 시작하여 중지 번호 바로 앞에서 끝나는, 1씩 증가하는 일련의 숫자를 반환합니다. |
replace(문자열, 대상, 교체) | 대상 문자열을 포함하는 문자열을 대상 문자열로 교체 |
reverse(어레이) | 어레이 항목의 방향을 반전 |
slice(어레이, 시작, 끝) | 시작 인덱스에서 끝 인덱스까지 어레이 조각을 반환 |
split(문자열, 분 기호) | 구분 기호로 문자열을 분할하고 문자열 어레이를 반환 |
starts_with(주체, 접두사) | 주체 문자열이 접두사 문자열로 시작하는지 확인 |
substring(문자열, 시작, 끝) | 시작 인덱스에서 끝 인덱스까지 문자열의 하위 문자열을 반환 |
sum(어레이) | 숫자 어레이에서 모든 값의 합계를 반환 |
to_json(값) | 값을 json 문자열로 직렬화 |
to_lower(문자열) | 문자열을 소문자로 변환 |
to_number(문자열) | 문자열을 숫자로 구문 분석 |
to_string(값) | 값의 문자열 표현을 반환 |
to_upper(문자열) | 문자열을 대문자로 변환 |
trim(문자열) | 앞뒤 공백 제거 |
url_encode(문자열) | URL 인코딩 규격을 사용하여 문자열을 인코딩 |
uuid() | 임의로 생성된 UUID를 반환 |
values(맵) | 맵의 값을 반환 |
문제 해결
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"}'