표현식 구문은 Automation Assembler 템플릿에서 사용할 수 있는 모든 표현식 기능을 노출합니다.

참고: Automation Assembler 표현식은 정규식(regex)과 다릅니다.

Automation Assembler 표현식에 표시된 예시에서 다음 구문은 일부만 표시됩니다.

리터럴

다음과 같은 리터럴이 지원됩니다.

  • 부울(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_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)}'
    
  • 더 많은 예는 Automation Assembler의 시스템 및 디스크 클러스터의 내용을 참조하십시오.

산술 연산자

구문:

연산자는 + / *%입니다.

예:

${(input.count + 5) * 2}

문자열 연결

구문:

${'ABC' + 'DEF'}ABCDEF로 평가됩니다.

[ ] 및 . 연산자

[ ] 및 . 연산자에 대한 처리를 통일하기 위해 표현식은 ECMAScript를 따릅니다.

따라서 expr.identifierexpr["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)}

표 1. 함수
함수 설명
abs(숫자) 절대 숫자 값
avg(어레이) 숫자 어레이에서 모든 값의 평균을 반환
base64_decode(문자열) 디코딩된 base64 값을 반환
base64_encode(문자열) base64로 인코딩된 값을 반환
ceil(숫자) 인수 보다 크거나 같고 수학 정수와 동일한 최소(음의 무한대에 가장 가까움) 값을 반환
contains(어레이, 값) 어레이에 값이 포함되어 있는지 확인
contains(문자열,값) 문자열에 값이 포함되어 있는지 확인
digest(값, 유형) 지원되는 유형(md5, sha1, sha256, sha384, sha512)을 사용하여 값의 다이제스트를 반환
ends_with(주체, 접미사) 주체 문자열이 접미사 문자열로 끝나는지 확인
filter_by(어레이, 필터)

필터 작업을 통과한 어레이 항목만 반환합니다.

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(숫자) 인수보다 작거나 같고 수학 정수와 동일한 최대(양의 무한대에 가장 가까움) 값을 반환
format(형식, 값 ...) Java Class Formatter 형식 및 값을 사용하여 형식이 지정된 문자열을 반환
from_json(문자열) json 문자열을 구문 분석
join(어레이, 구분 기호) 구분 기호로 문자열 어레이를 연결하고 문자열을 반환
json_path(값, 경로) XPath for JSON을 사용하여 값에 대해 경로를 평가
keys(맵) 맵의 키를 반환
length(어레이) 어레이 길이를 반환
length(문자열) 문자열 길이를 반환
map_by(어레이, 작업)

작업이 적용된 각 어레이 항목을 반환합니다.

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(어레이, 키 이름)

다른 어레이의 값과 쌍으로 구성된 지정된 키 이름의 key:value 쌍의 어레이를 반환합니다.

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

디스크 ID 문자열과 쌍으로 구성된 source라는 키 필드가 있는 key:value 쌍의 어레이를 반환합니다.

다음

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

식은 동일한 결과를 반환합니다.

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(맵) 맵의 값을 반환

중첩된 삼항 연산자

매개 변수화된 문자열이 있는 중첩된 삼항 연산자를 사용하는 경우 다음을 고려합니다.
  • 표현식은 달러 기호와 중괄호로 묶어야 합니다(예: ${...}).
  • 표현식 중간에 달러 기호($)를 사용하지 마십시오. 그러면 전체 외부 ${...} 표현식의 평가에 방해가 될 수 있기 때문입니다.
  • 중첩 수준에 관계없이 삼항 연산자 구조(예: A ? B :C)를 따릅니다. 이 중첩을 지원하려면 소괄호()를 사용합니다. 예를 들어 A ? (B1 ? B2 :(B3 ? B4 :B5)) :C가 표시됩니다.
매개 변수화된 문자열이 없는 예:
${input.backup == "Yes" ? (input.region == "Region1" ? "Hello1" :"No-Backup") :"Test"}
매개 변수화된 문자열이 있는 예:
${input.backup == "Yes" ? (input.region == "Region1" ? (env.projectName + "-NOAPP-01-14-WDC") :(input.region == "Region2" ? (env.projectName + "-NOAPP-01-14-CDC") :(input.region == "Sitel" ? (env.projectName + "-NOAPP-01-14-Sitel") :"No-Backup"))) :"Test"}
yaml의 리소스 예:
Cloud_Machine_1:
    type: Cloud.Machine
    properties:
      image: imageName
      count: ${input.machineCount}
      flavor: small
      snapshotLimit: 1
      tags:
        - key: BGNAME
          value: ${env.projectName}
        - key: Veeam
          value: ${input.backup == "Yes" ? (input.region == "Region1" ? (env.projectName + "-NOAPP-01-14-WDC") :(input.region == "Region2" ? (env.projectName + "-NOAPP-01-14-CDC") :(input.region == "Sitel" ? (env.projectName + "-NOAPP-01-14-Sitel") :"No-Backup"))) :"Test"}

문제 해결

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"}'