Citrix Application Delivery Management

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
<!--NeedCopy-->

En el ejemplo anterior, hay tres componentes definidos: Lbvserver-comp, lb-sg-binding-comp y 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
<!--NeedCopy-->

En el ejemplo anterior, hay tres componentes: Lbvserver-comp, lb-sg-binding-comp y 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