Product Documentation

종속성 감지

Apr 23, 2017

StyleBook의 구성 요소는 동일한 StyleBook 내 다른 구성 요소의 속성 또는 섹션을 참조할 수 있습니다. 구성 요소는 그 자체로 완전한 블록이며 실행되는 순서로 작성되지 않을 수 있습니다. StyleBook 컴파일러는 구성 요소가 작성된 순서를 확인하여 논리적 순서로 구성 요소를 실행합니다.

예제:

components:

  -

    name: lbvserver-comp

    type: ns::lbvserver

    properties:

      name: mylb

      ipv46: 10.102.190.15

      port: 80

      servicetype: HTTP

 -

    name: lb-sg-binding-comp

    type: ns::lbvserver_servicegroup_binding

    condition: $parameters.create-binding

    properties:

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

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

-

    name: sg-comp

    type: ns::servicegroup

    properties:

      servicegroupname: mysg

      servicetype: HTTP

위의 예에는 3개의 구성 요소, 즉 lbvserver-comp, lb-sg-binding-compsg-comp가 정의되어 있습니다. 이 StyleBook이 실행되면 lbvserver-comp가 먼저 생성됩니다. lb-sg-binding-comp는 lbvserver-comp 속성을 참조하며 StyleBook에 정의된 두 번째 구성 요소이지만 그 다음으로 생성될 수 없습니다. 그 이유는 lb-sg-binding-comp가 아직 생성되지 않은 sg-comp에 대한 종속성도 갖기 때문입니다. 따라서 컴파일러는 구성 요소가 생성될 때 구성 요소의 종속성이 해결되도록 구성 요소의 순서를 재지정하여 이 재지정된 순서의 구성 요소 목록을 실행합니다. 위 StyleBook의 실행 순서는 lbvserver-comp, sg-comp, lb-sg-binding-comp입니다.

따라서 StyleBook의 작성자는 구성 요소의 올바른 순서에 대해 염려할 필요가 없습니다. 구성 요소가 임의의 순서로 나타나도 됩니다. 컴파일러는 구성 요소가 서로를 참조하는 방식을 기반으로 구성 요소를 실행할 올바른 순서를 계산합니다. 이 종속성 감지 및 순서 재지정은 대체와 출력 섹션에도 적용됩니다.

순환적 종속성

구성 요소는 다른 구성 요소를 참조할 수 있기 때문에 StyleBook의 정의 시 종속성 순환이 도입될 수 있습니다. 예를 들어 구성 요소 A는 구성 요소 B를 참조하고 구성 요소 B는 구성 요소에 정의된 속성을 참조하는 경우 이러한 종속성을 순환적 종속성이라고 합니다. 순환적 종속성은 자동으로 해결할 수 없습니다. StyleBook의 작성자가 StyleBook 정의를 수동으로 수정하여 순환적 종속성을 해소해야 합니다. 컴파일러는 순환적 종속성을 식별하고 있는 경우 이를 보고합니다.

다음 예는 구성 요소의 순환적 종속성을 보여 줍니다.

components:

  -

    name: lbvserver-comp

    type: ns::lbvserver

    properties:

      name: $components.lb-sg-binding-comp.properties.name

      ipv46: 10.102.190.15

      port: 80

      servicetype: HTTP

  -

    name: lb-sg-binding-comp

    type: ns::lbvserver_servicegroup_binding

    condition: $parameters.create-binding

    properties:

      name: mylb

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

  -

    name: sg-comp

    type: ns::servicegroup

    properties:

      servicegroupname: mysg

      servicetype: $components.lbvserver-comp.properties.servicetype

위의 예에는 3개의 구성 요소, 즉 lbvserver-comp, lb-sg-binding-compsg-comp가 있습니다. lbvserver-comp는 lb-sg-binding-comp에 종속되고, lb-sg-binding comp는 sg-comp에 종속되며, sg-comp는 lbvserver-comp에 종속됩니다. 여기서 이러한 구성 요소 간에 종속성 순환이 형성되어 있으며 이는 자동으로 해결할 수 없습니다. 따라서 이 StyleBook을 실행할 수 없습니다. StyleBook 컴파일러는 이를 감지하여 이 StyleBook을 NetScaler MAS로 가져오지 않도록 방지합니다.