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 es posible que no se escriban en el mismo orden en que deben ejecutarse. El compilador StyleBook comprueba el orden en que se escriben los componentes y, a continuación, 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 hace referencia a las propiedades de lbvserver-comp, pero no se puede crear a continuación, aunque es el segundo componente definido en el StyleBook. Esto se debe a que el lb-sg-binding-comp también depende 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 cuando 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 reordenamiento de dependencias también funcionan para las secciones de sustituciones y salidas.

Dependencias cíclicas

Dado que un componente puede hacer referencia a otro componente, es posible que se introduzca el ciclo de dependencias 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 del StyleBook para eliminar esas 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 NetScaler ADM.

Detección de dependencias