Detección de dependencias

Los componentes de un StyleBook pueden hacer referencia a propiedades o secciones de otros componentes del mismo StyleBook. Los componentes son bloques completos por sí mismos y no pueden escribirse en el mismo orden en que deben ejecutarse. El compilador de StyleBook comprueba el orden en que se escriben los componentes y luego los ejecuta en un orden lógico.

Ejemplo:

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

En el ejemplo anterior, hay tres componentes definidos: Lbvserver-comp, lb-sg-binding-compy sg-comp. Cuando se ejecuta este StyleBook, primero se crea el lbvserver-comp. El lb-sg-binding-comp se refiere a las propiedades lbvserver-comp, pero no se puede crear a continuación, aunque es el segundo componente definido en el StyleBook. Esto se debe a que lb-sg-binding-comp también tiene una dependencia del sg-comp que aún no se ha creado. Como resultado, el compilador reordena los componentes para que las dependencias de un componente se resuelvan en el momento en que se crea un componente y ejecuta esta lista reordenada de componentes. El orden de ejecución del StyleBook anterior es: Lbvserver-comp, sg-comp y lb-sg-binding-comp.

Por lo tanto, el autor de un StyleBook no necesita preocuparse por el orden correcto de los componentes. Los componentes pueden aparecer en cualquier orden. El compilador calcula el orden correcto de ejecución de los componentes en función de cómo los componentes se refieren entre sí. Tenga en cuenta que esta detección y reordenación de dependencias también funciona para secciones de sustituciones y salidas.

Dependencias cíclicas

Dado que un componente puede referirse a otro componente, es posible que el ciclo de dependencias se pueda introducir en la definición del StyleBook. Por ejemplo, si el componente A hace referencia a una propiedad definida en el componente B, que de nuevo hace referencia a una propiedad definida en el componente A. Este tipo de dependencia se denomina dependencias cíclicas. Las dependencias cíclicas no se pueden resolver automáticamente. El autor del StyleBook debe corregir manualmente la definición de StyleBook para eliminar dichas dependencias cíclicas. El compilador podrá identificar dependencias cíclicas, si existen, e informarlo.

El siguiente ejemplo muestra una dependencia cíclica de componentes:

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

En el ejemplo anterior, hay tres componentes: Lbvserver-comp, lb-sg-binding-compy sg-comp. lbvserver-comp depende de lb-sg-binding-comp, lb-sg-binding comp depende de sg-comp y sg-comp depende de lbvserver-comp. Aquí, se forma un ciclo de dependencias entre estos componentes y esto no se puede resolver automáticamente. Como resultado, este StyleBook no se puede ejecutar. El compilador de StyleBook detecta esto e impide que StyleBook se importe a Citrix ADM.

Detección de dependencias