Product Documentation

대체

Jan 20, 2017

substitutions 섹션은 복잡한 식의 짧은 대체 이름을 정의하는 데 사용되며, StyleBook의 나머지 부분에서 이 대체 이름을 사용하여 StyleBook을 읽기 쉽게 만들 수 있습니다. 또한 동일한 식이나 값(예: 상수 값)이 StyleBook에서 두 번 이상 반복되는 경우 유용하게 사용할 수 있습니다. 이러한 값에 대체 이름을 사용하면 값을 변경해야 할 때 StyleBook에 나타나는 모든 위치에서 값을 업데이트 대신 대체 값만 업데이트하면 되므로 오류를 방지할 수 있습니다.

대체는 이 문서의 뒷부분에 있는 예제에 설명된 대로 값 사이의 매핑을 정의하는 데에도 사용됩니다.

목록의 각 대체는 키와 값으로 구성됩니다. 값은 단순 값, 식, 함수 또는 맵일 수 있습니다.

다음 예제에는 substitutions 두 개가 정의되어 있습니다. 첫 번째는 8181 대신 사용할 수 있는 "http-port"입니다. 대체를 사용하면 StyleBook의 나머지 부분에서 8181 대신 $substitutions.http-port를 사용할 수 있습니다.

substitutions:

http-port: 8181


이렇게 하면 포트 번호에 니모닉 이름을 지정할 수 있을 뿐만 아니라 해당 포트 번호를 StyleBook의 한 위치에서 정의하여 몇 번이라도 사용할 수 있습니다. 또한 포트 번호를 8080으로 수정하려는 경우 대체 섹션에서 포트 번호를 수정할 수 있으며 변경 사항은 니모닉 이름 http-port가 사용된 모든 위치에 적용됩니다. 다음 예제에서는 구성 요소에서 대체가 사용되는 방식을 보여 줍니다.

components:

 -

     name: my-lbvserver-comp

     type: ns::lbvserver

     properties:

          name: $parameters.name + "-lb"

          servicetype: HTTP

          ipv46: $parameters.ip

          port: $substitutions.http-port

          lbmethod: $parameters.lb-alg

대체가 복잡한 식일 수도 있습니다. 다음 예제에서는 두 개의 대체가 식을 사용하는 방식을 보여 줍니다.

substitutions:

  app-rule: HTTP.REQ.HEADER("X-Test-Application").EXISTS

  app-name: str("acme-") + $parameters.name + str("-app")

다음 예제에서 볼 수 있는 것처럼 대체 식에서 기존 대체 식을 사용할 수도 있습니다.

substitutions:

  http-port: 8181

  app-name: str("acme-") + $parameters.name + str($substitutions.http-port) + str("-app")

대체의 또 다른 유용한 기능은 키를 값에 매핑할 수 있는 맵 기능입니다. 다음은 맵 대체의 예입니다.

substitutions:

    secure-port:

        true: int("443")

        false: int("80")

    secure-protocol:

        true: SSL

        false: HTTP

 

다음 예제에서는 secure-port 및 secure-protocol 맵을 사용하는 방법을 보여 줍니다.

components:

 -

     name: my-lbvserver-comp

     type: ns::lbvserver

     properties:

          name: $parameters.name + "-lb"

          servicetype: $substitutions.secure-protocol[$parameters.is-secure]

          ipv46: $parameters.ip

          port: $substitutions.secure-port[$parameters.is-secure]

          lbmethod: $parameters.lb-alg


이 경우 StyleBook 사용자가 is-secure 매개 변수에 부울 값 "true"를 지정하거나 NetScaler MAS GUI에서 이 매개 변수에 해당하는 확인란을 선택하면 이 구성 요소의 servicetype 속성에 SSL 값이 할당되고 port 속성에 443 값이 할당됩니다. 반대로 사용자가 이 매개 변수에 대해 "false"를 지정하거나 NetScaler MAS GUI에서 해당 확인란을 선택 취소하면 servicetype 속성에 HTTP 값이 할당되고 port 속성에 80 값이 할당됩니다.

다음 예제에서는 대체를 함수로 사용하는 방식을 보여 줍니다. 대체 함수는 하나 이상의 인수를 취할 수 있습니다.  인수는 문자열, 숫자, ip 주소, 부울 및 기타 유형 같은 단순한 유형이어야 합니다.

substitutions:

  form-lb-name(name): $name + "-lb"

이 예제에서는 "name"이라는 문자열 인수를 가져오고 인수의 문자열에 "-lb"라는 접미사를 붙여 새로운 문자열을 만드는 대체 함수 "form-lb-name"을 정의합니다. 이 대체 함수를 사용하는 식은 다음과 같이 작성할 수 있습니다.

$substitutions.form-lb-name("my")

이 경우 "my-lb"가 반환됩니다.

다른 예를 참조하십시오.

substitutions:

    cspol-priority(priority): 10100 - 100 * $priority

cspol-priority 대체는 priority라는 인수를 가져오고 이 인수를 사용하여 값을 계산하는 함수입니다. StyleBook의 나머지 부분에서 이 대체를 다음 예제와 표시된 것처럼 사용할 수 있습니다.

components:

  -

    name: cspolicy-binding-comp

    type: ns::csvserver_cspolicy_binding 

    condition: not $parameters.is-default

    properties:

         name: $parameters.csvserver-name

         policyname: $components.cspolicy-comp.properties.policyname

         priority: $substitutions.cspol-priority($parameters.pool.priority)

대체는 키와 값으로 구성될 수도 있습니다. 값은 단순 값, 식, 함수, 맵, 목록 또는 사전일 수 있습니다.

다음은 값이 목록인 'slist'라는 대체의 예입니다. 

substitutions:

  slist:

    - a

    - b

    - c

대체의 값은 아래의 'sdict'라는 대체 예제에서 볼 수 있는 것처럼, 키-값 쌍의 사전일 수도 있습니다.

substitutions:

  sdict:

    a: 1

    b: 2

    c: 3

목록과 사전을 결합하여 보다 복잡한 특성을 만들 수 있습니다. 예를 들어 "slistofdict"라는 대체는 키-값 쌍의 목록을 반환합니다.

  slistofdict:

    -

      a: $parameters.cs1.lb1.port

      b: $parameters.cs1.lb2.port

    -

      a: $parameters.cs2.lb1.port

      b: $parameters.cs2.lb2.port

하지만 다음 예제에서 "sdictoflist" 대체는 값 자체가 또 다른 목록인 키-값 쌍을 반환합니다.

  sdictoflist:

    a:

      - 1

      - 2

    b:

      - 3

      - 4

 

구성 요소에서 이러한 대체를 condition, properties, repeat, repeat-condition 구조에서 사용할 수 있습니다.

다음 구성 요소 예제에서는 대체를 사용하여 속성을 지정하는 방법을 보여 줍니다.

    properties:

      a: $substitutions.slist

      b: $substitutions.sdict

      c: $substitutions.slistofdict

      d: $substitutions.sdictoflist

값이 목록이거나 사전인 대체를 정의하는 사용 사례에는 콘텐츠 스위칭 가상 서버 하나와 부하 분산 가상 서버 여러 개를 구성하는 경우가 포함됩니다. 동일한 콘텐츠 스위칭(CS) 가상 서버에 연결된 모든 부하 분산(LB) 가상 서버는 동일한 구성을 가질 수 있으므로 대체 목록과 사전을 사용하면 각 LB 가상 서버에 대해 동일한 구성을 반복할 필요 없이 이 구성을 작성할 수 있습니다.

다음 예제에서는 콘텐츠 스위칭 가상 서버 구성을 만들기 위한 cs-lb-mon StyleBook의 대체와 구성 요소를 보여 줍니다. cs-lb-mon StyleBook의 속성을 구성하는 동안 복합 대체인 "lb-properties"는 CS 가상 서버와 연관된 LB 가상 서버의 속성을 지정합니다. "lb-properties" 대체는 이름, 서비스 유형, 가상 IP 주소, 포트 및 서버를 매개 변수로 사용하여 값으로 키-값 쌍을 생성하는 함수입니다. "cs-pools" 구성 요소에서 이 대체의 값을 각 풀에 대한 lb-pool 매개 변수에 할당합니다.

substitutions:

  cs-port[]:

    true: int("80")

    false: int("443")

  lb-properties(name, servicetype, vip, port, servers):

    lb-appname: $name

    lb-service-type: $servicetype

    lb-virtual-ip: $vip

    lb-virtual-port: $port

    svc-servers: $servers

    svc-service-type: $servicetype

    monitors:

      -

        monitorname: $name

        type: PING

        interval: $parameters.monitor-interval

        interval_units: SEC

        retries: 3

components:

  -

    name: cs-pools

    type: stlb::cs-lb-mon

    description: |

      cs-lb-mon 구성을 제공된 여러 풀로 업데이트합니다.

      규칙이 있는 각 풀은 더미 LB 가상 서버, CS 작업, CS 정책

      및 csvserver_cspolicy_binding 구성을 생성합니다.

    condition: $parameters.server-pools

    repeat: $parameters.server-pools

    repeat-item: pool

    repeat-condition: $pool.rule

    repeat-index: ndx

    properties:

      appname: $parameters.appname + "-cs"

      cs-virtual-ip: $parameters.vip

      cs-virtual-port: $substitutions.cs-port($parameters.protocol == "HTTP")

      cs-service-type: $parameters.protocol

      pools:

        -

          lb-pool: $substitutions.lb-properties($pool.pool-name, "HTTP", "0.0.0.0", 0, $pool.servers)

          rule: $pool.rule

          priority: $ndx + 1

대체 맵

키를 값에 매핑하는 대체를 만들 수 있습니다. 예를 들어 각 프로토콜(키)에 사용할 기본 포트(값)를 정의해야 하는 시나리오를 가정해 보십시오. 이 작업을 수행하려면 다음과 같이 대체 맵을 작성합니다.

substitutions:

     port:

          HTTP: 80

          DNS: 53

          SSL: 443

이 예제에서 HTTP는 80에 매핑되고 DNS는 53에 매핑되며 SSL은 443에 매핑됩니다. 매개 변수로 주어진 특정 프로토콜의 포트를 검색하려면 다음 식을 사용합니다.

              $substitutions.port[$parameters.protocol]

이 식은 사용자가 지정한 프로토콜에 기반한 값을 반환합니다.

  • 키가 HTTP이면 식은 80을 반환합니다.
  • 키가 DNS이면 식은 53을 반환합니다.
  • 키가 SSL이면 식은 443을 반환합니다.
  • 키가 맵에 없는 경우 식은 값을 반환하지 않습니다.