Product Documentation

Nov 16, 2016

StyleBook의 가장 강력한 기능 중 하나가 식을 사용하는 기능입니다. 다양한 시나리오에서 StyleBook 식을 사용하여 동적 값을 계산할 수 있습니다. 아래 예에서는 매개 변수 값을 리터럴 문자열과 연결하는 식을 보여 줍니다.

예제:

      $parameters.appname + "-mon"

이 식은 appname이라는 매개 변수를 가져와 문자열 "-mon"과 연결합니다.

다음 유형의 식이 지원됩니다.

지원되는 연산자 예제
산술 식
  • + : 더하기
  • - : 빼기
  • * : 곱하기
  • / : 나누기
  • % : 모듈로
  • 두 숫자 더하기: $parameters.a + $parameters.b
  • 두 숫자 곱하기: $parameters.a * 10
  • 한 숫자를 다른 숫자로 나눈 후 나머지 찾기:

           15 % 10의 결과는 5입니다.

  문자열 식
  • + : 두 문자열 연결
  • 두 문자열 연결: str("app-") + $parameters.app-name
목록 식
  • + : 두 목록 병합
  • 두 목록 연결: $parameters.external-servers + $parameters.internal-servers
  • $parameters.ports-1이 [80, 81]이고 $parameters.port-2가 [81, 82]이면 $parameters.ports-1 + $parameters.ports-2의 결과는 [80, 81, 81, 82] 목록입니다.
관계 식
  • == : 두 피연산자가 같은지 테스트하여 두 피연산자가 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  • != : 두 피연산자가 다른지 테스트하여 두 피연산자가 다르면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  • > : 첫 번째 피연산자가 두 번째 피연산자보다 크면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  • >= : 첫 번째 피연산자가 두 번째 피연산자보다 크거나 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  • < : 첫 번째 피연산자가 두 번째 피연산자보다 작으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  • <= : 첫 번째 피연산자가 두 번째 피연산자보다 작거나 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
  • 같음 연산자 사용: $parameters.name == "abcd"
  • 같지 않음 연산자 사용: $parameters.name != "default"
  • 다른 관계 연산자의 예
    • 10 > 9
    • 10 >= 10
    • 10 < 9
    • 10 <= 9
    • 10 == 10
    • 10 != 1

 

 

 

논리(부울) 식
  • and: 논리 'and' 연산자입니다. 두 피연산자가 모두 true이면 결과가 true이고, 그렇지 않으면 false입니다.
  • or: 논리 'or' 연산자입니다. 피연산자 중 하나가 true이면 결과가 true이고, 그렇지 않으면 false입니다.
  • not: 단항 연산자입니다. 피연산자가 true이면 결과가 false이고 반대로 피연산자가 false이면 결과가 true입니다.
  • in : 첫 번째 인수가 두 번째의 인수의 부분 문자열인지 여부를 테스트합니다.
  • in : 항목이 목록의 일부인지 여부 테스트
  • "and" 식의 예: $parameters.num > 10 and $parameters.num <= 20
  • "or" 식의 예: $parameters.x or $parameters.y
  • "not"의 예: not $parameters.is-secure
  • 한 문자열이 다른 문자열의 부분 문자열인지 여부 테스트: "abcd" in $parameters.name
  • 항목이 목록의 일부인지 여부 테스트: 80 in $parameters.ports

메모

문자열을 숫자로 변환하고 숫자를 문자열로 변환할 수 있는 캐스트 식을 입력할 수 있습니다. 마찬가지로 tcp-port를 숫자로 캐스트하고 IP 주소를 문자열로 캐스트할 수 있습니다.

 

메모

연산자 앞과 뒤에 구분 기호를 사용해야 합니다. 다음 구분 기호를 사용할 수 있습니다.

연산자 앞: 공백, 탭, 쉼표, (, ), [, ]

연산자 뒤: 공백, 탭, (, [

예를 들면 다음과 같습니다.

abc + def

100 % 10

10 > 9

식 유형 유효성 검사

StyleBook 엔진에서 컴파일 중에 더 강력한 유형 검사를 수행할 수 있습니다. 즉, StyleBook을 작성할 때 사용된 식의 유효성이 구성 팩을 만들 때가 아니라 StyleBook 자체를 가져올 때 검사됩니다.

매개 변수, 대체, 구성 요소, 구성 요소 속성, 구성 요소 출력, 사용자 정의 변수(repeat-item, repeat-index, 대체 함수에 대한 인수)에 대한 모든 참조의 유효성(존재 및 유형)이 검사됩니다.

유형 검사의 예

다음 예에서 lbvserver StyleBook의 예상되는 포트 속성 유형은 tcp-port입니다. NetScaler MAS의 이전 릴리스에서는 StyleBook 컴파일러가 값을 문자열로 계산하고 StyleBook을 가져와 실행했습니다. 이제는 유형 유효성 검사가 컴파일 당시(가져올 때)에 수행됩니다. 이 예에서는 StyleBook 컴파일러를 통해 문자열과 tcp-port가 호환되지 않는 유형인 것이 확인되므로 오류가 발생하고 StyleBook 가져오기 또는 마이그레이션이 실패합니다.

components:

  -

    name: lbvserver-comp

    type: ns::lbvserver

    properties:

      name: mylb

      ipv46: 10.102.190.15

      port: str("80")

      servicetype: HTTP

이 StyleBook을 성공적으로 컴파일하려면 다음과 같이 컴파일러에 대한 숫자로 선언해야 합니다.

  port: 80        

잘못된 식의 플래그 지정에 대한 예

이전 릴리스에서는 속성 이름에 잘못된 식이 할당된 경우 컴파일러가 잘못된 식을 감지하지 못하고 StyleBook을 NetScaler MAS로 가져오는 것을 허용했습니다. 이제는 이러한 StyleBook을 NetScaler MAS로 가져올 때 컴파일러가 잘못된 식을 식별하고 플래그를 지정합니다. 그 결과 StyleBook을 NetScaler MAS로 가져오지 않습니다. 

이 예에서 lb-sg-binding-comp 구성 요소의 name 속성에 할당된 식은 $components.lbvserver-comp.properties.lbvservername입니다. 그러나 구성 요소 lbvserver-comp에는 lbvservername이라는 속성이 없습니다. 이전 릴리스의 NetScaler MAS에서는 컴파일러가 이 식을 허용하고 성공적으로 가져옵니다. 실질적인 실패는 사용자가 이 StyleBook을 사용하여 구성 팩을 만들려고 할 때 발생합니다. 이제는 가져오기 중에 이러한 종류의 오류를 식별하여 StyleBook을 NetScaler MAS로 가져오지 않습니다. 이러한 오류를 수동으로 수정한 후 StyleBook을 가져와야 합니다.           

components:

  -

    name: lbvserver-comp

    type: ns::lbvserver

    properties:

      name: mylb

      ipv46: 10.102.190.15

      port: 80

      servicetype: HTTP

  -

    name: sg-comp

    type: ns::servicegroup

    properties:

      servicegroupname: mysg

      servicetype: HTTP

  -

    name: lb-sg-binding-comp

    type: ns::lbvserver_servicegroup_binding

    condition: $parameters.create-binding

    properties:

      name: $components.lbvserver-comp.properties.lbvservername

      servicegroupname: $components.sg-comp.properties.servicegroupname

메모

강력한 유형 검사는 Stylebook 또는 구성 팩을 NetScaler MAS 11.1에서 NetScaler MAS 12.0으로 마이그레이션할 때 영향을 미칠 수 있습니다. 또한 11.1 릴리스에서 유효성 검사 오류가 발견되지 않은 사용자 정의 Stylebook이 12.0 릴리스에서는 컴파일되지 않을 수 있습니다. 이러한 StyleBook은 업데이트 후 다시 가져와야 합니다. 또한 NetScaler MAS 11.1의 기존 구성 팩은 삭제 후 다시 만들어야 합니다.

목록 인덱싱

이제 목록의 항목을 직접 인덱싱하여 액세스할 수 있습니다.

설명

$components.test-lbs[0]

test-lbs 구성 요소의 첫 번째 항목을 나타냄

$components.test-lbs[0].properties.p1

test-lbs 구성 요소에서 첫 번째 항목의 p1 속성을 나타냄

$components.lbcomps[0].outputs.servicegroups[1].properties.servicegroupname

lbcomps 구성 요소에서 첫 번째 항목의 출력인 servicegroups 구성 요소에서 두 번째 항목의 servicegroupname 속성을 나타냄